AI摘要:本文记录了作者配置mi-gpt,将小米音箱变为语音助手的过程。作者首先购买了小米音箱和无线WiFi,然后配置服务器和docker,过程中遇到了小米账号异地登录验证和设备名称错误的问题,并给出了相应的解决方案。之后,作者配置了TTS,使用了火山引擎的语音合成服务,并详细描述了配置流程,最后成功启动了mi-gpt。作者还吐槽了小爱音箱的打断问题,并展望了未来语音助手的发展。

Powered by 返回门户.

migpt-上手体验和流程配置

第一件事情:买一个小米音响

多次在闲鱼没找到满意的价格,一二个都是传家宝,于是决定手动买全新的去了,pdd140拿下小米ai音响第二代

配置完个人信息和账号之后才能使用,对了需要连接wifi才能使用,nm在学校怎么使用wifi呢?校园网需要认证所以不太可能,所以不得不继续新买一个无线wifi了,找了半天在闲鱼看见有无限流量的,我感觉有猫腻,不管了!先冲为敬!

买回来了感觉速度还行吧

e832fc1e711ee2336c60b40f1363df4

希望用这不出什么猫腻

开启服务器,配置docker

  1. 引入.env和.mi.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: "987654321", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看
        // 账号密码
        password: "123456",
        // 小爱音箱 DID 或在米家中设置的名称
        did: "小爱音箱Pro", // 注意空格、大小写和错别字(音响 👉 音箱)
    
        /**
         * 💡 唤醒词与提示语
         */
    
        // 当消息以下面的关键词开头时,会调用 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 引擎
        tts: "xiaoai",
        // 切换 TTS 引擎发言人音色关键词,只有配置了第三方 TTS 引擎时才有效
        // switchSpeakerKeywords: ["把声音换成"], // 以此关键词开头即可切换音色,比如:把声音换成 xxx
    
        /**
         * 💬 连续对话
         *
         * 查看哪些机型支持连续对话 👉 https://github.com/idootop/mi-gpt/issues/92
         */
    
        // 是否启用连续对话功能,部分小爱音箱型号无法查询到正确的播放状态,需要关闭连续对话
        streamResponse: false,
        // 连续对话时,无响应多久后自动退出
        exitKeepAliveAfter: 30, // 默认 30 秒,建议不要超过 1 分钟
        // 连续对话时,下发 TTS 指令多长时间后开始检测设备播放状态(默认 3 秒)
        checkTTSStatusAfter: 3, // 当小爱长文本回复被过早中断时,可尝试调大该值
        // 连续对话时,播放状态检测间隔(单位毫秒,最低 500 毫秒,默认 1 秒)
        checkInterval: 1000, // 调小此值可以降低小爱回复之间的停顿感,请酌情调节
    
        /**
         * 🔌 其他选项
         */
    
        // 是否启用调试
        debug: false, // 一般情况下不要打开
        // 是否跟踪 Mi Service 相关日志(打开后可以查看设备 did)
        enableTrace: false, // 一般情况下不要打开
        // 网络请求超时时长(单位毫秒,默认 5 秒)
        timeout: 5000,
      },
    };

和.env的内容

# OpenAI(也支持通义千问、MoonShot、DeepSeek 等模型)
OPENAI_MODEL=gpt-4o
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxx
# OPENAI_BASE_URL=你的大模型接口的 baseURL,比如:https://api.openai.com/v1(注意:一般以 /v1 结尾)

# Azure OpenAI Service(可选)
# OPENAI_API_VERSION=2024-04-01-preview
# AZURE_OPENAI_API_KEY=你的密钥
# AZURE_OPENAI_ENDPOINT=https://你的资源名.openai.azure.com
# AZURE_OPENAI_DEPLOYMENT=你的模型部署名,比如:gpt-35-turbo-instruct

# 提示音效(可选,一般不用填,你也可以换上自己的提示音链接试试看效果)
# AUDIO_SILENT=静音音频链接,示例:https://example.com/slient.wav
# AUDIO_BEEP=默认提示音链接,同上
# AUDIO_ACTIVE=唤醒提示音链接,同上
# AUDIO_ERROR=出错了提示音链接,同上

