huluohu | 胡萝虎 : 🤖️ 这么吊?小爱音箱可以接入AI大模型啦!

本文转自: https://www.huluohu.com/posts/1047/
仅做个人收藏,版权归原作者所有

MiGPT

这是一个神器的项目,可以让傻傻的小爱音箱接入AI大模型,比如 ChatGPT、豆包等等,将它改造成你的专属语音助手。这个项目名称为MiGPT,是Github上的一个开源项目,目前已支持10多款小爱音箱,非常推荐手里有小爱音箱的朋友试一试。

🎭 功能特性

  1. AI 问答:当小爱音箱接入大模型后,上知天文,下知地理,从“人工智障”秒变甜心学霸。
  2. 角色扮演:一秒调教小爱,无论是成为你的完美伴侣,还是那个能听你倾诉心事的贴心闺蜜,都不在话下。
  3. 流式响应:爱情来得太快就像龙卷风,而你的小爱音箱也是,对你的爱意秒回,爱你不会让你等太久。
  4. 长短期记忆:可以记住你们之间的每一次对话,越聊越默契,就像是你身边的老朋友。
  5. 自定义 TTS:厌倦了小爱同学的语音?支持设置“豆包”同款音色,就像真人在回你的消息。
  6. 智能家居 Agent:心情不好?小爱立刻懂你,自动帮你播放喜欢的音乐,调节灯光,逗你开心。

MiGPT

⚛️ 实现原理

这个项目主要依赖小米 IoT 生态开放的接口能力,以下为核心运行流程:

  • 使用 MIoT 和 MiNA 开放接口控制小爱音箱(播放、暂停、唤醒等)
  • 轮询设备对话列表,获取用户的最新对话消息,然后调用 AI 获取回复
  • 调用豆包等 TTS 接口合成不同音色的语音回复,然后使用小爱音箱播放音频

不过,通过调用小米 IoT 生态开放接口的方案,无法完美实现在AI回复时让原来的小爱闭嘴,这主要是因为:

  • 存在网络延迟
  • 有一定的轮询间隔
  • 小爱音箱,小米服务云端,MiGPT 三者之间的响应延迟

因此,在唤醒模式下 MiGPT 会通过播放静音音频等方式让小爱闭嘴,达到“曲线救国”的目的,比如:

export const kAreYouOK = "¿ʞо ∩оʎ ǝɹɐ"; // are you ok? 

🔊 支持的小爱音箱型号

MiGPT

MiGPT

🛠️ 部署项目

项目支持Docker和源码两种方式部署,笔者建议使用Docker,毕竟源码部署还需要搞定各种本地环境,属实麻烦。使用Docker部署前,需要先配置好.env.migpt.js 两个文件。

1. 配置.env文件

这个文件主要是配置大模型的API_KEY、模型名称和URL,请根据自己的实际情况修改。笔者直接使用one-api代理的gemini模型:

# OpenAI(也支持通义千问、MoonShot、DeepSeek、gemini等模型) 
OPENAI_MODEL=gemini-pro 
OPENAI_API_KEY=sk-xxx 
OPENAI_BASE_URL=https://oneapi.url.com/v1 
 
 
# 提示音效(可选,一般不用填,你也可以换上自己的提示音链接试试看效果) 
# AUDIO_SILENT=静音音频链接,示例:https://example.com/slient.wav 
# AUDIO_BEEP=默认提示音链接,同上 
# AUDIO_ACTIVE=唤醒提示音链接,同上 
# AUDIO_ERROR=出错了提示音链接,同上 
 
# Doubao TTS(可选,用于调用第三方 TTS 服务,比如:豆包) 
# TTS_DOUBAO=豆包 TTS 接口 
# SPEAKERS_DOUBAO=豆包 TTS 音色列表接口 

2. 配置.migpt.js文件

这个文件主要是配置小米账号、AI的人设以及唤醒词、提示词等等,请根据自己的事情情况和喜好修改。

// 小爱音箱扮演角色的简介 
const botProfile = ` 
性别:男 
性格:乖巧可爱 
爱好:喜欢搞怪,爱吃醋。 
`; 
 
// 小爱音箱主人(你)的简介 
const masterProfile = ` 
性别:男 
性格:善良正直 
其他:总是舍己为人,是臭狗子的主人。 
`; 
 
export default { 
  bot: { 
    name: "臭狗子", 
    profile: botProfile, 
  }, 
  master: { 
    name: "大王", 
    profile: masterProfile, 
  }, 
  speaker: { 
    // 小米 ID 
    userId: "12313242", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看 
    // 你的小米账号密码 
    password: "1323242", 
    // 小爱音箱 DID 或在米家中设置的名称 
    did: "小爱触屏音箱", 
    // 当消息以下面的关键词开头时,会调用 AI 来回复消息 
    callAIKeywords: ["请", "你", "臭狗子"], 
    // 当消息以下面的关键词开头时,会进入 AI 唤醒状态 
    wakeUpKeywords: ["打开", "进入", "召唤"], 
    // 当消息以下面的关键词开头时,会退出 AI 唤醒状态 
    exitKeywords: ["关闭", "退出", "再见"], 
    // 进入 AI 模式的欢迎语 
    onEnterAI: ["你好,我是臭狗子,很高兴认识你"], 
    // 退出 AI 模式的提示语 
    onExitAI: ["臭狗子已退出"], 
    // AI 开始回答时的提示语 
    onAIAsking: ["让我先想想", "请稍等"], 
    // AI 结束回答时的提示语 
    onAIReplied: ["我说完了", "还有其他问题吗"], 
    // AI 回答异常时的提示语 
    onAIError: ["啊哦,出错了,请稍后再试吧!"], 
    // 无响应一段时间后,多久自动退出唤醒模式(默认 30 秒) 
    exitKeepAliveAfter: 30, 
    // TTS 指令,请到 https://home.miot-spec.com 查询具体指令 
    ttsCommand: [5, 1], 
    // 设备唤醒指令,请到 https://home.miot-spec.com 查询具体指令 
    wakeUpCommand: [5, 3], 
    // 是否启用流式响应,部分小爱音箱型号不支持查询播放状态,此时需要关闭流式响应 
    streamResponse: true, 
    // 查询是否在播放中指令,请到 https://home.miot-spec.com 查询具体指令 
    // playingCommand: [3, 1, 1], // 默认无需配置此参数,播放出现问题时再尝试开启 
  }, 
}; 

3. 启动Docker容器

上述两个文件配置好以后,将他们上传到你的NAS上,比如上传到目录/share/Container/migpt/config目录中。

然后在NAS中创建compose.yml文件,将下面的内容粘贴到文件中:

version: '3.9' 
services: 
   migpt: 
     image: idootop/mi-gpt:latest 
     container_name: migpt 
     network_mode: bridge 
     restart: unless-stopped 
     env_file: /share/Container/migpt/config/.env 
     volumes: 
        - /share/Container/migpt/config/.migpt.js:/app/.migpt.js 
     logging: 
        options: 
            max-size: "10m" 
            max-file: "5" 

最后,启动Docker:

docker compose up -d 

下面是启动后运行的效果:

MiGPT

原创不易,如果觉得此文对你有帮助,不妨点赞+收藏+关注,你的鼓励是我持续创作的动力!

高等精灵实验室

1047.png