【工业树莓派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 大语言模型领域的开发设计和快速应用提供了参考。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