yihong0618 / gitblog

People Die, but Long Live GitHub

Home Page:https://yihong0618.github.io/gitblog/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

yihong0618 opened this issue · comments

commented

写在前面

项目链接 -> https://github.com/yihong0618/xiaogpt
大多数事儿很简单的一个结论是:这么做有什么用?
但是,没用就不做了么?好玩也是有用之一呀。

下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo.

想法

  • 从 ChatGPT 刚上第二周开始,我弄了个账号,后来发现一个很好玩的项目 ChineseAiDungeonChatGPT --> 用 ChatGPT 玩 DND, 我突然想我能语音就更有带入感了。
  • 因为之前折腾 blue 时候了解了一些小米 IOT 设备的交互 tts, 我觉得我用一些方式是可以实现的
  • 不过从想法到可用确实经历了不少

开始折腾

  1. 最早的 idea 是把小爱同学破解了,破解之后拦截我的对话,如果对话包含 GPT 就用破解的小爱发送请求到 ChatGPT, 再把 ChatGPT 的回复截包,读出来。
  • 遇到最大的困难是小爱怎么破解,搜了一圈发现,小爱是有办法通过串口来 hook 再刷固件的。
  • 但串口是啥?我学习了串口通信,用自己树莓派做实验,去淘宝买 usb2ttl 学会了。但是需要焊接,我又去 B 站刷视频学习,问同事硬件大神如何焊接,学会了焊接。但,他妈的,新的小爱同学把串口通信给封了。
  • 翻到了一个国外破解小爱同学的,能用拆机后的 USB 来烧固件,但我没有 windows,-> 学习老的 macbookpro 2015 刷双系统,尝试给小爱刷机 -> 小米把这个也封了
  • 有趣的是每天用发现确实还挺好用的,让他放歌,给我儿子放小猪佩奇。于是又给丈母娘买了一个,给她配置好,可以放歌。
  1. 第一个方式不太行,尝试去用路由 openwrt 截包再发送,依然失败,我折腾了一下发现 https 获取 payload 还是有些困难的
  2. 转向了 Siri 那么我能不能用 Siri 实现呢?是能的,可以用 Siri -> 捷径 -> 获取你说的话 -> 发送 ChatGPT -> 小爱 or 直接 Siri 自己来
  3. 网友象牙山刘能有一天发他儿子小爱同学的聊天记录,突然灵感来了,我可以用最蠢的轮询,来不断获取最新的聊天记录,如果有新的符合要求我就发送给 ChatGPT --> 再用 tts 让小爱同学朗读,但因为朗读需要时间,所以轮询也没那么笨了。

实现

  • 先实现不断拿对话历史
  • 测试 revChatGPT 可行
  • 利用 MiService call tts 可行
  • 剩下就是写代码了

准备

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

使用

  1. pip install -r requirements.txt
  2. 参考 MiService 项目 README 并在本地 terminal 跑 micli list 拿到你音响的 DID 成功 别忘了设置 export MI_DID=xxx 这个 MI_DID 用
  3. 参考 revChatGPT 项目 README 配置 chatGPT 的 config
  4. run python xiaogpt.py --hardware ${your_hardware} hardware 你看小爱屁股上有型号,输入进来
  5. 跑起来之后就可以问小爱同学问题了,“帮我回答开头的问题” 会发送一份给 ChatGPT 然后小爱同学用 tts 回答

总结

  • 完成那一刻确实挺开心,但过程中发现了几个好玩的博客,惊讶了做 revChatGPT 的学生真牛逼,学会了焊接,开始发现硬件也挺有意思的,不断折腾的过程沮丧有一些,但更多的是学习新东西带来的兴奋感。
  • 拆机发现,小爱同学内部做工确实不错
  • 折腾过程中的感受,将来肯定有一天这些智能音箱厂商也会训练大模型,将彻底改变智能家居,仿佛看到了未来

彩蛋

