IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    诺多发表于 2024-06-18 16:12:26
    love 0

    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

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

    高等精灵实验室



沪ICP备19023445号-2号
友情链接