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