feat:s4uprompt模式正式上位

This commit is contained in:
SengokuCola
2025-07-26 14:48:51 +08:00
parent b10d51f222
commit bffc372d95
4 changed files with 55 additions and 126 deletions

View File

@@ -33,10 +33,11 @@ def init_prompt():
{time_block} {time_block}
{identity_block} {identity_block}
你现在需要根据聊天内容选择的合适的action来参与聊天。 你现在需要根据聊天内容选择的合适的action来参与聊天。
{chat_context_description},以下是具体的聊天内容 {chat_context_description},以下是具体的聊天内容
{chat_content_block} {chat_content_block}
{moderation_prompt} {moderation_prompt}
现在请你根据{by_what}选择合适的action和触发action的消息: 现在请你根据{by_what}选择合适的action和触发action的消息:

View File

@@ -40,33 +40,7 @@ def init_prompt():
Prompt("你正在和{sender_name}聊天,这是你们之前聊的内容:", "chat_target_private1") Prompt("你正在和{sender_name}聊天,这是你们之前聊的内容:", "chat_target_private1")
Prompt("在群里聊天", "chat_target_group2") Prompt("在群里聊天", "chat_target_group2")
Prompt("{sender_name}聊天", "chat_target_private2") Prompt("{sender_name}聊天", "chat_target_private2")
Prompt("\n你有以下这些**知识**\n{prompt_info}\n请你**记住上面的知识**,之后可能会用到。\n", "knowledge_prompt")
Prompt(
"""
{expression_habits_block}
{tool_info_block}
{knowledge_prompt}
{memory_block}
{relation_info_block}
{extra_info_block}
{chat_target}
{time_block}
{chat_info}
{reply_target_block}
{identity}
{action_descriptions}
你正在{chat_target_2},你现在的心情是:{mood_state}
现在请你读读之前的聊天记录,并给出回复
{config_expression_style}。注意不要复读你说过的话
{keywords_reaction_prompt}
{moderation_prompt}
不要浮夸,不要夸张修辞,不要输出多余内容(包括前后缀,冒号和引号,括号()表情包at或 @等 )。只输出回复内容""",
"default_generator_prompt",
)
Prompt( Prompt(
""" """
{expression_habits_block} {expression_habits_block}
@@ -114,7 +88,8 @@ def init_prompt():
{core_dialogue_prompt} {core_dialogue_prompt}
{reply_target_block} {reply_target_block}
对方最新发送的内容:{message_txt}
你现在的心情是:{mood_state} 你现在的心情是:{mood_state}
{config_expression_style} {config_expression_style}
注意不要复读你说过的话 注意不要复读你说过的话
@@ -781,103 +756,63 @@ class DefaultReplyer:
# 根据sender通过person_info_manager反向查找person_id再获取user_id # 根据sender通过person_info_manager反向查找person_id再获取user_id
person_id = person_info_manager.get_person_id_by_person_name(sender) person_id = person_info_manager.get_person_id_by_person_name(sender)
# 根据配置选择使用哪种 prompt 构建模式 # 使用 s4u 对话构建模式:分离当前对话对象和其他对话
if global_config.chat.use_s4u_prompt_mode and person_id: try:
# 使用 s4u 对话构建模式:分离当前对话对象和其他对话 user_id_value = await person_info_manager.get_value(person_id, "user_id")
try: if user_id_value:
user_id_value = await person_info_manager.get_value(person_id, "user_id") target_user_id = str(user_id_value)
if user_id_value: except Exception as e:
target_user_id = str(user_id_value) logger.warning(f"无法从person_id {person_id} 获取user_id: {e}")
except Exception as e: target_user_id = ""
logger.warning(f"无法从person_id {person_id} 获取user_id: {e}")
target_user_id = ""
# 构建分离的对话 prompt # 构建分离的对话 prompt
core_dialogue_prompt, background_dialogue_prompt = self.build_s4u_chat_history_prompts( core_dialogue_prompt, background_dialogue_prompt = self.build_s4u_chat_history_prompts(
message_list_before_now_long, target_user_id message_list_before_now_long, target_user_id
) )
self.build_mai_think_context( self.build_mai_think_context(
chat_id=chat_id, chat_id=chat_id,
memory_block=memory_block, memory_block=memory_block,
relation_info=relation_info, relation_info=relation_info,
time_block=time_block, time_block=time_block,
chat_target_1=chat_target_1, chat_target_1=chat_target_1,
chat_target_2=chat_target_2, chat_target_2=chat_target_2,
mood_prompt=mood_prompt, mood_prompt=mood_prompt,
identity_block=identity_block, identity_block=identity_block,
sender=sender, sender=sender,
target=target, target=target,
chat_info=f""" chat_info=f"""
{background_dialogue_prompt} {background_dialogue_prompt}
-------------------------------- --------------------------------
{time_block} {time_block}
这是你和{sender}的对话,你们正在交流中: 这是你和{sender}的对话,你们正在交流中:
{core_dialogue_prompt}""", {core_dialogue_prompt}""",
) )
# 使用 s4u 风格的模板 # 使用 s4u 风格的模板
template_name = "s4u_style_prompt" template_name = "s4u_style_prompt"
return await global_prompt_manager.format_prompt( return await global_prompt_manager.format_prompt(
template_name, template_name,
expression_habits_block=expression_habits_block, expression_habits_block=expression_habits_block,
tool_info_block=tool_info, tool_info_block=tool_info,
knowledge_prompt=prompt_info, knowledge_prompt=prompt_info,
memory_block=memory_block, memory_block=memory_block,
relation_info_block=relation_info, relation_info_block=relation_info,
extra_info_block=extra_info_block, extra_info_block=extra_info_block,
identity=identity_block, identity=identity_block,
action_descriptions=action_descriptions, action_descriptions=action_descriptions,
sender_name=sender, sender_name=sender,
mood_state=mood_prompt, mood_state=mood_prompt,
background_dialogue_prompt=background_dialogue_prompt, background_dialogue_prompt=background_dialogue_prompt,
time_block=time_block, time_block=time_block,
core_dialogue_prompt=core_dialogue_prompt, core_dialogue_prompt=core_dialogue_prompt,
reply_target_block=reply_target_block, reply_target_block=reply_target_block,
message_txt=target, message_txt=target,
config_expression_style=global_config.expression.expression_style, config_expression_style=global_config.expression.expression_style,
keywords_reaction_prompt=keywords_reaction_prompt, keywords_reaction_prompt=keywords_reaction_prompt,
moderation_prompt=moderation_prompt_block, moderation_prompt=moderation_prompt_block,
) )
else:
self.build_mai_think_context(
chat_id=chat_id,
memory_block=memory_block,
relation_info=relation_info,
time_block=time_block,
chat_target_1=chat_target_1,
chat_target_2=chat_target_2,
mood_prompt=mood_prompt,
identity_block=identity_block,
sender=sender,
target=target,
chat_info=chat_talking_prompt,
)
# 使用原有的模式
return await global_prompt_manager.format_prompt(
template_name,
expression_habits_block=expression_habits_block,
chat_target=chat_target_1,
chat_info=chat_talking_prompt,
memory_block=memory_block,
tool_info_block=tool_info,
knowledge_prompt=prompt_info,
extra_info_block=extra_info_block,
relation_info_block=relation_info,
time_block=time_block,
reply_target_block=reply_target_block,
moderation_prompt=moderation_prompt_block,
keywords_reaction_prompt=keywords_reaction_prompt,
identity=identity_block,
target_message=target,
sender_name=sender,
config_expression_style=global_config.expression.expression_style,
action_descriptions=action_descriptions,
chat_target_2=chat_target_2,
mood_state=mood_prompt,
)
async def build_prompt_rewrite_context( async def build_prompt_rewrite_context(
self, self,
@@ -1078,9 +1013,7 @@ async def get_prompt_info(message: str, threshold: float):
logger.debug(f"获取知识库内容,相关信息:{related_info[:100]}...,信息长度: {len(related_info)}") logger.debug(f"获取知识库内容,相关信息:{related_info[:100]}...,信息长度: {len(related_info)}")
# 格式化知识信息 # 格式化知识信息
formatted_prompt_info = await global_prompt_manager.format_prompt( formatted_prompt_info = f"你有以下这些**知识**\n{related_info}\n请你**记住上面的知识**,之后可能会用到。\n"
"knowledge_prompt", prompt_info=related_info
)
return formatted_prompt_info return formatted_prompt_info
else: else:
logger.debug("从LPMM知识库获取知识失败可能是从未导入过知识返回空知识...") logger.debug("从LPMM知识库获取知识失败可能是从未导入过知识返回空知识...")

View File

@@ -83,9 +83,6 @@ class ChatConfig(ConfigBase):
talk_frequency: float = 1 talk_frequency: float = 1
"""回复频率阈值""" """回复频率阈值"""
use_s4u_prompt_mode: bool = False
"""是否使用 s4u 对话构建模式,该模式会分开处理当前对话对象和其他所有对话的内容进行 prompt 构建"""
mentioned_bot_inevitable_reply: bool = False mentioned_bot_inevitable_reply: bool = False
"""提及 bot 必然回复""" """提及 bot 必然回复"""

View File

@@ -1,5 +1,5 @@
[inner] [inner]
version = "4.4.9" version = "4.5.0"
#----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读---- #----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读----
#如果你想要修改配置文件请在修改后将version的值进行变更 #如果你想要修改配置文件请在修改后将version的值进行变更
@@ -64,8 +64,6 @@ replyer_random_probability = 0.5 # 首要replyer模型被选择的概率
mentioned_bot_inevitable_reply = true # 提及 bot 大概率回复 mentioned_bot_inevitable_reply = true # 提及 bot 大概率回复
at_bot_inevitable_reply = true # @bot 或 提及bot 大概率回复 at_bot_inevitable_reply = true # @bot 或 提及bot 大概率回复
use_s4u_prompt_mode = true # 是否使用 s4u 对话构建模式,该模式会更好的把握当前对话对象的对话内容,但是对群聊整理理解能力较差(测试功能!!可能有未知问题!!)
talk_frequency = 1 # 麦麦回复频率,越高,麦麦回复越频繁 talk_frequency = 1 # 麦麦回复频率,越高,麦麦回复越频繁