Play ChatGPT or other LLM with xiaomi AI speaker
Project description
xiaogpt
Play ChatGPT and other LLM with Xiaomi AI Speaker
支持的 AI 类型
获取小米音响DID
系统和Shell | Linux *sh | Windows CMD用户 | Windows PowerShell用户 |
---|---|---|---|
1、安装包 | pip install miservice_fork |
pip install miservice_fork |
pip install miservice_fork |
2、设置变量 | export MI_USER=xxx export MI_PASS=xxx |
set MI_USER=xxx set MI_PASS=xxx |
$env:MI_USER="xxx" $env:MI_PASS="xxx" |
3、取得MI_DID | micli list |
micli list |
micli list |
4、设置MI_DID | export MI_DID=xxx |
set MI_DID=xxx |
$env:MI_DID="xxx" |
- 注意不同shell 对环境变量的处理是不同的,尤其是powershell赋值时,可能需要双引号来包括值。
- 如果获取did报错时,请更换一下无线网络,有很大概率解决问题。
一点原理
准备
- ChatGPT id
- 小爱音响
- 能正常联网的环境或 proxy
- python3.8+
使用
pip install -U --force-reinstall xiaogpt[locked]
- 参考我 fork 的 MiService 项目 README 并在本地 terminal 跑
micli list
拿到你音响的 DID 成功 别忘了设置 export MI_DID=xxx 这个 MI_DID 用 - run
xiaogpt --hardware ${your_hardware} --use_chatgpt_api
hardware 你看小爱屁股上有型号,输入进来,如果在屁股上找不到或者型号不对,可以用micli mina
找到型号 - 跑起来之后就可以问小爱同学问题了,“帮我"开头的问题,会发送一份给 ChatGPT 然后小爱同学用 tts 回答
- 如果上面不可用,可以尝试用手机抓包,https://userprofile.mina.mi.com/device_profile/v2/conversation 找到 cookie 利用
--cookie '${cookie}'
cookie 别忘了用单引号包裹 - 默认用目前 ubus, 如果你的设备不支持 ubus 可以使用
--use_command
来使用 command 来 tts - 使用
--mute_xiaoai
选项,可以快速停掉小爱的回答 - 使用
--account ${account} --password ${password}
- 如果有能力可以自行替换唤醒词,也可以去掉唤醒词
- 使用
--use_chatgpt_api
的 api 那样可以更流畅的对话,速度特别快,达到了对话的体验, openai api, 命令--use_chatgpt_api
- 如果你遇到了墙需要用 Cloudflare Workers 替换 api_base 请使用
--api_base ${url}
来替换。 请注意,此处你输入的api应该是'https://xxxx/v1
'的字样,域名需要用引号包裹 --use_moonshot_api
and other models please refer below- 可以跟小爱说
开始持续对话
自动进入持续对话状态,结束持续对话
结束持续对话状态。 - 可以使用
--tts edge
来获取更好的 tts 能力 - 可以使用
--tts fish --fish_api_key <your-fish-key> --fish_voice_key <fish-voice>
来获取 fish-audio 能力(如何获取 fish voice 见下) - 可以使用
--tts openai
来获取 openai tts 能力 - 可以使用
--tts azure --azure_tts_speech_key <your-speech-key>
来获取 Azure TTS 能力 - 可以使用
--use_langchain
替代--use_chatgpt_api
来调用 LangChain(默认 chatgpt)服务,实现上网检索、数学运算..
e.g.
export OPENAI_API_KEY=${your_api_key}
xiaogpt --hardware LX06 --use_chatgpt_api
# or
xiaogpt --hardware LX06 --cookie ${cookie} --use_chatgpt_api
# 如果你想直接输入账号密码
xiaogpt --hardware LX06 --account ${your_xiaomi_account} --password ${your_password} --use_chatgpt_api
# 如果你想 mute 小米的回答
xiaogpt --hardware LX06 --mute_xiaoai --use_chatgpt_api
# 使用流式响应,获得更快的响应
xiaogpt --hardware LX06 --mute_xiaoai --stream
# 如果你想使用 google 的 gemini
xiaogpt --hardware LX06 --mute_xiaoai --use_gemini --gemini_key ${gemini_key}
# 如果你想使用自己的 google gemini 服务
python3 xiaogpt.py --hardware LX06 --mute_xiaoai --use_gemini --gemini_key ${gemini_key} --gemini_api_domain ${gemini_api_domain}
# 如果你想使用阿里的通义千问
xiaogpt --hardware LX06 --mute_xiaoai --use_qwen --qwen_key ${qwen_key}
# 如果你想使用 kimi
xiaogpt --hardware LX06 --mute_xiaoai --use_moonshot_api --moonshot_api_key ${moonshot_api_key}
# 如果你想使用 llama3
xiaogpt --hardware LX06 --mute_xiaoai --use_llama --llama_api_key ${llama_api_key}
# 如果你想使用 01
xiaogpt --hardware LX06 --mute_xiaoai --use_yi_api --ti_api_key ${yi_api_key}
# 如果你想使用 LangChain+SerpApi 实现上网检索或其他本地服务(目前仅支持 stream 模式)
export OPENAI_API_KEY=${your_api_key}
export SERPAPI_API_KEY=${your_serpapi_key}
xiaogpt --hardware Lx06 --use_langchain --mute_xiaoai --stream --openai_key ${your_api_key} --serpapi_api_key ${your_serpapi_key}
使用 git clone 运行
export OPENAI_API_KEY=${your_api_key}
python3 xiaogpt.py --hardware LX06
# or
python3 xiaogpt.py --hardware LX06 --cookie ${cookie}
# 如果你想直接输入账号密码
python3 xiaogpt.py --hardware LX06 --account ${your_xiaomi_account} --password ${your_password} --use_chatgpt_api
# 如果你想 mute 小米的回答
python3 xiaogpt.py --hardware LX06 --mute_xiaoai
# 使用流式响应,获得更快的响应
python3 xiaogpt.py --hardware LX06 --mute_xiaoai --stream
# 如果你想使用 ChatGLM api
python3 xiaogpt.py --hardware LX06 --mute_xiaoai --use_glm --glm_key ${glm_key}
# 如果你想使用 google 的 gemini
python3 xiaogpt.py --hardware LX06 --mute_xiaoai --use_gemini --gemini_key ${gemini_key}
# 如果你想使用自己的 google gemini 服务
python3 xiaogpt.py --hardware LX06 --mute_xiaoai --use_gemini --gemini_key ${gemini_key} --gemini_api_domain ${gemini_api_domain}
# 如果你想使用阿里的通义千问
python3 xiaogpt.py --hardware LX06 --mute_xiaoai --use_qwen --qwen_key ${qwen_key}
# 如果你想使用 kimi
xiaogpt --hardware LX06 --mute_xiaoai --use_moonshot_api --moonshot_api_key ${moonshot_api_key}
# 如果你想使用 01
xiaogpt --hardware LX06 --mute_xiaoai --use_yi_api --ti_api_key ${yi_api_key}
# 如果你想使用豆包
python3 xiaogpt.py --hardware LX06 --mute_xiaoai --use_doubao --stream --volc_access_key xxxx --volc_secret_key xxx
# 如果你想使用 llama3
python3 xiaogpt.py --hardware LX06 --mute_xiaoai --use_llama --llama_api_key ${llama_api_key}
# 如果你想使用 LangChain+SerpApi 实现上网检索或其他本地服务(目前仅支持 stream 模式)
export OPENAI_API_KEY=${your_api_key}
export SERPAPI_API_KEY=${your_serpapi_key}
python3 xiaogpt.py --hardware Lx06 --use_langchain --mute_xiaoai --stream --openai_key ${your_api_key} --serpapi_api_key ${your_serpapi_key}
config.yaml
如果想通过单一配置文件启动也是可以的, 可以通过 --config
参数指定配置文件, config 文件必须是合法的 Yaml 或 JSON 格式
参数优先级
- cli args > default > config
python3 xiaogpt.py --config xiao_config.yaml
# or
xiaogpt --config xiao_config.yaml
或者
cp xiao_config.yaml.example xiao_config.yaml
python3 xiaogpt.py
若要指定 OpenAI 的模型参数,如 model, temporature, top_p, 请在 config.yaml 中指定:
gpt_options:
temperature: 0.9
top_p: 0.9
具体参数作用请参考 Open AI API 文档。 ChatGLM 文档
配置项说明
参数 | 说明 | 默认值 | 可选值 |
---|---|---|---|
hardware | 设备型号 | ||
account | 小爱账户 | ||
password | 小爱账户密码 | ||
openai_key | openai的apikey | ||
moonshot_api_key | moonshot kimi 的 apikey | ||
yi_api_key | 01 wanwu 的 apikey | ||
llama_api_key | groq 的 llama3 apikey | ||
serpapi_api_key | serpapi的key 参考 SerpAPI | ||
glm_key | chatglm 的 apikey | ||
gemini_key | gemini 的 apikey 参考 | ||
gemini_api_domain | gemini 的自定义域名 参考 | ||
qwen_key | qwen 的 apikey 参考 | ||
cookie | 小爱账户cookie (如果用上面密码登录可以不填) | ||
mi_did | 设备did | ||
use_command | 使用 MI command 与小爱交互 | false |
|
mute_xiaoai | 快速停掉小爱自己的回答 | true |
|
verbose | 是否打印详细日志 | false |
|
bot | 使用的 bot 类型,目前支持 chatgptapi,newbing, qwen, gemini | chatgptapi |
|
tts | 使用的 TTS 类型 | mi |
edge 、 openai 、azure 、volc 、baidu 、google 、minimax |
tts_options | TTS 参数字典,参考 tetos 获取可用参数 | ||
prompt | 自定义prompt | 请用100字以内回答 |
|
keyword | 自定义请求词列表 | ["请"] |
|
change_prompt_keyword | 更改提示词触发列表 | ["更改提示词"] |
|
start_conversation | 开始持续对话关键词 | 开始持续对话 |
|
end_conversation | 结束持续对话关键词 | 结束持续对话 |
|
stream | 使用流式响应,获得更快的响应 | true |
|
proxy | 支持 HTTP 代理,传入 http proxy URL | "" | |
gpt_options | OpenAI API 的参数字典 | {} |
|
deployment_id | Azure OpenAI 服务的 deployment ID | 参考这个如何找到deployment_id | |
api_base | 如果需要替换默认的api,或者使用Azure OpenAI 服务 | 例如:https://abc-def.openai.azure.com/ |
|
volc_access_key | 火山引擎的 access key 请在这里获取 | ||
volc_secret_key | 火山引擎的 secret key 请在这里获取 |
注意
- 请开启小爱同学的蓝牙
- 如果要更改提示词和 PROMPT 在代码最上面自行更改
- 目前已知 LX04、X10A 和 L05B L05C 可能需要使用
--use_command
,否则可能会出现终端能输出GPT的回复但小爱同学不回答GPT的情况。这几个型号也只支持小爱原本的 tts. - 在wsl使用时, 需要设置代理为 http://wls的ip:port(vpn的代理端口), 否则会出现连接超时的情况, 详情 报错: Error communicating with OpenAI
QA
- 用破解么?不用
- 你做这玩意也没用啊?确实。。。但是挺好玩的,有用对你来说没用,对我们来说不一定呀
- 想把它变得更好?PR Issue always welcome.
- 还有问题?提 Issue 哈哈
- Exception: Error https://api2.mina.mi.com/admin/v2/device_list?master=0&requestId=app_ios_xxx: Login failed @KJZH001
这是由于小米风控导致,海外地区无法登录大陆的账户,请尝试cookie登录 无法抓包的可以在本地部署完毕项目后再用户文件夹C:\Users\用户名
下面找到.mi.token,然后扔到你无法登录的服务器去
若是linux则请放到当前用户的home文件夹,此时你可以重新执行先前的命令,不出意外即可正常登录(但cookie可能会过一段时间失效,需要重新获取)
详情请见 https://github.com/yihong0618/xiaogpt/issues/332
视频教程
https://www.youtube.com/watch?v=K4YA8YwzOOA
Docker
常规用法
X86/ARM Docker Image: yihong0618/xiaogpt
docker run -e OPENAI_API_KEY=<your-openapi-key> yihong0618/xiaogpt <命令行参数>
如
docker run -e OPENAI_API_KEY=<your-openapi-key> yihong0618/xiaogpt --account=<your-xiaomi-account> --password=<your-xiaomi-password> --hardware=<your-xiaomi-hardware> --use_chatgpt_api
使用配置文件
xiaogpt的配置文件可通过指定volume /config,以及指定参数--config来处理,如
docker run -v <your-config-dir>:/config yihong0618/xiaogpt --config=/config/config.yaml
网络使用 host 模型
docker run -v <your-config-dir>:/config --network=host yihong0618/xiaogpt --config=/config/config.yaml
本地编译Docker Image
docker build -t xiaogpt .
如果在安装依赖时构建失败或安装缓慢时,可以在构建 Docker 镜像时使用 --build-arg
参数来指定国内源地址:
docker build --build-arg PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple -t xiaogpt .
如果需要在Apple M1/M2上编译x86
docker buildx build --platform=linux/amd64 -t xiaogpt-x86 .
第三方 TTS
我们目前支持是三种第三方 TTS:edge/openai/azure/volc/baidu/google
edge-tts 提供了类似微软tts的能力 azure-tts 提供了微软 azure tts 的能力 openai-tts 提供了类似 openai tts 的能力 fish-tts 提供了 fish tts 的能力
Usage
你可以通过参数 tts
, 来启用它
tts: edge
For edge 查看更多语言支持, 从中选择一个
edge-tts --list-voices
如果你想使用 fish-tts
- 注册 https://fish.audio/zh-CN/go-api/ 拿到 api key
- 选择你想要的声音自建声音或者使用热门声音 https://fish.audio/zh-CN/text-to-speech/?modelId=e80ea225770f42f79d50aa98be3cedfc 其中
e80ea225770f42f79d50aa98be3cedfc
就声音的 key id - python3 xiaogpt.py --hardware LX06 --account xxxx --password xxxxx --use_chatgpt_api --mute_xiaoai --stream --tts fish --fish_api_key xxxxx --fish_voice_key xxxxx
- 或者在 xiao_config.yaml 中配置
tts: fish
# TTS 参数字典,参考 https://github.com/frostming/tetos 获取可用参数
tts_options: {
"api_key": "xxxxx",
"voice": "xxxxxx"
}
在容器中使用 edge-tts/azure-tts/openai-tts/volc/google/baidu/fish
由于 Edge TTS 启动了一个本地的 HTTP 服务,所以需要将容器的端口映射到宿主机上,并且指定本地机器的 hostname:
docker run -v <your-config-dir>:/config -p 9527:9527 -e XIAOGPT_HOSTNAME=<your ip> yihong0618/xiaogpt --config=/config/config.yaml
注意端口必须映射为与容器内一致,XIAOGPT_HOSTNAME 需要设置为宿主机的 IP 地址,否则小爱无法正常播放语音。
推荐的类似项目
感谢
赞赏
谢谢就够了
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file xiaogpt-3.5.tar.gz
.
File metadata
- Download URL: xiaogpt-3.5.tar.gz
- Upload date:
- Size: 37.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b58e6b7b58768cf76c7931aa9f233ee33173dfe3718d4b15aa7bdd0c04993dbc |
|
MD5 | 6a25e5d534a605fa6d5a3dcd82a67eec |
|
BLAKE2b-256 | efa999399a3eea5b83d1d4f61531e5db1ffdd2a4d9093aa7c0e5ea9ac491ac3e |
File details
Details for the file xiaogpt-3.5-py3-none-any.whl
.
File metadata
- Download URL: xiaogpt-3.5-py3-none-any.whl
- Upload date:
- Size: 40.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 55099ca6a443d403076b0a1dbcb11d6c0f56824a56ce7c9678c64e9721880f04 |
|
MD5 | e486da179bf2acb5e0bbd703aff31650 |
|
BLAKE2b-256 | 36499e09ddbb241273740f76ee42b819a0711b4886b6e550061a06ac28f95454 |