【工业树莓派CM0 Dev Board】AI 对话 - 详解

【工业树莓派CM0 Dev Board】AI对话

本文介绍了树莓派 CM0 Dev Board 使用大语言模型 API 接口,实现 AI 对话的项目设计,包括准备工作、API获取、流程图、工程代码、终端对话和网页设计等。

项目介绍

  • 准备工作:包括固件升级、安装 flask 库、获取 AI 大语言模型 API 秘钥等;
  • 终端 AI 对话:通过 AI 大模型 API 通道实现 Shell 终端的对话;
  • 网页 AI 聊天:设计 Web 网页前端 UI 界面,后端主程序将 AI 反馈消息传递给 Web 前端,实现网页对话。

项目框架

在这里插入图片描述

准备工作

系统安装及环境搭建详见:【工业树莓派CM0 Dev Board】介绍、镜像烧录、系统测试 .

硬件连接

  • 若采用 SSH 远程登录操作,则仅需连接电源供电即可;
  • 若采用本地登录,则需连接 HDMI 视频流传输线、USB 键盘连接线等;

在这里插入图片描述

库安装

  • 安装网页服务器所需 flask 库,终端执行
sudo apt install python3-flask

API 获取

这里使用小智、DeepSeek 和 ChatGPT 的开发者 API 令牌,详见对应的官网介绍,或进入开发者社区申请。

流程图

后端
前端
返回地址
运行程序
调用外部API
接收POST
返回JSON
用户输入消息?
加载网页
fetch
等待后端回复
显示AI消息
开始
文件目录
/home/ljl/AgentChat
├── chat_agent_web.py      # 后端程序文件
└── web/
└── index.html        # 前端网页文件

终端对话

通过调用 AI 大语言模型的 API 接口实现 Shell 终端的智能对话。

工程代码

终端执行 touch chat_agent.py 指令新建文件,并使用 nano 编辑器添加如下代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json, time, signal, sys, requests
API_KEY = "sk-4160d6151421480b83fa9f0c264axxxx"  # 大模型 API 密钥
def ai_chat(prompt):
"""发送消息到AI并获取回复"""
try:
r = requests.post(
"https://chat.ecnu.edu.cn/open/api/v1/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json={
"model": "ecnu-plus",
"messages": [
{"role": "system", "content": "简洁回答"},
{"role": "user", "content": prompt}
],
"temperature": 0.7,
"max_tokens": 200
},
timeout=10
)
return r.json()["choices"][0]["message"]["content"].strip() if r.status_code == 200 else f"错误:{r.status_code}"
except Exception as e:
return f"请求异常:{e}"
# 主程序
signal.signal(signal.SIGINT, lambda *_: print("\n退出") or sys.exit(0))
print("AI对话机器人 | 输入exit退出\n")
while True:
try:
user_input = input("你: ").strip()
if user_input.lower() in ['exit', 'quit']: break
if not user_input: continue
start_time = time.time()
reply = ai_chat(user_input)
print(f"AI: ({time.time()-start_time:.1f}s) {reply}\n")
except KeyboardInterrupt:
print("\n再见!")
break
except Exception as e:
print(f"出错: {e}")

保存代码;

效果演示

  • 终端执行指令 python chat_agent.py 运行程序,即可实现对话

在这里插入图片描述

Ctrl + C 退出程序;

其他模型

  • 使用 ChatGPT 实现对话

在这里插入图片描述

  • 使用 Xiaozhi 智能体 实现对话

在这里插入图片描述

网页设计

增加网页前端界面,实现更加美观的聊天 UI 设计,增强对话体验。

代码

  • 终端执行 mkdir web 新建文件夹,用于存放网页文件;

  • 进入 web 文件夹,执行 touch index.html 指令新建网页文件,并 nano index.html 添加如下代码

