Originally published as GitHub issue #258.
写在前面
项目链接 -> https://github.com/yihong0618/xiaogpt 大多数事儿很简单的一个结论是:这么做有什么用? 但是,没用就不做了么?好玩也是有用之一呀。
注
下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo.
想法
- 从 ChatGPT 刚上第二周开始,我弄了个账号,后来发现一个很好玩的项目 ChineseAiDungeonChatGPT —> 用 ChatGPT 玩 DND, 我突然想我能语音就更有带入感了。
- 因为之前折腾 blue 时候了解了一些小米 IOT 设备的交互 tts, 我觉得我用一些方式是可以实现的
- 不过从想法到可用确实经历了不少
开始折腾
- 最早的 idea 是把小爱同学破解了,破解之后拦截我的对话,如果对话包含
GPT就用破解的小爱发送请求到 ChatGPT, 再把 ChatGPT 的回复截包,读出来。
- 遇到最大的困难是小爱怎么破解,搜了一圈发现,小爱是有办法通过串口来 hook 再刷固件的。
- 但串口是啥?我学习了串口通信,用自己树莓派做实验,去淘宝买 usb2ttl 学会了。但是需要焊接,我又去 B 站刷视频学习,问同事硬件大神如何焊接,学会了焊接。但,他妈的,新的小爱同学把串口通信给封了。
- 翻到了一个国外破解小爱同学的,能用拆机后的 USB 来烧固件,但我没有 windows,-> 学习老的 macbookpro 2015 刷双系统,尝试给小爱刷机 -> 小米把这个也封了
- 有趣的是每天用发现确实还挺好用的,让他放歌,给我儿子放小猪佩奇。于是又给丈母娘买了一个,给她配置好,可以放歌。
- 第一个方式不太行,尝试去用路由 openwrt 截包再发送,依然失败,我折腾了一下发现 https 获取 payload 还是有些困难的
- 转向了 Siri 那么我能不能用 Siri 实现呢?是能的,可以用 Siri -> 捷径 -> 获取你说的话 -> 发送 ChatGPT -> 小爱 or 直接 Siri 自己来
- 网友象牙山刘能有一天发他儿子小爱同学的聊天记录,突然灵感来了,我可以用最蠢的轮询,来不断获取最新的聊天记录,如果有新的符合要求我就发送给 ChatGPT —> 再用 tts 让小爱同学朗读,但因为朗读需要时间,所以轮询也没那么笨了。
实现
- 先实现不断拿对话历史
- 测试 revChatGPT 可行
- 利用 MiService call tts 可行
- 剩下就是写代码了
准备
- ChatGPT id
- 小爱音响
- 能正常联网的环境或 proxy
- python3.8+
使用
- pip install -r requirements.txt
- 参考 MiService 项目 README 并在本地 terminal 跑
micli list拿到你音响的 DID 成功 别忘了设置 export MI_DID=xxx 这个 MI_DID 用 - 参考 revChatGPT 项目 README 配置 chatGPT 的 config
- run
python xiaogpt.py --hardware ${your_hardware}hardware 你看小爱屁股上有型号,输入进来 - 跑起来之后就可以问小爱同学问题了,“帮我回答开头的问题” 会发送一份给 ChatGPT 然后小爱同学用 tts 回答
总结
- 完成那一刻确实挺开心,但过程中发现了几个好玩的博客,惊讶了做 revChatGPT 的学生真牛逼,学会了焊接,开始发现硬件也挺有意思的,不断折腾的过程沮丧有一些,但更多的是学习新东西带来的兴奋感。
- 拆机发现,小爱同学内部做工确实不错
- 折腾过程中的感受,将来肯定有一天这些智能音箱厂商也会训练大模型,将彻底改变智能家居,仿佛看到了未来
彩蛋

