优化s4u提示词结构,修复复读问题

This commit is contained in:
Windpicker-owo
2025-09-03 16:33:41 +08:00
parent 0f7f35c34c
commit b7e042161f
2 changed files with 71 additions and 34 deletions

View File

@@ -225,7 +225,16 @@ class CycleProcessor:
}
else:
# 执行回复动作
reply_to_str = await self._build_reply_to_str(action_info["action_message"])
try:
reply_to_str = await self._build_reply_to_str(action_info["action_message"])
except UserWarning:
logger.warning("选取了自己作为回复对象,跳过回复生成")
return {
"action_type": "reply",
"success": False,
"reply_text": "",
"loop_info": None
}
# 生成回复
gather_timeout = global_config.chat.thinking_timeout
@@ -703,6 +712,8 @@ class CycleProcessor:
or (self.context.chat_stream.platform if self.context.chat_stream else "default")
)
user_id = message_data.get("user_id", "")
if user_id == str(global_config.bot.qq_account) and platform == global_config.bot.platform:
raise UserWarning
person_id = person_info_manager.get_person_id(platform, user_id)
person_name = await person_info_manager.get_value(person_id, "person_name")
return f"{person_name}:{message_data.get('processed_plain_text')}"

View File

@@ -78,51 +78,77 @@ def init_prompt():
# s4u 风格的 prompt 模板
Prompt(
"""
你正在一个QQ群里聊天你需要理解整个群的聊天动态和话题走向并做出自然的回应。
# 人设:{identity}
**重要:消息针对性判断**
## 当前状态
- 你现在的心情是:{mood_state}
- {schedule_block}
## 历史记录
### 当前群聊中的所有人的聊天记录:
{background_dialogue_prompt}
### 其他群聊中的聊天记录
{cross_context_block}
### 当前群聊中正在与你对话的聊天记录
{core_dialogue_prompt}
## 表达方式
- *你需要参考你的回复风格:*
{reply_style}
{keywords_reaction_prompt}
- (如果有)你可以参考以下你在聊天中学到的表达方式:
{expression_habits_block}
## 工具信息
(如果有)你可以参考以下可能有帮助的工具返回的信息:
{tool_info_block}
## 知识库信息
(如果有)你可以参考以下可能有帮助的知识库中的信息:
{knowledge_prompt}
## 其他信息
{memory_block}
{relation_info_block}
{extra_info_block}
{action_descriptions}
## 任务
### 梗概
- 你正在一个QQ群里聊天你需要理解整个群的聊天动态和话题走向并做出自然的回应。
### 核心任务
- 你现在的主要任务是和 {sender_name} 聊天。同时,也有其他用户会参与聊天,你可以参考他们的回复内容,但是你现在想回复{sender_name}的发言。
- {reply_target_block} ,你需要生成一段紧密相关且能推动对话的回复。
## 规则
在回应之前,首先分析消息的针对性:
1. **直接针对你**@你、回复你、明确询问你 → 必须回应
2. **间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与
3. **他人对话**:与你无关的私人交流 → 通常不参与
4. **重复内容**:他人已充分回答的问题 → 避免重复
{expression_habits_block}
{tool_info_block}
{knowledge_prompt}
{memory_block}
{relation_info_block}
{extra_info_block}
{cross_context_block}
{identity}
{action_descriptions}
--------------------------------
{time_block}
你现在的主要任务是和 {sender_name} 聊天。同时,也有其他用户会参与聊天,你可以参考他们的回复内容,但是你现在想回复{sender_name}的发言。
{background_dialogue_prompt}
{core_dialogue_prompt}
{reply_target_block}
{schedule_block}
你现在的心情是:{mood_state}
{reply_style}
注意不要复读你前面发过的内容,意思相近也不行。
{keywords_reaction_prompt}
请注意不要输出多余内容(包括前后缀冒号和引号at或 @等 )。只输出回复内容。
{moderation_prompt}
你的核心任务是针对 {reply_target_block} 中提到的内容,生成一段紧密相关且能推动对话的回复。你的回复应该:
你的回复应该:
1. 明确回应目标消息,而不是宽泛地评论。
2. 可以分享你的看法、提出相关问题,或者开个合适的玩笑。
3. 目的是让对话更有趣、更深入。
4. 不要浮夸,不要夸张修辞,不要输出多余内容(包括前后缀,冒号和引号,括号()表情包at或 @等 )。
最终请输出一条简短、完整且口语化的回复。
--------------------------------
{time_block}
{reply_target_block}
注意不要复读你前面发过的内容,意思相近也不行。
请注意不要输出多余内容(包括前后缀冒号和引号at或 @等 )。只输出回复内容。
{moderation_prompt}
现在,你说:
""",
"s4u_style_prompt",