Anthropic发布《AI Agent 上下文工程指南》,教你构建可控且高效的人工智能体

AI专栏2周前发布 小Ai
3 0 0

在人工智能的应用领域中,提示工程prompt engineering)曾长期处于聚光灯下,而现在,一个崭新的术语正悄然兴起:上下文工程context engineering‍。基于语言模型的构建工作,其焦点已不再仅仅是寻找完美的提示语句,而是转向回答一个更宏观的问题:“哪一种上下文工程配置最能促使模型产生我们期望的行为?”

这里的上下文(context),指的是从大型语言模型(LLM)进行采样时所包含的全部符号(tokens)集合。当前的核心工程挑战在于,如何在LLM固有的限制条件下,优化这些符号的效用,从而稳定地达成目标结果。要有效驾驭LLM,通常需要具备一种上下文思维——即全面考量LLM在任一时刻可获取的整体状态,以及该状态可能引发哪些潜在行为。

本文旨在探讨这一新兴的上下文工程技术,并提供一套精炼的心智模型,助力构建可控且高效的人工智能体(agents)。

上下文工程与提示工程的对比

在Anthropic的视角中,上下文工程是提示工程的自然演进。提示工程专注于通过编写和组织LLM指令来获得最佳结果(可参阅相关文档了解概述及实用策略);而上下文工程则是一套更广泛的策略,用于在LLM的推理过程中,策划并维护一个最优的符号(信息)集合,这包括了提示之外所有可能进入上下文的其他信息。

在LLM工程的早期阶段,提示设计是AI工作的核心,因为除了日常对话之外的大多数应用场景,都需要为单次分类或文本生成任务优化提示。正如其名,提示工程主要关注如何撰写有效的提示(尤其是系统提示)。然而,随着我们转向构建能够在多轮推理和更长时间跨度内自主运作的智能体,我们需要管理整个上下文状态(包括系统指令、工具、模型上下文协议MCP、外部数据、消息历史等)的策略。

循环运行的智能体会持续生成大量可能与后续推理相关的数据,这些信息必须被不断提炼。上下文工程,正是在这个不断演化的信息宇宙中,精心挑选哪些内容应被纳入有限上下文窗口的艺术与科学。

Anthropic发布《AI Agent 上下文工程指南》,教你构建可控且高效的人工智能体

为何上下文工程对构建强大智能体至关重要

尽管LLM处理速度迅猛,且能应对越来越庞大的数据量,但我们观察到,它们与人类相似,在某个临界点也会出现注意力涣散或陷入混乱的情况。针对“大海捞针”式基准测试的研究揭示了上下文衰减(context rot)‍现象:随着上下文窗口中符号数量的增长,模型准确回忆其中信息的能力会下降。

尽管某些模型的衰减速度较慢,但这一特性普遍存在。因此,我们必须将上下文视为一种边际收益递减的有限资源。类似于人类有限的工作记忆容量,LLM在解析大量上下文时也在消耗着“注意力预算”。每一个新引入的符号都会占用一部分预算,这进一步凸显了精心策划LLM可用符号的必要性。

这种注意力稀缺性根植于LLM的架构限制。LLM基于Transformer架构,其中每个符号都可以关注上下文中的其他符号,形成n²对关系(n为符号数量)。随着上下文长度增加,模型捕捉这些关系的能力被稀释,导致上下文规模与注意力聚焦之间存在天然的张力。此外,模型的注意力模式源于其训练数据的分布(其中短序列通常更常见),这意味着模型对于跨越长上下文的依赖关系经验较少,且缺乏专用的参数。

位置编码插值等技术通过让模型适应比原始训练更长的上下文来处理长序列,但这往往会削弱模型对符号位置的理解。这些因素共同形成了一个性能梯度(而非硬性的性能悬崖):模型在长上下文中仍然高度可用,但在信息检索和长程推理任务上的精度可能低于短语境下的表现。

这些现实情况意味着,深思熟虑的上下文工程对于构建强大的智能体而言至关重要。

高效上下文的组成要素

