• Stars
    star
    6,039
  • Rank 6,661 (Top 0.2 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 2 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Play ChatGPT and other LLM with Xiaomi AI Speaker

xiaogpt

PyPI Docker Image Version (latest by date)

yihong0618.1635132234935177216.mp4

Play ChatGPT and other LLM with Xiaomi AI Speaker

image image

支持的 AI 类型

Windows 获取小米音响DID

  1. pip install miservice_fork
  2. set MI_USER=xxxx
  3. set MI_PASS=xxx
  4. 得到did
  5. set MI_DID=xxxx
  6. 具体可参考 one_click.bat 脚本
  • 如果获取did报错时,请更换一下无线网络,有很大概率解决问题。

一点原理

不用 root 使用小爱同学和 ChatGPT 交互折腾记

准备

  1. ChatGPT id
  2. 小爱音响
  3. 能正常联网的环境或 proxy
  4. python3.8+

使用

  • pip install -U --force-reinstall xiaogpt
  • 参考我 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
  • 使用 gpt-3 的 api 那样可以更流畅的对话,速度快, 请 google 如何用 openai api 命令 --use_gpt3
  • 如果你遇到了墙需要用 Cloudflare Workers 替换 api_base 请使用 --api_base ${url} 来替换。 请注意,此处你输入的api应该是'https://xxxx/v1'的字样,域名需要用引号包裹
  • 可以跟小爱说 开始持续对话 自动进入持续对话状态,结束持续对话 结束持续对话状态。
  • 可以使用 --enable_edge_tts 来获取更好的 tts 能力

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
# 如果你想使用 gpt3 ai
export OPENAI_API_KEY=${your_api_key}
xiaogpt --hardware LX06  --mute_xiaoai --use_gpt3
# 如果你想用 edge-tts
xiaogpt --hardware LX06 --cookie ${cookie} --use_chatgpt_api --enable_edge_tts

使用 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
# 如果你想使用 gpt3 ai
export OPENAI_API_KEY=${your_api_key}
python3 xiaogpt.py --hardware LX06  --mute_xiaoai --use_gpt3

# 如果你想使用 ChatGLM api
python3 xiaogpt.py --hardware LX06  --mute_xiaoai --use_glm --glm_key ${glm_key}
# 如果你想使用 google 的 bard
python3 xiaogpt.py --hardware LX06  --mute_xiaoai --use_bard --bard_token ${bard_token}

config.json

如果想通过单一配置文件启动也是可以的, 可以通过 --config 参数指定配置文件, config 文件必须是合法的 JSON 格式 参数优先级

  • cli args > default > config
python3 xiaogpt.py --config xiao_config.json
# or
xiaogpt --config xiao_config.json

或者

cp xiao_config.json.example xiao_config.json
python3 xiaogpt.py

若要指定 OpenAI 的模型参数,如 model, temporature, top_p, 请在config.json中指定:

{
    ...
    "gpt_options": {
        "temperature": 0.9,
        "top_p": 0.9,
    }
}

具体参数作用请参考 Open AI API 文档。 ChatGLM 文档 Bard-API 参考

配置项说明

参数 说明 默认值
hardware 设备型号
account 小爱账户
password 小爱账户密码
openai_key openai的apikey
glm_key chatglm 的 apikey
bard_token bard 的 token 参考 Bard-API
cookie 小爱账户cookie (如果用上面密码登录可以不填)
mi_did 设备did
use_command 使用 MI command 与小爱交互 false
mute_xiaoai 快速停掉小爱自己的回答 true
verbose 是否打印详细日志 false
bot 使用的 bot 类型,目前支持gpt3,chatgptapi和newbing chatgptapi
enable_edge_tts 使用Edge TTS false
edge_tts_voice Edge TTS 的嗓音 zh-CN-XiaoxiaoNeural
prompt 自定义prompt 请用100字以内回答
keyword 自定义请求词列表 ["请问"]
change_prompt_keyword 更改提示词触发列表 ["更改提示词"]
start_conversation 开始持续对话关键词 开始持续对话
end_conversation 结束持续对话关键词 结束持续对话
stream 使用流式响应,获得更快的响应 false
proxy 支持 HTTP 代理,传入 http proxy URL ""
gpt_options OpenAI API 的参数字典 {}
bing_cookie_path NewBing使用的cookie路径,参考这里获取 也可通过环境变量 COOKIE_FILE 设置
bing_cookies NewBing使用的cookie字典,参考这里获取
deployment_id Azure OpenAI 服务的 deployment ID
localhost 是否通过本地服务器加载EdgeTTS的音频输出 true

注意

  1. 请开启小爱同学的蓝牙
  2. 如果要更改提示词和 PROMPT 在代码最上面自行更改
  3. 目前已知 LX04、X10A 和 L05B L05C 可能需要使用 --use_command,否则可能会出现终端能输出GPT的回复但小爱同学不回答GPT的情况
  4. 在wsl使用时, 需要设置代理为 http://wls的ip:port(vpn的代理端口), 否则会出现连接超时的情况, 详情 报错: Error communicating with OpenAI

QA

  1. 用破解么?不用
  2. 你做这玩意也没用啊?确实。。。但是挺好玩的,有用对你来说没用,对我们来说不一定呀
  3. 想把它变得更好?PR Issue always welcome.
  4. 还有问题?提 Issue 哈哈

视频教程

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.json

本地编译Docker Image

 docker build -t xiaogpt .

如果需要在Apple M1/M2上编译x86

 docker buildx build --platform=linux/amd64 -t xiaogpt-x86 .

Add edge-tts

edge-tts提供了类似微软tts的能力

Usage

你可以通过参数enable_edge_tts, 来启用它

{
  "enable_edge_tts": true,
  "edge_tts_voice": "zh-CN-XiaoxiaoNeural"
}

查看更多语言支持, 从中选择一个

edge-tts --list-voices

在容器中使用edge-tts

由于 Edge TTS 启动了一个本地的 HTTP 服务,所以需要将容器的端口映射到宿主机上,并且指定本地机器的 hostname:

docker run -v <your-config-dir>:/config yihong0618/xiaogpt -p 9527:9527 -e XIAOGPT_HOSTNAME=<your ip> --config=/config/config.json

注意端口必须映射为与容器内一致,XIAOGPT_HOSTNAME 需要设置为宿主机的 IP 地址,否则小爱无法正常播放语音。

如果不想使用本地的HTTP服务器,可以将配置中的 localhost 设置为 false,这样 Edge TTS 会通过一个网络上的三方服务器加载输出音频文件,但是这样会导致响应速度变慢。

推荐的 fork

  • MIGPT -> 基于 API 流式对话的低延迟版MIGPT
  • XiaoBot -> Go语言版本的Fork, 带支持不同平台的UI

感谢

赞赏

谢谢就够了

More Repositories

1

bilingual_book_maker

Make bilingual epub books Using AI translate
Python
7,286
star
2

running_page

Make your own running home page
Python
3,565
star
3

Kindle_download_helper

Download all your kindle books script.
Python
2,612
star
4

GitHubPoster

Make everything a GitHub svg poster and Skyline!
Python
1,774
star
5

gitblog

People Die, but Long Live GitHub
Python
1,386
star
6

tg_bot_collections

collections of yihong0618's telegram bot
Python
557
star
7

epubhv

Make your epub books vertical or horizontal.
Python
454
star
8

tg_bing_dalle

Telegram bing bot DALL-E 3
Python
418
star
9

blue

新的 PR(Issue) 来了来了来了!
Python
305
star
10

iBeats

Apple Watch 心率数据采集 - Your Soul, Your Beats!
Python
279
star
11

SunoSongsCreator

About High quality songs generation by https://www.suno.ai/. Reverse engineered API.
Python
276
star
12

2021

关于我的 2021 的一些记录。
Python
274
star
13

2022

2022 gogogo
Python
270
star
14

2023

Another year
Python
204
star
15

iWhat

What is it? Using AI Inspired by pyWhat
Python
190
star
16

shanbay_remember

扇贝自动发送今日新词到 telegram
JavaScript
189
star
17

duolingo_remember

Automatically send new words from duolingo to telegram
Python
166
star
18

2020

2020计划,喜欢的文章,博客,以及其它
C
137
star
19

github-readme-stats

generate my_github status using GitHub Actions
Go
134
star
20

vscode-gcores

VSCode 玩转机核
TypeScript
127
star
21

dalian-IT

『大连互联网』大连基本没啥互联网
114
star
22

gaycore

use command-line to listen gadio
Python
113
star
23

klingCreator

About High quality video and image generation by https://klingai.kuaishou.com and https://klingai.com/ Reverse engineered API.
Python
77
star
24

IdeoImageCreator

About High quality image generation by ideogram. Reverse engineered API.
Python
60
star
25

2024

Change
Python
42
star
26

yihong0618

41
star
27

kai_xin_ci_chang

开心词场帮助程序
Python
33
star
28

nbnhhsh-cli

「能不能好好说话?」 cli 版本
Python
31
star
29

gcores_calendar

gcores audios calendar
JavaScript
30
star
30

pengdu_helper

网易云歌词自动生成《捧读》用的 epub, 帮助学习。(GitHub Actions + shortcuts + telegram)
Go
29
star
31

my_kindle_stats

Show my read on kindle this year
Python
24
star
32

Runtastic

Download all your Runtastic (Adidas Running) activities save to gpx
Python
21
star
33

running_skyline

Generate a 3D Skyline in STL format from your running App
Python
20
star
34

blog

blog
JavaScript
14
star
35

github-readme-stats-server

Server for github-readme-stats
HTML
14
star
36

Python365

Python365天精进计划
Python
11
star
37

run

Python
10
star
38

resume

resume
HTML
4
star
39

remote_mp3_duration

Estimate the duration in seconds of the remote MP3 file without full download(python version)
Python
3
star
40

github_upstream_script

Using script to fetch upstream and sync
Python
2
star
41

500

learn 500 lines from 500lines-rewrite
1
star
42

edocteel001

100days leetcode
JavaScript
1
star