文章内容整理自 Anthropic 关于上下文工程实践的分享,其核心目标在于:如何从不断累积的海量信息中,筛选出对大型语言模型最有效的信息。本文将聚焦于“筛选”与“有效”这两个关键点展开讨论。
上下文工程为何至关重要?
对于需要执行复杂任务的智能体而言,上下文工程是决定其效能的核心。在执行长时间跨度的任务时,工具调用结果、内部思考、用户反馈等信息会持续堆积,导致上下文规模不断膨胀。这会带来两个显著的挑战:
- 突破上下文窗口限制:上下文长度可能超出LLM的最大处理能力。
- 注意力分散与性能下降:即便未超出限制,海量的上下文信息也会干扰模型的注意力,影响其判断。
❝注意力分散的根源:这源于LLM所依赖的Transformer架构的特性。该架构允许每个标记(token)关注上下文中的所有其他标记,当有 n 个标记时,就存在 n² 个成对关系。随着上下文长度增加,模型有效捕捉这些关键关系的能力会下降,从而在信息容量与注意力集中度之间产生矛盾。
因此,我们需要一套有效的策略,能够从海量数据中精准“筛选”出对当前决策最“有效”的信息。
什么是“有效”的上下文?
(1)设计清晰的系统提示词
系统提示词应使用简洁且易于智能体理解的“维度”来定义任务。通常存在两种极端:
- 过度精确:在提示词中硬编码大量复杂且脆弱的逻辑规则,这虽能精确引导行为,但随着系统迭代会变得难以维护。
- 过度模糊:仅提供笼统的指导,无法有效驱动智能体产出期望的结果。
理想的“维度”应该既足够具体以提供明确指引,又足够灵活以形成强大的启发式原则,让智能体能够根据实时上下文自主决策,而非完全依赖预设的硬编码逻辑。
提示词构建的核心原则是:力求用最少的信息完整描述预期行为。这里的“少”并非指简短,而是指避免冗余。建议先基于最佳实践构建一个最小化的提示词,再根据任务执行中暴露的故障,逐步添加清晰的说明和示例来改进。
一个公认的最佳实践是少样本提示。精心挑选一组规范且多样化的示例,能比千言万语更有效地向LLM传达预期行为。
(2)构建适配的工具集
工具调用的目的是让LLM在执行过程中动态获取新的上下文信息。
工具集定义的核心原则是:构建易于LLM理解,且功能重叠最小的工具集合。
需要避免的常见误区:
- 工具集臃肿:包含过多功能,或在工具选择上存在模糊的决策点。如果人类都难以在特定场景下决定使用哪个工具,就不要期望LLM能做得更好。
- 提示词内嵌复杂逻辑:试图在提示词中塞入处理各种极端情况的规则,这会使得提示词变得脆弱且难以维护。
最佳实践是:为智能体挑选并设计一套最小可行工具集。
如何从海量信息中“筛选”重要内容?
面对庞大的上下文背景,我们需要解决两个问题:
- 如何高效存储背景知识?
- 如何动态筛选出对当前任务至关重要的信息?
“即时”上下文检索策略
目前,许多AI应用采用基于Embedding的推理前检索(例如RAG),在推理前就将相关文档片段提供给模型。然而,随着智能体向更自主的模式演进,“即时”上下文检索策略正得到越来越多的应用。
“即时”策略是指,智能体在上下文中仅维护轻量级的标识符(如文件路径、查询索引、网页链接等)。在运行时,智能体可以根据需要,通过调用工具动态地将这些“引用”所指向的数据加载到上下文中。
优势:
- 极高的存储效率:相比于预先加载全部可能相关的数据,“即时”策略按需加载,大幅减少了上下文的空间占用。这更贴近人类的认知方式——我们依赖外部系统(如文件、书签)来归档信息,并在需要时检索。
- 提供更丰富的元信息:对于智能体而言,
/tests/test_utils.py和/src/core_logic/中的同名文件意义截然不同。文件所处的路径结构、命名规范和时间戳等元数据,都能为智能体的决策提供重要线索。
需要权衡的方面:
- 速度相对较慢:动态加载数据必然比访问已载入上下文的数据慢。
- 对工具集设计提出更高要求:需要确保智能体拥有合适的工具和启发式方法来有效地执行检索。
混合检索策略:结合推理前检索和即时检索,可以取长补短。例如,预先检索一部分最可能相关的核心数据以保证速度,在运行过程中再通过工具即时检索更具体或更新的文件。这种策略非常适合法律、金融等背景知识稳定、更新频率低的领域。
针对长周期任务的上下文工程策略
长周期任务要求智能体在一系列动作中保持行为的连贯性、上下文关联性和目标导向性。
核心挑战:
- 上下文窗口限制:任务链中的思考、执行、读文件、报错等操作会快速消耗上下文窗口。
- 信息过载导致能力衰减:无用和冗余信息的堆积会稀释重要信息,降低模型回忆关键细节的能力。
解决方案不仅限于扩大窗口,即使窗口足够大,上下文“污染”和信息相关性下降的问题依然存在。为此,我们介绍几种关键技术:压缩、结构化笔记和多智能体架构。
(1)压缩
压缩是指当对话长度接近上下文窗口上限时,由模型对历史内容进行概括,并用更精炼的摘要作为新的上下文起点。这是维持长周期任务连贯性最基础、最常用的技术。
❝例如,在Claude Code中,系统会将较旧的消息历史传递给另一个模型进行汇总压缩,保留关键架构决策、未解决的错误和核心实现细节,同时丢弃冗余的工具输出。随后,智能体使用压缩后的上下文结合最近访问的几个文件继续工作。
压缩的关键在于如何选择保留与舍弃的信息。过于激进的压缩可能会丢失后续才显现其重要性的微妙上下文。对于实施者,建议先最大化召回率(确保提示词能捕捉所有相关信息),再通过迭代优化来提升精确度(去除冗余)。清除已完成工具调用的原始输出,通常是最安全、最轻量级的压缩方式之一。
(2)结构化笔记
结构化笔记,或称智能体记忆,是指在运行过程中,智能体定期将关键笔记记录到上下文之外的存储系统(如数据库)中。在未来的适当时刻,再将这些笔记“捞回”到上下文中使用。
❝案例:Claude玩宝可梦的演示展示了“记忆”的强大作用。该智能体能在长达数千个游戏步骤中精确记录进度:“在过去的1234步里,我一直在1号道路训练,皮卡丘升了8级,目标是10级。”它无需特殊提示就能自动绘制已探索区域地图,记住关键成就,并记录对不同对手的有效战斗策略。
优势:
- 使智能体能跟踪复杂任务进度,保留关键的上下文和依赖关系,防止重要信息在数十次工具调用后丢失。
- 支持智能体跨会话积累知识、维护项目状态,并在无需常驻上下文的情况下引用先前工作。
(3)子智能体架构
其核心思想是职责分离。与其让一个智能体维护整个项目的庞杂状态,不如创建多个专门的子智能体,每个都在自己清晰的上下文窗口中处理特定子任务。
主智能体负责高层规划与协调,子智能体则专注于深入的技术工作或信息查找。每个子智能体可能消耗数万token进行深度搜索,但最终仅向主智能体返回一个精简的摘要(如1000-2000 token)。这种架构非常适合复杂的研究和分析任务,能够通过并行探索带来丰富回报。
方法选择指南:
- 压缩:适用于需要大量对话交互以保持连贯性的任务。
- 记笔记:对于设定有明确里程碑的迭代式开发任务非常有效。
- 多智能体架构:擅长处理复杂、可分解的研究与分析任务。
结论
上下文工程标志着我们基于LLM构建应用方式的根本性转变。随着模型能力日益强大,核心挑战从“打磨完美提示词”逐渐转向“在每一步审慎决定哪些信息值得进入模型有限的注意力预算”。
无论你是为了长程任务实施“压缩”,设计高效的Token工具,还是采用“即时”探索策略,其核心原则始终如一:寻找一个最小化的、高信噪比的Token集合,以最大化达成预期目标的概率。
技术将随模型一同进化。更聪明的模型需要更少的硬编码指令,从而赋予智能体更大的自主权。但请始终牢记,将上下文视为一种珍贵且有限的资源,这一理念仍是构建可靠、高效智能体的基石。