From ff3d14318559494c8a684968d6fb837254e6145e Mon Sep 17 00:00:00 2001 From: lanvent Date: Sun, 26 Mar 2023 23:33:29 +0800 Subject: [PATCH] plugins: support openaibot --- bot/openai/open_ai_bot.py | 2 +- bot/session_manager.py | 7 ++++++- plugins/dungeon/dungeon.py | 2 +- plugins/godcmd/godcmd.py | 4 ++-- plugins/role/role.py | 10 +++++----- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/bot/openai/open_ai_bot.py b/bot/openai/open_ai_bot.py index ac8b030..fde673d 100644 --- a/bot/openai/open_ai_bot.py +++ b/bot/openai/open_ai_bot.py @@ -91,5 +91,5 @@ class OpenAIBot(Bot, OpenAIImage): except Exception as e: # unknown exception logger.exception(e) - Session.clear_session(user_id) + self.sessions.clear_session(user_id) return 0,0, "请再问我一次吧" diff --git a/bot/session_manager.py b/bot/session_manager.py index e7908e4..3bde7f4 100644 --- a/bot/session_manager.py +++ b/bot/session_manager.py @@ -40,6 +40,10 @@ class SessionManager(object): self.session_args = session_args def build_session(self, session_id, system_prompt=None): + ''' + 如果session_id不在sessions中,创建一个新的session并添加到sessions中 + 如果system_prompt不会空,会更新session的system_prompt并重置session + ''' if session_id not in self.sessions: self.sessions[session_id] = self.sessioncls(session_id, system_prompt, **self.session_args) elif system_prompt is not None: # 如果有新的system_prompt,更新并重置session @@ -70,7 +74,8 @@ class SessionManager(object): return session def clear_session(self, session_id): - del(self.sessions[session_id]) + if session_id in self.sessions: + del(self.sessions[session_id]) def clear_all_session(self): self.sessions.clear() diff --git a/plugins/dungeon/dungeon.py b/plugins/dungeon/dungeon.py index e156ae7..1fa3f2f 100644 --- a/plugins/dungeon/dungeon.py +++ b/plugins/dungeon/dungeon.py @@ -52,7 +52,7 @@ class Dungeon(Plugin): if e_context['context'].type != ContextType.TEXT: return bottype = Bridge().get_bot_type("chat") - if bottype != const.CHATGPT: + if bottype not in (const.CHATGPT, const.OPEN_AI): return bot = Bridge().get_bot("chat") content = e_context['context'].content[:] diff --git a/plugins/godcmd/godcmd.py b/plugins/godcmd/godcmd.py index e36af2b..0d574d0 100644 --- a/plugins/godcmd/godcmd.py +++ b/plugins/godcmd/godcmd.py @@ -179,7 +179,7 @@ class Godcmd(Plugin): elif cmd == "id": ok, result = True, f"用户id=\n{user}" elif cmd == "reset": - if bottype == const.CHATGPT: + if bottype in (const.CHATGPT, const.OPEN_AI): bot.sessions.clear_session(session_id) ok, result = True, "会话已重置" else: @@ -201,7 +201,7 @@ class Godcmd(Plugin): load_config() ok, result = True, "配置已重载" elif cmd == "resetall": - if bottype == const.CHATGPT: + if bottype in (const.CHATGPT, const.OPEN_AI): bot.sessions.clear_all_session() ok, result = True, "重置所有会话成功" else: diff --git a/plugins/role/role.py b/plugins/role/role.py index 75530c4..0fcab35 100644 --- a/plugins/role/role.py +++ b/plugins/role/role.py @@ -17,15 +17,15 @@ class RolePlay(): self.sessionid = sessionid self.wrapper = wrapper or "%s" # 用于包装用户输入 self.desc = desc + self.bot.sessions.build_session(self.sessionid, system_prompt=self.desc) def reset(self): self.bot.sessions.clear_session(self.sessionid) def action(self, user_action): - session = self.bot.sessions.build_session(self.sessionid, self.desc) - if session[0]['role'] == 'system' and session[0]['content'] != self.desc: # 目前没有触发session过期事件,这里先简单判断,然后重置 - self.reset() - self.bot.sessions.build_session(self.sessionid, self.desc) + session = self.bot.sessions.build_session(self.sessionid) + if session.system_prompt != self.desc: # 目前没有触发session过期事件,这里先简单判断,然后重置 + session.set_system_prompt(self.desc) prompt = self.wrapper % user_action return prompt @@ -74,7 +74,7 @@ class Role(Plugin): if e_context['context'].type != ContextType.TEXT: return bottype = Bridge().get_bot_type("chat") - if bottype != const.CHATGPT: + if bottype not in (const.CHATGPT, const.OPEN_AI): return bot = Bridge().get_bot("chat") content = e_context['context'].content[:]