Anthropic AI Agent 有效上下文工程

Anthropic 引入了上下文工程的概念,这标志着从传统的提示工程(prompt engineering)向战略性策划和维护在推理过程中提供给大语言模型(LLM)的完整 token 集的转变。这种方法对于构建能够在多轮对话和长周期内运行的能力强大的 AI agent 至关重要,因为在这种情况下,管理整体状态(包括系统指令、工具和消息历史)比单纯优化提示词的措辞更为重要。

上下文工程的必要性

上下文工程是必需的,因为 LLM 拥有有限的“注意力预算”,并且受上下文腐烂(context rot)的影响,这是一种随着上下文窗口中 token 数量增加,模型准确召回信息的能力下降的现象。

这种退化源于 Transformer 架构中 token 之间 $n^2$ 的两两关系,随着上下文的增长,注意力会被分散。此外,由于训练数据通常由较短的序列组成,模型对于上下文范围内的依赖关系缺乏专门的参数。因此,必须将上下文视为一种具有边际收益递减特征的有限资源,目标是找到尽可能小的、具有高信号的 token 集,以最大限度地提高获得预期结果的可能性。

有效上下文的解剖结构

为了最大限度地利用注意力预算,Anthropic 建议优化上下文的三个主要组成部分:

系统提示词

系统提示词应追求“正确的海拔高度”——在脆弱的硬编码逻辑与过于模糊的指导之间取得平衡。它们应该足够具体以有效地引导行为,但又足够灵活以提供强大的启发式信息。Anthropic 建议使用 XML 标签或 Markdown 标题将提示词组织成不同的部分(例如,<background_information><instructions>)以划定信息范围。

工具

工具应该是自包含的、健壮的且 token 效率高的。一种常见的失败模式是使用“臃肿的工具集”,这会为 agent 造成歧义。策划一个最小可行工具集可以确保在长期的交互中对上下文进行更可靠的维护和修剪。

示例

开发者不应提供详尽的边缘情况列表,而应策划一组多样化、规范的示例(few-shot prompting),以描绘 agent 的预期行为。

上下文检索与 Agentic Search

Anthropic 观察到,检索方式正从基于 embedding 的预推理检索转向“即时”(just-in-time)上下文策略。

  • 即时检索 (Just-in-Time Retrieval): Agent 维护轻量级的标识符(如文件路径或 Web 链接)并在运行时动态地将数据加载到上下文中。例如,Claude Code 通过编写针对性的查询并使用 headtail 等 Bash 命令来避免加载完整的数据对象,从而分析大型数据库。
  • 渐进式披露 (Progressive Disclosure): 这允许 agent 通过探索来增量式地发现相关上下文,利用元数据(如文件夹层级结构和时间戳)来指导后续决策。
  • 混合策略 (Hybrid Strategy): 一些 agent 会将用于提速的预计算数据检索与用于深度的自主探索相结合。Claude Code 通过预先加载 CLAUDE.md 文件,同时使用 globgrep 进行即时导航。

管理长周期任务

对于跨越数小时或需要 token 数量超过上下文窗口的任务,Anthropic 概述了三种主要技术来防止上下文污染:

压缩 (Compaction)

压缩涉及在对话接近上下文限制时对其进行总结,并使用该总结重新启动一个新的窗口。在 Claude Code 中,模型会保留架构决策和未解决的 bug,同时丢弃冗余的工具输出。这种方法的“轻量级”版本是工具结果清理,即从历史记录中移除旧的工具调用产生的原始结果。

结构化笔记 (Structured Note-Taking)

也被称为 agentic memory,这涉及 agent 将笔记写入持久的外部存储(例如,NOTES.md 文件),并在需要时将其拉回上下文中。这允许 agent 在重置后仍能维持状态,正如 Claude 在玩 Pokémon 时能够追踪目标和战斗策略所见。

子 Agent 架构 (Sub-Agent Architectures)

这种架构使用一个主导 agent 来协调高层级计划,而专门的子 agent 处理具有清晰上下文窗口的专注任务。子 agent 执行深度工作并仅向主导 agent 返回一个压缩的总结(通常为 1,000–2,000 tokens),从而确保职责分离。

策略 最佳使用场景
压缩 (Compaction) 需要进行大量往复对话流的任务
笔记 (Note-Taking) 具有明确里程碑的迭代开发
多 Agent (Multi-Agent) 需要并行探索的复杂研究与分析

Sources

相关