把小爱音箱改造成AI语音助手:零基础跑通MiGPT的避坑全记录
2026/9/6 17:30:23 网站建设 项目流程

把小爱音箱改造成AI语音助手:零基础跑通MiGPT的避坑全记录

【免费下载链接】mi-gpt🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt

如果你家的智能音箱,问它"明天出门要不要带伞"只会回一句"我在",那这篇文章就是为你写的。我家的那台小爱音箱,接入大模型之前几乎只干两件事:定闹钟、讲冷笑话。直到我花了一个周末,把它接到了 ChatGPT 和豆包上——现在的它,能记住我昨天说过的话,能切换不同音色,还能不喊"小爱同学"连续聊上十分钟。这篇文章记录的就是从踩坑到跑通的全过程,希望能让你的AI语音助手之路少走一半弯路。

先讲一段真实经历:一台"人工智障"音箱的逆袭

事情要从我表弟说起。他给爸妈买了一台小爱音箱 Pro,本意是让老人动动嘴就能查天气、听新闻,结果两个月过去,家人问得最多的还是"这个音箱到底能干嘛"——因为它只会按关键词机械应答,稍微绕一点的问法就直接卡壳。

后来我在技术社区看到有人提到 MiGPT 这个开源项目:把小米的语音硬件和 GPT 这类大语言模型接在一起,让音箱真正"听懂人话"。抱着试一试的心态,我照着文档折腾了一下午,还真跑通了。现在我家那台音箱:

  • 问"太阳为什么从东边升起"这类问题,能给出完整的、条理清晰的解释;
  • 连续聊到第五句,它还记得第一句聊了什么;
  • 用一句"把声音换成男声",就能切换 TTS 音色;
  • 晚上用它哄孩子睡觉,讲的故事每一遍都不重样。

如果你也有一台吃灰的小爱音箱,下面的内容可以直接照着抄作业。

改造前后到底差在哪:一张对比表看明白

在动手之前,先花一分钟确认这件事值不值得做。同样是"问问题"这个动作,改造前后的差别非常直观:

对比维度原生小爱音箱接入大模型后
理解方式关键词匹配,换个说法就听不懂语义理解,怎么问都能接住
知识范围内置知识库,超出范围就"在呢"大模型在线知识,几乎无死角
回答风格固定模板,千篇一律每次回答都有变化,可塑性极强
记忆能力说完就忘短期记忆连续对话,长期记忆越聊越懂你
声音选择只有系统自带音色可接入第三方 TTS,自由换声

除了体验层面的升级,这个项目还有两个很实际的好处:一是完全开源免费,代码都在本地跑;二是模型可以随时换,ChatGPT、豆包、通义千问,改一行配置就能切换,不用换硬件。

动手前的三项自查:硬件、环境、账号缺一不可

别急着复制命令,先花两分钟确认三件事,能帮你省掉后面一大半的麻烦。

1. 硬件是否兼容目前 MiGPT 支持市面上绝大多数小爱音箱型号,官方推荐的是小爱音箱 Pro(实测最稳定)。需要提醒的是,小度音箱、天猫精灵、HomePod 这类其他品牌的设备暂不支持,也没有适配计划。具体型号兼容性可以在 docs/compatibility.md 里查到。

2. 运行环境是否就绪二选一即可:

  • 本机安装Node.js 16.0+,走源码方式运行;
  • 或者装好Docker,走镜像方式部署。

如果电脑平时不用来写代码,强烈建议直接选 Docker,省去装依赖的麻烦。

3. 小米账号是否可用这里有一个几乎人人都踩的坑:登录用的不是手机号,也不是邮箱,而是小米 ID。打开小米官网的"个人信息"页面,那里显示的一串数字才是要填的账号。

部署其实只有四行命令

环境确认无误后,开始拉取项目。打开终端执行:

git clone https://gitcode.com/GitHub_Trending/mi/mi-gpt cd mi-gpt pnpm install # 如果你用的是 npm,也可以执行 npm install

安装完成后,先把两个示例配置文件复制成正式配置:

cp .env.example .env cp .migpt.example.js .migpt.js

如果你走 Docker 路线,上面两步可以跳过,直接一条命令启动:

docker run -d --env-file $(pwd)/.env -v $(pwd)/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest

这里要留意:Windows 的 PowerShell 和 cmd 终端不支持$(pwd)这个写法,需要把它替换成配置文件的绝对路径,比如D:/hello/mi-gpt/.env,否则会报"找不到文件"。

