一步一步实操教你升级小爱音箱的智能-基于MiGPT和豆包大模型


背景

人工智能越来越火,已经可以帮助我们处理很多实际的问题了,解答各种问题自不必说,还能生成PPT,AI绘画等等。可是家里的小爱音箱还是很弱鸡,跟大部分车机一样,只能 回答非常有限的问题。好在已经有很多案例解决了这个问题,今天我们也来尝试一下: 让小爱音箱接入大模型,由智障升级为学霸。

基本原理

小爱音箱拥有一套录放音系统和MioT开放接口,前者拾取语音并输出声音应答,后者实现接入互联网实现问题检索。正面做一些基本原理介绍。

以下来自豆包的解释,基本上帮我们梳理清楚了, 音箱、MiGPT与大模型的关系。

总结一下, 即MIGPT是连接音箱和大模型的桥梁。实际部署时,只要将运行MiGPT的平台(一台PC或服务器, 或者是各种派的嵌入式开发板, 如树莓派,NanoPI, OrangePi等)与小米音箱接入同一个局域网,比如家用路由器,二者之间即可基于MIoT(底层为HTTP或MQTT)进行通信。

MIoT 接口

  • 定义与作用:MIoT 是小米用于其物联网产品的一种通信协议,对应的接口允许第三方应用程序或硬件与小米的 IoT 设备进行交互,以实现对设备的控制、状态查询等功能。

  • 常用接口形式及功能

    HTTP 接口:如在 Home Assistant 的米家集成中,控制设备时通过小米云 HTTP 接口向设备发送控制消息,设备收到下行消息后做出响应1。

    MQTT 接口:在有小米中枢网关的本地控制场景中,米家集成向小米中枢网关内的标准 MQTT Broker 订阅关注的设备消息,当设备属性改变或产生事件时,设备向网关发送上行消息,Broker 向米家集成推送消息;控制设备时,向 MQTT Broker 发布设备控制消息,再经由网关转发给设备。

MiGPT

MiGPT 本身并不能直接拦截音箱的语音输入,而是利用小米 IoT 生态开放的接口来获取音箱的语音输入,具体过程如下:

利用接口获取音箱消息

  • 轮询对话列表:MiGPT 通过 miot 和 mina 开放接口与小爱音箱进行交互,轮询设备对话列表,以获取用户对小爱音箱输入的最新对话消息。
  • 判断唤醒词:当获取到用户的消息后,MiGPT 会根据预设的唤醒词判断是否需要调用大模型进行处理。如果消息以唤醒词开头,MiGPT 会将文本发送给配置好的大模型。

播放静音音频

在唤醒模式下 MiGPT 会通过播放静音音频等方式让小爱闭嘴,从而达到拦截音箱语音输入的目的,以便后续将大模型生成的回复内容传递给小爱音箱进行播放。

通信流程

  • 用户语音输入:用户向小爱音箱发出语音指令,小爱音箱对语音进行识别和解析,将其转换为文本内容。
  • MiGPT 接收与处理:小爱音箱将文本内容传递给 MiGPT,MiGPT 接收到文本后,根据预设的唤醒词判断是否需要调用大模型进行处理。如果消息以唤醒词开头,MiGPT 会将文本发送给配置好的大模型,如 ChatGPT 等23。
  • 大模型回复与传递:大模型对收到的文本进行处理和分析,生成相应的回复文本,并将其返回给 MiGPT。
  • MiGPT 与音箱交互:MiGPT 接收到大模型的回复后,将回复内容传递给小爱音箱,小爱音箱再将回复文本转换为语音信号,播放给用户,从而完成一次完整的通信过程。

大模型

环境准备

明白了原理 后,我们知道武装音箱的重要任务是部署一个可用的MiGPT为让其接入大模型,下面详细介绍。

MiGPT有多种安装部署方式,在windows 11 PC平台上,可使用以两种方式:

  • 基于Node.js运行时环境的源码部署方式。
  • 基于Docker的容器部署方式

音箱信息收集

无论哪种安装部署方式,均需要收集音箱的信息,如:

  • 型号: 小米音箱mini

  • 小米账号(小米UID):小爱音箱app上查看, “我”,点击头像。

在这里插入图片描述

  • 登陆密码:

  • 音箱的名称(我的房间): app上绑定的音箱名,首页顶部查看

在这里插入图片描述

大模型申请

