|
本帖最后由 silas3082 于 2023-12-24 21:12 编辑
之前写了一个帖子:白嫖openai的api key把小爱音箱接入chatgpt https://bbs.hassbian.com/thread-23674-1-1.html 已经基本实现了小爱音箱接入chatgpt,可以正常的到自己想要的结果,并让小爱tts出来
存在的问题就是:1没有实现上下文。2.小爱会先回复自己的问题,之后才是chatgpt的回答
经过论坛大佬idummy的指点,他提供了一个离线语音模块接入的方法,他的方法如下:
“
提供一个让小爱不回答你的问题方法,开启贾维斯 时,先在小爱训练一个自定义回答,当然楼主也是这样做的,当开启贾维斯时,我们定义一个全局变量global.set('jtta', 0); 然后向text.xiaomi_l05b_990e_play_text发送{"value":"_"}值,可以静音小爱,再接一个function 判断全局变量有没有变成1,没有为1则再次连接循环静音,另外一个流程当获取到chatgpt返回的文本时在function里定义全局变量global.set('jtta', 1); 即可,这时循环静音就取消了,TTS这时就发出你要的声音了,完全关闭小爱回答你的声音,还有你可以在发送开启贾维斯时等小爱回答完自定义语音后,直接触发button.xiaomi_l05b_990e_wake_up按钮唤醒小爱,你就可以实现叫小爱同学 ,小爱音箱回答 自定义回答如 你说 然后唤醒小爱,你直接就可以说出你的话了,然后提交给GTP得到文本停止循环静音再TTS给小爱
”
“用一个离线语音模块详见https://bbs.hassbian.com/forum.p ... =%E8%AF%AD%E9%9F%B3 自定义唤醒语音后,发送串口数据到esphome 然后直接触发唤醒小爱音箱,这时就不用conversion传感器了,直接禁用conversion传感器,手动去获取对话文本,同时静音小爱,获取对话文本我是直接用嗅探软件嗅探小爱音箱APP的对话记录那里,把CURL请求拿到NODE-RED里手动去请求获取最新对话文本,保存其中一个requesid,下次用这个ID比较用以知道是不是获取的新对话记录了,这样就是还要去获取servertokens 我是用https://www.npmjs.com/package/xiaoai-tts这个来获取的 这样就可以完美解决了
”
有兴趣的可以研究一下大佬的方法,不过还得用一个离线语音放在小爱上边,我觉得没有必要,要是不用,小爱音箱自己也能实现就好了
接下来就是我的思路:
上下文:设置一个全局变量即可,然后放在请求头
那么,怎么实现把小爱自身的回答静音呢?idummy给了一个启发,就是发送{"value":"_"}值,随便一个什么标点符号都行,这样就静音了。
要是一直这样发送{"value":"_"}不就可以一直静音从而达到覆盖小爱原本回答的目的,可能这就是大佬说的循环静音。
那么如何在得到chatgpt回答之后,如何解除循环静音让小爱tts出来呢?大佬用了一个全局变量判断和抓包,我没法抓包,这次用了之前创建的辅助开关,判断状态。
流程就是当对小爱说唤醒贾维斯时,先自定义回答,同时weake up,同时打开辅助开关。同时用辅助开关激活循环静音。当获取到gpt回答,关闭辅助开关进而关闭循环静音,小爱就可以tts出来了
整体的流在这里:
这个是实现的效果,大伙看看怎么样?
源码已贡献出来了,欢迎交流
|
评分
-
查看全部评分
|