本项目是一个运行在树莓派上的智能语音助手,通过Model Context Protocol (MCP) 集成了多种功能模块。
项目简介
本智能助手系统包含一个主程序(客户端)和多个基于MCP协议构建的服务端程序,通过语音进行交互。它能够进行本地知识问答、控制音乐播放、执行网络搜索以及进行图像识别。
主要功能点
- 语音交互: 支持实时语音输入(基于百度语音识别API和WebRTC VAD)和流式语音输出(基于Edge TTS)。
- 知识问答: 集成基于本地知识库(使用FAISS和llama.cpp嵌入模型)的问答能力。
- 音乐播放: 通过调用MCP服务实现音乐的搜索、播放、暂停、继续、切换歌曲和查看播放列表。
- 网络搜索: 通过调用MCP服务实现网络内容的搜索,获取实时信息。
- 图像识别: 通过调用MCP服务实现拍照并分析图像内容,如识别物体、计数、判断状态等。
- 人脸识别: 用于简单的用户认证。
安装步骤
- 克隆仓库:
git clone https://github.com/18757219260/raspberry-pi-llm--mcp-music-websearch-asr-tts-qa.git cd raspberry-pi-llm--mcp-music-websearch-asr-tts-qa - 安装依赖: 确保您的树莓派已安装Python环境(建议使用Python 3.8+)。安装项目所需的Python库:
注意: 'llama_cpp' 需要编译,可能需要在树莓派上安装构建工具和相关库(如CMake)。'face_recognition' 和 'opencv-python' 也可能需要一些系统库。具体安装细节请参考各自库的文档。pip install -r requirements.txt # (assuming requirements.txt exists based on README deps) # 如果没有requirements.txt,请根据README手动安装: # pip install langchain_community langchain langchain_core llama_cpp openai face_recognition opencv-python pickle pyaudio webrtcvad baidu-aip mcp-server PySide6 requests edge-tts python-multipart dashscope - 下载模型和配置:
- 下载离线嵌入模型 'text2vec_base_chinese_q8.gguf' 并放置到 'rasoberry' 目录下 (路径默认为 '/home/wuye/vscode/raspberrypi_5/rasoberry/text2vec_base_chinese_q8.gguf')。
- 准备本地知识库文件 'knowledge.json' 并放置到 'rasoberry' 目录下 (路径默认为 '/home/wuye/vscode/raspberrypi_5/rasoberry/knowledge.json')。
- 在 'face_recognition/images/' 目录下准备用于人脸识别的照片,并修改 'face_create.py' 中的 'known_faces' 字典指定图片路径。
- 确保已获取百度语音识别API、阿里云通义千问API(用于搜索和视觉模型)的API Key和App ID,并填写到 'asr.py', 'search.py', 'camera.py', 'qa_model_easy.py' 文件中相应的变量处。
- 构建人脸库和知识库:
python face_create.py python mk_faiss.py
服务器配置
本项目包含多个MCP服务器,由主程序(客户端)在运行时启动和管理。您需要创建一个名为 'mcp_server_config.json' 的配置文件(通常放置在主程序所在的目录,如 'rasoberry' 目录下),用于告知主程序如何启动这些MCP服务器。
该文件应为JSON格式,包含一个 'mcpServers' 字典,每个键值对代表一个MCP服务:
- 键 (Key): MCP服务器的名称(例如 "netease-music", "web_search", "camera"),客户端将通过这个名称调用对应的工具。
- 值 (Value): 一个字典,描述该MCP服务。
- 'type': 连接类型,本项目使用的服务器均为 'stdio'。
- 'command': 启动该MCP服务器进程的命令。
- 'args': 启动命令的参数列表(通常为空列表 '[]')。
- 'isActive': 布尔值,表示是否启用该服务 ('true' 或 'false')。
- 'description': 对该服务的描述。
以下是一个示例 'mcp_server_config.json' 文件内容:
{ "mcpServers": { "netease_music": { "type": "stdio", "command": "python", "args": ["playmusic.py"], "isActive": true, "description": "网易云音乐播放MCP服务" }, "web_search": { "type": "stdio", "command": "python", "args": ["search.py"], "isActive": true, "description": "联网搜索MCP服务" }, "camera": { "type": "stdio", "command": "python", "args": ["camera.py"], "isActive": true, "description": "摄像头图像识别MCP服务" } } }
请根据您的项目实际路径调整 'args' 中的文件名。 确保 'playmusic.py', 'search.py', 'camera.py' 文件与主程序在同一目录下,或者在 'args' 中使用正确的相对或绝对路径。
基本使用方法
运行主交互程序。您可以选择终端界面或图形用户界面:
- 终端界面:
python main_stream.py - UI界面:
python app.py
程序启动后,首先会进行人脸识别认证。认证成功并完成系统初始化后,您即可通过语音与助手进行交互。根据提示进行语音输入,助手将根据您的指令调用相应的MCP服务进行响应。
要退出程序,在终端界面按 'Ctrl+C' 或说出“再见”、“退出”。
信息
分类
桌面与硬件