image

我有一个二傻子斐讯R1音箱,看看能不能搞出来

commented

现在不用抓包了,修改了文章

哈哈,直接做个APP,TTS做交互更简单,技术也成熟

我有一个二傻子斐讯R1音箱,看看能不能搞出来

期待好消息😃

commented

有熬夜做一个傻儿子出来玩的冲动,哈哈哈😂

翻到了一个国外破解小爱同学的,[能用拆机后的 USB 来烧固件](https://github.com/duhow/xiaoai-patch/blob/master/research/lx06/install.md),但我没有 windows,-> 学习老的 macbookpro 2015 刷双系统,尝试给小爱刷机 -> 小米把这个也封了

这方式小米是怎么封的?新固件不让用了?

commented

对,新的版本这个暂时不行

确实是个很有意思的项目!生命不息,折腾不止。
如果用NAS替代PC做中转,上面跑MiService截音响,这个想法是可行的嘛

commented

@wsjq5477 可行,但是不要 mute-xiaomi

请教下为啥不加mute-xiaomi呢,我试了下加不加mute-xiaomi,小爱都只会回答自己的答案,但是终端会显示出gpt的答案

commented

会频繁请求 api, 容易被 ban 要是一直跑

大佬们,能实现和小度交互么?
https://juejin.cn/post/7203685609654550588

我有一个二傻子斐讯R1音箱,看看不能搞出来
斐讯可以刷,但是体验效果不好,更别说交互chatgpt了

@yihong0618 请问下放小猪佩奇是什么流程😊

commented

@yihong0618 请问下放小猪佩奇是什么流程😊

小爱同学,帮我播放小猪佩奇

@yihong0618 是小爱同学语音读的节目吗?我以为是和小米盒子联动播放视频,希望能通过关键词播放某一集的剧情。。

commented

是的。

可以用openwrt获取小爱设备突发特定流量后轮询

之前搞天猫精灵,发现提问题前一定需要某些语料然后才会回调接口,相信小爱也是一样的吧?怎么保持小爱可以一直说话,不需要语料?所以关键点是不断轮询吗?

commented

你们谁在墙内试过亚马逊Echo智能音箱?我基本放弃破解国内的智能音箱了。

commented

echo 有人做出来了

哈哈,yihong 佬也入了硬件的坑,我去年底开始折腾硬件,发现硬件真的好玩

关注这个有段时间,一直没能上手做。有个疑问,这个脚本我要跑在跟小爱同一个网络环境下么?

commented

@deadjoker 不需要。

@yihong0618 如果我希望多个小爱音箱都能够使用chatgpt的话,有没有方法只跑一个脚本呢?还是必须得多个环境跑多个脚本

commented

可以同环境部署多个吧

大神,你能写个手把手的流程就好了,才能让很多小白能去尝试。
你这个过程省略了好多细节,估计和你同级别的大牛才能看得懂操作起来。

大神,你能写个手把手的流程就好了,才能让很多小白能去尝试。 你这个过程省略了好多细节,估计和你同级别的大牛才能看得懂操作起来。

直接看视频就行。。还是保姆级别的。。。我在做的过程里面就遇到了一个ptython 版本的问题,其他的都是一次过。。

但是呢 是可以用,但是体验感不是很好

我看了你的教学视频,非常感兴趣,手里还没有小米音箱,准备买一个,请问现在购买的小米音箱Pro 型号是LX6,也可以按照你提供的方法,使用小爱同学和ChatGPT交互吗?小米音箱有没有版本要求?必须是哪个版本以下的才能按照你的方法做,我担心新购买的音箱,系统版本不对,无法实现教程的内容,谢谢!

我看了你的教学视频,非常感兴趣,手里还没有小米音箱,准备买一个,请问现在购买的小米音箱Pro 型号是LX6,也可以按照你提供的方法,使用小爱同学和ChatGPT交互吗?小米音箱有没有版本要求?必须是哪个版本以下的才能按照你的方法做,我担心新购买的音箱,系统版本不对,无法实现教程的内容,谢谢!

我就是新买的 可以 还是蛮简单的。。。 其实我有做一个类似的视频,但是国内的限制太多了

我在Windows系统上获取不到小米音箱的DID

请问,运行了以后,接受不到小爱的消息是什么原因?

commented

有更多的报错信息么?@Enchner @liuwx2010

@yihong0618 没有报错信息,界面上就显示的请用'帮我'什么什么的,然后就没有了。和小爱说话,也打不出任何的消息

commented

添加 arg --verbose

commented

--mute_xiaoai 这个参数不能使用,一用就报错 MinaService里不存在xxx方法
例如不存在 player_get_status
不存在player_pause
我去查了源码的确没有

这个项目是不是有点bug

commented

--mute_xiaoai 这个参数不能使用,一用就报错 MinaService里不存在xxx方法 例如不存在 player_get_status 不存在player_pause 我去查了源码的确没有

这个项目是不是有点bug

  1. pip uninstall miservice
  2. pip install -U miservice_fork
  3. 以后 bug 建议在该项目的 issue 下留言,那样大家都能看到,你搜下这个,里面也有人提过
commented

我遇到了问题, 但是尝试下来无法解决
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`
求解

commented

我遇到了问题, 但是尝试下来无法解决 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 问题

  1. 尝试不用 vpn
  2. 尝试换个网络,比如手机热点
commented

同上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 。 大陆地区。

commented

ssl 问题

  1. 尝试不用 vpn
  2. 尝试换个网络,比如手机热点

ssl 问题

尝试不用 vpn
尝试换个网络,比如手机热点

添加 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

为什么不直接搞一个脚本接入安卓语音助手?这样一个更简单吧,小爱只是一个回复,手机貌似可以接入更多,目前只有iPhone有捷径,安卓貌似现在只有tasker太鸡了

@qingqingjiayuan6 @SwartzMss 请问教程视频的链接在哪里?麻烦发一下

我觉得AI音箱的主要作用还是它的6个麦克风的触发和声音收集功能
至于识别转文字(尤其是英文)还是siri最优秀,然后就只剩下GPT调用和回传播放语音了
想通了这个逻辑,还是直接用homepod上的捷径就好

以下是GPT的回答: GPT回答出错 Error communicating with OpenAI

这是我的报错,GPT使用不了

早上看到之后,果断入手一个小爱音响 Play,现在小爱版GPT已经上线了。过程吧,说来也心酸,获取did累个半死,其他都还挺顺溜。感谢大神的折腾笔记。
就是现在 "enable_edge_tts": true 就直接没声音了,不知道咋回事。

commented

早上看到之后,果断入手一个小爱音响 Play,现在小爱版GPT已经上线了。过程吧,说来也心酸,获取did累个半死,其他都还挺顺溜。感谢大神的折腾笔记。

就是现在 "enable_edge_tts": true 就直接没声音了,不知道咋回事。

看看 http server 是否开启了,mac 的话需要点确认

为什么不直接搞一个脚本接入安卓语音助手?这样一个更简单吧,小爱只是一个回复,手机貌似可以接入更多,目前只有iPhone有捷径,安卓貌似现在只有tasker太鸡了

主要是他的8个麦克风阵列,远距离侦听功能很强,用手机的话距离远一点根本听不到

小爱的语音识别功能尚可,如果可以直接只用他的侦听功能而使用识别更好的程序那就更好了,比如siri中英文都可以

commented

我看了你的教学视频,非常感兴趣,手里还没有小米音箱,准备买一个,请问现在购买的小米音箱Pro 型号是LX6,也可以按照你提供的方法,使用小爱同学和ChatGPT交互吗?小米音箱有没有版本要求?必须是哪个版本以下的才能按照你的方法做,我担心新购买的音箱,系统版本不对,无法实现教程的内容,谢谢!

我就是新买的 可以 还是蛮简单的。。。 其实我有做一个类似的视频,但是国内的限制太多了

可以发到youtuber

可以用openwrt获取小爱设备突发特定流量后轮询

这是什么意思呢?我有openwrt

commented

可以用openwrt获取小爱设备突发特定流量后轮询

这是什么意思呢?我有openwrt

那个是失败的。

可以用openwrt获取小爱设备突发特定流量后轮询

这是什么意思呢?我有openwrt

那个是失败的。

我想接入ChatGPT,可以实现吗大神?

commented

可以用openwrt获取小爱设备突发特定流量后轮询

这是什么意思呢?我有openwrt

那个是失败的。

我想接入ChatGPT,可以实现吗大神?

你照着 README 就行啊。https://github.com/yihong0618/xiaogpt

@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

以下是GPT的回答: GPT回答出错 Error communicating with OpenAI

解决了吗?

Duplicate of #263

在本地 terminal 跑 micli list 拿到你音响的 DID
------拿到的是空的 换成 micli mina 可以

commented

@l568288g 是的

commented

生命在于折腾!👍,天猫精灵有试过吗

commented

生命在于折腾!👍,天猫精灵有试过吗

天猫精灵不可行。

commented

一次就搞成功了,玩的不亦乐乎。谢谢这么好的开源项目。

commented

以下是GPT的回答: GPT回答出错 Error communicating with OpenAI

解决了吗?

这是GPT相关的问题,

  • 确保你能访问 chatGPT, 最好梯子开全局代理,选择非亚洲节点
  • 确保你的token正常,也就是没有过期,没有超限
commented

一次就搞成功了,玩的不亦乐乎。谢谢这么好的开源项目。

My pleasure

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
main()
File "/home/kindom2008/THUDM/xiaogpt/xiaogpt/cli.py", line 136, in main
loop.run_until_complete(miboy.run_forever())
File "/home/kindom2008/miniconda3/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
return future.result()
File "/home/kindom2008/THUDM/xiaogpt/xiaogpt/xiaogpt.py", line 466, in run_forever
await self.stop_if_xiaoai_is_playing()
File "/home/kindom2008/THUDM/xiaogpt/xiaogpt/xiaogpt.py", line 408, in stop_if_xiaoai_is_playing
is_playing = await self.get_if_xiaoai_is_playing()
File "/home/kindom2008/THUDM/xiaogpt/xiaogpt/xiaogpt.py", line 399, 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'

哈哈,直接做个APP,TTS做交互更简单,技术也成熟

但是app需要自行点击启动,做不到开机就启动,但是docker可以

大侠,我在这里卡住了“参考 MiService 项目 README 并在本地 terminal 跑 micli list 拿到你音响的 DID 成功”。能否指导下?

  1. 执行这个时报错,说没有requirements,的确在仓库里没有提供这个,是不是漏了?
    set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890
    pip3 install miservice
bdd7776fd3cd0c3606491f3ebb0b1f1

2.执行这个时,xiaogpt.py --hardware L05B --use_chatgpt_api --mute_xiaoai --use_command
直接跳到这个Py文件,我只好在VS上点下run,就弹出这个对话框,接下来要做什么呢?
image

commented

哈哈,直接做个APP,TTS做交互更简单,技术也成熟

这个就是:https://github.com/jinmiao/chatgpt_android

部署在树莓派4B上流畅度如何呢?支持小爱触屏音箱吗?

commented

呢?支持小爱触屏音箱吗?

小爱触屏音不支持 mute_xiaoai 树莓派4B 没问题。

谢谢,家里还有一个“Yeelight语音助手”(集成了小爱同学和小冰,就是没有普通版的小爱音响-_-!)我试试哪个好用

昨天试了下,通过MiService可以给Yeelight语音助手发送文字进行播报,但是用底部的型号运行程序提示找不到这个型号,运行micli mina只返回了小爱触屏音箱的,没有Yeelight语音助手,这个还有办法适应Yeelight语音助手吗?

现在遇到个问题,使用小爱触屏音箱Pro 8,现在控制台可以显示GPT的回复,但是小爱音响并没有播放回复内容,这个如何解决呢?

commented

现在遇到个问题,使用小爱触屏音箱Pro 8,现在控制台可以显示GPT的回复,但是小爱音响并没有播放回复内容,这个如何解决呢?

加上 —use_command 另外请在项目里提 issue 那样其他人遇到了也容易看到

谢谢,搞定了。如果可以不用先调用小爱同学再调用chatgpt就更好了

非常感谢大神的指导,我从头至尾详细学习了一下,然后实际操作中出现了一点小问题,请大神指导。
输入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'
请您指正,诚待回复,不胜感激。

commented

非常感谢大神的指导,我从头至尾详细学习了一下,然后实际操作中出现了一点小问题,请大神指导。

输入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

非常感谢大神的指导,我从头到尾详细学习了一番,然后实际操作中出现了一点小问题,请大神的指导。

输入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
非常感谢,我试试看哈,原理能简单分析一下吗?

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)
请指导

commented

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 项目里留

好的好的,一定注意,十分感谢

commented

有办法监听到米家传感器设备么?
如果这条路打通了,再配合ChatGPT,智能家居就能迎来每个程序员的高光时刻。

commented

有办法监听到米家传感器设备么?
如果这条路打通了,再配合ChatGPT,智能家居就能迎来每个程序员的高光时刻。

理论上可以

大佬,关于音箱操作的哪些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!!!”

commented

大佬,关于音箱操作的哪些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 项目下留言比较好,那样大家也都能看见

micli mina返回为空
我的设备是小爱音响 型号为MDZ-25-DA

我型号是MDZ-25-DA是不是不支持呀

micli mina返回为空
我的设备是小爱音响 型号为MDZ-25-DA

好像不支持这个型号

我型号是MDZ-25-DA是不是不支持呀

是。。。

现在很多设计都改变了,有点惊讶我 2 月份就实现了;

怪不得 MDZ-25-DA不行

下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo. 这句话是什么意思啊...repo在哪里

下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo. 这句话是什么意思啊...repo在哪里

就是 xiaogpt 意思是不用原来逆向的方案了,用的是 api with key 的方案

下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo. 这句话是什么意思啊...repo在哪里

就是 xiaogpt 意思是不用原来逆向的方案了,用的是 api with key 的方案

我搞了好久 MDZ-25-DA 这个型号确实不行把 我测试了可以播放声音..获取文本不行

下文中 revChatGPT 方案废弃了,全部改用 API, 请参考 repo. 这句话是什么意思啊...repo在哪里

就是 xiaogpt 意思是不用原来逆向的方案了,用的是 api with key 的方案

我搞了好久 MDZ-25-DA 这个型号确实不行把 我测试了可以播放声音..获取文本不行

印象中这型号是不行的。。。。

我想问一下现在这个项目的方案还是网络获取嘛就是读一个小米账号音箱的记录 这个方式我测试的延迟比较大 还是你这个项目的话是读的本地的一个数据库啊会比较快一点

我想问一下现在这个项目的方案还是网络获取嘛就是读一个小米账号音箱的记录 这个方式我测试的延迟比较大 还是你这个项目的话是读的本地的一个数据库啊会比较快一点

是的。其实延迟可以改 sleep 时间的,但会频繁请求不建议

我想问一下现在这个项目的方案还是网络获取嘛就是读一个小米账号音箱的记录 这个方式我测试的延迟比较大 还是你这个项目的话是读的本地的一个数据库啊会比较快一点

是的。其实延迟可以改 sleep 时间的,但会频繁请求不建议

大佬有群吗 加一个讨论