面向 AI Agent 的有效上下文工程实践
来源: Anthropic Engineering Blog
作者: Anthropic Engineering Team
发布日期: 2025-04-22
概述
分享上下文工程的最佳实践,包括上下文管理、注意力分配和长对话优化技术。
概述
在人工智能开发的演进历程中,提示工程(prompt engineering)曾是开发者与大型语言模型协作的核心技能。然而,随着 AI Agent 系统的兴起和多轮推理应用的普及,一个更广泛、更强大的概念正在崭露头角——上下文工程(context engineering)。
本文将深入探讨上下文工程的核心理念、实践方法和未来趋势,帮助开发者构建更高效、更可靠的 AI Agent 系统。
从提示工程到上下文工程的演进
提示工程的局限性
在过去几年中,提示工程一直是应用 AI 领域的焦点。开发者们精心设计和优化提示词,试图通过精确的指令和示例来引导模型产生期望的输出。这种方法在一次性分类或文本生成任务中表现良好。
然而,随着应用场景的复杂化,提示工程的局限性逐渐显现:
- 难以处理多轮对话的上下文管理
- 无法有效管理有限的注意力预算
- 对于长时运行的 Agent 任务支持不足
- 缺乏对动态信息更新的适应性
上下文工程的定义
上下文工程是提示工程的自然演进,它关注的是更广泛的问题:在 AI Agent 运行的整个过程中,如何组织和管理所有可用的上下文信息,以最大化模型的性能和可靠性。
具体来说,上下文工程包括:
- 系统指令的设计和优化
- 工具定义和 MCP(Model Context Protocol)配置
- 外部数据的检索和整合
- 消息历史的管理和压缩
- 注意力预算的分配和优化
上下文为什么如此重要
注意力预算的稀缺性
尽管现代大型语言模型的上下文窗口越来越大,但模型的注意力预算(attention budget)仍然是有限的资源。研究表明,随着上下文长度的增加,模型会出现”上下文衰退”(context rot)现象——即在大量信息中准确回忆特定信息的能力下降。
这种现象源于 Transformer 架构的固有特性:
- 二次方复杂度:每个 token 都需要 attending 到其他所有 token,导致 n² 的成对关系
- 注意力稀释:随着上下文增长,模型对特定信息的专注度降低
- 位置编码限制:长序列的位置编码插值会导致理解精度下降
实际影响
在我们的实际观察中,即使是表现最好的模型,当上下文超过一定阈值后,也会出现:
- 关键信息遗漏
- 推理链条断裂
- 指令遵循能力下降
- 工具使用错误增加
因此,优秀的上下文工程不是简单地堆砌更多信息,而是精心设计信息的组织和呈现方式。
上下文工程的核心策略
1. 系统提示词的精炼设计
系统提示词是 Agent 行为的基石。我们发现,优秀的系统提示词应该遵循以下原则:
找到合适的抽象层级
在实践中,我们观察到两种常见的失败模式:
过度具体化:
- 硬编码复杂的条件逻辑
- 试图预见所有可能的边界情况
- 创建脆弱且难以维护的指令结构
过度抽象化:
- 提供模糊的高层次指导
- 缺乏具体的输出格式要求
- 假设模型理解隐含的上下文
最佳实践:系统提示词应该处于”恰到好处”的层级——具体到足以指导行为,灵活到允许模型自主判断。
结构化组织
我们推荐将提示词组织成清晰的模块:
1 | ## 背景信息 |
2. 工具设计的上下文意识
工具是 Agent 与外部环境交互的桥梁。优秀的工具设计应该:
保持工具集的最小化
一个常见的反模式是提供过多功能重叠的工具。这会导致:
- Agent 在选择工具时犹豫不决
- 工具之间的边界模糊
- 维护复杂度指数级增长
建议:如果一个人类工程师无法明确判断在特定场景下应该使用哪个工具,那么 Agent 也会面临同样的困境。
设计 token 效率高的工具返回
工具返回的信息应该:
- 简洁但完整
- 结构化便于解析
- 避免冗余重复
- 包含必要的元数据
3. 运行时上下文检索策略
随着 Agent 系统的发展,我们观察到一个重要的范式转变:从”预先加载所有上下文”转向”按需检索上下文”。
预加载 vs 即时检索
预加载策略:
- 优点:响应速度快,减少工具调用开销
- 缺点:占用大量上下文窗口,可能包含无关信息
- 适用场景:静态、变化少的知识库
即时检索策略:
- 优点:上下文精简,动态适应任务需求
- 缺点:增加工具调用延迟,需要更复杂的导航逻辑
- 适用场景:大规模、动态变化的数据环境
混合策略
在实际应用中,我们推荐混合策略:
- 预加载关键的、高价值的静态上下文
- 为动态数据提供轻量级的引用(如文件路径、URL、查询标识符)
- Agent 在运行时根据任务需求动态加载详细内容
Claude Code 就是混合策略的成功案例:
- 预先加载 CLAUDE.md 配置文件
- 提供 glob、grep 等工具供运行时探索
- Agent 可以根据需要逐步发现和组织上下文
4. 长时任务的上下文管理
对于跨越数十分钟到数小时的复杂任务(如大型代码库迁移、综合研究项目),需要特殊的技术来突破上下文窗口的限制。
上下文压缩(Compaction)
压缩技术的核心思想是:当对话接近上下文窗口限制时,对已有内容进行摘要和提炼,然后启动新的上下文窗口。
Claude Code 的实现:
- 当上下文达到阈值时,触发压缩流程
- 使用模型自身来生成压缩摘要
- 保留关键信息:架构决策、未解决的 bug、实现细节
- 丢弃冗余内容:重复的工具输出、中间消息
- 保留最近访问的 N 个文件供继续参考
压缩的艺术:
- 过度激进的压缩会丢失微妙但关键的信息
- 建议在复杂 Agent 执行轨迹上仔细调优压缩提示词
- 先最大化召回率,再迭代提高精确度
轻量级压缩技巧:
- 清除工具调用结果:一旦工具成功执行,原始结果通常不再需要
- 合并相似的系统消息
- 移除重复的用户确认
结构化笔记(Structured Note-Taking)
结构化笔记技术允许 Agent 在上下文窗口之外维护持久化记忆:
实现方式:
- Agent 定期写入 NOTES.md 等文件
- 记录待办事项、进度状态、关键发现
- 在需要时读取笔记恢复上下文
实际案例:
- Claude Code 的待办列表功能
- 研究 Agent 的实验记录
- 游戏 Agent 的状态追踪(如 Pokémon 游戏的步数统计、等级进度)
优势:
- 最小化上下文开销
- 支持跨会话的连续性
- 允许 Agent 自主组织知识
子 Agent 架构
子 Agent 架构通过任务分解来绕过上下文限制:
1 | 主 Agent (协调者) |
工作流程:
- 主 Agent 维护高层次计划和整体状态
- 将具体子任务委派给专门的子 Agent
- 每个子 Agent 在干净的上下文中深入工作
- 子 Agent 返回精简摘要(通常 1000-2000 token)
- 主 Agent 整合结果并更新整体状态
优势:
- 每个子 Agent 有独立的注意力预算
- 专业化分工提高质量
- 主 Agent 保持清晰的总体视图
实践建议
从简单开始
对于刚开始构建 Agent 的团队,我们建议:
- 先实现最简单的上下文管理方案
- 在最强可用的模型上测试表现
- 根据实际失败模式逐步增加复杂度
- 避免过早优化
持续监控和迭代
上下文工程不是一次性的设计工作,而是需要持续优化的过程:
- 监控注意力使用情况
- 分析 Agent 错误与上下文的关系
- 收集团队成员的反馈
- 定期审查和更新工具集
面向未来设计
随着模型能力的持续提升,我们预期:
- 上下文窗口会继续扩大
- 模型对长上下文的处理会更高效
- 但上下文工程的核心原则仍然适用
- 自动化程度会越来越高
总结
上下文工程代表了 AI Agent 开发的新前沿。它超越了传统的提示工程,提供了一个更全面的框架来理解和优化 AI 系统的行为。
核心要点:
- 上下文是有限且宝贵的资源,需要精心管理
- 优秀的上下文工程追求”最小但充分”的信息集
- 运行时检索和长时记忆技术是突破限制的关键
- 简单有效的原则胜过复杂脆弱的方案
随着 AI 技术的快速发展,我们相信”做最简单但有效的事”仍然是构建 Agent 系统的最佳建议。
本文翻译自 Anthropic Engineering Blog,原文标题为”Effective context engineering for AI agents”。
关于 Anthropic
Anthropic 是一家专注于 AI 安全和研究的公司,致力于构建可靠、可解释、可导向的 AI 系统。
相关链接
本文内容翻译自 Anthropic Engineering Blog 官方博客。