From 8a67fcf40f384133c1cad78f60e2d0593bd74b66 Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 1 Aug 2023 14:31:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BANormalMessageResponded?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=B7=BB=E5=8A=A0finish=5Freason=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- pkg/openai/session.py | 20 ++++++++++++++++---- pkg/plugin/models.py | 1 + pkg/qqbot/cmds/session/continue.py | 2 +- pkg/qqbot/message.py | 5 +++-- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 357b55ca..ab42d905 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,5 @@ bin/ test_* venv/ hugchat.json -qcapi \ No newline at end of file +qcapi +/*.yaml \ No newline at end of file diff --git a/pkg/openai/session.py b/pkg/openai/session.py index 6ab1b022..bb8a193d 100644 --- a/pkg/openai/session.py +++ b/pkg/openai/session.py @@ -194,8 +194,15 @@ class Session: # 请求回复 # 这个函数是阻塞的 - def append(self, text: str=None) -> str: - """向session中添加一条消息,返回接口回复""" + def append(self, text: str=None) -> tuple[str, str]: + """向session中添加一条消息,返回接口回复 + + Args: + text (str): 用户消息 + + Returns: + tuple[str, str]: (接口回复, finish_reason) + """ self.last_interact_timestamp = int(time.time()) @@ -209,7 +216,7 @@ class Session: event = pkg.plugin.host.emit(plugin_models.SessionFirstMessageReceived, **args) if event.is_prevented_default(): - return None + return None, None config = pkg.utils.context.get_config() max_length = config.prompt_submit_length @@ -244,7 +251,12 @@ class Session: total_tokens = 0 + finish_reason: str = "" + for resp in pkg.utils.context.get_openai_manager().request_completion(prompts): + + finish_reason = resp['choices'][0]['finish_reason'] + if resp['choices'][0]['message']['type'] == 'text': # 普通回复 res_text += resp['choices'][0]['message']['content'] @@ -305,7 +317,7 @@ class Session: self.just_switched_to_exist_session = False self.set_ongoing() - return res_ans if res_ans[0] != '\n' else res_ans[1:] + return res_ans if res_ans[0] != '\n' else res_ans[1:], finish_reason # 删除上一回合并返回上一回合的问题 def undo(self) -> str: diff --git a/pkg/plugin/models.py b/pkg/plugin/models.py index 6a6ba9d3..042f1f94 100644 --- a/pkg/plugin/models.py +++ b/pkg/plugin/models.py @@ -88,6 +88,7 @@ NormalMessageResponded = "normal_message_responded" session: pkg.openai.session.Session 会话对象 prefix: str 回复文字消息的前缀 response_text: str 响应文本 + finish_reason: str 响应结束原因 returns (optional): prefix: str 修改后的回复文字消息的前缀 diff --git a/pkg/qqbot/cmds/session/continue.py b/pkg/qqbot/cmds/session/continue.py index 4566ec90..2c494700 100644 --- a/pkg/qqbot/cmds/session/continue.py +++ b/pkg/qqbot/cmds/session/continue.py @@ -20,7 +20,7 @@ class ContinueCommand(AbstractCommandNode): session = pkg.openai.session.get_session(session_name) - text = session.append() + text, _ = session.append() reply = [text] diff --git a/pkg/qqbot/message.py b/pkg/qqbot/message.py index b4dcbfba..80346b8b 100644 --- a/pkg/qqbot/message.py +++ b/pkg/qqbot/message.py @@ -40,7 +40,7 @@ def process_normal_message(text_message: str, mgr, config, launcher_type: str, try: prefix = "[GPT]" if config.show_prefix else "" - text = session.append(text_message) + text, finish_reason = session.append(text_message) # 触发插件事件 args = { @@ -49,7 +49,8 @@ def process_normal_message(text_message: str, mgr, config, launcher_type: str, "sender_id": sender_id, "session": session, "prefix": prefix, - "response_text": text + "response_text": text, + "finish_reason": finish_reason, } event = pkg.plugin.host.emit(plugin_models.NormalMessageResponded, **args)