相信看过钢铁侠的朋友们,都梦想拥有一个像贾维斯这样全能的人工智能管家。而现在随着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生态的开放接口与大模型能力,实现与小米音箱的互联。其核心流程和实现方式如下:

  1. 接口调用与消息获取
    MiGPT利用小米的MIoT协议(是小米公司为智能家居设备设计的统一通信协议规范,旨在实现小米生态内设备的互联互通与集中管理。该协议自2018年起扩展应用,覆盖了米家及小米生态链的各类智能设备,提供标准化的数据交互和控制机制。主要包括HTTP API,用于云端控制设备;MQTT协议用于实时消息传递,支持设备状态主动上报与指令下发;本地局域网接口,通过IP协议直接控制设备,减少云端依赖),轮询小爱音箱的对话列表,实时获取用户语音指令转换后的文本信息。这一过程通过小米账号授权实现设备绑定,确保MiGPT能访问音箱的交互数据。

  2. 唤醒词与AI触发机制
    用户需通过预设的关键词(如“召唤”“”)或特定指令(如“请”“你”)触发AI模式。MiGPT通过检测消息开头是否符合配置的callAIKeywordswakeUpKeywords,决定是否调用大模型处理请求。

  3. 静音拦截与小爱响应控制
    为避免小爱同学的原生回复干扰,MiGPT会通过播放静音音频文件强制让小爱进入“闭嘴”状态,确保仅AI生成的回复通过音箱播放。这一“曲线救国”方式解决了网络延迟和轮询间隔导致的响应冲突问题。

  4. 大模型交互与语音合成
    用户指令经筛选后发送至配置的AI模型(如ChatGPT、豆包等),生成文本回复。MiGPT再通过第三方TTS服务(如豆包音色)将文本转为语音,并调用小米音箱的MIoT接口(如ttsCommand指令)播放音频。

​​​​​​​

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