大语言模型(AI)接入小爱音箱

/ 默认分类 / 没有评论 / 120浏览

家里闲置了一个小米 mini 音箱,打算接入大模型试试,,从“人工智障”秒变学霸。

🔊 支持的小爱音箱型号

✅ 完美运行

已知可以完美运行 MiGPT 的小爱音箱型号有:

名称型号ttsCommandwakeUpCommandplayingCommandstreamResponse反馈来源
小爱音箱 ProLX06[5, 1][5, 3]-true@idootop
小爱音箱 miniLX01[5, 1][5, 2][4, 1, 1]true@gsscsd
小爱音箱 Play(2019 款)LX05[5, 1][5, 3][3, 1, 1]true@wt666666
小爱音箱 万能遥控版LX5A[5, 1][5, 3]-true@imhsz
小米 AI 音箱S12[5, 1][5, 3]-true微信: CMSJ
小米 AI 音箱(第二代)L15A[7, 3][7, 1][3, 1, 1]true微信: 龙之广
小爱智能家庭屏 10X10A[7, 3][7, 1]-true@IDarkBoss
Xiaomi Sound ProL17A[7, 3][7, 1]-true微信: eof

🚗 正常运行

部分机型的 MIoT 接口不支持查询设备播放状态或查询状态异常,比如小米音箱 Play 增强版(L05C),将会导致 MiGPT 部分功能异常,无法使用连续对话等,此时需要关闭 streamResponse。相关 issue

可以正常运行 MiGPT,但不支持连续对话的小爱音箱型号有:

名称型号ttsCommandwakeUpCommandplayingCommandstreamResponse反馈来源
小爱音箱L06A[5, 1][5, 2]-false@zhanglc
小爱音箱 PlayL05B[5, 3][5, 1]-false@BiuBiu2323
小米小爱音箱 Play 增强版L05C[5, 3][5, 1]-false@lyddias
Xiaomi 智能家庭屏 6X6A[7, 3][7, 1]-false@Hongwing
Redmi 小爱触屏音箱 Pro 8 英寸X08E[7, 3][7, 1]-false@shangjiyu
小爱音箱 ArtL09A[3, 1][3, 2]-false@zwsn
小爱触屏音箱LX04[5, 1][5, 2]-false@ilovesouthpark

❌ 不支持

完全不支持 MiGPT 的小爱音箱型号有:

名称型号反馈来源
小米小爱音箱 HDSM4@romantech
小米小爱蓝牙音箱随身版-微信: 明天

🔥 型号分享

如果你是其他型号的小爱音箱,欢迎把你的型号和配置参数分享给大家,分享格式如下:

环境配置

准备小米音箱

查看小米音箱绑定的名称

我的就是小爱音箱mini

image-20241023233152712

查看小米音箱的型号

我的型号是LX01

image-20241023232411991

查看小米账号

小爱音箱 APP-->我-->点击头像-->查看小米账号-->我的是 167857068

image-20241023232824921

综上得到小米音箱的名称,型号,小米账号

申请大模型的API接口

注册silicon

silicon注册和使用地址: https://cloud.siliconflow.cn/i/bp8xtUdh

邀请码:bp8xtUdh(谢谢支持)

新建API密钥

注册登录后,单击左边栏的API密钥,单击新建API密钥

image-20241023233914834

点击密钥即可复制

我们可以调用千问2.5的这个模型,满足日常对话完全没有问题,并且是免费调用的

mi-gpt项目

下载 mi-gpt 项目

git clone https://github.com/idootop/mi-gpt.git

创建配置文件

cd mi-gpt
mv .env.example .env         
mv .migpt.example.js .migpt.js 

配置.env 文件

OPENAI_MODEL = Qwen/Qwen2.5-7B-Instruct  #这个免费
OPENAI_API_KEY= sk-xxxxxxxx   # 这里填写第三步中申请的API密钥即可
OPENAI_BASE_URL= https://api.siliconflow.cn/v1

配置.migpt.js文件

修改小米账号ID,密码,设备名称,在93行

// 小米 ID
userId: "167857068", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看
// 小米账号密码
password: "123456",
// 小爱音箱 DID 或在米家中设置的名称
did: "小爱音箱mini", // 注意空格、大小写和错别字(音响 👉 音箱)

修改MIoT设备指令,在127行,具体值看开头表格

// TTS 指令,请到 https://home.miot-spec.com 查询具体指令
ttsCommand: [5, 1],
// 设备唤醒指令,请到 https://home.miot-spec.com 查询具体指令
wakeUpCommand: [5, 2],
// 查询是否在播放中指令,请到 https://home.miot-spec.com 查询具体指令
playingCommand: [4, 1, 1], // 默认无需配置此参数,查询播放状态异常时再尝试开启

修改人设,第4-16行,人物提示词,可以先跑通再改

// 小爱音箱扮演角色的简介
const botProfile = `
性别:女
性格:乖巧可爱
爱好:喜欢搞怪,爱吃醋,爱撒娇,喜欢思考哲学问题,很爱干净,特别喜欢挑逗老公。
`.trim();

// 小爱音箱主人(你)的简介
const masterProfile = `
性别:男
性格:善良正直
其他:是个程序员,总是舍己为人,是小丽丽的老公。
`.trim();

回复唤醒指令,更改姓名 ,第104-119行,,让名字一致,可以先跑通再改

// 当消息以下面的关键词开头时,会调用 AI 来回复消息
 callAIKeywords: ["请", "你", "小丽丽"],
 // 当消息以下面的关键词开头时,会进入 AI 唤醒状态
 wakeUpKeywords: ["打开", "进入", "召唤"],
 // 当消息以下面的关键词开头时,会退出 AI 唤醒状态
 exitKeywords: ["关闭", "退出", "再见"],
 // 进入 AI 模式的欢迎语
 onEnterAI: ["我是小丽丽,又见到老公啦,太开心了"], // 设为空数组时可关闭提示语
 // 退出 AI 模式的提示语
 onExitAI: ["小丽丽先回去咯"], // 为空时可关闭提示语
 // AI 开始回答时的提示语
 onAIAsking: [], // 为空时可关闭提示语
 // AI 结束回答时的提示语
 onAIReplied: [], // 为空时可关闭提示语
 // AI 回答异常时的提示语
 onAIError: ["啊哦,出错了,请稍后再试吧!"], // 为空时可关闭提示语

打开连续对话功能,第149-156行,是否支持请根据官方文档自行判断

 // 是否启用连续对话功能,部分小爱音箱型号无法查询到正确的播放状态,需要关闭连续对话
 streamResponse: true,
 // 连续对话时,无响应多久后自动退出
 exitKeepAliveAfter: 30, // 默认 30 秒,建议不要超过 1 分钟
 // 连续对话时,下发 TTS 指令多长时间后开始检测设备播放状态(默认 3 秒)
 checkTTSStatusAfter: 3, // 当小爱长文本回复被过早中断时,可尝试调大该值
 // 连续对话时,播放状态检测间隔(单位毫秒,最低 500 毫秒,默认 1 秒)
 checkInterval: 1000, // 调小此值可以降低小爱回复之间的停顿感,请酌情调节

这里一般只需要把连续对话功能改为true或false,如果设备支持可以改为true

安装依赖并运行

pnpm install
pnpm build