fix(unified_manager): 更新记忆检索评估提示,增强用户意图判断逻辑

This commit is contained in:
Windpicker-owo
2025-12-16 22:57:56 +08:00
parent 526ef4c039
commit 04ce338847
2 changed files with 26 additions and 26 deletions

View File

@@ -979,7 +979,7 @@ class LLMRequest:
def _resolve_system_prompt(self, model_set: TaskConfig) -> str | None:
"""确定是否需要附加统一的system prompt."""
try:
if model_config and model_set is model_config.model_task_config.replyer:
if model_config and (model_set is model_config.model_task_config.replyer or model_set is model_config.model_task_config.replyer_private):
return SYSTEM_PROMPT
except AttributeError:
logger.debug("模型配置缺少replyer定义无法注入系统提示词")

View File

@@ -328,41 +328,41 @@ class UnifiedMemoryManager:
"""
prompt = f"""你是一个记忆检索评估专家。你的任务是判断当前检索到的“感知记忆”(即时对话)和“短期记忆”(结构化信息)是否足以支撑一次有深度、有上下文的回复。
prompt = f"""你是“记忆判官”(记忆检索评估专家。你的任务是:基于给定的历史消息、当前消息,以及我们已经检索到的“感知记忆”和“短期记忆”判断是否还需要检索“长期记忆”LTM来支撑一次准确、完整、上下文一致的回复。
**核心原则**
- **适当检索长期记忆有助于提升回复质量。** 当对话涉及到特定话题、人物、事件或需要回忆过去的经历时,应该检索长期记忆
- **判断标准:** 只有当现有记忆无法理解用户意图,或无法形成基本、连贯的回复时,才认为“不充足”。检索长期记忆耗时。除非有需要,否则不要检索
- **如果用户在讨论某个具体话题,即使现有记忆有一些相关信息,也可以检索长期记忆来补充更多背景。**
**总体偏好(重要)**
- 我们宁可多花一点资源去检索长期记忆,也不要在本该检索时漏检索
- 因此:只要存在明显不确定、信息缺口、或需要更精确细节的情况,就倾向于判定“现有记忆不充足”(`is_sufficient: false`
**用户查询**
**输入**
**当前用户消息:**
{query}
{chat_history_block}**检索到的感知记忆(即时对话,格式:【时间 (聊天流)】消息列表):**
{chat_history_block}**检索到的感知记忆(即时对话,格式:【时间 (聊天流)】消息列表):**
{perceptual_desc or '(无)'}
**检索到的短期记忆(结构化信息,自然语言描述):**
**检索到的短期记忆(结构化信息,自然语言描述):**
{short_term_desc or '(无)'}
**评估指南**
1. **分析用户意图**:用户在聊什么?是简单闲聊还是有具体话题?
2. **检查现有记忆**
- 对于闲聊、打招呼、无特定主题的互动 → 现有记忆充足 (`is_sufficient: true`)
- 如果涉及具体话题(人物、事件、知识),但现有记忆能提供基本信息 → 现有记忆充足 (`is_sufficient: true`)
- 仅当用户明确问及过去的特定事件,或当前信息完全无法理解用户意图时 → 现有记忆不充足 (`is_sufficient: false`)
**什么时候必须检索长期记忆(满足任一条 → `is_sufficient: false`**
1. **用户明确要求回忆/找回过去信息**:例如“你还记得…?”“上次我们说到…?”“帮我回忆一下…/之前…/那天…/某次…”
2. **你对答案没有把握或存在不确定性**:例如无法确定人物/事件/时间/地点/偏好/承诺/任务细节,或只能给出模糊猜测。
3. **现有记忆不足以给出精确回答**:要给出具体结论、细节、步骤、承诺、时间线、决定依据,但感知/短期记忆缺少关键事实
4. **对话依赖用户个体历史**:涉及用户的个人信息、偏好、长期目标、过往经历、已约定事项、持续进行的项目/任务,需要更早的上下文才能回答
5. **指代不清或背景缺失**:出现“那个/那件事/他/她/它/之前说的/你知道的”等省略指代,现有记忆不足以唯一指向
6. **记忆冲突或碎片化**:感知/短期记忆之间存在矛盾、时间线断裂、或信息片段无法拼成完整图景。
**输出格式JSON**
```json
{{
"is_sufficient": true/false,
"confidence": 0.85,
"reasoning": "在这里解释你的判断理由。例如:‘用户只是在打招呼,现有记忆已足够,无需检索长期记忆。’或‘用户问到了一个具体的历史事件,现有记忆完全没有相关信息,必须检索长期记忆。’",
"missing_aspects": ["缺失的信息1", "缺失的信息2"],
"additional_queries": ["补充query1", "补充query2"]
}}
```
**什么时候可以不检索(同时满足全部条件 → `is_sufficient: true`**
- 用户只是闲聊/打招呼/情绪表达/泛化问题(不依赖用户个人历史),且现有记忆已足以给出可靠且一致的回复;
- 你能在不猜测的情况下回答,且不需要更早的细节来保证准确性。
请输出JSON"""
**输出要求JSON**
- `is_sufficient`: `true` 表示“无需检索长期记忆”;`false` 表示“需要检索长期记忆”
- `confidence`: 0~1表示你对该判断的把握若你偏向检索但仍不确定也应输出较低/中等置信度并保持 `is_sufficient: false`
- `missing_aspects`: 列出阻碍精确回答的缺失点(可为空数组)
- `additional_queries`: 给出 1~5 条用于检索长期记忆的补充 query尽量短、可检索、包含关键实体/事件/时间线线索;可为空数组)
请仅输出 JSON可以用 ```json 包裹,也可以直接输出纯 JSON"""
# 调用记忆裁判模型
if not model_config.model_task_config: