ChatGPT-OpenAI-Smart-Speaker
用树莓派+ChatGPT打造开源智能音箱,支持自定义唤醒词、多轮对话和实时网络搜索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用树莓派+ChatGPT打造开源智能音箱,支持自定义唤醒词、多轮对话和实时网络搜索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:清晨,你对着床头的音箱说"Jeffers,今天天气怎么样?"一个温和的男声回答:"旧金山今天晴,气温18到24度,记得带件外套。"这就是 ChatGPT-OpenAI-Smart-Speaker——一个用树莓派+AI大模型构建的智能音箱,GitHub星标316颗,由英国独立开发者 Olney1 历时多年打造。
2019年前后,Amazon Echo、Google Home席卷全球,但这些设备本质上是封闭的商业产品——用户无法定制唤醒词、无法修改对话逻辑、无法接入自己想要的AI后端。Olney1 决定自己动手。他购入树莓派4B、ReSpeaker 4-Mic阵列、USB音箱,开始了漫长的开源智能音箱开发之旅。项目代码经历了从简单的 chat.py(Mac/PC通用版)到功能完善的 pi.py(树莓派专用版)的迭代,2024年11月仍有更新。
整个系统的技术链路非常清晰:
第一步:唤醒词检测。 pi.py 使用 PicoVoice 的自定义唤醒词引擎 pvporcupine,加载一个在 Picovoice 平台训练好的"Jeffers"模型。与通用唤醒词不同,自定义模型允许用户用自己的声音训练专属唤醒词,大幅降低误触发率。唤醒成功后,ReSpeaker 的12颗APA102 LED亮起蓝色呼吸灯,模拟 Alexa 的视觉反馈。
第二步:语音转文本(STT)。 用户提问后,麦克风采集的音频流被送入 Google Speech Recognition 服务(SpeechRecognition 库封装),将口语转为英文文本。如果树莓派检测到对话结束(或超时),自动进入下一步。
第三步:LLM推理 + 语音合成(TTS)。 文本被发送给 OpenAI GPT-4o(chatgpt-4o-latest),带着系统提示词"你是一个叫 Jeffers 的助手,请用简短回答"。GPT的文本回复通过 OpenAI 的 tts-1 模型合成语音,输出为 response.mp3 文件,最后用 pydub + playsound 播放。
图1:完整的Jeffers智能音箱硬件配置,包含树莓派4B、ReSpeaker 4-Mic阵列和USB音箱
pi.py 的高级功能不只停留在问答层面。Olney1 引入了 LangChain Agent 架构,结合 Tavily Search 工具,实现实时网络搜索能力。当用户询问天气、新闻或近期事件时,系统调用 TavilySearchResults 工具(Tavily是一个专为AI设计的搜索引擎),获取最新信息后再交由GPT整合回答。Agent 的系统提示词(SystemMessage)设计也很讲究:
"You are a helpful smart speaker called Jeffers! Please respond with short and concise answers and always remind the user at the end to say your name again to continue the conversation."
这段提示词确保了音箱的回复风格贴近真实智能音箱(简短),同时通过"再说一次我的名字继续"的设计,实现持续多轮对话,模拟真实的人机交互节奏。
| 组件 | 技术选型 | 作用 |
|---|---|---|
| LLM后端 | OpenAI GPT-4o (chatgpt-4o-latest) | 对话理解与生成 |
| TTS | OpenAI tts-1 + gTTS fallback | 语音合成 |
| STT | Google Speech Recognition | 语音转文字 |
| Agent框架 | LangChain + AgentType | 工具调用编排 |
| 网络搜索 | Tavily Search API | 实时信息查询 |
| 唤醒词 | PicoVoice pvporcupine | 低功耗唤醒检测 |
| 硬件驱动 | gpiozero, apa102-pi, picamera2 | GPIO控制/LED/摄像头 |
| 音频处理 | pyaudio, pydub, alsaaudio | 音频录制与播放 |
项目提供了两条运行路径,适合不同场景:
chat.py(通用版): 面向 Mac/PC 用户,无需任何硬件。直接用电脑的麦克风和扬声器工作,实现"语音输入→GPT回答→语音输出"的最小闭环。代码约100行,安装简单(pip install openai pyaudio SpeechRecognition gTTS playsound python-dotenv),适合想快速体验 AI 语音交互的开发者。
pi.py(树莓派版): 完整智能音箱体验,支持自定义唤醒词、多轮对话、Web搜索、摄像头视觉(Picamera2)、LED灯光反馈。需要 ReSpeaker 4-Mic 阵列、APA102 LED 灯条等外设,依赖众多系统包(portaudio19-dev, ffmpeg, libasound2-dev, SPI 开启),安装过程较为复杂,涉及 Audio Card 驱动编译、内核模块配置等进阶操作。
图2:Jeffers v2 版本外观,增加了LED灯光环和更紧凑的外壳设计
项目并非完美,存在几个明显的局限:
API成本问题。 每次对话都调用 OpenAI GPT-4o API,按 token 计费。若音箱每天使用50次,月度API费用可能达到数十美元,远超一个商业智能音箱的月费。用户需自行管理成本。
唤醒词训练门槛。 PicoVoice 的自定义唤醒词需要用户自行在 Picovoice Console 训练模型并下载 .ppn 文件,这个流程对普通用户来说有一定技术门槛,且模型只能用于 ARM64(Raspberry Pi)架构。
Linux音频生态碎片化。 ReSpeaker 的 seeed-voicecard 驱动需要从源码编译安装,在不同版本的 Raspberry Pi OS 上可能遇到兼容性问题。pyaudio 的 PortAudio 依赖也常导致安装失败。
纯英文设计。 系统提示词、Google Speech Recognition、gTTS 均默认英文,不支持中文语音交互。
ChatGPT-OpenAI-Smart-Speaker 代表了一个重要趋势:AI大模型正在降低智能硬件的进入门槛。过去,做一个"能对话的音箱"需要深厚嵌入式开发能力+云端ASR/TTS服务对接;现在,一个 Python 开发者花半天就能用 GPT-4o + LangChain 构建完整原型。这种"AI-first"的硬件开发范式,正在被更多 Maker 和独立开发者采用。
同时,项目也揭示了本地化AI语音助手的商业化挑战:API成本、延迟(每次对话约2-5秒)、隐私(音频数据上传Google/OpenAI)都是现实障碍。随着端侧推理模型(如 Ollama 本地LLM)的成熟,未来这类项目的形态可能从"云端GPT"转向"本地小模型+云端GPT混合"架构。