GoodVibe
登录
观点观点 · 大厂教学
观点 · 大厂教学

Anthropic:给 AI Agent 做「上下文工程」

原文 · Anthropic 应用 AI 团队(Prithvi Rajasekaran、Ethan Dixon、Carly Ryan、Jeremy Hadfield)

把上下文当成稀缺资源:找出能最大化结果的那一小撮高信号 token

读原文

导读

当大家还在打磨 prompt 时,Anthropic 这篇文章把焦点推进到了下一站:上下文工程。它的核心主张是,上下文是采样时放进模型的那组 token,是有限资源,工程问题在于把这组 token 的效用拉到最高。

下面按原文结构做完整精译导读,关键论点配原句直引,建议结合上方链接读英文全文。

一、上下文工程 vs 提示工程

作者把上下文工程看作提示工程的自然演进。提示工程关注的是「怎么写、怎么组织指令」以拿到最好结果;而上下文工程管理的是推理时那一整组 token,包括系统指令、工具、MCP、外部数据、消息历史。

早期 LLM 工程多半是为一次性的分类或文本生成优化一段 prompt;但今天的 agent 要跨多轮、长周期地运转,在循环里不断产生新数据,需要一套更宽的上下文管理策略。上下文工程,就是在那个不断膨胀的「可能信息宇宙」里,去策展哪些该进入有限的上下文窗口。

Context engineering is the art and science of curating what will go into the limited context window from that constantly evolving universe of possible information.

二、为什么它对造强 agent 至关重要

像人一样,LLM 也会在某个点上走神或犯糊涂。研究里有个现象叫「上下文腐烂」(context rot):token 越多,模型准确回忆信息的能力越差。所有模型都有这种退化,只是程度不同。

原因在底层:Transformer 架构里每个 token 都要和其他所有 token 两两建立关系,长度一上去,n² 的关系就把模型的能力摊薄;而且模型在更短序列上训练,对长距离依赖的经验更少。所以要把上下文当成有限、且边际收益递减的资源。模型有一份「注意力预算」,每多一个 token 都在消耗它,必须精挑细选。

Like humans, who have limited working memory capacity, LLMs have an “attention budget” that they draw on when parsing large volumes of context.

三、有效上下文的解剖:系统提示、工具、示例

系统提示要用极其清晰、简单、直接的语言,并且写在「恰当的高度」上。这个高度是两种失败模式之间的黄金区间:一端是把复杂逻辑硬编码进去,既脆弱又难维护;另一端是只给模糊的高层指引,缺乏具体信号、还假设了并不存在的共识。最佳高度是既具体到能有效引导行为,又灵活到能给出强启发式。建议用 XML 标签或 Markdown 标题把提示分成清晰的小节,追求「能完整勾勒出预期行为的最小信息集」,注意最小不等于最短。

工具是 agent 和「信息 / 动作空间」之间的契约,要 token 高效、要鼓励高效行为,而且要被模型清楚理解、功能之间不要重叠。一个常见的失败模式是工具集臃肿、覆盖太多功能或制造模糊的决策点:如果连人类工程师都说不清某个情况该用哪个工具,agent 更不可能选对。最小可用的工具集,反而更可靠、也更好在长交互里做上下文裁剪。

示例(少样本提示)仍是强烈推荐的最佳实践,但常见的坑是把一长串边界情况硬塞进 prompt、试图把每条规则都写明。更好的做法是策展一批多样、典型的范例,有效地呈现出你期望的行为。对 LLM 来说,示例就是那张「胜过千言万语」的图。

If a human engineer can’t definitively say which tool should be used in a given situation, an AI agent can’t be expected to do better.

四、上下文检索与「即时」探索

很多 AI 原生应用过去靠「推理前」的向量检索把相关数据预先取好。文章主张越来越多地改用「即时」(just-in-time) 策略:不预处理所有数据,而是保留轻量的标识符(文件路径、查询、链接),运行时再用工具动态把数据加载进上下文。这很像人的认知:我们不会背下整个资料库,而是靠文件系统、收件箱、书签这些外部组织方式按需取用。