MiGPT可以接入很多种 AI 服务,这些服务都提供了足够个人使用的免费额度,每次与大模型交互将消耗一定数量的token(即额度 )。本文以doubao为例。

豆包大模型申请

接入 AI | MiGPT GUI

申请 方法: https://migptgui.com/docs/apply/doubao

模型选择: Doubao-pro-32k, 4k, doubo -lite-4k, 32k

开通管理, 成功后

image-20241231162029535

创建API-Key:

image-20241231162657665

进入模型推理,点击【创建推理接入点】,生成key后备用,另记录ID 。

#key
export ARK_API_KEY="axxxxxxxxx5"
#ID: 
ep-xxxxxxxxxxxxxxxxx

在这里插入图片描述

MIGPT中关于大模型的配置

相应的修改.env配置文件 ,见后文介绍。

按照接入 AI | MiGPT GUI,创建豆包账号,

  • 接口地址(OPENAI_BASE_URL)填写 https://ark.cn-beijing.volces.com/api/v3
  • 密钥(OPENAI_API_KEY)填写你第三步创建的 API Key
  • 模型(OPENAI_MODEL)填写你第四步创建的接入点 ID

源码方式安装MiGPT

Node.js

下载安装 Node.js, https://nodejs.org/dist/v22.12.0/node-v22.12.0-x64.msi

Node.js® 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本。
在这里插入图片描述

新键一个bat文件,添加以下内容,右键“以管理员身份运行”配置win11 安全性和便利性特性。

#从互联网下载的脚本必须经过数字签名才能运行。这在安全性和便利性之间取得了较好的平衡。
Set-ExecutionPolicy RemoteSigned

在这里插入图片描述

安装pnpm

C:\Windows\System32>npm install --global pnpm
npm error code CERT_HAS_EXPIRED
npm error errno CERT_HAS_EXPIRED
npm error request to https://registry.npm.taobao.org/pnpm failed, reason: certificate has expired


#如果安装特别慢或报上面的错误,可以更换源,建议tencent源

npm config set registry https://registry.npm.taobao.org				#taobao源
npm config set registry https://mirrors.cloud.tencent.com/npm/		#tencent源
npm config set registry https://registry.npmjs.org			#官方源

#配置好源后再次安装
D:\code\GPT\mi-gpt-main>pnpm -v
9.15.2

配置pnpm

#配置源
pnpm config set registry https://mirrors.cloud.tencent.com/npm/


#update
pnpm udpate

源码准备

  1. 下载代码 : https://github.com/idootop/mi-gpt/archive/refs/heads/main.zip

配置修改

  1. 解压代码修改配置文件

    将以下两个文件分别改名为:修改为.env和.migpt.js

    .env.example

    .migpt.example.js

  2. 修改.env文件, 配置大模型信息

    # OpenAI(也支持通义千问、MoonShot、DeepSeek 等模型)
    OPENAI_MODEL=ep-xxxxxxxxx-gh4jr
    OPENAI_API_KEY="xxxxx"
    
    # 你的大模型服务接口,比如:https://api.openai.com/v1(注意:一般以 /v1 结尾)
    OPENAI_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
    
    
  3. 修改.migpt.js配置音箱信息,以小爱音箱mini为例

    // 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], // 默认无需配置此参数,查询播放状态异常时再尝试开启

    /**
     * 💬 连续对话
     *
     * 查看哪些机型支持连续对话 👉 https://github.com/idootop/mi-gpt/issues/92
     */

    // 是否启用连续对话功能,部分小爱音箱型号无法查询到正确的播放状态,需要关闭连续对话
    streamResponse: true,
    

安装依赖

进入 MiGPT源码目录

#更新源
D:\code\GPT\mi-gpt-main>pnpm update
Packages: +155
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ERR_PNPM_FETCH_404  GET https://mirrors.cloud.tencent.com/npm/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz: Not Found - 404

This error happened while installing the dependencies of tsup@8.3.5
 at sucrase@3.35.0

No authorization header was set for the request.
Progress: resolved 221, reused 7, downloaded 146, added 116

