给小爱音箱接入GPT

需求

早一阵子就看到有人搞这种玩法了,但是一直懒得折腾,最近听朋友说现在这个东西已经比较成熟了,搞起来不难,就试一试吧。

方案

目前被用得比较的多的两个方案分别是Python实现的xiaogptNodeJS实现的mi-gpt

我当然是先试python版本,结果一开始就碰壁了,用MiService的micli list无法取得设备列表,问了作者,他说他那边是正常的……我看了一下日志,是接口返回就是空,但是账号是登录成功的,不知道小米API那边是什么情况,搞了半天浪费时间。因为这个功能不能用,就无法取得MI_DID,就没法用。

只好改用NodeJS版本,因为这个可以用设备名称做MI_DID,但实际测试下来也没成功。还好打开调试日志后,在日志里找到了MI_DID。

然后把两个模型都试了一下,因为是用DeepSeek的API,xiaogpt不支持,最后还是只能用mi-gpt。

mi-gpt配置

主要是配置migpt.js文件和环境变量配置文件env,参考官方文档

其中migpt.js主要是配置小米账号密码和设备的did,另外就是需要根据音箱的型号配置合适的tts命令和唤醒命令。

我用的Redmi小爱音箱Play是小米小爱音箱Play2019版的简配版本,标注的型号是L07A,但实际上在spec里用的型号是l7a,对应的配置在issue里可以查到。

env文件配置的是GPT API,主要是OPENAI开头的几个环境变量,具体配置内容按你用的API服务商说明来写。

我是用docker来跑的,用的docker-compose.yaml如下:

  migpt:
    image: idootop/mi-gpt
    container_name: migpt
    restart: unless-stopped
    env_file:
      - /path_to_migpt/env
    volumes:
      - /pat_to_migpt/migpt.js:/app/.migpt.js

最后用docker-compose up -d启动,可以用docker logs -f migpt查看日志。

如果没错的话就可以跟小爱同学对话了,单次对话提示词或连续对话唤醒词根据你在migpt.js里的配置使用。

xiaogpt配置

如果使用它支持的GPT API,也可以用这个,配置方法是创建一个config.yaml配置文件(从xiao_config.yaml.example复制而来),其中主要修改的配置是小米账号,设备did,设备型号,GPT API配置等。

启动服务的docker-compose.yaml类似这样:

  xiaogpt:
    image: yihong0618/xiaogpt
    container_name: xiaogpt
    restart: unless-stopped
    network_mode: host
    volumes:
      - /path_to_xiaogpt:/config
    command: --config=/config/config.yaml

其中network_mode按官方说明是需要的,可能不用也可以。

问题处理

如果启动时报登录失败,可以试一下在相同内网里找个电脑用同一账号登录小米官网mi.com,再启动应该就不会报登录失败了。可能是小米的安全限制导致。

推送到[go4pro.org]