30分钟把小爱音箱接入 ChatGPT:MiGPT 完整配置教程,改造成真正听得懂人话的 AI 语音助手
【免费下载链接】mi-gpt🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt
MiGPT(项目名mi-gpt)是一个 Node.js 开源项目,把小爱音箱接入 ChatGPT、豆包等大语言模型:启动后你对着音箱说"小爱同学,请 xxx",回答你的不再是小爱自带的模板话术,而是大模型的真实回复。本文按你真实的决策顺序展开:值不值得折腾、能不能跑、怎么最省事地跑起来、怎么调得顺手,最后附一份可对照的排障清单。
值得折腾吗:接入大模型后能做什么,又改不了什么
先说接入后真实的变化,方便你判断这笔折腾值不值。
会变的部分:
- 自然语言问答。"小爱同学,请解释一下黑洞是怎么形成的",回答来自大模型而不是搜索摘要,追问"那它和虫洞有什么区别"能接住上下文。
- 连续对话。支持连续对话的机型进入唤醒模式后,可以连问三句不用每句都喊"小爱同学",它记得你第一句问的是什么。
- 角色扮演。配置里把小爱的人设改成"性别女,性格乖巧可爱"这类简介,或者直接说"小爱同学,你是我的英语老师",它就会按这个角色回你。
- 长短期记忆。对话记录存在本地数据库里,由大模型异步提炼成短期记忆和长期记忆,聊得越久它越知道你的习惯,不需要额外开启任何开关。
改不了的部分(项目原理决定,刷机才行):
- 小爱内置回复会抢话。从你说完到 MiGPT 通过小米云端接口轮询到"小爱正在回复"的状态,有大约 1~2 秒延迟,这期间小爱自己那句话的开头可能已经响了,无解。
- "小爱同学"唤醒词写在固件里,不能改成"豆包"之类的。
- 共享设备不支持。小爱音箱如果是别人账号共享给你的,MiGPT 拿不到设备,无法启动。
- 项目已声明停止维护(README 顶部有公告),但核心的大模型对话功能完整可用,现有版本能装能用。
如果你家里现成有小爱音箱、不想再买新硬件,折腾成本大约就是一条 Docker 命令加一个模型 API 密钥,值得一试。
动手前先查音箱型号:兼容性速查
MiGPT 走的是小米 MIoT 云端接口,不同机型的"播放文本"和"唤醒"指令编码不同,而且部分机型查不到播放状态,直接影响能不能用连续对话。先看你的型号在不在支持列表里,完整清单见 docs/compatibility.md。
完美支持(可开连续对话):
| 名称 | 型号 | ttsCommand | wakeUpCommand | playingCommand | streamResponse |
|---|---|---|---|---|---|
| 小爱音箱 Pro | LX06 | [5, 1] | [5, 3] | 不配置 | true |
| 小米 AI 音箱(第二代) | L15A | [7, 3] | [7, 1] | [3, 1, 1] | true |
| 小爱智能家庭屏 10 | X10A | [7, 3] | [7, 1] | 不配置 | true |
| Xiaomi Sound Pro | L17A | [7, 3] | [7, 1] | 不配置 | true |
基本支持(不支持连续对话):小爱音箱 Play 增强版(L05C)、小爱触屏音箱(LX04)、小爱音箱 mini(LX01)、小米智能家庭屏 6(X6A)等。这类机型 MIoT 接口查不到播放状态,streamResponse必须设为false。
不支持:小米小爱音箱 HD(SM4)、小爱蓝牙音箱随身版;小度、天猫精灵、HomePod 等非小米设备也不在适配范围内。
型号在米家 App 的设备详情页可以查到。查到型号后,去小米 MIoT 设备规格库搜型号(比如lx06),点"规格"找到设备文档,ttsCommand、wakeUpCommand就是文档里play-text、wake-up两个动作对应的 SIID 和 AIID:
复制两份配置文件加一条命令,Docker 跑起来
准备工作一共三样:一台装了 Docker 的机器(家用主机、群晖、云服务器都行,不需要和小爱音箱在同一局域网,全程走云端接口)、你的小米账号、一个模型 API 密钥。
git clone https://gitcode.com/GitHub_Trending/mi/mi-gpt cd mi-gpt cp .env.example .env # 大模型配置 cp .migpt.example.js .migpt.js # 音箱与角色配置.env只改前两行:
OPENAI_MODEL=gpt-4o-mini # 使用的模型 OPENAI_API_KEY=sk-proj-xxxx # 你的 API 密钥 # OPENAI_BASE_URL=https://api.openai.com/v1 # 默认地址,国内模型时替换接入非 OpenAI 的模型:通义千问、DeepSeek、Moonshot(Kimi)等本身就是 OpenAI 兼容接口,直接改OPENAI_BASE_URL和OPENAI_MODEL即可,例如通义千问填https://dashscope.aliyuncs.com/compatible-mode/v1+qwen-turbo。豆包、文心一言这类不兼容 OpenAI 协议的,需要先通过 One API 或 simple-one-api 这类聚合工具转成 OpenAI 格式,再把地址填进OPENAI_BASE_URL。
.migpt.js只需要动speaker下的五个参数,其余保持默认:
export default { speaker: { userId: "987654321", // 小米 ID,不是手机号或邮箱,在「个人信息 - 小米 ID」查看 password: "123456", // 小米账号密码 did: "小爱音箱Pro", // 米家中的设备名称,注意错别字(音响≠音箱)、空格、大小写 ttsCommand: [5, 1], // 播放文本指令,SIID+AIID wakeUpCommand: [5, 3], // 唤醒指令,SIID+AIID }, };ttsCommand和wakeUpCommand怎么查:在 MIoT 规格库打开你机型的设备文档,找到 SIID 为 5 的intelligent-speaker服务,play-text的 AIID 对应ttsCommand,wake-up的 AIID 对应wakeUpCommand,小爱音箱 Pro 查出来就是[5, 1]和[5, 3]:
配置文件放好后,一条命令启动:
docker run -d --env-file $(pwd)/.env -v $(pwd)/.migpt.js:/app/.migpt.js idootop/mi-gpt:latestWindows 终端(PowerShell、cmd)不识别$(pwd),换成配置文件绝对路径,例如-v D:/hello/mi-gpt/.migpt.js:/app/.migpt.js。
启动后对着音箱说"小爱同学,请问地球为什么是圆的",能听到完整回答就算成功了。
想改代码或调试:源码方式直接跑
如果你要改角色设定逻辑、看日志细节,或者环境里本来就有 Node.js(要求>=16),可以不走 Docker:
git clone https://gitcode.com/GitHub_Trending/mi/mi-gpt cd mi-gpt pnpm install # 安装依赖(npm install 也可以) pnpm db:gen # 初始化本地 SQLite 数据库(Prisma 迁移) cp .env.example .env cp .migpt.example.js .migpt.js pnpm dev # 开发模式启动,自动读取 .envpnpm dev等价于node --env-file=.env ./app.js,正式跑用pnpm start。登录成功后会在根目录生成.mi.json登录态缓存文件,这个文件对排障很有用,后面会用到:
源码方式和 Docker 方式共用同一套.env与.migpt.js,改完重启即生效;Docker 方式下改了配置文件记得重启容器,个别参数(如名称、简介)改完可能要删掉旧容器重建。
让对话变顺手:连续对话、人设、记忆与声音
默认配置跑通后,按需调下面几组参数,都在.migpt.js里。完整参数表见 docs/settings.md。
连续对话(唤醒模式)。streamResponse为true的机型,通过wakeUpKeywords进入唤醒状态后就能免唤醒连问:
speaker: { streamResponse: true, // 开启连续对话,仅完全支持机型 callAIKeywords: ["请", "你", "傻妞"], // 以这些词开头会调用 AI 回复 wakeUpKeywords: ["打开", "进入", "召唤"], // 以这些词开头进入唤醒模式,如"小爱同学,召唤傻妞" exitKeywords: ["关闭", "退出", "再见"], // 以这些词开头退出唤醒模式 exitKeepAliveAfter: 30, // 唤醒模式下多少秒无响应自动退出,建议不超过 60 }进唤醒模式后不用每句喊"小爱同学",等它说"我说完了"再问下一句;超过 30 秒不说话它会自己退出,届时再重新召唤。
提示语。每次进入、开始回答、答完都有默认提示语("让我先想想"、"我说完了,还有其他问题吗"),嫌啰嗦就把对应项设成空数组关掉,注意全关后可能感觉小爱"没反应":
speaker: { onAIAsking: [], // 关闭 AI 开始回答时的提示语 onAIReplied: [], // 关闭 AI 结束回答时的提示语 }人设。bot.name、bot.profile(小爱是谁)和master.name、master.profile(你是谁)会拼进系统 Prompt,模板是文件顶部的systemTemplate。不想改文件也可以运行时直接说:"小爱同学,你是一名歌手,喜欢唱跳 rap"。
记忆。默认就开着:每条消息入库存档,每积累约 10 条由大模型异步提炼成短期记忆,短期记忆再滚动汇总成长期记忆,对话越长越贴合你的语境,无需配置。
换音色(第三方 TTS)。默认tts: "xiaoai"用小米自带合成。想换成豆包同款火山引擎音色或本地 ChatTTS,需要自部署一个 TTS 服务(作者提供了 MiGPT-TTS 参考实现),然后:
// .env TTS_BASE_URL=http://192.168.31.205:4321/xxxx/api // 你的 TTS 服务地址,勿用 localhost // .migpt.js speaker: { tts: "custom", // 切换到第三方 TTS 引擎 switchSpeakerKeywords: ["把声音换成"], // 说"小爱同学,把声音换成 xx"即可切音色 }第三方 TTS 的接口要求和音色列表见 docs/tts.md。
回复太快/太慢。嫌等得久,换响应更快的模型(如gpt-3.5-turbo),或把连续对话的播放状态检测间隔调小:checkInterval: 500(单位毫秒,最低 500,默认 1000),能减轻回复之间的停顿感。
对照排障清单:从现象到解法
按报错信息对号入座,更完整的问答在 docs/faq.md:
| 现象 | 原因 | 解法 |
|---|---|---|
启动报70016:登录验证失败 | userId填了手机号或邮箱 | 去小米官网「个人信息 - 小米 ID」查真正的数字 ID |
| 提示触发异地登录保护 | 小米账号在新网络环境登录 | 在与 MiGPT 相同的网络下手动登录小米官网通过安全验证,约 1 小时后重试;仍不行则在本地网络跑通后导出.mi.json,挂载到容器/app/.mi.json再启动 |
报找不到设备:xxx | did与米家中名称不一致 | 直接复制米家里的名称(警惕"小爱音响"错别字、多余空格、pro/Pro大小写);还不行就开debug: true+enableTrace: true重启,从日志MiNA 设备列表里抄miotDID填进did,查完记得关 |
报ERR_MODULE_NOT_FOUND | .migpt.js不存在或挂载路径错 | 检查容器内/app/.migpt.js是否存在;Windows 下必须用绝对路径 |
| 控制台打印了 AI 回复,但音箱不念 | 该机型的ttsCommand填错 | 回 MIoT 规格库重查play-text的 SIID/AIID 并修改 |
| 回答总是说到一半戛然而止 | 部分机型查不到播放状态 | 按规格库补上playingCommand: [3, 1, 1](见下图);仍无效说明该机型接口不支持查询,只能关掉streamResponse换完整句朗读,代价是失去连续对话 |
LLM 响应异常 Connection error | 国内网络访问不了 OpenAI | .env加HTTP_PROXY=http://127.0.0.1:7890,或把OPENAI_BASE_URL换成国内模型 |
401 Invalid Authentication | API 密钥无效或未生效 | 验证 key 本身可用,并确认环境变量已传入容器/进程 |
404 The model gpt-4o does not exist | 账号没有 gpt-4 权限(新账号未绑卡常见) | 换成gpt-3.5-turbo这类模型 |
| Docker 镜像拉取失败 | 网络问题 | 给 Docker 配置镜像加速源后重试 |
| 进唤醒模式时小爱突然放歌 | 唤醒词被当成歌名 | 换wakeUpKeywords,比如用"打开" |
| 唤醒模式下说话没反应 | 音箱当时不在收听状态 | 等它说"我说完了"或指示灯常亮后再问;正在放音乐先暂停;真没听就用"小爱同学,xxx"重新唤醒 |
| 回答太长想打断 | — | 说"小爱同学,请你闭嘴"或重新提问 |
另外两个设计层面的"坑"提前知道:小爱内置回复抢话的 1~2 秒延迟无解;一个容器只支持单实例单账号,多台音箱或多账号要建多个容器,各自挂不同的.migpt.js。
建议的下一步:从三件事里挑一件做
配置跑通后,按这个顺序往下走最省力:
- 把
OPENAI_BASE_URL换成豆包或通义千问的接入地址,同一问题问两个模型,体会一下回答风格差异,选一个你更顺耳的固定下来。 - 自部署 MiGPT-TTS,用"小爱同学,把声音换成 xxx"试一次非小米自带音色——这是默认配置之外体感变化最大的一步。
- 把
bot.profile和systemTemplate改成符合你家场景的人设(比如给孩子的"小学老师"),让它长期记住你家的作息和偏好,观察几天记忆系统的效果。
配置文件只有两个、参数也就十几项,跑通之后每天改一处参数、重启一次容器,一周之内你就能把这台音箱调成自己最习惯的样子。
【免费下载链接】mi-gpt🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考