# 安装依赖
D:\code\GPT\mi-gpt-main>pnpm install
Lockfile is up to date, resolution step is skipped
Packages: +203
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Downloading typescript@5.4.5: 5.83 MB/5.83 MB, done
Progress: resolved 203, reused 101, downloaded 102, added 107, done
node_modules/.pnpm/@prisma+engines@5.14.0/node_modules/@prisma/engines: Running postinstall script, done in 7.9s
node_modules/.pnpm/esbuild@0.19.12/node_modules/esbuild: Running postinstall script, done in 989ms
node_modules/.pnpm/esbuild@0.20.2/node_modules/esbuild: Running postinstall script, done in 976ms
node_modules/.pnpm/prisma@5.14.0/node_modules/prisma: Running preinstall script, done in 106ms
node_modules/.pnpm/@prisma+client@5.14.0_prisma@5.14.0/node_modules/@prisma/client: Running postinstall script, done in 13.3s

dependencies:
+ @prisma/client 5.14.0
+ fs-extra 11.2.0
+ mi-service-lite 3.1.0
+ openai 4.56.0
+ prisma 5.14.0
+ proxy-agent 6.4.0

devDependencies:
+ @types/fs-extra 11.0.4
+ @types/node 20.12.12
+ tsup 8.0.2
+ tsx 4.11.0
+ typescript 5.4.5

> mi-gpt@4.2.0 postinstall D:\code\GPT\mi-gpt-main
> npx -y prisma migrate dev --name hello

Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
Datasource "db": SQLite database "app.db" at "file:app.db"

SQLite database app.db created at file:app.db

Applying migration `20240227161545_init`

The following migration(s) have been applied:

migrations/
  └─ 20240227161545_init/
    └─ migration.sql

Your database is now in sync with your schema.

✔ Generated Prisma Client (v5.14.0) to .\node_modules\.pnpm\@prisma+client@5.14.0_prisma@5.14.0\node_modules\@prisma\client in 127ms



Done in 2m 13.8s


构建MiGPT

这时不能在cmd中运行了,建议安装一个git bash.https://github.com/git-for-windows/git/releases/download/v2.47.1.windows.1/Git-2.47.1-64-bit.exe.下载安装后,在MiGPT源码目录下,右键选“Git bash here".

在这里插入图片描述

#在git bash中执行
pnpm build
$ pnpm build

> mi-gpt@4.2.0 build D:\code\GPT\mi-gpt-main
> npx -y prisma generate && rm -rf dist && tsup

Environment variables loaded from .env
....
....
...
DTS dist\index.d.ts  14.01 KB
DTS dist\index.d.cts 14.01 KB

seane@matebook-xpro-2022 MINGW64 /d/code/GPT/mi-gpt-main

运行并测试一下

可自定义唤醒词。

#.migpt.js配置文件中的默认唤醒词如下: 
小爱同学,请 xxx。比如 小爱同学,请问地球为什么是圆的?
小爱同学,你 xxx。比如 小爱同学,你喜欢我吗?
小爱同学,召唤 xxx。比如 小爱同学,召唤傻妞


#可根据需求修改
  /**
     * 💡 唤醒词与提示语
     */

    // 当消息以下面的关键词开头时,会调用 AI 来回复消息
    callAIKeywords: ["请", "你", "傻妞"],
    // 当消息以下面的关键词开头时,会进入 AI 唤醒状态
    wakeUpKeywords: ["打开", "进入", "召唤"],
    // 当消息以下面的关键词开头时,会退出 AI 唤醒状态
    exitKeywords: ["关闭", "退出", "再见"],
    // 进入 AI 模式的欢迎语
    onEnterAI: ["你好,我是傻妞,很高兴认识你"], // 设为空数组时可关闭提示语
    // 退出 AI 模式的提示语
    onExitAI: ["傻妞已退出"], // 为空时可关闭提示语
    // AI 开始回答时的提示语
    onAIAsking: ["让我先想想", "请稍等"], // 为空时可关闭提示语
    // AI 结束回答时的提示语
    onAIReplied: ["我说完了", "还有其他问题吗"], // 为空时可关闭提示语
    // AI 回答异常时的提示语
    onAIError: ["啊哦,出错了,请稍后再试吧!"], // 为空时可关闭提示语

运行并测试一下:

$ pnpm run dev

> mi-gpt@4.2.0 dev D:\code\GPT\mi-gpt-main
> node --env-file=.env ./app.js



