一、上下文窗口污染的本质

上下文污染本质就是有限上下文 token 里面混入大量低价值、干扰性信息,挤占有效信息空间,会放大 Lost in the Middle 现象,造成模型注意力偏移,抓不住当前任务目标。

二、上下文污染的四大来源

  1. 工具返回冗余内容:调用代码沙箱返回整段编译日志、大量 print 打印、无关堆栈;读取大文件直接返回全部原文。
  2. 无效历史轮次:多次失败的重试记录、已经解决完毕的子任务对话、用户已经废弃的规划方案。
  3. 错误信息残留:旧报错堆栈、异常信息没有清理,模型反复被历史错误引导,重复踩同一个坑。
  4. Agent 自身冗余思考:模型输出大量无关的内部思考、发散独白,没有做截断控制。

三、主流上下文净化方案(落地对比)

1. 规则过滤清洗

配置黑名单过滤重复日志、空行、无关调试打印、重复状态信息;工具侧限制单次返回 token 上限,提前拦截超大返回报文。 优点:开销低、响应快;缺点:只能处理固定格式冗余,杂乱无结构文本无法处理。

2. 结构化摘要压缩

对工具返回、历史子任务做摘要,只保留结论,丢弃原始冗余日志。比如代码运行结果,不把全部 stdout 塞入上下文,只保留执行状态、关键报错行、返回结果。 优点:大幅度节省 token;缺点:摘要会丢失细节,Coding 场景过度摘要会丢失关键报错线索。

3. 分层记忆分离

信息拆分为三层:即时工作上下文(当前轮次必需,常驻 prompt)、中长期摘要记忆、外部向量记忆。旧对话不一直留在窗口内,需要时再检索召回。 这也是 Agent Memory 模块最主流的落地方式。

4. 基于任务状态的上下文裁剪

Agent 维护子任务状态标记,已经完成、后续不再依赖的子任务,从上下文剔除,仅保留一句话结论。在 LangGraph 中,可以在节点回调更新 state 的时候自动清理过期对话。

5. 内容重排序与信息加权

把和当前任务高相关的内容放在靠近首尾的位置,低相关内容压缩后置,缓解 Lost in the Middle 带来的注意力衰减问题。

四、场景取舍:净化强度不能一刀切

  • Coding Agent:不能过度净化报错信息,否则模型看不到完整报错,无法修复代码;
  • 普通问答 Agent:可以激进压缩历史信息,降低 token 开销,提升推理速度。

总结

上下文窗口污染,就是无关冗余信息挤占有效 token、干扰模型判断。净化的核心思路是区分信息是否当下必需,组合规则过滤、摘要压缩、分层记忆、状态裁剪;不能一味压缩,要根据场景控制净化强度,平衡 token 开销和信息完整性,是长链路 Agent 稳定运行的关键手段。

Logo

更多推荐