🤖️ 这么吊?小爱音箱可以接入AI大模型啦!

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
🤖️ 这么吊?小爱音箱可以接入AI大模型啦!

🛠️ 部署项目

项目支持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

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

高等精灵实验室

原创文章,作者:诺多,如若转载,请注明出处:https://www.huluohu.com/posts/1047/

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
🔥Cobalt:百万人都在使用的神器,一款几乎支持所有流媒体下载器,赶快收藏!
上一篇 2024年6月13日 13:17
🐟 飞鱼: 一个漂亮得不像实力派的跨端视频播放器,支持导入视频源
下一篇 2024年6月19日 00:44

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(5条)

  • 刘郎
    刘郎 2024年6月19日 07:11

    虽然小米的产品越来越优秀,也越来越好了,但我不太喜欢小米家的东西😂

    • 诺多
      诺多 2024年6月22日 19:00

      @刘郎实用最重要,没必要纠结品牌,我觉得品牌无价值,有用才有价值。
      当然,我也觉得小米的质量一般般,但胜在生态链丰富。

    • 刘郎
      刘郎 2024年6月22日 19:03

      @诺多的确 实用就行 不必纠结品牌

  • 湘铭呀!
    湘铭呀! 2024年6月19日 09:45

    有没有视频教程

  • w4j1e
    w4j1e 2024年6月21日 12:30

    原以为是小爱本身可以接入了,没想到还需要折腾一番。先 mark 以下,后面有时间了来折腾折腾