鉴于LLM受限于有限的注意力预算,优秀的上下文工程意味着要找到那个信号最强、体积最小的符号集合,以最大限度地提高实现目标结果的可能性。在实践中贯彻这一原则知易行难,以下我们将阐述该指导原则在不同上下文组件中的具体体现。

系统提示应当极其清晰,使用简单直接的语言,其抽象层级需契合智能体的“思维高度”。合适的抽象层级是两种常见故障模式之间的“金发女孩区”(Goldilocks zone)。一端是工程师在提示中硬编码复杂而脆弱的逻辑,以激发精确行为,这会带来脆弱性并增加维护的复杂性;另一端则是提供模糊的高层指导,无法为LLM的预期输出提供具体信号,或错误地假设了共享的上下文。最优的抽象层级需要在两者间取得平衡:足够具体以有效引导行为,又足够灵活以提供强有力的启发式指引。

Anthropic发布《AI Agent 上下文工程指南》,教你构建可控且高效的人工智能体

我们建议将提示组织成不同的区块(例如<背景信息>、<指令>、##工具指导、##输出描述等),并利用XML标签或Markdown标题等技术来划分这些区块——尽管随着模型能力的提升,提示的确切格式可能变得越来越不重要。

无论如何构建系统提示,都应追求一个最小必要信息集,以完整勾勒出预期的行为轮廓(注:最小不一定意味着简短,仍需提供足够信息以确保智能体遵循预期行为)。最好从测试一个最小化的提示开始,然后根据初始测试中发现的故障模式,添加清晰的指令和示例来改进性能。

工具使智能体能够与环境交互,并在工作过程中引入新的额外上下文。由于工具定义了智能体与其信息/行动空间之间的契约,因此它们必须提升效率:既要能返回符号效率高的信息,又要鼓励智能体产生高效的行为。

在相关讨论中,我们探讨过如何构建LLM易于理解且功能重叠最少的工具。类似于设计良好的代码库函数,工具应该自包含、健壮,并且用途极其明确。输入参数同样应具有描述性、定义清晰,并能发挥模型的固有优势。

最常见的故障模式是工具集变得臃肿,覆盖了过多功能,或者导致在使用哪个工具上出现模糊的决策点。如果人类工程师都无法确定在特定情境下应该使用哪个工具,就不能期望AI智能体做得更好。正如后文将讨论的,为智能体策划一个最小可行工具集,还能在长时间的交互中实现更可靠的上下文维护和修剪。

提供示例(即少样本提示)是众所周知的最佳实践,我们持续强烈推荐。但团队常常倾向于将一长串边缘案例塞入提示,试图阐明LLM执行特定任务时应遵循的所有可能规则。我们不推荐这种做法,而是建议策划一组多样化的规范示例,来有效描绘智能体的预期行为。对LLM而言,示例就是“一图胜千言”中的“图”。

我们对上下文各组件(系统提示、工具、示例、消息历史等)的总体指导是:深思熟虑,力求使上下文信息丰富且紧凑。现在,让我们深入探讨运行时动态检索上下文的策略。

上下文检索与智能体搜索

在关于构建高效AI智能体的讨论中,我们强调了基于LLM的工作流与智能体之间的区别。自该文发布以来,我们倾向于一个简单的智能体定义:能够在循环中自主使用工具的LLM

在与客户合作的过程中,我们见证该领域正汇聚于这一简单范式。随着底层模型能力的增强,智能体的自主性水平得以扩展:更聪明的模型使得智能体能够独立导航细致的问题空间,并从错误中恢复。

我们看到工程师设计智能体上下文的方式正在发生转变。如今,许多AI原生应用采用某种基于嵌入的推理前检索,以便为智能体的推理浮现重要上下文。随着领域转向更侧重于智能体的方法,团队越来越多地用“即时”(just in time)上下文策略来增强这些检索系统。

采用“即时”方法构建的智能体并非预先处理所有相关数据,而是维护一组轻量级的标识符(如文件路径、存储查询、网页链接等),并利用这些引用在运行时通过工具动态地将数据加载到上下文中。Anthropic的智能体编码方案Claude Code就采用了这种方法来对大型数据库执行复杂的数据分析。模型可以编写定向查询、存储结果,并利用head和tail等Bash命令分析大量数据,而无需将完整的数据对象加载到上下文中。这种方法模仿了人类的认知方式:我们通常不会记忆整个信息库,而是依靠外部组织和索引系统(如文件系统、收件箱、书签)来按需检索相关信息。

除了存储效率之外,这些引用的元数据还提供了优化行为的有效机制(无论这些元数据是明确提供还是被直观感知的)。对于一个在文件系统中操作的智能体,tests文件夹中名为test_utils.py的文件与src/core_logic.py中同名的文件隐含了不同的目的。文件夹层次结构、命名约定和时间戳都提供了重要的信号,帮助人类和智能体理解如何及何时利用信息。

让智能体自主导航和检索数据还支持渐进式披露(progressive disclosure)——即允许智能体通过探索逐步发现相关的上下文。每一次交互都会产生指导下一个决策的上下文:文件大小暗示了复杂性;命名约定提示了目的;时间戳可以作为相关性的代理。智能体能够层层组装理解,仅在工作记忆中维护必要的内容,并利用笔记策略实现额外的持久性。这种自我管理的上下文窗口使智能体能够聚焦于相关的信息子集,而非淹没在详尽但可能无关的信息中。

当然,这其中存在权衡:运行时探索比检索预计算的数据要慢。不仅如此,还需要经过深思熟虑的工程化,确保LLM拥有有效导航其信息景观的正确工具和启发式方法。缺乏适当的引导,智能体可能会因误用工具、追逐死胡同或未能识别关键信息而浪费上下文。

在某些场景下,最高效的智能体可能采用一种混合策略:为追求速度而预先检索部分数据,并自主决定进一步的探索。“合适”的自主水平取决于任务。Claude Code就是一个采用混合模型的智能体:CLAUDE.md文件被简单地预先放入上下文,而glob和grep等原语让它能够导航环境并即时检索文件,有效地规避了过期索引和复杂语法树解析的问题。

混合策略可能更适合内容动态性较低的上下文(例如法律或金融工作)。随着模型能力的持续提升,智能体设计将趋向于让智能模型更智能地行动,逐步减少人工策划。鉴于该领域的快速发展,“做最简单有效的事”可能仍然是我们对基于Claude构建智能体的团队的最佳建议。

长周期任务中的上下文工程

长周期任务要求智能体在一系列动作中保持连贯性、语境和目标导向行为,这些动作的符号数量可能超过LLM的上下文窗口。对于持续数十分钟到数小时的任务(例如大型代码库迁移或综合研究项目),智能体需要专门的技术来规避上下文窗口大小的限制。

等待更大的上下文窗口似乎是一个显而易见的策略。但可以预见的是,所有尺寸的上下文窗口都可能受到上下文污染和信息相关性问题的困扰——至少在对智能体性能要求极高的情境中如此。为了让智能体在扩展的时间跨度内有效工作,我们开发了几种直接应对这些上下文污染约束的技术:压缩(compaction)‍、结构化笔记(structured note-taking)‍和多智能体架构(multi-agent architectures)‍。

压缩
压缩是指当对话接近上下文窗口限制时,对其内容进行总结,并用该总结重新初始化一个新的上下文窗口的实践。压缩通常是提升长期连贯性的首要上下文工程手段。其核心在于,压缩能以高保真度蒸馏上下文窗口的内容,使智能体能够以最小的性能降级继续工作。

例如在Claude Code中,我们通过将消息历史传递给模型来总结和压缩最关键的细节。模型会保留架构决策、未解决的漏洞和实施细节,同时丢弃冗余的工具输出或消息。随后,智能体可以带着压缩后的上下文以及最近访问过的几个文件继续工作。用户获得了连续性,而无需担心上下文窗口的限制。

压缩的艺术在于选择保留与丢弃的内容,因为过度压缩可能导致细微但关键的上下文丢失(其重要性可能在后期才显现出来)。对于实施压缩系统的工程师,我们建议在复杂的智能体运行轨迹上精心调整提示:首先最大化召回率,确保压缩提示能捕获轨迹中的所有相关信息;然后迭代提高精确度,消除冗余内容。

一个容易去除的冗余内容是清除工具调用和结果——一旦某个工具在消息历史深处被调用过,智能体为何需要再次查看原始结果呢?最安全、最轻量的压缩形式就是工具结果清除,这项功能最近已在Claude开发者平台发布。

结构化笔记
结构化笔记(或称智能体记忆)是一种技术,智能体定期编写笔记并将其持久化到上下文窗口之外的存储中。这些笔记可以在后期被拉回到上下文窗口。

此策略以最小的开销提供了持久记忆。就像Claude Code创建待办事项列表,或自定义智能体维护一个NOTES.md文件一样,这一简单模式使得智能体能够跟踪复杂任务的进度,保持那些在大量工具调用过程中本会丢失的关键上下文和依赖关系。

Claude玩Pokémon的演示展示了记忆在非编码领域如何转变智能体的能力。该智能体在数千个游戏步骤中保持着精确的计数——追踪诸如“过去1234步我一直在Route 1训练Pokémon,Pikachu已从初始等级向目标10级提升了8级”等目标。无需任何关于记忆结构的提示,它自行开发了已探索区域的地图,记住了已解锁的关键成就,并维护着关于战斗策略的战略笔记,以了解哪些攻击对不同对手最有效。

在上下文重置后,智能体阅读自身的笔记,并能够继续持续数小时的训练序列或地下城探索。这种跨越总结步骤的连贯性实现了长周期策略,而仅将一切保留在LLM上下文窗口中是无法做到的。

作为Sonnet 4.5发布的一部分,我们在Claude开发者平台公开测试了记忆工具,通过一个基于文件的系统,使得存储和查询上下文窗口之外的信息变得更加容易。这让智能体能够随时间积累知识库,跨会话维护项目状态,并引用先前的工作,而无需将所有内容都保留在上下文中。

子智能体架构
子智能体架构提供了另一种规避上下文限制的方法。不同于让一个智能体尝试维护整个项目状态,专用的子智能体可以用干净的上下文窗口处理聚焦的任务。主智能体用高层计划进行协调,子智能体则执行深度的技术工作或使用工具查找相关信息。每个子智能体可能会进行广泛的探索,使用数万甚至更多的符号,但仅返回其工作的浓缩摘要(通常1000-2000个符号)。

这种方法实现了关注点分离——详细的搜索上下文保留在子智能体内,而主导智能体则专注于综合和分析结果。这种模式在关于构建多智能体研究系统的讨论中被提及,显示出在复杂研究任务上相较于单智能体系统的显著改进。

这些方法的选择取决于任务特性。例如:

  • 压缩适用于需要大量来回交流以保持对话流畅的任务;
  • 笔记记录适用于具有清晰里程碑的迭代开发工作;
  • 多智能体架构则适用于那些并行探索能带来显著收益的复杂研究和分析任务。

即使模型持续改进,在扩展的交互中保持连贯性的挑战,仍将是构建更有效智能体的核心议题。

结论

上下文工程代表了我们在构建LLM应用方式上的一个根本性转变。随着模型能力的增强,挑战不再仅仅是雕琢完美的提示,而是要深思熟虑地策划在每一步中,哪些信息应进入模型有限的注意力预算。无论您是为长周期任务实施压缩技术,设计符号高效的工具,还是让智能体即时探索环境,指导原则始终不变:找到那个信号最强、体积最小的符号集合,以最大限度地提高达成目标结果的可能性。

我们概述的这些技术将随着模型的改进而持续演化。我们已经看到,更聪明的模型需要更少的规定性工程,允许智能体以更高的自主性运作。但即使能力不断扩展,将上下文视为宝贵且有限的资源,这一核心理念仍将是构建可靠、高效智能体的关键。

© 版权声明
广告也精彩

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...