元数据本身就是信号:tests 目录下的 test_utils.py 和 src/core_logic/ 下的同名文件,用途截然不同;文件夹层级、命名约定、时间戳都在帮人和 agent 判断该怎么用一份信息。自主探索让 agent 能「渐进式披露」,一层层搭起理解、只保留必要的工作记忆,并靠记笔记做额外持久化。代价是运行时探索比直接取预算好的数据慢,而且需要有主见、用心的工程,否则 agent 会因为用错工具、追死胡同而浪费上下文。

所以最有效的 agent 多用混合策略:先取一部分数据图快,再让模型自行决定要不要继续探索。Claude Code 就是范例:CLAUDE.md 一上来直接灌进上下文,而 glob、grep 这类原语让它即时检索文件,绕开了陈旧索引和复杂语法树的问题。随着模型变强,趋势是让聪明的模型更聪明地行动、人类策展越来越少。给在 Claude 上造 agent 的团队,最好的建议依然是:做能跑通的最简单的事。

Do the simplest thing that works.

五、长周期任务的三件武器

有些任务(大型代码库迁移、综合调研)会持续几十分钟到几小时,动作序列远超一个上下文窗口;光等更大的窗口不解决问题,因为再大的窗口也躲不开上下文污染和相关性衰减。文章给了三种技术。

压缩 (compaction):把快到上限的对话做高保真总结,再用这份摘要重启一个新窗口,通常是提升长期连贯性的第一招。Claude Code 的实现会保留架构决策、未解决的 bug、实现细节,丢掉冗余的工具输出,然后带着压缩后的上下文加最近访问的五个文件继续。这门手艺难在「取舍」:压得太狠会丢掉当下不起眼、后来才显出关键的上下文。建议先最大化召回、确保不漏,再逐步提升精度、剔除多余;最轻的一档压缩就是清理工具调用结果。

结构化记笔记(又叫 agentic memory):让 agent 定期把笔记写到上下文窗口之外的持久存储,之后再取回来,用极小的开销获得持久记忆。Claude Code 会建待办清单,自定义 agent 会维护 NOTES.md。在「Claude 玩宝可梦」的演示里,它无需被教就自己画出探索地图、记下战斗策略,在上下文重置后读自己的笔记继续打几小时。Anthropic 已随 Sonnet 4.5 把基于文件的 memory 工具放进公测。

子代理架构:与其让一个 agent 扛下整个项目的状态,不如让专门的子代理在干净的上下文里处理聚焦任务。主代理握着高层计划做协调,子代理各自深挖、可能烧掉几万 token,最后只回报一份 1000 到 2000 token 的浓缩摘要,做到清晰的关注点分离。这套在「我们怎么搭多代理研究系统」一文里讨论过,在复杂研究任务上比单代理有明显提升。三种方法按任务特征选:要大量来回的用压缩,有清晰里程碑的迭代开发适合记笔记,需要并行探索的复杂研究用多代理。

The art of compaction lies in the selection of what to keep versus what to discard.

六、结语:把上下文当成珍贵的有限资源

上下文工程代表了构建 LLM 系统思路上的一次根本转变:挑战不只是写出完美的 prompt,而是在每一步都用心策展、决定什么进入模型那份有限的注意力预算。无论是给长任务做压缩、设计 token 高效的工具,还是开启即时探索,指导原则都一样:找出那一小撮能最大化好结果概率的高信号 token。

这些技术会随模型变强而继续演进,更聪明的模型需要更少的规定式工程、能放更多自主权给 agent。但即便能力一路上扬,把上下文当成珍贵、有限的资源,仍将是构建可靠、有效 agent 的核心。

Treating context as a precious, finite resource will remain central to building reliable, effective agents.

出处与版权

作者 · Anthropic 应用 AI 团队(Prithvi Rajasekaran、Ethan Dixon、Carly Ryan、Jeremy Hadfield)

原文 · anthropic.com/engineering

本页为 GoodVibe 对原文的中文整理,著作权归原作者所有;建议点击上方链接阅读原文全文。

更多观点