《Agent记忆错误的100个案例手册》第 26–30 案例
本辑为《Agent记忆错误的100个案例手册》连载内容。
案例 26:短期记忆/上下文错误|in-context-learning-example-contamination
场景
Agent使用few-shot prompting,系统提示中固定包含3个示例。某次对话中,用户的输入恰好与示例中的某个格式(如JSON Schema)相似,LLM将用户输入与示例混淆,认为用户输入是”第4个示例”的一部分。
错误表现
Agent的输出格式被”第4个示例”污染,开始模仿用户输入中的非标准格式,而非遵循系统提示中定义的输出规范。
解决方案
- 使用明确的示例分隔符(如
=== Example 1 ===…=== End Example ===) - 将示例与用户输入用特殊token(如
<|endofprompt|>)严格隔离 - 采用动态示例选择:根据当前查询从示例库中选择最相关的示例,而非固定示例
原理
In-context learning的强大之处也是其脆弱之处:LLM无法严格区分”作为模板的示例”和”作为数据的用户输入”。格式污染(Format Contamination)是few-shot prompting的已知风险。
案例 27:短期记忆/上下文错误|conversation-branch-merged-without-resolution
场景
用户与Agent讨论”远程工作是否应该普及”,用户先说了支持远程工作的理由(A分支),然后说了反对的理由(B分支),最后问”那你觉得呢”。Agent的上下文同时包含A分支和B分支,但没有标记这些观点是用户在不同假设下提出的。
错误表现
Agent的回复同时包含”远程工作确实提高了效率”和”但面对面协作不可替代”,但没有明确表明这是两个不同视角的分析,用户感到Agent”立场模糊”。
解决方案
- 实现对话树(Conversation Tree)而非线性上下文:标记每个观点所属的分支和假设条件
- 在合并分支时显式标注”基于假设X""基于假设Y”,或要求用户明确当前讨论的是哪个分支
- 使用”信念状态跟踪”:为每个实体/命题维护一个”支持/反对/待定”的状态标签
原理
真实对话往往不是线性的,包含假设、反事实、角色扮演等分支。线性上下文无法表达这种分支结构,合并时必然产生逻辑冲突。对话树是更精确的上下文表示模型。
案例 28:短期记忆/上下文错误|summarization-induced-fact-substitution
场景
长对话后,Agent对上下文进行摘要压缩。原始对话中用户说”我喜欢用PyTorch,但公司项目要求TensorFlow”。摘要生成时,为了简洁,被压缩为”用户使用TensorFlow进行开发”。
错误表现
后续Agent基于该摘要推荐TensorFlow相关的工具和资源,忽略了用户实际偏好PyTorch的事实,用户感到Agent”没有认真听”。
解决方案
- 对摘要进行”事实保真度”约束:在摘要prompt中明确要求”不得改变原始陈述的事实,只能压缩表述”
- 使用提取式摘要(Extractive Summarization)而非生成式摘要,确保关键语句原文保留
- 对摘要结果进行”回译验证”:将摘要扩展回长文本,检查与原始内容的事实一致性
原理
生成式摘要(Abstractive Summarization)在压缩过程中可能进行”语义近似替换”。虽然大意相同,但具体事实(如偏好、数值、人名)的微小变化可能导致后续推理的系统性偏差。
案例 29:短期记忆/上下文错误|context-window-fragmentation-tool-calls
场景
Agent使用工具链(Tool Chain)进行复杂任务,每次工具调用需要包含工具定义(JSON Schema)、参数、返回结果。一次数据分析任务中,Agent调用了10次工具,每次工具的schema和结果占用了500 token,共5000 token。加上系统提示,留给用户对话的上下文空间不足1000 token。
错误表现
用户的后续输入被截断,Agent只看到了用户问题的前半部分,误解了用户意图,给出了错误的分析结论。
解决方案
- 对工具调用历史进行压缩:只保留工具名称、关键参数和结果摘要,丢弃完整的schema和冗余输出
- 使用”工具记忆”机制:将频繁使用的工具结果存入外部缓存,上下文中只保留引用ID
- 为工具调用分配独立的上下文预算(如最多占用总上下文的30%),超出时优先压缩最早的工具记录
原理
工具调用在Agent架构中消耗大量上下文资源。如果不加管理,工具历史会挤压用户内容的存储空间,导致”用户说了一半就被打断”的体验。
案例 30:短期记忆/上下文错误|temporal-marker-ambiguity-resolution
场景
用户在周一说”昨天我去看了医生”,Agent记录”用户昨天看了医生”。周三时用户问”我上次看医生是什么时候”,Agent根据上下文中的”昨天”计算为”周二”,但实际上用户的”昨天”指的是周日。
错误表现
Agent回答”你周二看了医生”,用户纠正”我是周日去的”,Agent显得”时间混乱”。
解决方案
- 在记录时进行时间标准化:将相对时间(昨天、下周三)转换为绝对时间戳(2024-01-15)
- 在上下文中同时存储原始表述和标准化时间,回答时根据查询时间选择合适的表述
- 对时间敏感的记录设置”有效期”:如”明天开会”在会议结束后自动归档
原理
自然语言中的时间表达本质上是相对于”话语时间”(Speech Time)的。Agent需要将相对时间锚定到绝对时间,否则随着会话进行,时间指代会持续漂移。
D. 向量数据库与索引错误(案例31-40)
来源:Agent Search