From f2c4ef126e570f21e089e4157effbb1b532dbcee Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 30 Sep 2023 15:11:06 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96openai=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E6=B6=88=E6=81=AF=E6=88=AA=E6=96=AD=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/provider/provider_openai_official.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/model/provider/provider_openai_official.py b/model/provider/provider_openai_official.py index 2e7e6987e..625e9529c 100644 --- a/model/provider/provider_openai_official.py +++ b/model/provider/provider_openai_official.py @@ -119,6 +119,10 @@ class ProviderOpenAIOfficial(Provider): retry = 0 response = None err = '' + + # 截断倍率 + truncate_rate = 0.75 + while retry < 15: try: response = openai.ChatCompletion.create( @@ -139,19 +143,21 @@ class ProviderOpenAIOfficial(Provider): else: break elif 'maximum context length' in str(e): - gu.log("token超限, 清空对应缓存,并进行消息0.75倍截断") + gu.log("token超限, 清空对应缓存,并进行消息截断") self.session_dict[session_id] = [] - prompt = prompt[:int(len(prompt)*0.75)] + prompt = prompt[:int(len(prompt)*truncate_rate)] + truncate_rate -= 0.05 cache_data_list, new_record, req = self.wrap(prompt, session_id) elif 'Limit: 3 / min. Please try again in 20s.' in str(e) or "OpenAI response error" in str(e): time.sleep(30) + continue else: - time.sleep(5) gu.log(str(e), level=gu.LEVEL_ERROR) + time.sleep(3) err = str(e) retry+=1 - if retry >= 5: + if retry >= 15: gu.log(r"如果报错, 且您的机器在中国大陆内, 请确保您的电脑已经设置好代理软件(梯子), 并在配置文件设置了系统代理地址。详见https://github.com/Soulter/QQChannelChatGPT/wiki/%E4%BA%8C%E3%80%81%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E9%85%8D%E7%BD%AE", max_len=999) raise BaseException("连接出错: "+str(err))