Reactions
👍 73 · 🎉 8 · ❤️ 10
Comments
LukeWJ
View comment · 2023-02-16T06:02:53Z
我有一个二傻子斐讯R1音箱,看看能不能搞出来
yihong0618
View comment · 2023-02-16T13:44:45Z
现在不用抓包了,修改了文章
peterjx19
View comment · 2023-02-27T01:15:32Z
哈哈,直接做个APP,TTS做交互更简单,技术也成熟
yukiinagato
View comment · 2023-03-02T08:40:04Z
我有一个二傻子斐讯R1音箱,看看能不能搞出来
期待好消息😃
NeoSmithX
View comment · 2023-03-02T16:40:07Z
有熬夜做一个傻儿子出来玩的冲动,哈哈哈😂
tonyqus
View comment · 2023-03-02T23:29:52Z
翻到了一个国外破解小爱同学的,[能用拆机后的 USB 来烧固件](https://github.com/duhow/xiaoai-patch/blob/master/research/lx06/install.md),但我没有 windows,-> 学习老的 macbookpro 2015 刷双系统,尝试给小爱刷机 -> 小米把这个也封了
这方式小米是怎么封的?新固件不让用了?
yihong0618
View comment · 2023-03-02T23:38:41Z
对,新的版本这个暂时不行
wsjq5477
View comment · 2023-03-04T13:23:42Z
确实是个很有意思的项目!生命不息,折腾不止。 如果用NAS替代PC做中转,上面跑MiService截音响,这个想法是可行的嘛
yihong0618
View comment · 2023-03-04T13:25:08Z
@wsjq5477 可行,但是不要 mute-xiaomi
wsjq5477
View comment · 2023-03-05T03:56:16Z
请教下为啥不加mute-xiaomi呢,我试了下加不加mute-xiaomi,小爱都只会回答自己的答案,但是终端会显示出gpt的答案
yihong0618
View comment · 2023-03-05T03:58:37Z
会频繁请求 api, 容易被 ban 要是一直跑
imkingcn
View comment · 2023-03-05T18:28:45Z
大佬们,能实现和小度交互么? https://juejin.cn/post/7203685609654550588
jihan-socool
View comment · 2023-03-06T01:51:23Z
我有一个二傻子斐讯R1音箱,看看不能搞出来 斐讯可以刷,但是体验效果不好,更别说交互chatgpt了
BussanQ
View comment · 2023-03-06T05:10:31Z
@yihong0618 请问下放小猪佩奇是什么流程😊
yihong0618
View comment · 2023-03-06T05:19:38Z
@yihong0618 请问下放小猪佩奇是什么流程😊
小爱同学,帮我播放小猪佩奇
BussanQ
View comment · 2023-03-06T05:32:40Z
@yihong0618 是小爱同学语音读的节目吗?我以为是和小米盒子联动播放视频,希望能通过关键词播放某一集的剧情。。
yihong0618
View comment · 2023-03-06T06:15:30Z
是的。
jjp9624022
View comment · 2023-03-06T22:16:27Z
可以用openwrt获取小爱设备突发特定流量后轮询
YuanZhencai
View comment · 2023-03-06T22:58:25Z
之前搞天猫精灵,发现提问题前一定需要某些语料然后才会回调接口,相信小爱也是一样的吧?怎么保持小爱可以一直说话,不需要语料?所以关键点是不断轮询吗?
yihong0618
View comment · 2023-03-06T22:56:37Z
是
tonyqus
View comment · 2023-03-07T05:47:45Z
你们谁在墙内试过亚马逊Echo智能音箱?我基本放弃破解国内的智能音箱了。
yihong0618
View comment · 2023-03-07T05:50:55Z
echo 有人做出来了
ryan4yin
View comment · 2023-03-08T07:16:35Z
哈哈,yihong 佬也入了硬件的坑,我去年底开始折腾硬件,发现硬件真的好玩
deadjoker
View comment · 2023-03-15T12:34:28Z
关注这个有段时间,一直没能上手做。有个疑问,这个脚本我要跑在跟小爱同一个网络环境下么?
yihong0618
View comment · 2023-03-15T12:36:35Z
@deadjoker 不需要。
deadjoker
View comment · 2023-03-16T01:48:19Z
@yihong0618 如果我希望多个小爱音箱都能够使用chatgpt的话,有没有方法只跑一个脚本呢?还是必须得多个环境跑多个脚本
yihong0618
View comment · 2023-03-16T01:50:57Z
可以同环境部署多个吧
goofegg
View comment · 2023-03-22T01:41:35Z
大神,你能写个手把手的流程就好了,才能让很多小白能去尝试。 你这个过程省略了好多细节,估计和你同级别的大牛才能看得懂操作起来。
SwartzMss
View comment · 2023-03-22T01:44:26Z
大神,你能写个手把手的流程就好了,才能让很多小白能去尝试。 你这个过程省略了好多细节,估计和你同级别的大牛才能看得懂操作起来。
直接看视频就行。。还是保姆级别的。。。我在做的过程里面就遇到了一个ptython 版本的问题,其他的都是一次过。。
但是呢 是可以用,但是体验感不是很好
qingqingjiayuan6
View comment · 2023-03-25T05:41:21Z
我看了你的教学视频,非常感兴趣,手里还没有小米音箱,准备买一个,请问现在购买的小米音箱Pro 型号是LX6,也可以按照你提供的方法,使用小爱同学和ChatGPT交互吗?小米音箱有没有版本要求?必须是哪个版本以下的才能按照你的方法做,我担心新购买的音箱,系统版本不对,无法实现教程的内容,谢谢!
SwartzMss
View comment · 2023-03-25T05:43:42Z
我看了你的教学视频,非常感兴趣,手里还没有小米音箱,准备买一个,请问现在购买的小米音箱Pro 型号是LX6,也可以按照你提供的方法,使用小爱同学和ChatGPT交互吗?小米音箱有没有版本要求?必须是哪个版本以下的才能按照你的方法做,我担心新购买的音箱,系统版本不对,无法实现教程的内容,谢谢!
我就是新买的 可以 还是蛮简单的。。。 其实我有做一个类似的视频,但是国内的限制太多了
Enchner
View comment · 2023-03-26T08:17:25Z
我在Windows系统上获取不到小米音箱的DID
liuwx2010
View comment · 2023-03-27T12:12:35Z
请问,运行了以后,接受不到小爱的消息是什么原因?
yihong0618
View comment · 2023-03-27T12:50:03Z
有更多的报错信息么?@Enchner @liuwx2010
liuwx2010
View comment · 2023-03-27T13:28:22Z
@yihong0618 没有报错信息,界面上就显示的请用’帮我’什么什么的,然后就没有了。和小爱说话,也打不出任何的消息
yihong0618
View comment · 2023-03-27T14:12:52Z
添加 arg —verbose
eason78
View comment · 2023-03-29T06:50:54Z
—mute_xiaoai 这个参数不能使用,一用就报错 MinaService里不存在xxx方法 例如不存在 player_get_status 不存在player_pause 我去查了源码的确没有
这个项目是不是有点bug
yihong0618
View comment · 2023-03-29T07:01:22Z
—mute_xiaoai 这个参数不能使用,一用就报错 MinaService里不存在xxx方法 例如不存在 player_get_status 不存在player_pause 我去查了源码的确没有
这个项目是不是有点bug
- pip uninstall miservice
- pip install -U miservice_fork
- 以后 bug 建议在该项目的 issue 下留言,那样大家都能看到,你搜下这个,里面也有人提过
reactphao
View comment · 2023-03-29T11:08:25Z
我遇到了问题, 但是尝试下来无法解决 python3 的环境 。 在MiService 项目中运行如下命令 ./micli.py list 或者 python3 ./micli.py list 或者 python3 micli.py list。 给出如下的报错。 `xception on login 2330087479: Cannot connect to host sts.api.io.mi.com:443 ssl:True [SSLCertVerificationError: (1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)’)] Traceback (most recent call last): File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 980, in _wrap_create_connection return await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py”, line 1112, in create_connection transport, protocol = await self._create_connection_transport( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py”, line 1145, in _create_connection_transport await waiter File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/sslproto.py”, line 574, in _on_handshake_complete raise handshake_exc File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/sslproto.py”, line 556, in _do_handshake self._sslobj.do_handshake() File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/ssl.py”, line 979, in do_handshake self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File “/Users/pdx/wk/AI/小爱AI/MiService/miservice/miaccount.py”, line 74, in login serviceToken = await self._securityTokenService( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Users/pdx/wk/AI/小爱AI/MiService/miservice/miaccount.py”, line 114, in _securityTokenService async with self.session.get( File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/client.py”, line 1141, in aenter self._resp = await self._coro ^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/client.py”, line 536, in _request conn = await self._connector.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 540, in connect proto = await self._create_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 901, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 1206, in _create_direct_connection raise last_exc File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 1175, in _create_direct_connection transp, proto = await self._wrap_create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 982, in _wrap_create_connection raise ClientConnectorCertificateError(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host sts.api.io.mi.com:443 ssl:True [SSLCertVerificationError: (1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)’)] Error https://api.io.mi.com/app/home/device_list: Login failed` 求解
yihong0618
View comment · 2023-03-29T11:09:57Z
我遇到了问题, 但是尝试下来无法解决 python3 的环境 。 在MiService 项目中运行如下命令 ./micli.py list 或者 python3 ./micli.py list 或者 python3 micli.py list。 给出如下的报错。 `xception on login 2330087479: Cannot connect to host sts.api.io.mi.com:443 ssl:True [SSLCertVerificationError: (1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)’)] Traceback (most recent call last): File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 980, in _wrap_create_connection return await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py”, line 1112, in create_connection transport, protocol = await self._create_connection_transport( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py”, line 1145, in _create_connection_transport await waiter File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/sslproto.py”, line 574, in _on_handshake_complete raise handshake_exc File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/sslproto.py”, line 556, in _do_handshake self._sslobj.do_handshake() File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/ssl.py”, line 979, in do_handshake self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File “/Users/pdx/wk/AI/小爱AI/MiService/miservice/miaccount.py”, line 74, in login serviceToken = await self._securityTokenService( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Users/pdx/wk/AI/小爱AI/MiService/miservice/miaccount.py”, line 114, in _securityTokenService async with self.session.get( File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/client.py”, line 1141, in aenter self._resp = await self._coro ^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/client.py”, line 536, in _request conn = await self._connector.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 540, in connect proto = await self._create_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 901, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 1206, in _create_direct_connection raise last_exc File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 1175, in _create_direct_connection transp, proto = await self._wrap_create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/aiohttp/connector.py”, line 982, in _wrap_create_connection raise ClientConnectorCertificateError(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host sts.api.io.mi.com:443 ssl:True [SSLCertVerificationError: (1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)’)] Error https://api.io.mi.com/app/home/device_list: Login failed` 求解
ssl 问题
- 尝试不用 vpn
- 尝试换个网络,比如手机热点
reactphao
View comment · 2023-03-29T13:49:56Z
同上SSL问题。
1.家庭网以及个人热点都连接尝试了
命令执行:
./micli.py list ./micli.py: line 1: from: command not found ./micli.py: line 6: syntax error: unexpected end of file
查看目录
ls LICENSE build miservice requirements-dev.txt setup.py README.md micli.py miservice_fork.egg-info requirements.txt
换命令执行
python3 micli.py list 或者 python3 ./micli.py list
执行和上述结果相同 报错SSL。
执行前置: 确定下载了依赖, 按照文档配置了账号密码export… 以及账号在app登陆,账号密码没错。 电脑蓝牙已连接音响
产品LX06 。 大陆地区。
yihong0618
View comment · 2023-03-30T01:30:29Z
ssl 问题
- 尝试不用 vpn
- 尝试换个网络,比如手机热点
ssl 问题
尝试不用 vpn 尝试换个网络,比如手机热点
liuwx2010
View comment · 2023-03-31T12:56:35Z
添加 arg —verbose
@yihong0618 我添加了,没有任何错误信息,下面是详细情况
Running xiaogpt now, 用帮我/请回答开头来提问
或用开始持续对话开始持续对话
[03/31/23 00:45:29] DEBUG Now listening xiaoai new xiaogpt.py:91
message timestamp:
1680237928131
[03/31/23 00:45:30] DEBUG Now listening xiaoai new xiaogpt.py:91
message timestamp:
1680237928131
[03/31/23 00:45:31] DEBUG Now listening xiaoai new xiaogpt.py:91
message timestamp:
1680237928131
Devenke6
View comment · 2023-04-03T13:54:35Z
为什么不直接搞一个脚本接入安卓语音助手?这样一个更简单吧,小爱只是一个回复,手机貌似可以接入更多,目前只有iPhone有捷径,安卓貌似现在只有tasker太鸡了
SummerXinBing
View comment · 2023-04-05T09:24:43Z
@qingqingjiayuan6 @SwartzMss 请问教程视频的链接在哪里?麻烦发一下
yunzhongjushi2
View comment · 2023-04-08T07:48:55Z
我觉得AI音箱的主要作用还是它的6个麦克风的触发和声音收集功能 至于识别转文字(尤其是英文)还是siri最优秀,然后就只剩下GPT调用和回传播放语音了 想通了这个逻辑,还是直接用homepod上的捷径就好
SummerXinBing
View comment · 2023-04-15T02:44:45Z
以下是GPT的回答: GPT回答出错 Error communicating with OpenAI
SummerXinBing
View comment · 2023-04-15T02:45:19Z
这是我的报错,GPT使用不了
metafeng
View comment · 2023-04-15T09:29:47Z
早上看到之后,果断入手一个小爱音响 Play,现在小爱版GPT已经上线了。过程吧,说来也心酸,获取did累个半死,其他都还挺顺溜。感谢大神的折腾笔记。
就是现在 "enable_edge_tts": true 就直接没声音了,不知道咋回事。
yihong0618
View comment · 2023-04-16T08:31:47Z
早上看到之后,果断入手一个小爱音响 Play,现在小爱版GPT已经上线了。过程吧,说来也心酸,获取did累个半死,其他都还挺顺溜。感谢大神的折腾笔记。
就是现在
"enable_edge_tts": true就直接没声音了,不知道咋回事。
看看 http server 是否开启了,mac 的话需要点确认
yunzhongjushi2
View comment · 2023-04-18T02:24:51Z
为什么不直接搞一个脚本接入安卓语音助手?这样一个更简单吧,小爱只是一个回复,手机貌似可以接入更多,目前只有iPhone有捷径,安卓貌似现在只有tasker太鸡了
主要是他的8个麦克风阵列,远距离侦听功能很强,用手机的话距离远一点根本听不到
小爱的语音识别功能尚可,如果可以直接只用他的侦听功能而使用识别更好的程序那就更好了,比如siri中英文都可以
mvphp
View comment · 2023-04-23T03:48:12Z
我看了你的教学视频,非常感兴趣,手里还没有小米音箱,准备买一个,请问现在购买的小米音箱Pro 型号是LX6,也可以按照你提供的方法,使用小爱同学和ChatGPT交互吗?小米音箱有没有版本要求?必须是哪个版本以下的才能按照你的方法做,我担心新购买的音箱,系统版本不对,无法实现教程的内容,谢谢!
我就是新买的 可以 还是蛮简单的。。。 其实我有做一个类似的视频,但是国内的限制太多了
可以发到youtuber
ghost
View comment · 2023-04-27T05:54:53Z
可以用openwrt获取小爱设备突发特定流量后轮询
这是什么意思呢?我有openwrt
yihong0618
View comment · 2023-04-27T06:00:51Z
可以用openwrt获取小爱设备突发特定流量后轮询
这是什么意思呢?我有openwrt
那个是失败的。
ghost
View comment · 2023-04-27T06:02:25Z
可以用openwrt获取小爱设备突发特定流量后轮询
这是什么意思呢?我有openwrt
那个是失败的。
我想接入ChatGPT,可以实现吗大神?
yihong0618
View comment · 2023-04-27T06:03:36Z
可以用openwrt获取小爱设备突发特定流量后轮询
这是什么意思呢?我有openwrt
那个是失败的。
我想接入ChatGPT,可以实现吗大神?
你照着 README 就行啊。https://github.com/yihong0618/xiaogpt
jasonestock
View comment · 2023-04-28T12:05:46Z
@yihong0618 大佬,按照你写的MiService这个项目走,碰到错误好几天也没有解决,求解答
root@ecs-xxxxx:/etc/mi/MiService# micli.py list Exception on login xxxxxxxxxxx: ‘userId’ Traceback (most recent call last): File “/usr/local/lib/python3.10/dist-packages/miservice/miaccount.py”, line 71, in login self.token[‘userId’] = resp[‘userId’] KeyError: ‘userId’ Error https://api.io.mi.com/app/home/device_list: Login failed
jin-feng
View comment · 2023-04-29T06:59:27Z
以下是GPT的回答: GPT回答出错 Error communicating with OpenAI
解决了吗?
ccccccface
View comment · 2023-05-03T10:07:51Z
Duplicate of #263
hirolee88
View comment · 2023-05-11T08:33:18Z
在本地 terminal 跑 micli list 拿到你音响的 DID ------拿到的是空的 换成 micli mina 可以
yihong0618
View comment · 2023-05-11T08:36:07Z
@l568288g 是的
onezero-10
View comment · 2023-05-12T09:52:13Z
生命在于折腾!👍,天猫精灵有试过吗
yihong0618
View comment · 2023-05-12T11:52:35Z
生命在于折腾!👍,天猫精灵有试过吗
天猫精灵不可行。
dccmmtop
View comment · 2023-05-14T06:53:12Z
一次就搞成功了,玩的不亦乐乎。谢谢这么好的开源项目。
dccmmtop
View comment · 2023-05-14T06:55:32Z
以下是GPT的回答: GPT回答出错 Error communicating with OpenAI
解决了吗?
这是GPT相关的问题,
- 确保你能访问 chatGPT, 最好梯子开全局代理,选择非亚洲节点
- 确保你的token正常,也就是没有过期,没有超限
yihong0618
View comment · 2023-05-14T09:00:38Z
一次就搞成功了,玩的不亦乐乎。谢谢这么好的开源项目。
My pleasure
kindom2008
View comment · 2023-05-20T07:42:40Z
https://www.douyin.com/video/7212243333274406177 要是能够这样就更厉害了,谢谢UP主,我现在还总是报错 ,(base) kindom2008@kindomAi:~/THUDM/xiaogpt$ python3 xiaogpt.py —hardware S12A —use_chatgpt_api —mute_xiaoai —stream —enable_edge_tts
[05/20/23 15:41:07] INFO Serving on 172.30.215.132:8081 xiaogpt.py:294
Running xiaogpt now, 用帮我/请回答开头来提问
或用开始持续对话开始持续对话
问题:写一首关于幸福的诗?
Traceback (most recent call last):
File “/home/kindom2008/THUDM/xiaogpt/xiaogpt.py”, line 5, in
Edgar-Lzxc
View comment · 2023-05-22T11:08:25Z
哈哈,直接做个APP,TTS做交互更简单,技术也成熟
但是app需要自行点击启动,做不到开机就启动,但是docker可以
arbraham
View comment · 2023-06-01T12:54:51Z
大侠,我在这里卡住了“参考 MiService 项目 README 并在本地 terminal 跑 micli list 拿到你音响的 DID 成功”。能否指导下?
- 执行这个时报错,说没有requirements,的确在仓库里没有提供这个,是不是漏了?
set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890
pip3 install miservice
2.执行这个时,xiaogpt.py —hardware L05B —use_chatgpt_api —mute_xiaoai —use_command
直接跳到这个Py文件,我只好在VS上点下run,就弹出这个对话框,接下来要做什么呢?
jinmiao
View comment · 2023-06-14T09:06:51Z
哈哈,直接做个APP,TTS做交互更简单,技术也成熟
这个就是:https://github.com/jinmiao/chatgpt_android
chgblog
View comment · 2023-06-21T22:39:47Z
部署在树莓派4B上流畅度如何呢?支持小爱触屏音箱吗?
yihong0618
View comment · 2023-06-22T08:38:57Z
呢?支持小爱触屏音箱吗?
小爱触屏音不支持 mute_xiaoai 树莓派4B 没问题。
chgblog
View comment · 2023-06-22T13:29:19Z
谢谢,家里还有一个“Yeelight语音助手”(集成了小爱同学和小冰,就是没有普通版的小爱音响-_-!)我试试哪个好用
chgblog
View comment · 2023-06-22T21:40:07Z
昨天试了下,通过MiService可以给Yeelight语音助手发送文字进行播报,但是用底部的型号运行程序提示找不到这个型号,运行micli mina只返回了小爱触屏音箱的,没有Yeelight语音助手,这个还有办法适应Yeelight语音助手吗?
chgblog
View comment · 2023-06-23T00:05:32Z
现在遇到个问题,使用小爱触屏音箱Pro 8,现在控制台可以显示GPT的回复,但是小爱音响并没有播放回复内容,这个如何解决呢?
yihong0618
View comment · 2023-06-23T00:22:01Z
现在遇到个问题,使用小爱触屏音箱Pro 8,现在控制台可以显示GPT的回复,但是小爱音响并没有播放回复内容,这个如何解决呢?
加上 —use_command 另外请在项目里提 issue 那样其他人遇到了也容易看到
chgblog
View comment · 2023-06-24T12:57:02Z
谢谢,搞定了。如果可以不用先调用小爱同学再调用chatgpt就更好了
zhangnan1981
View comment · 2023-07-20T02:52:17Z
非常感谢大神的指导,我从头至尾详细学习了一下,然后实际操作中出现了一点小问题,请大神指导。
输入python xiaogpt.py —hardware L15A —use_chatgpt_api —mute_xiaoai,开始运行
Running xiaogpt now, 用帮我/请回答开头来提问
或用开始持续对话开始持续对话
问题:请问中国足球什么时候能拿到大力神杯?
这些都正常吗,然后出现错误提示如下
Traceback (most recent call last):
File “D:\project\xiaomi\xiaogpt\xiaogpt.py”, line 5, in
yihong0618
View comment · 2023-07-20T03:31:34Z
非常感谢大神的指导,我从头至尾详细学习了一下,然后实际操作中出现了一点小问题,请大神指导。
输入python xiaogpt.py —hardware L15A —use_chatgpt_api —mute_xiaoai,开始运行 Running xiaogpt now, 用
帮我/请回答开头来提问 或用开始持续对话开始持续对话 问题:请问中国足球什么时候能拿到大力神杯? 这些都正常吗,然后出现错误提示如下 Traceback (most recent call last): File “D:\project\xiaomi\xiaogpt\xiaogpt.py”, line 5, in main() File “D:\project\xiaomi\xiaogpt\xiaogpt\cli.py”, line 153, in main loop.run_until_complete(miboy.run_forever()) File “C:\Python311\Lib\asyncio\base_events.py”, line 653, in run_until_complete return future.result() ^^^^^^^^^^^^^^^ File “D:\project\xiaomi\xiaogpt\xiaogpt\xiaogpt.py”, line 469, in run_forever await self.stop_if_xiaoai_is_playing() File “D:\project\xiaomi\xiaogpt\xiaogpt\xiaogpt.py”, line 411, in stop_if_xiaoai_is_playing is_playing = await self.get_if_xiaoai_is_playing() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “D:\project\xiaomi\xiaogpt\xiaogpt\xiaogpt.py”, line 402, in get_if_xiaoai_is_playing playing_info = await self.mina_service.player_get_status(self.device_id) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: ‘MiNAService’ object has no attribute ‘player_get_status’ 请您指正,诚待回复,不胜感激。
pip3 uninstall miservice pip3 install -U miservice_fork
zhangnan1981
View comment · 2023-07-20T03:51:56Z
非常感谢大神的指导,我从头到尾详细学习了一番,然后实际操作中出现了一点小问题,请大神的指导。
输入python xiaogpt.py —hardware L15A —use_chatgpt_api —mute_xiaoai,开始运行 Running xiaogpt now,用
帮我/请回答开头来提问 或用开始持续对话开始持续对话 问题:请问中国足球什么时候能伸大力神杯? 这些都正常吗,然后出现错误提示如下 Traceback (most最近一次调用最后): File “D:\project\xiaomi\xiaogpt\xiaogpt.py”, line 5 ,在main()文件“D:\project\xiaomi\xiaogpt\xiaogpt\cli.py”中,第153行,在主loop.run_until_complete(miboy.run_forever())文件“C:\Python311\Lib\asyncio\base_events”中.py”,第 653 行,在 run_until_complete return future.result() ^^^^^^^^^^^^^^^^^ 文件“D:\project\xiaomi\xiaogpt\xiaogpt\xiaogpt.py”,第 469 行,在run_forever中await self.stop_if_xiaoai_is_playing()文件“D:\project\xiaomi\xiaogpt\xiaogpt\xiaogpt.py”,第411行,在stop_if_xiaoai_is_playing中is_playing=await self.get_if_xiaoai_is_playing()^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“D:\project\xiaomi\xiaogpt\xiaogpt\xiaogpt.py”,第 402 行,在 get_if_xiaoai_is_playing 中play_info = 等待 self.mina_service。player_get_status(self.device_id) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: ‘MiNAService’ 对象没有属性 ‘player_get_status’ 请指正,诚待回复您,不胜感激。pip3 uninstall miservice pip3 install -U miservice_fork 非常感谢,我试试看哈,原理能简单分析一下吗?
zhangnan1981
View comment · 2023-07-20T06:17:50Z
pip3 uninstall miservice
pip3 install -U miservice_fork
执行完这两条命令后,情况如下,
python xiaogpt.py —hardware L15A —use_chatgpt_api —mute_xiaoai
Traceback (most recent call last):
File “D:\project\xiaomi\xiaogpt\xiaogpt.py”, line 2, in
yihong0618
View comment · 2023-07-20T06:22:02Z
pip3 uninstall miservice pip3 install -U miservice_fork 执行完这两条命令后,情况如下, python xiaogpt.py —hardware L15A —use_chatgpt_api —mute_xiaoai Traceback (most recent call last): File “D:\project\xiaomi\xiaogpt\xiaogpt.py”, line 2, in from xiaogpt.cli import main File “D:\project\xiaomi\xiaogpt\xiaogpt\cli.py”, line 5, in from xiaogpt.xiaogpt import MiGPT File “D:\project\xiaomi\xiaogpt\xiaogpt\xiaogpt.py”, line 22, in from miservice import MiAccount, MiIOService, MiNAService, miio_command ImportError: cannot import name ‘MiAccount’ from ‘miservice’ (unknown location) 请指导
python3 -m pip install -U miservice_fork
另外,请最好不要在这里留 issue, 在 xiaogpt 项目里留
zhangnan1981
View comment · 2023-07-20T06:25:04Z
好的好的,一定注意,十分感谢
puke3615
View comment · 2023-08-30T12:22:01Z
有办法监听到米家传感器设备么? 如果这条路打通了,再配合ChatGPT,智能家居就能迎来每个程序员的高光时刻。
yihong0618
View comment · 2023-08-30T12:45:21Z
有办法监听到米家传感器设备么? 如果这条路打通了,再配合ChatGPT,智能家居就能迎来每个程序员的高光时刻。
理论上可以
chengliangluo
View comment · 2023-09-05T15:02:34Z
大佬,关于音箱操作的哪些api文档你是在哪里找到啊?我扒了你的mute api,但是感觉并没有mute掉, 只响应了个 “Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM’s developers directly!!!”
yihong0618
View comment · 2023-09-06T02:09:49Z
大佬,关于音箱操作的哪些api文档你是在哪里找到啊?我扒了你的mute api,但是感觉并没有mute掉, 只响应了个 “Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM’s developers directly!!!”
没有 api 文档。。。 参考 README 有些型号不能 mute, 另外 issue 在 xiaogpt 项目下留言比较好,那样大家也都能看见
ericliyee
View comment · 2023-09-16T09:39:38Z
micli mina返回为空 我的设备是小爱音响 型号为MDZ-25-DA
d112848962
View comment · 2023-10-04T12:44:54Z
我型号是MDZ-25-DA是不是不支持呀
yihong0618
View comment · 2023-10-04T12:48:14Z
micli mina返回为空 我的设备是小爱音响 型号为MDZ-25-DA
好像不支持这个型号
yihong0618
View comment · 2023-10-04T12:48:22Z
我型号是MDZ-25-DA是不是不支持呀
是。。。
yihong0618
View comment · 2023-11-20T05:28:27Z
现在很多设计都改变了,有点惊讶我 2 月份就实现了;
duolabmeng6
View comment · 2023-11-24T04:52:44Z
怪不得 MDZ-25-DA不行
duolabmeng6
View comment · 2023-11-24T04:53:24Z
下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo. 这句话是什么意思啊…repo在哪里
yihong0618
View comment · 2023-11-24T04:58:45Z
下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo. 这句话是什么意思啊…repo在哪里
就是 xiaogpt 意思是不用原来逆向的方案了,用的是 api with key 的方案
duolabmeng6
View comment · 2023-11-24T07:37:19Z
下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo. 这句话是什么意思啊…repo在哪里
就是 xiaogpt 意思是不用原来逆向的方案了,用的是 api with key 的方案
我搞了好久 MDZ-25-DA 这个型号确实不行把 我测试了可以播放声音..获取文本不行
yihong0618
View comment · 2023-11-24T13:38:39Z
下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo. 这句话是什么意思啊…repo在哪里
就是 xiaogpt 意思是不用原来逆向的方案了,用的是 api with key 的方案
我搞了好久 MDZ-25-DA 这个型号确实不行把 我测试了可以播放声音..获取文本不行
印象中这型号是不行的。。。。
duolabmeng6
View comment · 2023-11-25T01:18:11Z
我想问一下现在这个项目的方案还是网络获取嘛就是读一个小米账号音箱的记录 这个方式我测试的延迟比较大 还是你这个项目的话是读的本地的一个数据库啊会比较快一点
yihong0618
View comment · 2023-11-25T01:24:22Z
我想问一下现在这个项目的方案还是网络获取嘛就是读一个小米账号音箱的记录 这个方式我测试的延迟比较大 还是你这个项目的话是读的本地的一个数据库啊会比较快一点
是的。其实延迟可以改 sleep 时间的,但会频繁请求不建议
duolabmeng6
View comment · 2023-11-25T01:27:23Z
我想问一下现在这个项目的方案还是网络获取嘛就是读一个小米账号音箱的记录 这个方式我测试的延迟比较大 还是你这个项目的话是读的本地的一个数据库啊会比较快一点
是的。其实延迟可以改 sleep 时间的,但会频繁请求不建议
大佬有群吗 加一个讨论
yihong0618
View comment · 2023-11-25T01:32:00Z
我想问一下现在这个项目的方案还是网络获取嘛就是读一个小米账号音箱的记录 这个方式我测试的延迟比较大 还是你这个项目的话是读的本地的一个数据库啊会比较快一点
是的。其实延迟可以改 sleep 时间的,但会频繁请求不建议
大佬有群吗 加一个讨论
没有。。。
duolabmeng6
View comment · 2023-11-25T01:42:28Z
兄弟我还有另外一个问题 我要怎么禁止掉小爱同学的回答 我读取到我自己说的话的时候 这里有一段时间的延迟 我要停止小爱同学的回答要怎么处理
yihong0618
View comment · 2023-11-25T01:46:03Z
兄弟我还有另外一个问题 我要怎么禁止掉小爱同学的回答 我读取到我自己说的话的时候 这里有一段时间的延迟 我要停止小爱同学的回答要怎么处理
有 —mute 参数,但有些机型不支持,请参考 xiaogpt 的 README 也可以在那里留 issue
duolabmeng6
View comment · 2023-11-25T06:22:28Z
兄弟 这个停止说话的请求是发到小米服务器的 有没有办法做到本地停止…我想让小爱直接闭嘴 我设置500ms一直调用停止回答 感觉很诡异 哈哈哈哈
duolabmeng6
View comment · 2023-11-25T11:01:08Z
大佬你的代码我玩起来了 但是无法唤醒我型号是 S12A 请问一下这个是要怎么抓包获取到唤醒的请求啊
duolabmeng6
View comment · 2023-11-25T11:02:10Z
func (mt *MiBot) wakeUp() {
w := mt.hardwareCommand(WakeupIndex)
mt.miioService.MiotAction(mt.deviceID, actionId(w), []interface{}{WakeupKeyword, 0})
}
这个唤醒不起作用 要怎么调试 我有 智能开关 智能开关可以触发到唤醒 但是不知道如何抓包的…
yihong0618
View comment · 2023-11-26T04:50:02Z
S12A
S12A 不能用我这个方式唤醒,另外能在 xiaogpt 项目下留 issue 么?那样如果其他人遇到问题也能看到,谢谢
zhuzhuyule
View comment · 2023-12-21T07:43:23Z
有趣的是每天用发现确实还挺好用的,让他放歌,给我儿子放小猪佩奇。于是又给丈母娘买了一个,给她配置好,可以放歌。
@yihong0618 请问这句是啥意思了? 小猪佩奇收费,所以我也在尝试如何让小爱走自己的服务,去自动播放自己的资源列表。
yihong0618
View comment · 2023-12-21T07:44:49Z
有趣的是每天用发现确实还挺好用的,让他放歌,给我儿子放小猪佩奇。于是又给丈母娘买了一个,给她配置好,可以放歌。
@yihong0618 请问这句是啥意思了? 小猪佩奇收费,所以我也在尝试如何让小爱走自己的服务,去自动播放自己的资源列表。
这个不难,是可以的。我有时间写个教程回复你
zhuzhuyule
View comment · 2023-12-21T08:05:35Z
有趣的是每天用发现确实还挺好用的,让他放歌,给我儿子放小猪佩奇。于是又给丈母娘买了一个,给她配置好,可以放歌。
@yihong0618 请问这句是啥意思了? 小猪佩奇收费,所以我也在尝试如何让小爱走自己的服务,去自动播放自己的资源列表。
这个不难,是可以的。我有时间写个教程回复你
666, 看了你的简历,哈哈哈,真是大佬呀
yihong0618
View comment · 2023-12-21T08:07:09Z
有趣的是每天用发现确实还挺好用的,让他放歌,给我儿子放小猪佩奇。于是又给丈母娘买了一个,给她配置好,可以放歌。
@yihong0618 请问这句是啥意思了? 小猪佩奇收费,所以我也在尝试如何让小爱走自己的服务,去自动播放自己的资源列表。
这个不难,是可以的。我有时间写个教程回复你
666, 看了你的简历,哈哈哈,真是大佬呀
现在你可以参考这个 https://origin.v2ex.com/t/982027 但不太成熟,有精力我写个稍微好点的方案。。。
hirolee88
View comment · 2023-12-21T16:37:07Z
@yihong0618 大佬,按照你写的MiService这个项目走,碰到错误好几天也没有解决,求解答
root@ecs-xxxxx:/etc/mi/MiService# micli.py list Exception on login xxxxxxxxxxx: ‘userId’ Traceback (most recent call last): File “/usr/local/lib/python3.10/dist-packages/miservice/miaccount.py”, line 71, in login self.token[‘userId’] = resp[‘userId’] KeyError: ‘userId’ Error https://api.io.mi.com/app/home/device_list: Login failed
https://github.com/yihong0618/xiaogpt/issues/6#issuecomment-1866617374
yihong0618
View comment · 2023-12-21T23:58:53Z
@yihong0618 大佬,按照你写的MiService这个项目走,碰到错误好几天也没有解决,求解答
root@ecs-xxxxx:/etc/mi/MiService# micli.py list Exception on login xxxxxxxxxxx: ‘userId’ Traceback (most recent call last): File “/usr/local/lib/python3.10/dist-packages/miservice/miaccount.py”, line 71, in login self.token[‘userId’] = resp[‘userId’] KeyError: ‘userId’ Error https://api.io.mi.com/app/home/device_list: Login failed
https://github.com/yihong0618/xiaogpt/issues/6#issuecomment-1866617374
应该是触发风控了,你得本地浏览器登录下小米云
zhuzhuyule
View comment · 2023-12-22T03:25:48Z
所以一直循环检查是否正在播放,是暂时无解的对吗? 还有就是查看对话记录也是循环检查的,也是无解的对吗?
yihong0618
View comment · 2023-12-22T04:16:34Z
所以一直循环检查是否正在播放,是暂时无解的对吗? 还有就是查看对话记录也是循环检查的,也是无解的对吗?
不是
fencanyan
View comment · 2024-01-09T04:58:40Z
@yihong0618 请问, 是不是不和小爱音箱在一个局域网也可以用?只要在有网络的地方部署成功就可以用了?
yihong0618
View comment · 2024-01-09T06:30:38Z
@yihong0618 请问, 是不是不和小爱音箱在一个局域网也可以用?只要在有网络的地方部署成功就可以用了?
不是,海外 IP 或者 vps 会风控也用不了,其余能用,你可以去 xiaogpt repo 里搜索
jingyibo123
View comment · 2024-01-11T02:01:24Z
能用拆机后的 USB 来烧固件,但我没有 windows,-> 学习老的 macbookpro 2015 刷双系统,尝试给小爱刷机 -> 小米把这个也封了
大神能说一下怎么个被封法么?
yihong0618
View comment · 2024-01-11T02:02:03Z
能用拆机后的 USB 来烧固件,但我没有 windows,-> 学习老的 macbookpro 2015 刷双系统,尝试给小爱刷机 -> 小米把这个也封了
大神能说一下怎么个被封法么?
读不到了
starFelix
View comment · 2024-02-10T04:07:40Z
写在前面
项目链接 -> https://github.com/yihong0618/xiaogpt 大多数事儿很简单的一个结论是:这么做有什么用? 但是,没用就不做了么?好玩也是有用之一呀。
注
下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo.
想法
- 从 ChatGPT 刚上第二周开始,我弄了个账号,后来发现一个很好玩的项目 ChineseAiDungeonChatGPT —> 用 ChatGPT 玩 DND, 我突然想我能语音就更有带入感了。
- 因为之前折腾 blue 时候了解了一些小米 IOT 设备的交互 tts, 我觉得我用一些方式是可以实现的
- 不过从想法到可用确实经历了不少
开始折腾
最早的 idea 是把小爱同学破解了,破解之后拦截我的对话,如果对话包含
GPT就用破解的小爱发送请求到 ChatGPT, 再把 ChatGPT 的回复截包,读出来。
遇到最大的困难是小爱怎么破解,搜了一圈发现,小爱是有办法通过串口来 hook 再刷固件的。
但串口是啥?我学习了串口通信,用自己树莓派做实验,去淘宝买 usb2ttl 学会了。但是需要焊接,我又去 B 站刷视频学习,问同事硬件大神如何焊接,学会了焊接。但,他妈的,新的小爱同学把串口通信给封了。
翻到了一个国外破解小爱同学的,能用拆机后的 USB 来烧固件,但我没有 windows,-> 学习老的 macbookpro 2015 刷双系统,尝试给小爱刷机 -> 小米把这个也封了
有趣的是每天用发现确实还挺好用的,让他放歌,给我儿子放小猪佩奇。于是又给丈母娘买了一个,给她配置好,可以放歌。
- 第一个方式不太行,尝试去用路由 openwrt 截包再发送,依然失败,我折腾了一下发现 https 获取 payload 还是有些困难的
- 转向了 Siri 那么我能不能用 Siri 实现呢?是能的,可以用 Siri -> 捷径 -> 获取你说的话 -> 发送 ChatGPT -> 小爱 or 直接 Siri 自己来
- 网友象牙山刘能有一天发他儿子小爱同学的聊天记录,突然灵感来了,我可以用最蠢的轮询,来不断获取最新的聊天记录,如果有新的符合要求我就发送给 ChatGPT —> 再用 tts 让小爱同学朗读,但因为朗读需要时间,所以轮询也没那么笨了。
实现
- 先实现不断拿对话历史
- 测试 revChatGPT 可行
- 利用 MiService call tts 可行
- 剩下就是写代码了
准备
- ChatGPT id
- 小爱音响
- 能正常联网的环境或 proxy
- python3.8+
使用
- pip install -r requirements.txt
- 参考 MiService 项目 README 并在本地 terminal 跑
micli list拿到你音响的 DID 成功 别忘了设置 export MI_DID=xxx 这个 MI_DID 用- 参考 revChatGPT 项目 README 配置 chatGPT 的 config
- run
python xiaogpt.py --hardware ${your_hardware}hardware 你看小爱屁股上有型号,输入进来- 跑起来之后就可以问小爱同学问题了,“帮我回答开头的问题” 会发送一份给 ChatGPT 然后小爱同学用 tts 回答
总结
- 完成那一刻确实挺开心,但过程中发现了几个好玩的博客,惊讶了做 revChatGPT 的学生真牛逼,学会了焊接,开始发现硬件也挺有意思的,不断折腾的过程沮丧有一些,但更多的是学习新东西带来的兴奋感。
- 拆机发现,小爱同学内部做工确实不错
- 折腾过程中的感受,将来肯定有一天这些智能音箱厂商也会训练大模型,将彻底改变智能家居,仿佛看到了未来
彩蛋
看项目介绍,没能完全了解这个仓库能够提供的能力。可以通过复杂的命令控制家电吗?还是只能通过gpt对话。 另外这个脚本需要持续运行吗?还是说设置成功后就完事不需要运行了。
yihong0618
View comment · 2024-02-10T04:39:28Z
写在前面
项目链接 -> https://github.com/yihong0618/xiaogpt 大多数事儿很简单的一个结论是:这么做有什么用? 但是,没用就不做了么?好玩也是有用之一呀。
注
下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo.
想法
- 从 ChatGPT 刚上第二周开始,我弄了个账号,后来发现一个很好玩的项目 ChineseAiDungeonChatGPT —> 用 ChatGPT 玩 DND, 我突然想我能语音就更有带入感了。
- 因为之前折腾 blue 时候了解了一些小米 IOT 设备的交互 tts, 我觉得我用一些方式是可以实现的
- 不过从想法到可用确实经历了不少
开始折腾
最早的 idea 是把小爱同学破解了,破解之后拦截我的对话,如果对话包含
GPT就用破解的小爱发送请求到 ChatGPT, 再把 ChatGPT 的回复截包,读出来。
遇到最大的困难是小爱怎么破解,搜了一圈发现,小爱是有办法通过串口来 hook 再刷固件的。
但串口是啥?我学习了串口通信,用自己树莓派做实验,去淘宝买 usb2ttl 学会了。但是需要焊接,我又去 B 站刷视频学习,问同事硬件大神如何焊接,学会了焊接。但,他妈的,新的小爱同学把串口通信给封了。
翻到了一个国外破解小爱同学的,能用拆机后的 USB 来烧固件,但我没有 windows,-> 学习老的 macbookpro 2015 刷双系统,尝试给小爱刷机 -> 小米把这个也封了
有趣的是每天用发现确实还挺好用的,让他放歌,给我儿子放小猪佩奇。于是又给丈母娘买了一个,给她配置好,可以放歌。
- 第一个方式不太行,尝试去用路由 openwrt 截包再发送,依然失败,我折腾了一下发现 https 获取 payload 还是有些困难的
- 转向了 Siri 那么我能不能用 Siri 实现呢?是能的,可以用 Siri -> 捷径 -> 获取你说的话 -> 发送 ChatGPT -> 小爱 or 直接 Siri 自己来
- 网友象牙山刘能有一天发他儿子小爱同学的聊天记录,突然灵感来了,我可以用最蠢的轮询,来不断获取最新的聊天记录,如果有新的符合要求我就发送给 ChatGPT —> 再用 tts 让小爱同学朗读,但因为朗读需要时间,所以轮询也没那么笨了。
实现
- 先实现不断拿对话历史
- 测试 revChatGPT 可行
- 利用 MiService call tts 可行
- 剩下就是写代码了
准备
- ChatGPT id
- 小爱音响
- 能正常联网的环境或 proxy
- python3.8+
使用
- pip install -r requirements.txt
- 参考 MiService 项目 README 并在本地 terminal 跑
micli list拿到你音响的 DID 成功 别忘了设置 export MI_DID=xxx 这个 MI_DID 用- 参考 revChatGPT 项目 README 配置 chatGPT 的 config
- run
python xiaogpt.py --hardware ${your_hardware}hardware 你看小爱屁股上有型号,输入进来- 跑起来之后就可以问小爱同学问题了,“帮我回答开头的问题” 会发送一份给 ChatGPT 然后小爱同学用 tts 回答
总结
- 完成那一刻确实挺开心,但过程中发现了几个好玩的博客,惊讶了做 revChatGPT 的学生真牛逼,学会了焊接,开始发现硬件也挺有意思的,不断折腾的过程沮丧有一些,但更多的是学习新东西带来的兴奋感。
- 拆机发现,小爱同学内部做工确实不错
- 折腾过程中的感受,将来肯定有一天这些智能音箱厂商也会训练大模型,将彻底改变智能家居,仿佛看到了未来
彩蛋
看项目介绍,没能完全了解这个仓库能够提供的能力。可以通过复杂的命令控制家电吗?还是只能通过gpt对话。 另外这个脚本需要持续运行吗?还是说设置成功后就完事不需要运行了。
能
MrTreasure
View comment · 2024-02-28T08:08:46Z
我希望通过GPT接入后再控制智能家居,但是目前看见只能简单对话。请问控制家居这个怎么实现呢?小米那边文档没有找到
yihong0618
View comment · 2024-02-28T08:12:56Z
我希望通过GPT接入后再控制智能家居,但是目前看见只能简单对话。请问控制家居这个怎么实现呢?小米那边文档没有找到
这个算是逆向,没有文档,但实现智能控制不难,你可以利用 miservice 做,但是需要你自己 DIY 我的例子: https://github.com/yihong0618/gitblog/issues
lonelam
View comment · 2024-03-25T12:25:19Z
大佬有没有openwrt做流量劫持的踩坑?盲猜这种IoT设备应该不会强校验https证书。
yihong0618
View comment · 2024-03-25T12:28:54Z
大佬有没有openwrt做流量劫持的踩坑?盲猜这种IoT设备应该不会强校验https证书。
xiaoai 好像做了。
Saintoliver
View comment · 2024-04-02T15:46:30Z
感谢yihong大佬的回答,我放弃了全局梯子。直接选择连接国内的通亿千问,在家里的NAS docker上用上了。感谢。
以后家里小朋友的十万个为什么,不需要我都百度后回答他了。。。。
daimenspace
View comment · 2024-04-10T08:04:35Z
感谢yihong大佬的回答,我放弃了全局梯子。直接选择连接国内的通亿千问,在家里的NAS docker上用上了。感谢。
以后家里小朋友的十万个为什么,不需要我都百度后回答他了。。。。
小爱同学现在不能注册开发者账号了,是不是就没法接入其他家的AI助手了?
sparkssssssss
View comment · 2024-04-12T00:59:20Z
感谢带佬提供的教程,不过使用下来感觉不好用, 1-gpt好像无法完全接管,每次都要用前缀,我尝试改了下代码逻辑,任何提问都由gpt,但是好像有问题2 2-不管参数配置mute_xiaomi,还是启动加参数mute-xiaomi,似乎小米都会抢答,或者说几个字,然后说正在问gpt…
所以,想咨询下,如何能彻底ban掉小爱的回答?我是lx05 红外线那款,
yihong0618
View comment · 2024-04-12T01:01:50Z
感谢yihong大佬的回答,我放弃了全局梯子。直接选择连接国内的通亿千问,在家里的NAS docker上用上了。感谢。 以后家里小朋友的十万个为什么,不需要我都百度后回答他了。。。。
小爱同学现在不能注册开发者账号了,是不是就没法接入其他家的AI助手了?
能
yihong0618
View comment · 2024-04-12T01:02:55Z
感谢带佬提供的教程,不过使用下来感觉不好用, 1-gpt好像无法完全接管,每次都要用前缀,我尝试改了下代码逻辑,任何提问都由gpt,但是好像有问题2 2-不管参数配置mute_xiaomi,还是启动加参数mute-xiaomi,似乎小米都会抢答,或者说几个字,然后说正在问gpt…
所以,想咨询下,如何能彻底ban掉小爱的回答?我是lx05 红外线那款,
是可行的 但不建议彻底 ban 掉小米回答,那样会频繁请求。 https://github.com/yihong0618/xiaogpt/issues/417
yihong0618
View comment · 2024-04-12T01:03:49Z
感谢带佬提供的教程,不过使用下来感觉不好用, 1-gpt好像无法完全接管,每次都要用前缀,我尝试改了下代码逻辑,任何提问都由gpt,但是好像有问题2 2-不管参数配置mute_xiaomi,还是启动加参数mute-xiaomi,似乎小米都会抢答,或者说几个字,然后说正在问gpt…
所以,想咨询下,如何能彻底ban掉小爱的回答?我是lx05 红外线那款,
关于用前缀是为了不影响正常小爱的提问,你可以自行 diy 去掉前缀
sparkssssssss
View comment · 2024-04-12T01:42:04Z
感谢带佬提供的教程,不过使用下来感觉不好用, 1-gpt好像无法完全接管,每次都要用前缀,我尝试改了下代码逻辑,任何提问都由gpt,但是好像有问题2 2-不管参数配置mute_xiaomi,还是启动加参数mute-xiaomi,似乎小米都会抢答,或者说几个字,然后说正在问gpt… 所以,想咨询下,如何能彻底ban掉小爱的回答?我是lx05 红外线那款,
关于用前缀是为了不影响正常小爱的提问,你可以自行 diy 去掉前缀
看代码逻辑,我修改全部都问gpt了,小爱还是会抢答,我主要想问下,怎么能彻底拦截小爱啊,我吧所有mute_xiaoai的都设置为True了,也把所有问题都让gpt了.
if True:
#if query.startswith(tuple(self.key_word)):
# only mute when your clause start's with the keyword
self.this_mute_xiaoai = True
#self.this_mute_xiaoai = False
# drop 帮我回答
query = re.sub(rf"^({'|'.join(self.key_word)})", "", query)
print("-" * 20)
print("问题:" + query + "?")
query = f"{query},{PROMPT}"
# waiting for xiaoai speaker done
#if self.mute_xiaoai:
# await asyncio.sleep(1)
await self.do_tts("正在问GPT")
........
yihong0618
View comment · 2024-04-12T01:46:04Z
感谢带佬提供的教程,不过使用下来感觉不好用, 1-gpt好像无法完全接管,每次都要用前缀,我尝试改了下代码逻辑,任何提问都由gpt,但是好像有问题2 2-不管参数配置mute_xiaomi,还是启动加参数mute-xiaomi,似乎小米都会抢答,或者说几个字,然后说正在问gpt… 所以,想咨询下,如何能彻底ban掉小爱的回答?我是lx05 红外线那款,
关于用前缀是为了不影响正常小爱的提问,你可以自行 diy 去掉前缀
看代码逻辑,我修改全部都问gpt了,小爱还是会抢答,我主要想问下,怎么能彻底拦截小爱啊,我吧所有mute_xiaoai的都设置为True了,也把所有问题都让gpt了.
if True: #if query.startswith(tuple(self.key_word)): # only mute when your clause start's with the keyword self.this_mute_xiaoai = True #self.this_mute_xiaoai = False # drop 帮我回答 query = re.sub(rf"^({'|'.join(self.key_word)})", "", query) print("-" * 20) print("问题:" + query + "?") query = f"{query},{PROMPT}" # waiting for xiaoai speaker done #if self.mute_xiaoai: # await asyncio.sleep(1) await self.do_tts("正在问GPT") ........
目前不能。lx05 可能会 mute 的更慢一些
ZHANGHAIWEN949
View comment · 2024-04-22T08:55:41Z
能接入小爱通话吗 让GPT跟骚扰电话斗智斗勇
windfgg
View comment · 2024-05-12T15:30:00Z
感谢带佬提供的教程,不过使用下来感觉不好用, 1-gpt好像无法完全接管,每次都要用前缀,我尝试改了下代码逻辑,任何提问都由gpt,但是好像有问题2 2-不管参数配置mute_xiaomi,还是启动加参数mute-xiaomi,似乎小米都会抢答,或者说几个字,然后说正在问gpt… 所以,想咨询下,如何能彻底ban掉小爱的回答?我是lx05 红外线那款,
关于用前缀是为了不影响正常小爱的提问,你可以自行 diy 去掉前缀
看代码逻辑,我修改全部都问gpt了,小爱还是会抢答,我主要想问下,怎么能彻底拦截小爱啊,我吧所有mute_xiaoai的都设置为True了,也把所有问题都让gpt了.
if True: #if query.startswith(tuple(self.key_word)): # only mute when your clause start's with the keyword self.this_mute_xiaoai = True #self.this_mute_xiaoai = False # drop 帮我回答 query = re.sub(rf"^({'|'.join(self.key_word)})", "", query) print("-" * 20) print("问题:" + query + "?") query = f"{query},{PROMPT}" # waiting for xiaoai speaker done #if self.mute_xiaoai: # await asyncio.sleep(1) await self.do_tts("正在问GPT") ........目前不能。lx05 可能会 mute 的更慢一些
https://bbs.hassbian.com/thread-23752-1-1.html
我看到一篇 小爱音箱接入ChatGPT:上下文理解和去除小爱回应 可以实现去除小爱回应吗?
leo07046219
View comment · 2024-06-22T15:07:58Z
QA2 你做这玩意也没用啊?
各种软硬件折腾的快乐,他们体会不到,哈哈哈 — 一名本科就开始玩单片机,现在在嵌入式行业的人这么说
hirolee88
View comment · 2025-10-26T10:52:41Z
哇,现在有小智AI和,怎么改造到小爱音箱上面
588585
View comment · 2026-03-20T17:33:51Z
欸,我有个xioami sound飞了三个串口2个没输出,一个RTOS的输出,但是这个控制台无法进行操作。又飞了USB口,插入后没adb。一晚上一无所获。然后看到博主,发现历程一模一样,难绷。
docker-alex-ai
View comment · 2026-07-12T23:43:10Z
请求接入小智,那个音色很牛