feat(reply): 引入 reply 和 respond 动作,优化消息回复机制

- 增加 reply 动作,针对单条消息进行深度回复,使用 s4u 模板。
- 增加 respond 动作,统一回应未读消息,使用 normal 模板。
- 更新核心动作插件以支持新动作,确保配置选项可用。
- 优化动作执行逻辑,提升对话流畅性和响应准确性。
This commit is contained in:
Windpicker-owo
2025-11-10 13:24:45 +08:00
parent c07e1641cf
commit 8c4a54c75d
9 changed files with 329 additions and 125 deletions

View File

@@ -513,8 +513,8 @@ class Prompt:
context_data[key] = value
# --- 步骤 4: 构建特定模式的上下文和补充基础信息 ---
# 为 s4u 模式构建特殊的聊天历史上下文
if self.parameters.prompt_mode == "s4u":
# 为 s4u 和 normal 模式构建聊天历史上下文
if self.parameters.prompt_mode in ["s4u", "normal"]:
await self._build_s4u_chat_context(context_data)
# 补充所有模式都需要的基础信息
@@ -762,8 +762,10 @@ class Prompt:
# 根据prompt_mode选择不同的参数准备策略
if self.parameters.prompt_mode == "s4u":
params = self._prepare_s4u_params(context_data)
elif self.parameters.prompt_mode == "normal":
params = self._prepare_normal_params(context_data)
else:
# 当前normal模式和default模式使用相同的参数准备逻辑
# 默认模式或其他未指定模式
params = self._prepare_default_params(context_data)
# 如果prompt有名称则通过全局管理器格式化这样可以应用注入逻辑否则直接格式化
@@ -783,6 +785,7 @@ class Prompt:
"notice_block": self.parameters.notice_block or context_data.get("notice_block", ""),
"identity": self.parameters.identity_block or context_data.get("identity", ""),
"action_descriptions": self.parameters.action_descriptions or context_data.get("action_descriptions", ""),
"schedule_block": self.parameters.schedule_block or context_data.get("schedule_block", ""),
"sender_name": self.parameters.sender or "未知用户",
"mood_state": self.parameters.mood_prompt or context_data.get("mood_state", ""),
"read_history_prompt": context_data.get("read_history_prompt", ""),
@@ -812,21 +815,28 @@ class Prompt:
"relation_info_block": context_data.get("relation_info_block", ""),
"extra_info_block": self.parameters.extra_info_block or context_data.get("extra_info_block", ""),
"cross_context_block": context_data.get("cross_context_block", ""),
"notice_block": self.parameters.notice_block or context_data.get("notice_block", ""),
"identity": self.parameters.identity_block or context_data.get("identity", ""),
"action_descriptions": self.parameters.action_descriptions or context_data.get("action_descriptions", ""),
"schedule_block": self.parameters.schedule_block or context_data.get("schedule_block", ""),
"time_block": context_data.get("time_block", ""),
"chat_info": context_data.get("chat_info", ""),
"reply_target_block": context_data.get("reply_target_block", ""),
"config_expression_style": global_config.personality.reply_style,
"reply_style": global_config.personality.reply_style,
"mood_state": self.parameters.mood_prompt or context_data.get("mood_state", ""),
"read_history_prompt": context_data.get("read_history_prompt", ""),
"unread_history_prompt": context_data.get("unread_history_prompt", ""),
"keywords_reaction_prompt": self.parameters.keywords_reaction_prompt
or context_data.get("keywords_reaction_prompt", ""),
"moderation_prompt": self.parameters.moderation_prompt_block or context_data.get("moderation_prompt", ""),
"safety_guidelines_block": self.parameters.safety_guidelines_block
or context_data.get("safety_guidelines_block", ""),
"auth_role_prompt_block": self.parameters.auth_role_prompt_block
or context_data.get("auth_role_prompt_block", ""),
"chat_scene": self.parameters.chat_scene
or "你正在一个QQ群里聊天你需要理解整个群的聊天动态和话题走向并做出自然的回应。",
"bot_name": self.parameters.bot_name,
"bot_nickname": self.parameters.bot_nickname,
}
def _prepare_default_params(self, context_data: dict[str, Any]) -> dict[str, Any]:
@@ -838,6 +848,7 @@ class Prompt:
"time_block": context_data.get("time_block", ""),
"chat_info": context_data.get("chat_info", ""),
"identity": self.parameters.identity_block or context_data.get("identity", ""),
"schedule_block": self.parameters.schedule_block or context_data.get("schedule_block", ""),
"chat_target_2": "",
"reply_target_block": context_data.get("reply_target_block", ""),
"raw_reply": self.parameters.target,