两处核心配置:决定你的音箱姓"AI"还是姓"傻"

项目跑通的关键,就藏在.migpt.js.env这两个文件里。

先改 .migpt.js:把账号和音箱对上号

打开.migpt.js,找到speaker配置块,这是整个项目里最容易出错的部分:

module.exports = { speaker: { // ⚠️ 易错点1:这里填小米ID,不是手机号也不是邮箱 userId: "987654321", password: "你的小米账号密码", // ⚠️ 易错点2:必须和米家App里的设备名称完全一致 // "小爱音箱Pro" 和 "小爱音箱 Pro" 都会被判定为找不到设备 did: "小爱音箱Pro", // TTS 语音合成指令(Pro 机型默认就是这个值) ttsCommand: [5, 1], // 唤醒音箱的指令 wakeUpCommand: [5, 3], }, };

userIdpassworddid这三项只要有一处填错,启动时就会报错,后面"翻车现场"部分会给出每种错误的解决办法。如果你想知道[5, 1][5, 3]这些数字是怎么来的,可以到 miot-spec 网站上查询自己音箱的规格文档。

再改 .env:给音箱挑一个聪明的大脑

模型配置集中在.env文件里。以 OpenAI 系列为例:

OPENAI_API_KEY=sk-你的密钥 OPENAI_MODEL=gpt-4o OPENAI_BASE_URL=https://api.openai.com/v1

国内用户如果不想折腾网络问题,可以直接接入国产模型。以通义千问为例,只需把.env里的三行改成:

OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 OPENAI_MODEL=qwen-turbo OPENAI_API_KEY=通义千问的API密钥

这里的规律是:环境变量名保持不变,只改变量的值。凡是兼容 OpenAI API 格式的服务,理论上都能这样接进来。豆包、Kimi、DeepSeek 也可以通过类似的聚合工具转成 OpenAI 兼容格式后接入。

别忘了设置"召唤词":让音箱知道何时该请AI出场

默认情况下,只有以"请""你"等关键词开头的话,才会触发 AI 回复。你可以自定义这份名单:

module.exports = { speaker: { // 消息以这些词开头时,调用 AI 回复 callAIKeywords: ["请", "你", "傻妞"], // 消息以这些词开头时,进入连续对话模式 wakeUpKeywords: ["召唤傻妞", "打开AI"], // 消息以这些词开头时,退出连续对话模式 exitKeywords: ["退出傻妞", "关闭AI"], }, };

启动验收:从"没反应"到"秒回"

配置完成后,执行pnpm start。看到控制台输出设备已连接、模型已就绪的日志,就说明服务跑起来了:

接下来就可以实测了。在音箱旁说出下面三句话,感受一下差别:

  • "小爱同学,请问地球为什么是圆的?" —— 触发 AI 回答;
  • "小爱同学,你喜欢我吗?" —— 触发 AI 互动;
  • "小爱同学,召唤傻妞" —— 进入连续对话模式,之后可以连续追问,不用每句都喊"小爱同学"。

如果音箱没反应,先别怀疑人生,大概率是没先唤醒小爱同学——直接对着音箱说"请问……"是无效的,必须前缀"小爱同学"。

高频翻车现场:五张避坑清单照着抄

把常见报错整理成了一份清单,你遇到的情况大概率就在里面。

坑一:报错"70016:登录验证失败"

原因:账号密码不对,多半是填了手机号而不是小米 ID。解法:去小米官网个人信息页,把那一串数字 ID 填进去。

坑二:提示触发了异地登录风控

原因:小米检测到新设备登录,触发了安全验证。解法:在运行 MiGPT 的同一网络环境下,先登录一次小米官网手动通过验证,等大约 1 小时再启动。如果你用的是海外服务器,还需要先同意小米的"个人数据跨境传输"协议。终极方案是:本地先跑通,把生成的.mi.json文件挂载到 Docker 容器的/app/.mi.json路径下。

坑三:报错"找不到设备:xxx"

原因did填的名称和米家里的不一致。解法:打开米家 App → 进入小爱音箱主页 → 右上角更多 → 设备名称,直接复制里面的名称。注意"小爱音响"(错别字)、"小爱音箱 Pro"(多了空格)这类写法都会被判定为找不到设备,必须逐字一致。

坑四:控制台有 AI 回复,但音箱不说话

原因:不同型号的小爱音箱 TTS 指令不一样,默认的[5, 1]可能不适用你的型号。解法:到 miot-spec 网站查询你型号对应的play-text指令,修改ttsCommand参数。

坑五:句子没读完就"哑火"

原因:部分型号无法通过 Mina 接口获取播放状态,导致 AI 以为你已说完就提前打断。解法:到 miot-spec 查询播放状态指令,配置playingCommand,例如[3, 1, 1]

如果改了参数还是不行,说明你的设备不支持开放接口查询播放状态(比如小米音箱 Play 增强版),要么换一台 Pro,要么关闭streamResponse流式响应——但关闭后连续对话模式会失效。

三招进阶玩法:让音箱真正变成"你的"

跑通基础功能只是开始,下面三招能让它从"能用"变成"好用"。

第一招:注入人设,把音箱调教成专属角色

.migpt.js顶部有一段系统提示词模板,把它改成你想要的样子:

const botProfile = ` 性别:女 性格:温柔耐心,偶尔幽默 特长:讲睡前故事、科普冷知识、记性极好 `.trim(); const systemTemplate = ` 你是${bot.name},${botProfile}。 请用第一人称回复,回答控制在100字以内。 `.trim();

改完重启服务,再用"小爱同学,你是蔡徐坤,你是一名歌手,喜欢唱跳"这种句式,也能在对话中实时调整人设。这是我最喜欢的功能——一个角色聊腻了,换一句设定就翻篇。

第二招:唤醒模式,解锁真正的连续对话

开启wakeUpKeywords后,说一句"小爱同学,召唤傻妞",音箱就进入连续对话状态。此后每次提问都不用再喊"小爱同学",等它说完"我说完了"再继续追问即可。

有两个小细节值得注意:一是如果超过 3~10 秒没提问,音箱会自动退出唤醒状态,需要重新召唤;二是如果正在播放音乐,最好先让它暂停,否则可能导致回复异常。当你想打断它长篇大论时,直接说"小爱同学,请你闭嘴"就行。

第三招:告别原声,接上豆包同款 TTS 音色

对小米自带语音腻了?可以切换自定义 TTS。先在.env中配置 TTS 服务地址,再在.migpt.js中开启自定义引擎:

TTS_BASE_URL=http://192.168.31.205:4321/你的密钥/api
module.exports = { speaker: { tts: "custom", // 启用自定义 TTS 引擎 switchSpeakerKeywords: ["把声音换成"], // 语音切换音色的关键词 }, };

配置好后,对着音箱说"小爱同学,把声音换成男声",就能直接切换音色。项目社区里有接入火山引擎语音合成的现成服务端,实名认证后可免费使用 21 款常用音色。完整的接入方法见 docs/tts.md。

越聊越懂你的秘密:双级记忆系统

MiGPT 内置了一套记忆机制,这是它区别于"一问一答"玩具的关键:

  • 短期记忆:记录当前会话的上下文,让连续对话有逻辑、不串台;
  • 长期记忆:把重要的用户偏好和习惯沉淀下来,存储到本地数据库中,重启服务也不会丢失;
  • 自动清理:对话历史会自动管理,避免日志无限膨胀拖慢响应。

有了这套机制,你的音箱会越来越"懂你"——它会记得你偏爱简洁的回答,记得你上次问过的话题。这套记忆系统的实现逻辑可以参考 src/services/bot/memory/ 目录下的源码。

让它真正住进家里:三个生活化场景

场景一:家庭智能管家早上问"今天天气适合跑步吗",它能结合温度、空气质量给出建议;做饭时问"红烧肉收汁到什么程度",它能把步骤讲得明明白白。

场景二:孩子的十万个为什么睡前故事可以按孩子年龄调整难度,天文地理、成语典故随口即答,而且每次都换着花样讲。

场景三:一个人的情绪搭子加班回家对着它吐槽两句,它不会敷衍,而是真的接得住话茬——这也是角色扮演功能最让人上瘾的地方。

写在最后:你的音箱离"智能"只差一小时

回头看我那台音箱的逆袭,其实只做了三件事:装上服务、改好配置、调教人设。MiGPT 的价值不在于"能用大模型聊天"这个噱头,而在于它用最轻量的方式,把家里的旧硬件和新时代的 AI 能力重新连接在了一起。

如果你已经看完这份避坑清单,现在就可以动手了。遇到问题先翻 docs/faq.md 的常见问题清单,配置参数的含义在 docs/settings.md 里有完整对照表;想深入研究实现原理,可以直接读 src/ 下的源码。从今天起,让那台只会说"我在"的音箱,真正成为懂你的家庭伙伴。

【免费下载链接】mi-gpt🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询