作为我们之前文章《长上下文如何失败》的后续,这篇将介绍我们可以如何缓解甚至完全避免这些失败。
但在开始之前,让我们快速回顾一下
★ 长上下文常见的失败方式:
1. 上下文污染(Context Poisoning): 当幻觉或其他错误被加入上下文中,并被反复引用。
2. 上下文干扰(Context Distraction): 当上下文过长,导致模型过度依赖上下文,而忽视了训练中学到的知识。
3. 上下文混淆(Context Confusion): 当上下文中包含冗余信息,模型因此生成质量较低的回应。
4. 上下文冲突(Context Clash): 当新信息或工具与原有 prompt 中的信息发生冲突。
这一切都是信息管理问题。上下文中的每一项信息都会影响模型输出。正如老编程格言所说:“Garbage in, garbage out”。幸运的是,我们有很多方法可以应对这些问题。
★ 上下文管理策略
- RAG:选择性地添加相关信息以提高 LLM 的回答质量
- 工具加载(Tool Loadout):只添加任务相关的工具定义到上下文
- 上下文隔离(Context Quarantine):将不同上下文隔离在独立线程中使用
- 上下文剪枝(Context Pruning):移除不相关或无用的信息
- 上下文摘要(Context Summarization):将累积的上下文压缩为摘要
- 上下文卸载(Context Offloading):将信息存储在 LLM 上下文之外的工具中
★ RAG(检索增强生成)
RAG 是指选择性地将相关信息加入上下文,以帮助 LLM 更好地生成回答。
虽然随着模型上下文窗口越来越大(如 Llama 4 Scout 的 1000 万 token),很多人觉得“把所有信息全塞进去”就够了,但如果像杂物抽屉那样使用上下文,杂物也会污染模型生成。
要想了解更多,作者推荐了一个新的课程:I don’t use RAG. I just retrieve documents.
★ 工具加载(Tool Loadout)
工具加载指的是为任务选择合适的工具描述加入上下文。
术语“loadout”来自游戏世界,指的是你选择的技能、武器和装备组合。
这项技术可以结合 RAG。例如,Tiantian Gan 和 Qiyao Sun 在其论文 RAG MCP 中展示了如何通过向量数据库检索相关工具描述。
- 研究发现,当工具数量超过 30 时描述会重叠,产生混淆;
- 超过 100 个工具几乎必然导致模型失败;
- 使用 RAG 技术将工具数控制在 30 以内,可将工具选择准确率提升 3 倍。
对于小模型问题更早就会暴露,例如论文 Less is More 指出:LLaMA 3.1 8b 给 46 个工具会失败,而给 19 个工具则表现良好。问题是混淆,而不是上下文长度限制。
即使动态工具选择方法未提升模型准确率,它带来的电量节省(18%)和速度提升(77%)也是值得的。
★ 上下文隔离(Context Quarantine)
这是指将不同任务拆分为独立线程,每个线程使用独立上下文。
例如 Anthropic 的多智能体研究系统就是用多个子智能体并行运行,彼此隔离、分别检索,最后由主智能体整合输出。
他们在评估中发现:
~ 使用多智能体时,相比单一 Claude Opus 4,回答准确率提升了 90.2%;
- 多智能体系统能将一个复杂任务拆分成多个子任务并行完成;
- 不同子智能体可使用不同的工具集,解决加载冲突问题。
★ 上下文剪枝(Context Pruning)
随着任务进行,智能体会累积大量上下文,可能需要清理。
作者推荐了一款轻量剪枝工具:Provence,其模型大小仅 1.75GB,调用简单,能将不相关信息剔除 95%,效果优秀。
剪枝更有效的方式是将上下文结构化成字典或模块,方便根据规则进行删减。
★ 上下文摘要(Context Summarization)
即便上下文足够长,过长的历史也会使模型过度依赖记忆,而非推理。
例如 Gemini 2.5 Pro 支持超过 100 万 token 的上下文,但一旦超出 10 万 tokens,模型就会偏向重复历史行为,而非生成新计划。
总结步骤可由独立 LLM 实现,并可积累评估数据,以持续优化摘要质量。
★ 上下文卸载(Context Offloading)
即将笔记或中间推理步骤移出上下文,存放于外部工具中,例如 Anthropic 的 “think tool”(更贴切应叫 “scratchpad”)。
用途包括:
1. 工具调用后中间结果分析;
2. 严格政策/合规规则场景;
3. 多步决策路径,每步都可能受前一步影响。
研究显示,在这些场景中,配合领域定制 prompt,可提升性能最多达 54%。
★ 总结
构建智能体最困难的部分通常就是上下文管理。
Karpathy 曾说过,让 LLM “just pack the context window right”,就是智能体开发者的任务。
关键观点是:上下文不是免费的,每个 token 都会影响模型行为。
即便拥有更大的上下文窗口,也不是信息管理可以松懈的理由。构建或优化智能体时请问自己:
> 上下文中的每一项,是否都值得留下?
如果答案是否定的,那么你已经有了六种修复方法可用。
访问:www.dbreunig.com/2025/06/26/how-to-fix-your-context.html
转载自:黄建同学 微博