# 第三方 TTS(可选,用于调用第三方 TTS 服务)
# TTS_BASE_URL=http://[你的局域网或公网地址]:[端口号]/[SECRET_PATH]/api
# 比如:http://192.168.31.205:4321/xxxx/api(注意:不要使用 localhost 或 127.0.0.1)

运行启动docker

但是本人在运行的时候遇到了不少麻烦

  • 无法登陆账号

    
    🔥 触发小米账号异地登录安全验证机制,请在浏览器打开以下链接,并按照网页提示授权验证账号:
    👉 https://account.xiaomi.com/identity/authStart?sid=xiaomiio&context=2Jqk6etdvybBbHXAUI3gzEh_LBZmRqa7UfkuEECx4_98ktAAR5lQaRFVVklLP_VYewbVfc5S7YAC70w2dB2wID9_kTdFWdWx9dSj6TSekG8nqYIDZQvkoGINelQnVPJvR3r4AXi5FPfZbf-KNJ1orA9MS04l-0xbzK4xFGAh8Lr8Q07d4ueUiuzVMmmCLtPXjJ_SmDvc3ZkM1I-tl9RHV8hOWfmseetE07RMJ2j4hEgCC_7BaETiTvTdrymoMwJSe45D-G-8CSUeJmFh1Q-6eoGl6xQFPibve92h3_lmp0JYaP8std7dyhzAHl2f3tGMN-74Zvlg7LedFdBhpj-Lh6f1Ugemx1yBMQ5mp_TrXM6l5a0g4y3mKHAjwQAmw--3DSFSNM64xb-ZvVaoKhEZ2eYJmWjLmuaPp-HRYoCQInvShgkARSSg1e6nM2iid9klmJOMgcCQrd6pgwuY3Qdm0TJ_g80l5cs3exgjwG65p48oOJKP1-pb0x0Ir-4OUYHAZf0upQpNjqSeUClXSvFmsrxjnZoVfXkfGv8BI48CTfWosMQM9yh6h5N7wLJ5K83IQNzlauNfQCZO0r8ZPU8aSmDvsn67-VP3XWweR0X4GziCcmDiQbkLCK3Q7onHKL3sra916Ra7fv6PLUdpUM_P-BPFMEeg-isSquDHV6nJl1dkP4KnW_5XAF-NRbjkTIQROXb6IBy6PGVf_qC0B4DnerJWWmk6FB3U64mAaOwJzg5uCink5OttNj6p0NiCQcX_4IqLwuBUHQUV35r_wsF1IfBC5v_hraBThjbwSBsvtHMKwkevWYbzZEExVIEat4c5&_locale=zh_CN 
    🐛 注意:授权成功后,大约需要等待 1 个小时左右账号信息才会更新,请在更新后再尝试重新登录。
    ❌ 小米账号登录失败 &&&START&&&{"notificationUrl":"https://account.xiaomi.com/identity/authStart?sid=xiaomiio&context=2Jqk6etdvybBbHXAUI3gzEh_LBZmRqa7UfkuEECx4_98ktAAR5lQaRFVVklLP_VYewbVfc5S7YAC70w2dB2wID9_kTdFWdWx9dSj6TSekG8nqYIDZQvkoGINelQnVPJvR3r4AXi5FPfZbf-KNJ1orA9MS04l-0xbzK4xFGAh8Lr8Q07d4ueUiuzVMmmCLtPXjJ_SmDvc3ZkM1I-tl9RHV8hOWfmseetE07RMJ2j4hEgCC_7BaETiTvTdrymoMwJSe45D-G-8CSUeJmFh1Q-6eoGl6xQFPibve92h3_lmp0JYaP8std7dyhzAHl2f3tGMN-74Zvlg7LedFdBhpj-Lh6f1Ugemx1yBMQ5mp_TrXM6l5a0g4y3mKHAjwQAmw--3DSFSNM64xb-ZvVaoKhEZ2eYJmWjLmuaPp-HRYoCQInvShgkARSSg1e6nM2iid9klmJOMgcCQrd6pgwuY3Qdm0TJ_g80l5cs3exgjwG65p48oOJKP1-pb0x0Ir-4OUYHAZf0upQpNjqSeUClXSvFmsrxjnZoVfXkfGv8BI48CTfWosMQM9yh6h5N7wLJ5K83IQNzlauNfQCZO0r8ZPU8aSmDvsn67-VP3XWweR0X4GziCcmDiQbkLCK3Q7onHKL3sra916Ra7fv6PLUdpUM_P-BPFMEeg-isSquDHV6nJl1dkP4KnW_5XAF-NRbjkTIQROXb6IBy6PGVf_qC0B4DnerJWWmk6FB3U64mAaOwJzg5uCink5OttNj6p0NiCQcX_4IqLwuBUHQUV35r_wsF1IfBC5v_hraBThjbwSBsvtHMKwkevWYbzZEExVIEat4c5&_locale=zh_CN&#34;,&#34;result&#34;:&#34;ok&#34;,&#34;code&#34;:0,&#34;captchaUrl&#34;:null,&#34;description&#34;:&#34;成功&#34;,&#34;location&#34;:&#34;&#34;,&#34;securityStatus&#34;:16,&#34;pwd&#34;:0,&#34;child&#34;:0,&#34;desc&#34;:&#34;成功&#34;} 
    2024/11/30 16:09:39 Speaker ❌ 初始化 Mi Services 失败
    2024/11/30 16:09:39 database ❌ Error: ❌ Assertion failed
    at _LoggerManager.assert (/app/dist/index.cjs:282:13)
    at __Logger.assert (/app/dist/index.cjs:319:19)
    at AISpeaker.initMiServices (/app/dist/index.cjs:499:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async AISpeaker.run (/app/dist/index.cjs:771:5)
    at async main (file:///app/app.js:6:3)
    
    
    
    
    
    
    
    

最终的解决办法是本地运行docker然后启动导出/app/.mi.josn导出到服务器的挂在目录然后再次启动就可以了‘’

  • 第二个就是设备名称错误

    这个就好改了,去米家cv一下就行了

    D:\migpt>docker compose up
    [+] Running 2/2
     ✔ Network migpt_default    Created                                                                                0.1s
     ✔ Container migpt-migpt-1  Created                                                                                0.1s
    Attaching to migpt-1
    migpt-1  |
    migpt-1  | > mi-gpt@4.2.0 start
    migpt-1  | > node ./app.js
    migpt-1  |
    migpt-1  |
    migpt-1  |
    migpt-1  | / $$      /$$ /$$   /$$$$$$  /$$$$$$$ /$$$$$$$$$
    migpt-1  | | $$$    /$$$|__/ /$$__  $$| $$__  $$|__  $$__/
    migpt-1  | | $$$$  /$$$$ /$$| $$  \__/| $$  \ $$   | $$
    migpt-1  | | $$ $$/$$ $$| $$| $$ /$$$$| $$$$$$$/   | $$
    migpt-1  | | $$  $$$| $$| $$| $$|_  $$| $$____/    | $$
    migpt-1  | | $$\  $ | $$| $$| $$  \ $$| $$         | $$
    migpt-1  | | $$ \/  | $$| $$|  $$$$$$/| $$         | $$
    migpt-1  | |__/     |__/|__/ \______/ |__/         |__/
    migpt-1  |                                                                                                            
    migpt-1  |          MiGPT v4.2.0  by: del.wang
    migpt-1  |
    migpt-1  |
    migpt-1  | ❌ 找不到设备:小米AI音箱(第二代)
    migpt-1  | 🐛 请检查你的 did 与米家中的设备名称是否一致。注意错别字、空格和大小写,比如:音响 👉 音箱
    migpt-1  | 2024/11/30 17:08:09 Speaker ❌ 初始化 Mi Services 失败
    migpt-1  | 2024/11/30 17:08:09 database ❌  Error: ❌ Assertion failed
    migpt-1  |     at _LoggerManager.assert (/app/dist/index.cjs:282:13)
    migpt-1  |     at __Logger.assert (/app/dist/index.cjs:319:19)
    migpt-1  |     at AISpeaker.initMiServices (/app/dist/index.cjs:499:17)
    migpt-1  |     at async AISpeaker.run (/app/dist/index.cjs:771:5)
    migpt-1  |     at async main (file:///app/app.js:6:3)
    migpt-1 exited with code 1

配置tts相关(额外可选)

官方说可以去火山官网(大模型语音合成-火山引擎)或者openai或者微软的tts 配置,为了省事我直接使用火山的了,根据教程里面的配置然后启动docker

🔥 MiGPT 配置教程
1. 创建火山引擎语音合成账号
首先,登录注册火山引擎:https://console.volcengine.com/auth/signup

然后,在产品列表搜索「语音合成」,选择「语音技术」,创建应用,勾选「语音合成」。

👉 查看教程
注意:账号注册成功之后,请先在个人中心完成实名认证,然后才能创建语音合成应用。

2. 配置环境变量
重命名本项目根目录下的 .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 环境变量为空,每次启动服务则会生成随机访问密码。

3. 部署 MiGPT-TTS 服务
Docker Image Version

环境变量配置完成后,请在对应目录运行以下命令,启动服务:

docker run -d --env-file $(pwd)/.env -p 4321:3000 idootop/mi-gpt-tts:latest
启动成功后,可在控制台的日志输出中查看接口地址,比如:

MiGPT-TTS: v3.0.0  by: del.wang

接口地址:http://localhost:3000/7a0e9f21/api

✅ 服务已启动...
访问 http://[IP]:[PORT]/[SECRET_PATH]/api/tts.mp3 即可查看语音合成效果。

注意:这里的端口(PORT)是你为 Docker 分配的实际端口,不推荐使用默认的 4321 端口。
如果你是通过 Node.js 本地启动本项目,则默认端口为 3000。

4. 修改 MiGPT 默认 TTS 引擎
你可以通过以下步骤,切换 MiGPT 使用的 TTS 引擎:

配置 TTS_BASE_URL 环境变量
切换 speaker.tts 为 custom
// mi-gpt/.env
TTS_BASE_URL=http://[IP]:[PORT]/[SECRET_PATH]/api

// mi-gpt/.migpt.js
export default {
  speaker: {
    // TTS 引擎
    tts: 'custom',
    // ...
  },
};
如果你的 MiGPT-TTS 服务与小爱音箱处在同一局域网下,那么也可以使用局域网地址。

注意:本项目中的部分音色名称,与火山引擎官方文档中的名称并不一致,完整的音色列表和名称以此处为准:volcano.ts

5. (可选)更新 MiGPT 提示音效链接
本项目内置了一些 MiGPT 使用的默认提示音效,部署成功后你可以使用提示音效替换原来的文字提示语。

# mi-gpt/.env
AUDIO_SILENT=http://[IP]:[PORT]/[SECRET_PATH]/slient.wav
AUDIO_BEEP=http://[IP]:[PORT]/[SECRET_PATH]/beep.wav
AUDIO_ACTIVE=http://[IP]:[PORT]/[SECRET_PATH]/active.wav
AUDIO_ERROR=http://[IP]:[PORT]/[SECRET_PATH]/error.wav

上述是官网的相关流程

migpt 启动!

image

还是得吐槽一下,小爱莫名其妙蹦出来打断,单独召唤gpt麻烦等,但是根据目前的llm大模型以及开源的tts等,一个可以手搓一个语音助手

未来再说吧

最后修改:2024 年 12 月 01 日
如果觉得我的文章挺有趣,赞赏一杯小奶茶
END
本文作者:
文章标题:migpt-上手体验和流程配置
本文地址:https://www.maxtral.fun/index.php/archives/176/
版权说明:若无注明,本文皆MAXBROSER原创,转载请保留文章出处。