
小爱音箱接入大模型DeepSeek及更改音色为海绵宝宝(MiGPT应用)
相信看过钢铁侠的朋友们,都梦想拥有一个像贾维斯这样全能的人工智能管家。而现在随着AI的发展,这个愿景将随我们越来越近。现阶段,我们可以将小爱音箱接入DeepSeek,将其从“人工智障”进化成上知天文,下懂地理的半智能管家。
下面将逐步讲解如何将小爱音箱接入DeepSeek并更换默认的音色为海绵宝宝。
一、Windows安装Docker Desktop
Docker是一个开源的容器化平台,旨在简化应用程序的开发、部署和运行过程。它通过将应用程序及其所有依赖项打包成一个轻量级的、可移植的容器来实现这一目标。这些容器可以在任何支持Docker的系统上运行,确保应用程序在不同环境中以一致的方式运行。
因为Docker是基于Hyper-V虚拟化技术来运行的,因此我们在Windows上面安装Docker Desktop之前,需要先开启Hyper-V。
步骤:Windows设置 -> 应用 -> 程序和功能(右上角)-> 启用或关闭Windows功能 -> 找到Hyper-V并打勾,点击确认后将开始安装Hyper-V(注意:安装完成后需要重启电脑,请保存相关文档!!!)
按照上述教程安装好Hyper-V后,访问Docker 官网Docker: Accelerated Container Application Development,下载安装包。安装包下载完毕后,就按默认方式就行安装就行。
打开Docker Desktop,右上角设置,Docker Engine里面配置镜像如下:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.unsee.tech",
"https://docker.1panel.live",
"https://dockerpull.org",
"https://docker.1ms.run",
"https://lispy.org",
"https://dytt.online",
"https://func.ink",
"http://mirrors.ustc.edu.cn",
"http://mirror.azure.cn",
"https://docker.zhai.cm",
"https://a.ussh.net",
"https://docker.zhai.cm"
]
}
右下角Terminal打开,输入docker info,可查看配置信息。输出没问题的话,至此docker就安装好了。
二、火山引擎注册 - 在线推理
登录 账号登录-火山引擎,搜索“火山方舟”
点击“在线推理” -> “创建推理接入点”
如下图,自己填写基本信息,模型选择这里有字节跳动的豆包,还有deepseek等等。我们选择Deepseek-R1,然后点击“确认接入”
开通模型并创建接入点后,查看API调用方法,需要保存如下三个信息:ID/model(即ep-xxxxx),API key,调用路径(https://ark.cn-beijing.volces.com/api/v3)
三、下载mi-gpt并配置
GitHub地址: mi-gpt,可通过git clone或者直接download zip的方式下载(如果无法访问的话,可以访问国内镜像 ffgithub-migpt)
git clone https://github.com/idootop/mi-gpt.git
项目下载好后,找到两个example文件".env"以及".migpt.js",后续将配置这两个文件。
.env配置说明:
- OPENAI_MODEL:填上面保存的model ID,即ep-xxxxx那串
- OPENAI_API_KEY: 填上面保存的API key的值
- OPENAI_BASE_URL:填调用路径(https://ark.cn-beijing.volces.com/api/v3)
.migpt.js配置说明
具体的配置说明见下方样例,里面有注释。
// 注意:如果你是使用 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: "123456789", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看
// 账号密码
password: "pwd123",
// 小爱音箱 DID 或在米家中设置的名称
did: "小米AI音箱", // 注意空格、大小写和错别字(音响 👉 音箱)
/**
* 💡 唤醒词与提示语
*/
// 当消息以下面的关键词开头时,会调用 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: "xiaoai",
// 切换 TTS 引擎发言人音色关键词,只有配置了第三方 TTS 引擎时才有效
// switchSpeakerKeywords: ["把声音换成"], // 以此关键词开头即可切换音色,比如:把声音换成 xxx
/**
* 💬 连续对话
*
* 查看哪些机型支持连续对话 👉 https://github.com/idootop/mi-gpt/issues/92
*/
// 是否启用连续对话功能,部分小爱音箱型号无法查询到正确的播放状态,需要关闭连续对话
streamResponse: true,
// 连续对话时,无响应多久后自动退出
exitKeepAliveAfter: 30, // 默认 30 秒,建议不要超过 1 分钟
// 连续对话时,下发 TTS 指令多长时间后开始检测设备播放状态(默认 3 秒)
checkTTSStatusAfter: 5, // 当小爱长文本回复被过早中断时,可尝试调大该值
// 连续对话时,播放状态检测间隔(单位毫秒,最低 500 毫秒,默认 1 秒)
checkInterval: 1000, // 调小此值可以降低小爱回复之间的停顿感,请酌情调节
/**
* 🔌 其他选项
*/
// 是否启用调试
debug: false, // 一般情况下不要打开
// 是否跟踪 Mi Service 相关日志(打开后可以查看设备 did)
enableTrace: false, // 一般情况下不要打开
// 网络请求超时时长(单位毫秒,默认 5 秒)
timeout: 5000,
},
};
四、部署migpt至docker
".env"以及".migpt.js"配置好后,我们就可以在docker中部署migpt了(注意:小爱音箱需要跟电脑处于同一网络下面)
打开Terminal,运行以下指令,注意路径需要更换成你自己的
docker run -d --env-file F:/projects/mi-gpt-main/.env -v F:/projects/mi-gpt-main/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest
然后我们在images及containers可以看到有对应的实例生产出来了。
五、测试
1. streamResponse连续对话功能关闭的情况
音频就不发了,log如下
2. streamResponse连续对话功能打开的情况
修改streamResponse为true,并重新部署
六、TTS(Text To Speech)
详细可参考:https://github.com/idootop/mi-gpt-tts/blob/main/docs/mi-gpt.md
1. 火山引擎搜索“语音合成”,选择“语音技术”,创建应用,可参考如下(要勾选语音合成)
创建好后,在“语音技术” -> “语音合成” 里面找到并保存自己的APP ID以及Access Token
2. 下载mi-gpt-tts
GitHub地址:mi-gpt-tts, 可通过git clone或者直接download zip的方式下载(如果无法访问的话,可以访问国内镜像 ffgithub-mi-gpt-tts)
git clone https://github.com/idootop/mi-gpt-tts.git
3. 配置mi-gpt-tts的env文件
重命名本项目根目录下的 .env.example 文件为 .env。
然后,将里面的环境变量修改成你自己的,参数含义如下:
环境变量名称 | 描述 | 示例 |
---|---|---|
VOLCANO_TTS_APP_ID |
火山引擎语音合成 APP ID | 123456 |
VOLCANO_TTS_ACCESS_TOKEN |
火山引擎语音合成 Access Token | xxxxxx |
TTS_DEFAULT_SPEAKER |
(可选)默认音色名称或 ID(查看完整音色列表和费用详情) | BV700_streaming |
SECRET_PATH |
(可选)接口访问秘密路径,相当于访问密码。推荐长度大于 6,由字母、数字、- 和 _ 组成,为空时每次启动随机生成。 | Are-You-OK (不要直接用这个!) |
注意:出于安全考虑,从 v3.0.0 版本开始,访问语音合成接口需要带上
SECRET_PATH
防止他人盗刷接口。 如果SECRET_PATH
环境变量为空,每次启动服务则会生成随机访问密码。
样例参考:
# 基础配置
# SECRET_PATH=你的接口访问秘密路径,比如:are-you-ok(可选)
# 音色列表可查看: https://www.volcengine.com/docs/6561/97465
# BV063_streaming 是海绵宝宝的音色
TTS_DEFAULT_SPEAKER=BV063_streaming
# 火山引擎,官方文档:https://www.volcengine.com/docs/6561/79817
VOLCANO_TTS_APP_ID=123456789
VOLCANO_TTS_ACCESS_TOKEN=xxxxxxxxxxx
#VOLCANO_TTS_USER_ID=火山引擎账号 ID(可选)
# 微软必应 Read Aloud,官方文档:https://www.microsoft.com/zh-cn/edge/features/read-aloud
# EDGE_TTS_TRUSTED_TOKEN=你的必应 trust token,比如:6A5A-xxxx
# OpenAI TTS,官方文档:https://platform.openai.com/docs/guides/text-to-speech
# OPENAI_API_KEY=你的 OpenAI API Key,比如:sk-proj-xxxx
# OPENAI_TTS_MODEL=tts-1
# OPENAI_BASE_URL=https://api.openai.com/v1
4. 部署mi-gpt-tts
docker run -d --env-file F:/projects/mi-gpt-tts-main/.env -p 4322:3000 idootop/mi-gpt-tts:latest
注意:需要将路径替换成自己的
5. 测试mi-gpt-tts
在测试之前,需要先打开cmd,输入ipconfig查询下本机的ip地址。
然后,在部署完成后,点进container可以看到有一个接口地址
把这个链接调整下:http://{本机的ip}:4322/d983911d/api/tts.mp3
在浏览器直接访问这个链接,会出现一段音频(你好,很高兴认识你),说明部署成功了。
6. 修改mi-gpt默认的TTS引擎
更改.migpt.js中tts的参数为custom
修改.env中TTS_BASE_URL为上述的链接
7. 重新部署mi-gpt
docker run -d --env-file F:/projects/mi-gpt-main/.env -v F:/projects/mi-gpt-main/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest
8. 测试
migpt log
migpt-tts log
七、MiGPT的实现简介
MiGPT通过整合小米MIoT生态的开放接口与大模型能力,实现与小米音箱的互联。其核心流程和实现方式如下:
-
接口调用与消息获取
MiGPT利用小米的MIoT协议(是小米公司为智能家居设备设计的统一通信协议规范,旨在实现小米生态内设备的互联互通与集中管理。该协议自2018年起扩展应用,覆盖了米家及小米生态链的各类智能设备,提供标准化的数据交互和控制机制。主要包括HTTP API,用于云端控制设备;MQTT协议用于实时消息传递,支持设备状态主动上报与指令下发;本地局域网接口,通过IP协议直接控制设备,减少云端依赖),轮询小爱音箱的对话列表,实时获取用户语音指令转换后的文本信息。这一过程通过小米账号授权实现设备绑定,确保MiGPT能访问音箱的交互数据。 -
唤醒词与AI触发机制
用户需通过预设的关键词(如“召唤”“”)或特定指令(如“请”“你”)触发AI模式。MiGPT通过检测消息开头是否符合配置的callAIKeywords
或wakeUpKeywords
,决定是否调用大模型处理请求。 -
静音拦截与小爱响应控制
为避免小爱同学的原生回复干扰,MiGPT会通过播放静音音频文件强制让小爱进入“闭嘴”状态,确保仅AI生成的回复通过音箱播放。这一“曲线救国”方式解决了网络延迟和轮询间隔导致的响应冲突问题。 -
大模型交互与语音合成
用户指令经筛选后发送至配置的AI模型(如ChatGPT、豆包等),生成文本回复。MiGPT再通过第三方TTS服务(如豆包音色)将文本转为语音,并调用小米音箱的MIoT接口(如ttsCommand
指令)播放音频。
更多推荐
所有评论(0)