From bd9c5373f4a73b3d2926db4551e251b12e88e40a Mon Sep 17 00:00:00 2001 From: haoping Date: Sun, 9 Feb 2025 16:56:52 +0800 Subject: [PATCH 1/2] feat: dashscope session init enable setting system prompt --- bot/dashscope/dashscope_session.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/dashscope/dashscope_session.py b/bot/dashscope/dashscope_session.py index 0de57b926..e432f67a4 100644 --- a/bot/dashscope/dashscope_session.py +++ b/bot/dashscope/dashscope_session.py @@ -4,7 +4,7 @@ class DashscopeSession(Session): def __init__(self, session_id, system_prompt=None, model="qwen-turbo"): - super().__init__(session_id) + super().__init__(session_id, system_prompt=system_prompt) self.reset() def discard_exceeding(self, max_tokens, cur_tokens=None): From 0720c231d40ed2e7974bbb30bd3e54dfcef76d2d Mon Sep 17 00:00:00 2001 From: haoping Date: Sun, 9 Feb 2025 17:05:50 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=9C=BA?= =?UTF-8?q?=E5=99=A8=E4=BA=BA=E7=9A=84session=E5=8F=AA=E6=9B=B4=E6=8D=A2sy?= =?UTF-8?q?stem=20prompt=E4=B8=8D=E6=B8=85=E9=99=A4=E4=BC=9A=E8=AF=9D?= =?UTF-8?q?=EF=BC=8C=E4=BB=8E=E8=80=8C=E8=BF=9B=E8=A1=8C=E5=A4=9A=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot/session_manager.py | 15 ++++++++------- plugins/role/role.py | 4 +++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/bot/session_manager.py b/bot/session_manager.py index a6e89f956..ce2fe2968 100644 --- a/bot/session_manager.py +++ b/bot/session_manager.py @@ -19,7 +19,8 @@ def reset(self): def set_system_prompt(self, system_prompt): self.system_prompt = system_prompt - self.reset() + if self.messages and self.messages[0]["role"] == "system": + self.messages[0]["content"] = system_prompt def add_query(self, query): user_item = {"role": "user", "content": query} @@ -46,18 +47,18 @@ def __init__(self, sessioncls, **session_args): self.sessioncls = sessioncls self.session_args = session_args - def build_session(self, session_id, system_prompt=None): + def build_session(self, session_id): """ 如果session_id不在sessions中,创建一个新的session并添加到sessions中 如果system_prompt不会空,会更新session的system_prompt并重置session """ if session_id is None: - return self.sessioncls(session_id, system_prompt, **self.session_args) - + return self.sessioncls(session_id, **self.session_args) + 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 - self.sessions[session_id].set_system_prompt(system_prompt) + self.sessions[session_id] = self.sessioncls(session_id, **self.session_args) + elif self.session_args.get("system_prompt"): # 如果有新的system_prompt,更新并重置session + self.sessions[session_id].set_system_prompt(self.session_args.get("system_prompt")) session = self.sessions[session_id] return session diff --git a/plugins/role/role.py b/plugins/role/role.py index 8890a6299..e2e80f6c1 100644 --- a/plugins/role/role.py +++ b/plugins/role/role.py @@ -19,7 +19,8 @@ def __init__(self, bot, sessionid, desc, wrapper=None): self.sessionid = sessionid self.wrapper = wrapper or "%s" # 用于包装用户输入 self.desc = desc - self.bot.sessions.build_session(self.sessionid, system_prompt=self.desc) + self.bot.sessions.session_args.update({"system_prompt": self.desc}) + self.bot.sessions.build_session(self.sessionid) def reset(self): self.bot.sessions.clear_session(self.sessionid) @@ -28,6 +29,7 @@ def action(self, user_action): session = self.bot.sessions.build_session(self.sessionid) if session.system_prompt != self.desc: # 目前没有触发session过期事件,这里先简单判断,然后重置 session.set_system_prompt(self.desc) + session.reset() prompt = self.wrapper % user_action return prompt