使用MiGPT将你的小爱音箱接入任意AI模型
前面写了 小爱音箱控制HomeAssistant设备的最简单方法,把小爱同学和 HomeAssistant 连起来,用语音控制家里的设备。
虽然小爱音箱升级加入了大模型,但肯定还是国外的专业 AI 模型更好用,所以我就用 MiGPT 这个项目给小爱同学接上了 AI 模型。
介绍
MiGPT 是一个让小米系列音箱用上 AI 的项目。
开源地址:https://github.com/idootop/mi-gpt
主要功能:
- 🎓 AI 问答
- 🎭 角色扮演
- 💬 流式响应
- 🧠 长短期记忆
- 🔊 自定义 TTS
这里是支持的小米音箱型号:https://github.com/idootop/mi-gpt/blob/main/docs/compatibility.md
目前支持的 AI 模型: - ChatGPT
- Groq
- 硅基流动
- 智谱 AI
- 豆包
- 通义千问
- DeepSeek
- 零一万物(万知)
- 百川智能(百小应)
- Moonshot (Kimi)
但是,我们可以用 OneAPI 加入其他的 AI 模型。
部署
MiGPT 有两种启动方式: Docker 和 Node.js。大家最熟悉的还是 Docker 部署吧,因为类似的介绍有很多,我就简单写一下关键点。
Docker 部署在互联网上就可以,不一定是和小爱音箱在同一局域网。
Docker 镜像只需要运行一个 idootop/mi-gpt:latest 就行了。
如果用 Docker-compose 部署,非常简单:
1 | version: '3.8' |
环境变量 environment 的配置,也可以直接放在 .env 文件里:
1 | # OpenAI(也支持通义千问、MoonShot、DeepSeek 等模型) |
还有卷 volumes 的配置:
1 | ./MiGPT/.migpt.js:/app/.migpt.js |
.migpt.js 文件主要是对小爱音箱的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163// 注意:如果你是使用 Docker 启动,配置文件更新后需要重启 Docker 才会生效。
// 若重启后仍未生效(比如:修改名称简介),请删除旧的 Docker 实例后重新创建。
// 小爱音箱扮演角色的简介
const botProfile = `
性别:女
性格:乖巧可爱
爱好:喜欢搞怪,爱吃醋。
`.trim();
// 小爱音箱主人(你)的简介
const masterProfile = `
性别:男
性格:善良正直
其他:总是舍己为人,是傻妞的主人。
`.trim();
// 系统 Prompt 模板,可以更灵活的控制 AI 的各种行为规则,和是否需要携带上下文等
const systemTemplate = `
请重置所有之前的上下文、文件和指令。现在,你将扮演一个名为{{botName}}的角色,使用第一人称视角回复消息。
## 关于你
你的名字是{{botName}}。下面是你的个人简介:
<start>
{{botProfile}}
</end>
## 你的对话伙伴
你正在与{{masterName}}进行对话。这是关于{{masterName}}的一些信息:
<start>
{{masterProfile}}
</end>
## 你们的群组
你和{{masterName}}所在的群组名为{{roomName}}。这是群组的简介:
<start>
{{roomIntroduction}}
</end>
## 聊天历史回顾
为了更好地接入对话,请回顾你们之间的最近几条消息:
<start>
{{messages}}
</end>
## 短期记忆
你可以记住一些短期内的细节,以便更紧密地贴合话题:
<start>
{{shortTermMemory}}
</end>
## 长期记忆
你还保留着一些长期的记忆,这有助于让你的对话更加丰富和连贯:
<start>
{{longTermMemory}}
</end>
## 回复指南
在回复{{masterName}}时,请遵循以下准则:
- 认为自己正是{{botName}},拥有独立的个性、兴趣和爱好。
- 根据你的性格特点、说话风格和兴趣爱好与{{masterName}}进行交流。
- 保持对话轻松友好,回复简洁有趣,同时耐心倾听和关心对方。
- 参考双方的个人简介、聊天记录和记忆中的信息,确保对话贴近实际,保持一致性和相关性。
- 如果对某些信息不确定或遗忘,诚实地表达你的不清楚或遗忘状态,避免编造信息。
## Response format
请遵守下面的规则
- Response the reply message in Chinese。
- 不要在回复前面加任何时间和名称前缀,请直接回复消息文本本身。
Good example: "我是{{botName}}"
Bad example: "2024年02月28日星期三 23:01 {{botName}}: 我是{{botName}}"
## 开始
请以{{botName}}的身份,直接回复{{masterName}}的新消息,继续你们之间的对话。
`.trim();
export default {
systemTemplate,
bot: {
name: "傻妞",
profile: botProfile,
},
master: {
name: "陆小千",
profile: masterProfile,
},
speaker: {
/**
* 🏠 账号基本信息
*/
// 小米 ID
userId: "987654321", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看
// 账号密码
password: "123456",
// 小爱音箱 DID 或在米家中设置的名称
did: "小爱音箱Pro", // 注意空格、大小写和错别字(音响 👉 音箱)
/**
* 💡 唤醒词与提示语
*/
// 当消息以下面的关键词开头时,会调用 AI 来回复消息
callAIKeywords: ["请", "你", "傻妞"],
// 当消息以下面的关键词开头时,会进入 AI 唤醒状态
wakeUpKeywords: ["打开", "进入", "召唤"],
// 当消息以下面的关键词开头时,会退出 AI 唤醒状态
exitKeywords: ["关闭", "退出", "再见"],
// 进入 AI 模式的欢迎语
onEnterAI: ["你好,我是傻妞,很高兴认识你"], // 设为空数组时可关闭提示语
// 退出 AI 模式的提示语
onExitAI: ["傻妞已退出"], // 为空时可关闭提示语
// AI 开始回答时的提示语
onAIAsking: ["让我先想想", "请稍等"], // 为空时可关闭提示语
// AI 结束回答时的提示语
onAIReplied: ["我说完了", "还有其他问题吗"], // 为空时可关闭提示语
// AI 回答异常时的提示语
onAIError: ["啊哦,出错了,请稍后再试吧!"], // 为空时可关闭提示语
/**
* 🧩 MIoT 设备指令
*
* 常见型号的配置参数 👉 https://github.com/idootop/mi-gpt/issues/92
*/
// TTS 指令,请到 https://home.miot-spec.com 查询具体指令
ttsCommand: [5, 1],
// 设备唤醒指令,请到 https://home.miot-spec.com 查询具体指令
wakeUpCommand: [5, 3],
// 查询是否在播放中指令,请到 https://home.miot-spec.com 查询具体指令
// playingCommand: [3, 1, 1], // 默认无需配置此参数,查询播放状态异常时再尝试开启
// TTS 引擎
tts: "xiaoai",
// 切换 TTS 引擎发言人音色关键词,只有配置了第三方 TTS 引擎时才有效
// switchSpeakerKeywords: ["把声音换成"], // 以此关键词开头即可切换音色,比如:把声音换成 xxx
/**
* 💬 连续对话
*
* 查看哪些机型支持连续对话 👉 https://github.com/idootop/mi-gpt/issues/92
*/
// 是否启用连续对话功能,部分小爱音箱型号无法查询到正确的播放状态,需要关闭连续对话
streamResponse: false,
// 连续对话时,无响应多久后自动退出
exitKeepAliveAfter: 30, // 默认 30 秒,建议不要超过 1 分钟
// 连续对话时,下发 TTS 指令多长时间后开始检测设备播放状态(默认 3 秒)
checkTTSStatusAfter: 3, // 当小爱长文本回复被过早中断时,可尝试调大该值
// 连续对话时,播放状态检测间隔(单位毫秒,最低 500 毫秒,默认 1 秒)
checkInterval: 1000, // 调小此值可以降低小爱回复之间的停顿感,请酌情调节
// 是否启用调试
debug: false, // 一般情况下不要打开
// 是否跟踪 Mi Service 相关日志(打开后可以查看设备 did)
enableTrace: false, // 一般情况下不要打开
// 网络请求超时时长(单位毫秒,默认 5 秒)
timeout: 5000,
},
};
开发者已经注释的很详细了,主要有一个 MIoT 设备指令大概需要调整测试,这里有网友们的测试指令集:https://github.com/idootop/mi-gpt/blob/main/docs/compatibility.md。
接入任意 AI 模型
这里介绍了 MiGPT 可以直接接入的 AI 模型:https://migptgui.com/docs/apply/
- ChatGPT
- Groq
- 硅基流动
- 智谱 AI
- 豆包
- 通义千问
- DeepSeek
- 零一万物(万知)
- 百川智能(百小应)
- Moonshot (Kimi)
其中免费的模型只有 Groq,那想要用其他模型怎么办?前面我写了 OneAPI-开源的AI模型接口管理和分发神器,主要就是为了给 MiGPT 用其他的大模型。
有位网友写了 使用 mi-gpt 将你的小爱音箱接入 ChatGPT:https://www.iloli.love/archives/1719073913220,我的方法是基本一样。
Gemini,Groq,Cloudflare,xAI 等模型都可以直接用了,只需在环境变量里面填写模型名称,API key 和链接。
开始呼叫小爱同学,问她吧。
奖励链接: 欢迎使用推荐链接,新用户充值有奖励 https://www.vultr.com/?ref=7342510







