Skip to content

[Bug] L1 指令提取缺少场景限定机制,用户的场景受限偏好被泛化为全局规则 #48

@Elvisvon

Description

@Elvisvon

L1 提取指令(instruction)缺少"场景限定"选项,导致用户的有场景限制的偏好被泛化为全局规则

问题背景

在真实对话中,用户常常在特定场景下表达对输出格式的要求。例如在准备即时通讯文本时,用户说"这里不要用表格,因为我是要直接粘贴发给朋友的"——用户明确给出了场景限制(即时通讯),但 L1 提取后的 instruction 记忆却丢失了这个场景限定,变成了"用户要求 AI 不要使用表格"这一全局规则。

这个问题不是 LLM "没看懂"用户的意思,而是 extraction prompt 的优先级设计没有给"带场景标签的规则"留位置。

现象

L1 提取后的 instruction 型记忆可能包含从完整对话中脱离开关的后过度泛化偏好,例如将特定场景中的格式偏好提取为全局行为规则,且 priority 较高。这些记忆被召回后,会影响 AI 在所有场景下的输出行为。

根因分析

src/core/prompts/l1-extraction.ts 中,instruction 类型的 priority 体系设计为:

priority 值:
  -1(极其严格的全局死命令)
  90-100(核心行为规则)
  70-80(重要要求)
  < 70(临时要求,直接丢弃)

整个评分体系只有两条路径:要么作为"全局规则"保留(70-100 分),要么作为"临时要求"丢弃(< 70 分)。没有第三条路径:把规则记下来,但明确标注其适用场景。

当 LLM 看到一条带有明确场景限制的用户表述时,面临两难:

  • 打 70-100 分存为全局规则 → 丢失场景限制,过度泛化
  • 打 < 70 分丢弃 → 可能丢掉真实有用的偏好信息

LLM 倾向于"宁可多存不少存",因此选择了第一条。

同时,L1 conflict detection prompt(l1-dedup.ts)的 merge 逻辑同样没有考虑"同一规则不同场景"的情况,导致相同的丢失场景问题可能通过合并操作被进一步强化。

建议方案

  1. 在 instruction 型记忆中增加可选的 scope 字段,用于标注规则的适用场景限制。例如:

    {
      "content": "用户要求 AI 在生成用于即时通讯的文本时尽量少用表格",
      "type": "instruction",
      "priority": 80,
      "scope": "当需要生成通过即时通讯渠道发送的文本时"
    }
  2. 更新 extraction prompt,在 instruction 类型的提取指南中增加一条:如果用户的指令带有明确的场景限定词(如"微信发送的时候"、"电话沟通的时候"),LLM 应提取并记录该场景限定,不得泛化为全局规则。

  3. 调整 priority 策略:增加一种中间 priority(如 50-70)用于"场景限定规则",与"全局规则"和"临时要求"形成三档体系。

  4. 召回侧适配:在 recall 时,如果 instruction 带有 scope 字段,应结合当前对话的场景上下文判断该规则是否适用,避免在不相关场景中误触发。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions