From dc1fd73ebb7c587fd29d6a68d8469e8fcaefcf1d Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Mon, 31 Jul 2023 15:17:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0continue=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/openai/api/chat_completion.py | 9 +++++++-- pkg/openai/session.py | 18 ++++++++++-------- pkg/qqbot/cmds/session/continue.py | 27 +++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 pkg/qqbot/cmds/session/continue.py diff --git a/pkg/openai/api/chat_completion.py b/pkg/openai/api/chat_completion.py index 9b4b0c24..e6d43165 100644 --- a/pkg/openai/api/chat_completion.py +++ b/pkg/openai/api/chat_completion.py @@ -159,9 +159,14 @@ class ChatCompletionRequest(RequestBase): logging.info("执行函数调用: name={}, arguments={}".format(func_name, arguments)) # 执行函数调用 - ret = execute_function(func_name, arguments) + ret = "" + try: + ret = execute_function(func_name, arguments) - logging.info("函数执行完成。") + logging.info("函数执行完成。") + except Exception as e: + ret = "error: execute function failed: {}".format(str(e)) + logging.error("函数执行失败: {}".format(str(e))) self.append_message( role="function", diff --git a/pkg/openai/session.py b/pkg/openai/session.py index 179d4c7b..ac85c408 100644 --- a/pkg/openai/session.py +++ b/pkg/openai/session.py @@ -194,7 +194,7 @@ class Session: # 请求回复 # 这个函数是阻塞的 - def append(self, text: str) -> str: + def append(self, text: str=None) -> str: """向session中添加一条消息,返回接口回复""" self.last_interact_timestamp = int(time.time()) @@ -270,7 +270,8 @@ class Session: # 将此次对话的双方内容加入到prompt中 # self.prompt.append({'role': 'user', 'content': text}) # self.prompt.append({'role': 'assistant', 'content': res_ans}) - self.prompt.append({'role': 'user', 'content': text}) + if text: + self.prompt.append({'role': 'user', 'content': text}) # 添加pending_msgs self.prompt += pending_msgs @@ -331,12 +332,13 @@ class Session: result_prompt = self.default_prompt + changable_prompts # 添加当前问题 - result_prompt.append( - { - 'role': 'user', - 'content': msg - } - ) + if msg: + result_prompt.append( + { + 'role': 'user', + 'content': msg + } + ) logging.debug("cut_out: {}".format(json.dumps(result_prompt, ensure_ascii=False, indent=4))) diff --git a/pkg/qqbot/cmds/session/continue.py b/pkg/qqbot/cmds/session/continue.py new file mode 100644 index 00000000..32fa8a2d --- /dev/null +++ b/pkg/qqbot/cmds/session/continue.py @@ -0,0 +1,27 @@ +from ..aamgr import AbstractCommandNode, Context + + +@AbstractCommandNode.register( + parent=None, + name="continue", + description="继续未完成的响应", + usage="!continue", + aliases=[], + privilege=1 +) +class ContinueCommand(AbstractCommandNode): + @classmethod + def process(cls, ctx: Context) -> tuple[bool, list]: + import pkg.openai.session + import config + session_name = ctx.session_name + + reply = [] + + session = pkg.openai.session.get_session(session_name) + + text = session.append() + + reply = [text] + + return True, reply \ No newline at end of file