<!doctype html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
      <title>Chat with Raspberry Pi CM0</title>
        <style>
          body{font-family:Arial,Helvetica,sans-serif;background:#f5f5f5;margin:0;padding:20px}
          #box{max-width:600px;margin:auto;background:#fff;border-radius:8px;padding:20px;box-shadow:0 2px 8px rgba(0,0,0,.1)}
          h2{text-align:center;margin-top:0}
          #history{height:400px;overflow-y:auto;border:1px solid #ddd;padding:10px;margin-bottom:10px;background:#fafafa}
          .line{margin:6px 0}
          .user{color:#0066cc}
          .ai{color:#009933}
          #inputArea{display:flex}
          #msgInput{flex:1;padding:8px;font-size:14px}
          #sendBtn{padding:8px 16px;margin-left:6px}
        </style>
      </head>
      <body>
          <div id="box">
        <h2>Chat with Raspberry Pi CM0</h2>
        <div id="history"></div>
            <div id="inputArea">
            <input id="msgInput" placeholder="输入消息,回车发送"/>
          <button id="sendBtn" onclick="send()">发送</button>
          </div>
        </div>
        <script>
          const hist = document.getElementById('history');
          const input = document.getElementById('msgInput');
          function addLine(cls, txt){
          const div = document.createElement('div');
          div.className = 'line '+cls;
          div.textContent = txt;
          hist.appendChild(div);
          hist.scrollTop = hist.scrollHeight;
          }
          async function send(){
          const msg = input.value.trim();
          if(!msg) return;
          addLine('user', '你: '+msg);
          input.value = '';
          const res = await fetch('/chat', {method:'POST', body:new URLSearchParams({msg})});
          const data = await res.json();
          addLine('ai', 'AI: '+data.reply);
          }
          input.addEventListener('keydown', e=>{if(e.key==='Enter') send()});
        </script>
      </body>
    </html>

保存代码;

同时后端运行代码调整如下

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json, time, requests, signal, sys
from flask import Flask, send_from_directory, request, jsonify
API_KEY = "sk-4160d6151421480b83fa9f0c264axxx"   # API 秘钥
MODEL_URL = "https://chat.ecnu.edu.cn/open/api/v1/chat/completions"
app = Flask(__name__)
# ---------- AI 调用 ----------
def ai_chat(prompt: str) -> str:
try:
resp = requests.post(
MODEL_URL,
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json={
"model": "ecnu-plus",
"messages": [
{"role": "system", "content": "简洁回答"},
{"role": "user", "content": prompt}
],
"temperature": 0.7,
"max_tokens": 200
},
timeout=10
)
if resp.status_code == 200:
return resp.json()["choices"][0]["message"]["content"].strip()
return f"错误:HTTP {resp.status_code}"
except Exception as e:
return f"请求异常:{e}"
# ---------- 路由 ----------
@app.route("/")
def index():
return send_from_directory("web", "index.html")
@app.route("/static/<path:filename>")
  def web_static(filename):
  return send_from_directory("web", filename)
  @app.route("/chat", methods=["POST"])
  def chat():
  user_input = request.form.get("msg", "").strip()
  if not user_input:
  return jsonify({"reply": "输入不能为空"})
  start = time.time()
  reply = ai_chat(user_input)
  return jsonify({"reply": f"({time.time()-start:.1f}s) {reply}"})
  # ---------- 退出 ----------
  signal.signal(signal.SIGINT, lambda *_: print("\n退出") or sys.exit(0))
  # ---------- 启动 ----------
  if __name__ == "__main__":
  print(" 网页对话已启动 → http://127.0.0.1:5000")
  app.run(host="0.0.0.0", port=5000, debug=False)

保存代码。

效果

  • 终端执行指令 python chat_agent_web.py 运行程序;

  • 终端打印网页访问地址、访问信息等;

在这里插入图片描述

  • 同一局域网下,浏览器输入终端输出的网页地址 192.168.1.125:8080 打开目标网页;

    在这里插入图片描述

  • 在输入框填写问题,按 Enter 键发送消息,即可实现 AI 智能对话;

总结

本文介绍了树莓派 CM0 Dev Board 使用大语言模型 API 接口,实现 AI 对话的项目设计,包括准备工作、API获取、流程图、工程代码、终端对话和网页设计等,为相关产品在 AI 大语言模型领域的开发设计和快速应用提供了参考。

posted @ 2026-02-05 09:01  clnchanpin  阅读(32)  评论(0)    收藏  举报