feat(reply): 引入 reply 和 respond 动作,优化消息回复机制
- 增加 reply 动作,针对单条消息进行深度回复,使用 s4u 模板。 - 增加 respond 动作,统一回应未读消息,使用 normal 模板。 - 更新核心动作插件以支持新动作,确保配置选项可用。 - 优化动作执行逻辑,提升对话流畅性和响应准确性。
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user