小爱音箱接入ChatGPT:用MiGPT 3步完成大模型改造
【免费下载链接】mi-gpt🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt
晚上十点,孩子窝在被子里问:小爱同学,月亮为什么晚上会跟着我走?音箱停了两秒,回一句"这个我还不会呢"。想让音箱接住这类问题,给它接上真正的大模型就够了。MiGPT 是一个开源项目,把小爱音箱接入 ChatGPT、豆包等大语言模型,唤醒后能问答、能角色扮演、能连续对话,全程不用刷机。
📦 小爱音箱接入大模型后能做什么
MiGPT 是一个把小爱音箱接入大语言模型的开源项目,目标人群很明确:手里有小爱音箱、又不满足于简单问答式回答的用户。它以一个常驻进程跑在服务器、NAS 或 Docker 容器里,只依赖小米开放的 MIoT 云端接口,不刷机、不破解。它只支持小米生态的小爱音箱,小度、天猫精灵等其他品牌不在适配范围内。
能力维度
- AI 问答:天文地理、知识解释都能接住,回答质量由接入的大模型决定
- 角色扮演:用 profile 设定人设,让 AI 以固定身份陪你聊天
- 流式响应:大模型边生成边播放,不必等整段回复完成
- 长短期记忆:对话存进本地数据库,跨会话也能记得之前聊过什么
- 连续对话:说唤醒词进入 AI 模式,后续提问不用每句都喊"小爱同学"
- 自定义 TTS:接入第三方语音合成服务,用语音指令随时切换音色
⚙️ 工作原理:中转站式的消息流转
MiGPT 的角色像一座中转站:你对小爱音箱说话,它站在中间,把话转给大模型,再把结果送回来。整个过程分四步:
- 轮询:持续从小米云端拉取音箱的对话列表,拿到你刚说的话
- 判断:检查消息是否以"请""召唤"等触发词开头,是才转发给大模型
- 合成:大模型的回复经 TTS 转换成一段可播放的音频
- 播放:通过 MIoT 开放接口向音箱下发播放指令,音箱开始朗读
最后一步的关键在指令编号:每个功能对应一对 [SIID, AIID] 数字,比如 [5, 1] 是文本播放,[5, 3] 是唤醒。型号不同编号不同,这也是后面配置的重点。
🚀 克隆仓库并完成大模型接入配置
整条操作线是:确认型号兼容 → 克隆仓库 → 复制并填写两个配置文件 → 启动服务。先对照 docs/compatibility.md 查一下自己的型号,推荐小爱音箱 Pro;环境方面 Docker 或 Node 16 以上即可,音箱和服务无需在同一局域网。
git clone https://gitcode.com/GitHub_Trending/mi/mi-gpt cd mi-gptcp .migpt.example.js .migpt.js cp .env.example .env两个配置文件只需要改这几处:
userId:小米 ID,在账号页"个人信息"查看,不是手机号或邮箱password:小米账号密码did:米家中设置的音箱名称,需与米家逐字一致ttsCommand/wakeUpCommand:音箱的 TTS 与唤醒指令编号OPENAI_API_KEY/OPENAI_MODEL:模型 API 密钥与模型名OPENAI_BASE_URL:可选,指向其他模型的 OpenAI 兼容端点
不想折腾运行环境用 Docker 启动,一行命令即可(Windows 终端下把$(pwd)换成绝对路径):
docker run -d --env-file $(pwd)/.env -v $(pwd)/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest想看日志、改代码的开发者走源码方式启动:
pnpm install pnpm db:gen pnpm dev启动成功后有三种召唤方式:"小爱同学,请 xxx"直接提问,"小爱同学,你 xxx"闲聊,"小爱同学,召唤傻妞"进入连续对话模式。
🔧 核心配置详解:账号、指令编号与模型参数
账号与 did。改的是.migpt.js里 speaker 下的三个字段:userId 填小米 ID,did 直接复制米家设备主页显示的完整名称。日志里最常见的两个报错——70016 登录验证失败、找不到设备——基本都出在这三个字段上。
speaker: { userId: "987654321", // 小米 ID,不是手机号 password: "你的密码", did: "小爱音箱Pro", // 与米家中的名称逐字一致 },指令编号。ttsCommand 和 wakeUpCommand 决定音箱会不会出声。到小米 MIoT 规格站 home.miot-spec.com 搜自己的型号,找到 play-text 和 wake-up 两个动作对应的 AIID 填进去即可;小爱音箱 Pro 的推荐值是 [5, 1] 和 [5, 3]。音箱收到消息却不朗读时,九成是这个编号和型号对不上。
播放状态指令。如果回答总是说到一半戛然而止,再给 speaker 加上 playingCommand 查询播放状态,Play 系列一般填 [3, 1, 1];部分老型号查不到播放状态,只能关闭 streamResponse,用完整回复换稳定性。
模型与人设。.env决定用哪个大脑,.migpt.js的 systemTemplate 决定它怎么说话。想换国产模型时环境变量名不用动,只改 OPENAI_BASE_URL 和 OPENAI_MODEL 的值,指向兼容端点即可。
OPENAI_API_KEY=你的密钥 OPENAI_MODEL=gpt-4osystemTemplate: "你是一个博学多识的助手,回答保持精简,不超过 3 句话。",🎯 实战场景:睡前故事、人设陪伴与连续对话
给孩子讲睡前故事。孩子上床后说"小爱同学,请讲个关于月亮的故事",音箱会边生成边朗读。把 systemTemplate 调成讲故事口吻,效果最稳:
systemTemplate: "你是耐心的故事老师,用孩子能听懂的话讲故事,每次不超过 200 字。",固定人设陪伴。想让音箱有稳定人格,把 bot 的 name 和 profile 写具体,之后的对话都会基于这个人设展开,也可以直接对它说"小爱同学,你是 xxx"临时换人设:
bot: { name: "傻妞", profile: "性别女,性格乖巧可爱,喜欢搞怪,爱吃醋。", },连续对话模式。说"小爱同学,召唤傻妞"进入 AI 模式后,后续提问不用每句带唤醒词,等它说"我说完了"再继续问,长时间没动静会自动退出:
speaker: { wakeUpKeywords: ["召唤傻妞", "打开傻妞"], exitKeywords: ["退出傻妞"], exitKeepAliveAfter: 30, },🛠️ 避坑指南:五个高频问题
- 日志报"70016 登录验证失败"→ userId 多半填成了手机号或邮箱,改成账号页"个人信息"里的小米 ID
- 提示触发异地登录保护→ 在与服务相同的网络里手动登录一次小米账号走完安全验证,等约 1 小时再启动;仍失败就先在家庭网络跑通,把生成的 .mi.json 导出后挂载到服务器容器
- 报"找不到设备"→ did 必须和米家设备名逐字一致,包括大小写和空格;名字对不上时开启 debug 与 enableTrace 拿到 miotDID,直接填这个数字
- 音箱收到消息却不朗读→ 核对 ttsCommand 是否和型号匹配;音箱正在放音乐时,要先暂停再提问
- AI 回复报 Connection error→ 海外模型服务需要代理,在 .env 里加 HTTP_PROXY;或者直接换成 OpenAI 兼容的国内模型
🧩 扩展与进阶:自定义音色与二次开发
两个值得深入的点。一是自定义音色:把 speaker.tts 设为 custom 并配置 TTS_BASE_URL 指向自建 TTS 服务,之后说"把声音换成 xxx"即可现场切换音色,docs/tts.md 有完整接口说明。二是二次开发:消息判断、角色记忆、对话流程都集中在 src/services/bot/,想加联网搜索或米家控制,从这个目录的入口文件看起最顺。
README 顶部已声明项目停止维护,不再提供更新与支持,现有功能可以正常使用,建议定期备份 .migpt.js 和 .env。
MiGPT 做的事说到底就一件:让小爱音箱借大模型说话,接入 ChatGPT 或豆包之后,它从只能答简单问题的音箱变成能陪聊、能讲故事的语音助手。动手前建议先打开 docs/compatibility.md,确认自己的型号在支持列表里,再按本文顺序配置参数。
【免费下载链接】mi-gpt🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考