小爱音箱接入大模型:MiGPT 智能音箱改造完整指南
【免费下载链接】mi-gpt🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt
周六早上你迷迷糊糊喊了句"小爱同学,今天适合跑步吗?",音箱回的不是"为您查询到……"的机械腔,而是"外面 22 度有小雨,建议改去健身房"——它真的听懂了。这就是 MiGPT 干的事:把家里那台只会答关键词的智能音箱,接上 ChatGPT、豆包这类大语言模型,变成一个能聊天、有人设、有记忆的专属语音助手。
🚀 先把服务跑起来:两个配置文件加一条命令
先别急着调人设,这一步没跑通,后面都是白搭。MiGPT 是个 Node.js 程序(Node.js 可以理解成运行 JavaScript 程序的运行环境),你只需要准备两个文件:
.env:大模型的"连接信息"——API 密钥、模型名、服务地址;.migpt.js:音箱的"身份信息"——你的小米账号、音箱名字、人设和唤醒词。
仓库里有两个带.example后缀的同名模板,复制一份改个名,把自己的值填进去就行。注意did参数(音箱名)要直接复制米家 App 里显示的名字,多一个空格、大小写写错都算不存在。另外设备必须是小米的小爱音箱,小度、天猫精灵、HomePod 不支持。
配置文件里还有ttsCommand(让音箱读文字)和wakeUpCommand(唤醒音箱)两个指令编号,示例值[5, 1]和[5, 3]对多数型号有效,个别型号查一下规格表再改:
智能音箱指令编号与配置参数的对应关系
启动有两条路。不想碰代码环境的,用 Docker 最省事(Docker 把程序和依赖打包成镜像,哪都能跑):
docker run -d --env-file $(pwd)/.env \ -v $(pwd)/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest开发者也可以直接拉源码跑,要求 Node.js 16 以上:
git clone https://gitcode.com/GitHub_Trending/mi/mi-gpt cd mi-gpt && pnpm install && pnpm start看到"服务已启动"就成功了:
MiGPT 启动后的控制台界面,唤醒即有大模型响应
⚠️ 常见坑:启动报"70016 登录验证失败",九成是
userId填错了——要填"小米 ID"(小米账号"个人信息"里查得到),不是手机号;报"找不到设备"则是did和米家里的名字对不上。Windows 终端里$(pwd)不生效,要把配置文件写成绝对路径。
💬 三种喊法召唤 AI,配好唤醒词和退出词
跑起来之后,喊它的方式一共就三种:
- "小爱同学,请xxx",比如"小爱同学,请介绍一下你自己";
- "小爱同学,你xxx",比如"小爱同学,你喜欢吃什么?";
- "小爱同学,召唤xxx",这个会进入"唤醒模式",支持连续对话。
进入唤醒模式后,你不用每句话都带"小爱同学",直接接着聊;说退出词它就恢复正常。词都在.migpt.js里配,改完重启容器生效:
speaker: { wakeUpKeywords: ["召唤傻妞", "打开傻妞"], exitKeywords: ["退出傻妞"], onEnterAI: ["我在呢,有什么可以帮你?"] }进入提示、结束语、出错提示这一整套话术,都可以在 完整配置说明 里找到对应参数。日常玩法很多:早晨播报天气和新闻、睡前给孩子讲个故事、孩子写作业时临时问两道数学题。
⚠️ 常见坑:它正在说话的时候你跟它说话,它是收不到的——等它说完结束语(比如"我说完了")过一两秒再问;音箱正在放歌时也得先让它暂停,再和 AI 对话,否则状态会乱。
🧠 改一行 .env 切换大模型
音箱接入大模型之后,大脑换成谁,基本就是在.env里改三行的事:
OPENAI_API_KEY=sk-你的密钥 OPENAI_MODEL=gpt-4o OPENAI_BASE_URL=https://api.openai.com/v1MiGPT 走的是 OpenAI SDK 协议,所以凡是提供兼容接口的模型都能直接用:通义千问、DeepSeek、Moonshot 这类,把OPENAI_BASE_URL指到服务商地址、OPENAI_MODEL换成对应模型名就行。豆包这类不直接提供兼容接口的,可以用第三方 API 聚合工具转一道再接;本地部署的话,Ollama、LM Studio 都自带同样的接口,填本机地址即可。
⚠️ 常见坑:日志里出现 "Connection error" 一般是网络问题——国内直连不了 OpenAI,在
.env里配HTTP_PROXY,或者干脆换国产模型;401 是密钥无效,404 "model does not exist" 通常是当前账号没这个模型的权限,换个档位试试。
🎭 5 分钟配好人设 Prompt,它还带记忆
智能音箱改造最有意思的一步,是给它立个性格。.migpt.js里有三处可改:bot.name(它的名字)、bot.profile(人设,性别、性格、爱好)、systemTemplate(系统 Prompt,决定它怎么说话、带不带上下文)。模板里{{botName}}这类变量运行时会自动替换,写法细节看 系统 Prompt 教程。
把人设写成"性格活泼、爱讲笑话",天气问题的答法和"严肃管家"完全是两个物种。懒得改文件也行,直接说"小爱同学,你是 xxx,你 xxx",它当场换人格。
性格之外它还有脑子:短期记忆装当前这轮对话,让话题能接得上;长期记忆存你的偏好,越聊越懂你,数据落在本地数据库里,不出你家。
🔊 换个声音:第三方 TTS 与播放问题排查
小爱同学自带的声音听腻了?可以换。在.env里填上TTS_BASE_URL(你自己的 TTS 服务地址),再把.migpt.js里改成:
speaker: { tts: "custom", switchSpeakerKeywords: ["把声音换成"] }之后一句"小爱同学,把声音换成 xxx"就能换音色,本地搭的 ChatTTS 之类的服务也能接,详见 TTS 定制文档。
播放相关的故障基本都出在指令编号上,两种典型症状:
- 有回答但没声音:通常是
ttsCommand不匹配; - 句子说一半戛然而止:多半要补
playingCommand(查询播放状态的指令)。
两个编号都要对着你的音箱型号查:在小米设备规格站搜型号,进"规格"页找对应指令:
搜索音箱型号后进入规格页,即可查到指令编号
播放状态指令在playing-state那一行,填[3, 1, 1]这类数组即可:
Play Control 属性表中的 playing-state 对应 playingCommand 配置
⚠️ 常见坑:如果改完编号还是没声音,说明你的型号不支持通过开放接口查询播放状态,这种情况无解,作者推荐的小爱音箱 Pro 是完美运行型号,型号列表见 兼容文档。
🛠️ 给想动手改源码的人
代码不长,结构也清楚,想改点什么的可以往下看:
- 整体是纯 Node.js 服务,核心在 核心服务目录,按 bot(对话与记忆)、speaker(音箱控制)、db(数据)、openai(模型调用)分块;
- 它"听懂你说话"的原理是轮询小米 MIoT/MiNA 开放接口拉对话列表,拿到 AI 回答后把语音链接发回音箱播放,细节见 工作原理;
- 记忆和人设数据存在本地 Prisma 数据库(prisma 目录),不依赖外部服务;
- 提醒一句:作者已宣布停止维护,但代码完整,适合当底子自己魔改;用语音控制米家灯光、音乐的智能家居联动还在 Roadmap 上,尚未开发。
🎯 下一步你可以试试
- 把
OPENAI_MODEL换成一个国产模型,对比一下回答风格 - 重写
bot.profile,立一个符合你口味的性格,比如"毒舌但靠谱的家庭闹钟" - 配好唤醒词和退出词,试一轮十分钟的连续对话
- 在配置里打开
debug: true,看日志熟悉"没反应"类问题的排查方法 - 通读一遍 常见问题 和 参数设置,遇到问题先搜再问
📌 启动命令与关键文件速查
| 事项 | 命令 / 路径 |
|---|---|
| Docker 启动 | docker run -d --env-file $(pwd)/.env -v $(pwd)/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest |
| Node.js 启动 | pnpm install && pnpm start |
| 大模型配置 | .env |
| 音箱与人设配置 | .migpt.js |
| 完整参数说明 | docs/settings.md |
| 常见问题 | docs/faq.md |
【免费下载链接】mi-gpt🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考