xiaoz在一个朋友推荐下了解到xiaogpt这个项目,xiaogpt
可以将家里的小爱音箱接入ChatGPT、ChatGLM等大模型,从而让小爱音箱变得更加智能。
目前xiaoz已成功将家里的小米AI音箱一代接入到ChatGPT,大家可以通过下方的B站链接查看效果,如果有用,别忘记一键三联哦。
开始之前
此教程略微复杂,不适合新手小白,推荐有一定开发基础的IT从业人员尝试,开始之前,您需要准备:
- 小爱音箱并开启蓝牙功能
- 魔法上网工具
- ChatGPT或ChatGLM API SK
- 一台长期运行的内网服务器,比如NAS设备
- 一台内网Windows电脑
- 熟悉基本的Python编程语言
获取小米音响DID
xiaogpt
需要依赖小米音响DID,这样才能控制和通讯,我们要先用到miservice_fork
这个工具,该工具使用Python开发,因此您的电脑需要先安装Python 3,xiaoz是在自己Windows电脑上操作(任意内网电脑设备均可),至于如何安装Python 3建议通过网络搜索。
# 安装miservice_fork
pip install miservice_fork
# 设置小米用户名
set MI_USER=xxxx
# 设置小米账号的密码
set MI_PASS=xxx
# 得到DID
micli list
结果如下图所示,找到小爱音箱的DID
号码,并记录下来。
Docker安装xiaogpt
在安装之前,我们需要先创建xiaogpt配置文件config.json
,xiaoz使用的配置文件如下:
{
"openai_key":"sk-xxx",
"api_base":"https://xxx.com/v1",
"hardware":"S12A",
"mute_xiaoai": true,
"account": "xxx",
"password":"xxx.",
"mi_did":"xxx",
"bot": "chatgptapi",
"tts": "mi",
"prompt": "你的名字叫xxx,今年18岁,是一个人工智能助手,你的主人叫xiaoz,你的回答尽量简明扼要,回答总数不能超过150字。",
"keyword": [
"请"
],
"stream": true
}
配置参数含义如下:
- openai_key:OpenAI提供的SK,由于国内网络无法直接访问OpenAI API,可尝试使用第三方的OpenAI API中转服务
- api_base:由于xiaoz使用的第三方OpenAI API中专服务,所以这里的接口域名需要改成第三方的域名,末尾需要带上
v1
- hardware:在小爱音箱屁股上有型号,输入进来,如果在屁股上找不到或者型号不对,可以用 micli mina 找到型号
- mute_xiaoai:启用中断服务,就是不让小爱自身的回答说完,然后让ChatGPT去接管,不启用的话每次都要等小爱先回答完毕
- account:小米账户的用户名
- password:小米账户的密码
- mi_did:上面得到的DID
- bot:使用哪个API接口
- tts:默认
mi
就是小爱原生音色回答,也可以使用Edge TTS,但是xiaoz测试Edge TTS非常不稳定 - prompt:提示词,可以自己修改
- keyword:触发的关键词
- stream:开启后效率更好
关于hardware的获取
xiaoz使用的小米音箱一代,底部显示的是MDZ-25-DA
,这个型号xiaogpt
是识别不了的。
您可能需要修改为S12A
/S12
/L07A
,总之挨个修改尝试一下。
然后继续使用Docker Compose进行安装,推荐安装到NAS上,xiaoz的完整的docker-compose.yaml
内容如下:
version: '3.8'
services:
xiaogpt:
image: yihong0618/xiaogpt
volumes:
- ./config:/config
ports:
- "9527:9527"
restart: always
command: --config=/config/config.json
container_name: xiaogpt
./config
自己改成您配置文件的目录,比如您的配置文件位于./config/config.json
,那么就填写./config
,然后输入docker-compose up -d
进行启动。
如果一切顺利,尝试唤醒小爱同学后,加上请
字就可以触发ChatGPT,如上面的视频所示。
接入ChatGLM
如果您无法解OpenAI访问问题,并且也没找到合适的OpenAI中转服务,可以尝试接入国内大模型ChatGLM:https://open.bigmodel.cn/,在智谱AI后台获取SK后填写到配置文件中,使用ChatGLM的配置参考如下:
{
"glm_key":"xxx",
"hardware":"S12A",
"mute_xiaoai": true,
"account": "xxx",
"password":"xxx.",
"mi_did":"xxx",
"bot": "glm",
"tts": "mi",
"use_glm": true,
"prompt": "回答不能超过200字",
"keyword": [
"请"
],
"stream": true
}
错误排查
如果触发小爱同学后,加上“请”字没效果,可使用docker logs xiaogpt
查看容器日志,如果出现Exception: we have no hardware: S12A please check
这样的错误,可能并不是hardware写错了,也可能是其他配置参数错误,总之按个参数都检查下。
实际体验
目前来说通过xiaogpt
将小爱音箱接入ChatGPT并不算很完美,但却扩展了小爱音箱的玩法,让小爱音箱变得更加有趣和智能,有条件的朋友还是值得一试。
xiaoz实际体验后发现存在以下问题:
- 每次对话,小爱会先抢答部分,然后再由ChatGPT接管
- 如果启用Edge TTS,会非常不稳定,经常无法输出音频或或者响应慢的情况,建议默认用小爱内置语音
- 连续对话存在BUG,可能导致无法完全退出连续对话
总结
在使用xiaogpt
将小爱音箱接入ChatGPT过程中,注意以下问题:
- 小爱音箱需要开启蓝牙
- 安装
miservice_fork
获取正确的DID号码 - 通过查看音箱底部获取hardware编号,如果是一代设备,可尝试填写:
S12A
/S12
/L07A
- 国内网络无法正确访问OpenAI API,可以考虑第三方OpenAI中转服务,或者接入ChatGLM
xiaogpt项目地址:https://github.com/yihong0618/xiaogpt ,感谢作者的贡献。
另外xiaoz建了一个NAS用户交流群,有兴趣的可微信扫码加入。
演示视频,语速不流畅,网络不流畅,还要改进。