KroMiose / nonebot_plugin_naturel_gpt

一个基于NoneBot框架的Ai聊天插件,对接OpenAi文本生成接口,实现了机器人的人格 自定义/切换,聊天记忆等功能
Apache License 2.0
471 stars 52 forks source link

api全部失效还可以进行对话(? #12

Closed YouYouLip closed 1 year ago

YouYouLip commented 1 year ago

image image image image image image image

YouYouLip commented 1 year ago

我只有5个api nb后台目前显示的是全部失效 但是还是可以进行对话 只不过是反应并不快 貌似是在尝试切换api(? 还是可以进行回复的 只不过需要1-3分钟内

YouYouLip commented 1 year ago

唯一的问题就是这个情况会导致会话跟不上 大概率是假死了 应该就是已知问题里的了 切换api的部分时候会出现什么信息都接收不了然后假死 过了很久消息一下子全部涌出来 该插件便会慢慢回复 导致跟不上会话,(不过我很好奇 为什么回复群聊到我这里直接装死了)

YouYouLip commented 1 year ago

错误代码也就只有 nonebot.adapters.onebot.v11.exception.NetworkError: NetWorkError(message='WebSocket call api send_msg timeout')

asyncio.exceptions.InvalidStateError: invalid state (貌似是异步问题)

[ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_naturel_gpt) failed.

[ERROR] nonebot | OneBot V11 | Error while process data from websocket for bot 2907336149.

不过并不影响 gocq没掉自己就重连上去了 而且

YouYouLip commented 1 year ago

而且能白嫖才是最重要的(dog) 当然我在想这个失效还能对话的问题不会是因为已知问题里触发的吧(?

KroMiose commented 1 year ago

@YouYouLip 正常来说如果api全部失效或者请求错误会回复一段错误信息,“还能对话”这个问题有点神奇,因为目前的插件并没有做任何除了“正常对话”和“报错信息”以外的处理或者备选项,我推测这个情况可能是短时间内的请求量过大被openai那边临时ban掉了,但其实key还是有效的,所以偶尔还能对话

另外当前的插件并没有做异步,所有的请求都是同步处理的,以后会尝试改成异步(详见readme中有提到

推测“消息卡住一段时间后突然涌出来”的情况可能是在某一次请求回复的时候因为网络或者其它原因导致一直没收到回复(保持等待中且没有发生错误断开),导致后面的消息都被阻塞了没有处理,等到 超时/回复 后才发送出来并继续处理积压的请求,根本上还是同步执行所导致的问题

KroMiose commented 1 year ago

@YouYouLip 补充:刚才又看了下 nonebot.adapters.onebot.v11.exception.NetworkError: NetWorkError(message='WebSocket call api send_msg timeout') 这个大概是nonebot与gocqhttp那边断开了,上面那个问题的原因也可能是插件获取完回复后尝试发送信息时发不出去被阻塞导致的,然后一段时间后自动重连上了才发送出去,如果是这个问题的话可能需要检查gocqhttp那边的情况(这两天我也碰见过这个情况,gocqhttp后台会有ws连接断开的报错提示,但是一段时候后会重连上)或者尝试 重启/重新登陆 gocqhttp

YouYouLip commented 1 year ago

@YouYouLip 补充:刚才又看了下 nonebot.adapters.onebot.v11.exception.NetworkError: NetWorkError(message='WebSocket call api send_msg timeout') 这个大概是nonebot与gocqhttp那边断开了,上面那个问题的原因也可能是插件获取完回复后尝试发送信息时发不出去被阻塞导致的,然后一段时间后自动重连上了才发送出去,如果是这个问题的话可能需要检查gocqhttp那边的情况(这两天我也碰见过这个情况,gocqhttp后台会有ws连接断开的报错提示,但是一段时候后会重连上)或者尝试 重启/重新登陆 gocqhttp

确实 忘看gocq那了 gocq这边是[WARNING]: 监听反向WS Universal时出现错误: websocket: close 1000 (normal) [WARNING]: 向反向WS Universal服务器推送 Event 时出现错误: websocket: close sent

YouYouLip commented 1 year ago

@YouYouLip 正常来说如果 api全部失效或者请求错误会回复一段错误信息,“还能对话”这个问题有点神奇,因为目前的插件并没有做任何除了“正常对话”和“报错信息”以外的处理或者备选项,我推测这个情况可能是短时间内的请求量过大被openai那边临时ban掉了,但其实key还是有效的,所以偶尔还能对话

另外当前的插件并没有做异步,所有的请求都是同步处理的,以后会尝试改成异步(详见自述文件中提到

推测"消息卡住一段时间后突然涌出来"的情况可能是在某一次请求回复的时候因为网络或者其它原因导致一直没收到回复(保持等待中且没有发生错误断开),导致后面的消息都被阻塞了没有处理,等到 超时/回复 后才发送出来并继续处理积压的请求,根本上还是同步执行所导致的问题

说实话我没想到这key的使用程度比以前多了不少 之前一个key1天就可以被我玩完 我一下子放了5个key 而且还是隔壁gpt3用了一些了 拿来放上去的好几天了 一个星期有了 我刚刚去openAI上看额度了 其中一个还是有额度的 那应该就是被ban掉了

KroMiose commented 1 year ago

群友玩得比较频繁的话确实额度蒸发挺快哈,gpt3的token也不便宜,中文一个字符能消耗掉2个token,英文一个单词一个token,导致要承载同样的信息量中文消耗的token数是英文的好几倍,如果接一层翻译的话或许能减少一些token消耗,但是翻译的语义也难以保证而且躲不掉机翻味道,总体生成质量肯定是远不如直接使用中文的(或许可以鼓励群友和bot用英文聊天?)

另外其实还有很多生成相关的参数可以也进行调整,我个人认为目前的默认参数设定尚未均衡到最佳性价比,更具体的参数调整方式后续会考虑再出个参数运作方式说明供自行调节参考,如果有比较适合的参数也欢迎分析(可以在配置文件中开启__debug__来观察prompt生成)