Skip to content

支持会话更新system_prompt不清除会话 #2502

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bot/dashscope/dashscope_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
15 changes: 8 additions & 7 deletions bot/session_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand All @@ -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

Expand Down
4 changes: 3 additions & 1 deletion plugins/role/role.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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

Expand Down