下放 ai_auto_response 参与判断到 LLM

变更项:
1. 新增 decision 配置并重写 ResponsePlanner,将是否送模型的本地粗筛收缩为轻量入口判断,允许在主动参与开启时更多普通文本进入模型。
2. 将 cooldown 从模型前挡板后移到 LLM 判定 should_reply 之后,改为发送闸门,减少本地提前拦截。
3. 调整上下文与 prompt 控制信息,明确 reply_mode 只是本地 hint,并把 acceptance_state、solver 等信号直接下放给模型统一判断是否参与和如何回复。
This commit is contained in:
liuwei
2026-04-28 17:41:02 +08:00
parent 6359b11951
commit e7d68a89c2
6 changed files with 157 additions and 104 deletions

View File

@@ -53,8 +53,18 @@ class ContextBuilder:
"speaker_name_clean": self._clean_display_name(sender_name),
"is_at": bool(trigger.get("is_at", False)),
"is_directed": bool(trigger.get("is_directed", False)),
# 这些轻量触发标记继续保留到上下文里:
# 1. 现在我们准备把“是否参与聊天”更多地下放给模型;
# 2. 因此模型需要直接看到这些基础信号,而不是只吃本地裁剪后的 reply_mode
# 3. 这样它能自己判断“这是普通问句、追问、社交招呼,还是纯路过消息”。
"question_detected": bool(trigger.get("question_detected", False)),
"is_question": bool(trigger.get("is_question", False)),
"is_followup": bool(trigger.get("is_followup", False)),
"is_social_call": bool(trigger.get("is_social_call", False)),
"is_returning_member": bool(trigger.get("is_returning_member", False)),
# 这类标记会被后面的 prompt 策略层消费,用来决定要不要放开群级记忆。
"is_group_memory_query": bool(trigger.get("is_group_memory_query", False)),
"topic": str(trigger.get("topic", "") or ""),
"recent_message_items": self._build_recent_message_items(selected_messages),
"recent_messages": recent_lines,
"recent_summary": "",