/ $$      /$$ /$$   /$$$$$$  /$$$$$$$ /$$$$$$$$$
| $$$    /$$$|__/ /$$__  $$| $$__  $$|__  $$__/
| $$$$  /$$$$ /$$| $$  \__/| $$  \ $$   | $$
| $$ $$/$$ $$| $$| $$ /$$$$| $$$$$$$/   | $$
| $$  $$$| $$| $$| $$|_  $$| $$____/    | $$
| $$\  $ | $$| $$| $$  \ $$| $$         | $$
| $$ \/  | $$| $$|  $$$$$$/| $$         | $$
|__/     |__/|__/ \______/ |__/         |__/
                                                                                                          
         MiGPT v4.2.0  by: del.wang


(node:18828) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
2025/01/01 13:49:50 Speaker ✅ 服务已启动...
2025/01/01 13:51:46 Speaker 🔥 请问周深是谁
2025/01/01 13:51:47 Speaker 🔊 让我先想想
2025/01/01 13:51:54 Open AI ✅ Answer: 哎呀,周深呀,他是一个很厉害的歌手呢!他的声音特别特别好听,唱歌的风格好多变呀,有时候空灵得像从仙境传来的声音,有时候又能把歌曲里的情感唱得让人感同身受。他唱过好多好听的歌,像《大鱼》《达拉崩吧》这些都超有名的~

唤醒注意事项

  1. 唤醒小爱同学

正常对小爱音箱说“小爱同学”,唤醒其进入听写状态。唤醒小爱同学后,可以对她说语音指令,比如“问地球为什么是圆的”
此时,只有以callAIKeywords开头的消息,才会调用 AI 进行回复。此阶段无法做到连续对话,每次提问都要以“小爱同学, xxx”开头。

  1. 进入唤醒模式

小爱默认不会调用 AI 进行回复。唤醒模式(AI 模式)类似小爱技能,进入后可以连续对话, 使用wakeUpKeywords即可进入唤醒模式,比如“小爱同学,召唤傻妞”, 进入唤醒模式后,每次提问请等待小爱回答“我说完了”之后,再继续向她提问。此时,可直接向小爱提问题,无需再以“小爱同学,xxx”开头。

docker方式MiGPT安装(暂时不推荐,下载image失败)

docker安装

首先安装docker: https://www.docker.com/products/docker-desktop

安装后,重启电脑,打开 命令行验证docker是否正常安装 。

C:\Windows\System32>docker -v
Docker version 27.3.1, build ce12230

C:\Windows\System32>

开始菜单,打开 Docker Desktop,提示: wsl update error, 解决方法:

打开 cmd,安装或更新wsl

#首次安装
wsl --install --web-download

#更新
wsl --update

安装后重启电脑,否则出现以下错误。

在这里插入图片描述### MiGPT容器镜像下载

工具介绍 | MiGPT GUI

下载容器并运行

 D:\code\GPT\mi-gpt-main 的目录

2025/01/01  11:17    <DIR>          .
2025/01/01  11:16    <DIR>          ..
2024/12/31  18:08               194 .dockerignore
2024/12/31  18:08             1,103 .env
2024/12/31  18:08                73 .gitignore
2024/12/31  18:08             6,191 .migpt.js
2024/12/31  18:08    <DIR>          .vscode
2024/12/31  18:08               175 app.js
2024/12/31  18:08    <DIR>          assets
2024/12/31  18:08             1,024 Dockerfile
2024/12/31  18:08    <DIR>          docs
2024/12/31  18:08             1,065 LICENSE
2024/12/31  18:08             1,695 package.json
2024/12/31  18:08            70,778 pnpm-lock.yaml
2024/12/31  18:08    <DIR>          prisma
2024/12/31  18:08            12,727 README.md
2024/12/31  18:08    <DIR>          src
2024/12/31  18:08    <DIR>          tests
2024/12/31  18:08               307 tsconfig.json
2024/12/31  18:08               319 tsup.config.ts
              12 个文件         95,651 字节
               8 个目录 85,656,322,048 可用字节

D:\code\GPT\mi-gpt-main>docker run -d --env-file ./.env -v ./.migpt.js:/app/.migpt.js idootop/mi-gpt:latest
Unable to find image 'idootop/mi-gpt:latest' locally
docker: Error response from daemon: failed to resolve reference "docker.io/idootop/mi-gpt:latest": failed to do request: Head "https://hub-mirror.c.163.com/v2/idootop/mi-gpt/manifests/latest?ns=docker.io": writing response to hub-mirror.c.163.com:443: connecting to 127.0.0.1:48877: dial tcp 127.0.0.1:48877: connectex: No connection could be made because the target machine actively refused it.
See 'docker run --help'.

参考资料

MiGPT: 将小爱音箱打造成你的专属智能家居助手 - 懂AI

接入豆包:

接入 AI | MiGPT GUI

支持的音箱型号

mi-gpt/docs/compatibility.md at main · idootop/mi-gpt · GitHub, 给给了每个型号音箱的控制命令: 修改.migpt.js配置文件 会用到。

基于docker部署MiGPT: Mi-gpt NPM | npm.io

工作原理:

  • 使用 MIoT 和 MiNA 开放接口控制小爱音箱(播放、暂停、唤醒等)

  • 轮询设备对话列表,获取用户的最新对话消息,然后调用 AI 获取回复

  • 调用豆包等 TTS 接口合成不同音色的语音回复,然后使用小爱音箱播放音频

    mi-gpt/docs/how-it-works.md at main · idootop/mi-gpt · GitHub

有价值的参考文档,相当详细:

参考一: 手把手教你免费把AI大模型接入小米音箱,无需任何代码基础,小白级基础详细操作教程!_小爱音箱怎么接入ai大模型-优快云博客

  • nodeJS + MiGPT
  • 大模型silicon API

参考二: 【保姆级教程】小爱同学+AI!魔改小爱音箱,接入本地AI大模型,打造你的专属语音助手!-我不是咕咕鸽

  • Docker 方式部署MiGPT(主机为macOS)
  • 基于小爱音箱 Pro
  • 大模型 : Ollama + Phi-3

其他标题党: 没有可操作性:

MiGPT:将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手! - 站长工具网

将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手_豆包音箱-优快云博客

tps://blog.youkuaiyun.com/h1453586413/article/details/143706970)

  • nodeJS + MiGPT
  • 大模型silicon API

参考二: 【保姆级教程】小爱同学+AI!魔改小爱音箱,接入本地AI大模型,打造你的专属语音助手!-我不是咕咕鸽

  • Docker 方式部署MiGPT(主机为macOS)
  • 基于小爱音箱 Pro
  • 大模型 : Ollama + Phi-3

其他标题党: 没有可操作性:

MiGPT:将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手! - 站长工具网

将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手_豆包音箱-优快云博客

The End.

### 关于 migpt-server 的技术文档、配置与使用migpt-server 构建在 MiService 架构之上,继承并扩展了 XiaoMi Cloud Service 中的基础服务框架特性[^1]。为了满足更广泛的应用场景技术需求,migpt-server 提供了一套完整的开发工具链服务接口。 #### 技术文档概览 官方技术文档涵盖了从安装部署到高级功能使用的全面指导。对于初次使用者而言,建议先阅读快速入门指南,了解基本概念术语定义。随后可根据具体应用场景深入研究各模块的功能描述及其相互关系。 #### 安装与环境准备 确保服务器操作系统为支持版本,并完成必要的依赖项安装: ```bash sudo apt-get update && sudo apt-get install -y \ build-essential \ libssl-dev \ zlib1g-dev \ libbz2-dev \ libreadline-dev \ libsqlite3-dev \ wget \ curl \ llvm \ python-is-python3 \ python3-pip ``` 接着下载最新版的 migpt-server 发行包并解压至指定目录下: ```bash wget https://example.com/path/to/migpt-server-latest.tar.gz tar zxvf migpt-server-latest.tar.gz cd migpt-server/ ``` #### 基本配置说明 编辑 `config.yaml` 文件来调整运行参数,主要选项包括但不限于监听端口、日志级别等设置。针对生产环境推荐采用外部数据库存储会话数据,提高性能的同时也便于维护管理。 ```yaml server: port: 8080 logging: level: info database: type: mysql host: localhost user: root password: your_password_here session_store: driver: redis url: tcp://localhost:6379?db=0 ``` #### 启动与停止服务 启动服务前需确认所有前置条件均已满足,之后执行如下命令即可正常启动应用实例: ```bash ./bin/start.sh ``` 当需要重启或终止进程时,则分别调用对应的脚本来操作: ```bash ./bin/restart.sh ./bin/stop.sh ``` #### 进阶主题探索 随着对系统的熟悉程度加深,可以逐步尝试更多复杂特性的实践,比如自定义插件开发、API 接入方式优化等方面的工作。同时积极关注社区动态技术博客更新,获取一手资讯支持资源。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月光技术杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值