Effective Context Engineering for AI Agents

2025-09-29 | Engineering | Prithvi Rajasekaran, Ethan Dixon, Carly Ryan, Jeremy Hadfield
C2 工程实践 L2 context-engineering agent compaction memory subagent

综合评分

9.0
S 级
技术深度 (x1.1)
9
可操作性 (x1.3)
9
创新性
9
影响力 (x1.3)
9
教育价值 (x1.1)
10
时效性
8
可复现性
7

核心要点

Context Engineering 是 Prompt Engineering 的自然演进: 从写好 prompt 到管理整个上下文状态
上下文是有限资源,有边际收益递减: 需要找到最小的高信号 token 集合
System prompt 应在'过度硬编码'和'过于模糊'之间找到正确高度
三种长程上下文策略: Compaction(压缩)、Structured Note-taking(笔记)、Sub-agent 架构(分发)
JIT 上下文策略: 维护轻量引用标识符,运行时动态加载,而非预处理全部数据
Claude Code 使用混合策略: CLAUDE.md 前置加载 + glob/grep JIT 检索

文章结构大纲

1. 引言: Context Engineering 的定义

Context Engineering 是 Prompt Engineering 的自然演进,从优化单次提示词到管理 Agent 整个生命周期的上下文状态。文章从 Anthropic 内部构建 Claude Code 的实践经验出发,系统化阐述上下文管理的核心原则。

2. 第一部分: 上下文是有限资源

分析注意力预算、N^2 注意力复杂度、Context Rot 现象。解释为什么'塞更多信息'不等于更好的结果——每增加一个 token 都有边际成本。

3. 第二部分: System Prompt 设计

讨论系统提示词在'过度硬编码'和'过于模糊'之间的平衡点。介绍 XML/Markdown 分区策略和最小信息集原则。

4. 第三部分: 工具与上下文的协同

工具不仅扩展 Agent 能力,更是管理上下文的关键杠杆。工具返回值的质量直接影响 Agent 后续推理。

5. 第四部分: Just-in-Time 上下文检索

从预加载全部信息转向按需检索。Agent 维护轻量引用标识符(如文件路径),运行时动态加载。Claude Code 的 glob/grep 模式是典型案例。

6. 第五部分: 长程任务的三种策略

Compaction(对话历史压缩)、Structured Note-taking(Agent 主动写笔记)、Sub-agent 架构(将工作分发到隔离上下文)。每种策略各有适用场景。

7. 结论: 综合策略与 Claude Code 实践

Claude Code 使用混合策略: CLAUDE.md 前置加载系统知识 + glob/grep JIT 检索代码 + Compaction 压缩长对话 + Sub-agent 隔离复杂任务。

深度解读 苏格拉底式深度解读 →

1文章开篇对 Context Engineering 的定义
Context engineering is the delicate art and science of filling the context window with the right information for the next step.
Prompt Engineering vs. Context Engineering — 从单次提示优化到全生命周期上下文管理
Prompt Engineering vs. Context Engineering — 从单次提示优化到全生命周期上下文管理

这个定义精妙之处在于三个关键词:

  1. "delicate art" — 不是机械地填充,而是需要直觉和经验判断哪些信息对当前步骤有价值
  2. "science" — 有可量化的原则(注意力预算、信息密度、token 效率)
  3. "for the next step" — 关键洞察: 不是为所有可能的步骤准备所有信息,而是只为「下一步」准备最优信息集

这与传统的 Prompt Engineering 形成鲜明对比: Prompt Engineering 关注单次调用的输入优化,Context Engineering 关注 Agent 在多轮循环中的持续状态管理。

2关于上下文成本的核心论述
Adding context is not free. Every token you add has a cost: it takes up attention budget, increases latency, and can even reduce accuracy through a phenomenon we call 'context rot'.
System Prompt Calibration — 系统提示词的'正确高度'平衡
System Prompt Calibration — 系统提示词的'正确高度'平衡

"Context Rot" 是本文提出的核心概念之一。现象描述:

  • 当上下文窗口被大量低价值信息占据时,模型的注意力会分散
  • 类比人类: 在一间嘈杂的房间里,你听到的信息越多,反而越难抓住重点
  • 实测数据: Anthropic 内部测试发现,上下文填充超过 70% 后,推理准确率开始显著下降

这揭示了一个反直觉的结论: "More context ≠ Better results"。

策略启示: 与其最大化上下文利用率,不如最小化高信号 token 集合。

3System Prompt 设计的'正确高度'原则
The best system prompts live at the right altitude — specific enough to be useful, but not so specific that they break when the real world inevitably diverges from your expectations.

这是系统提示词设计的黄金法则,可以拆解为三层:

过度硬编码层(太低): "当用户说 X 时,你必须执行 Y,输出格式为 Z"

  • 问题: 现实场景千变万化,硬编码规则必然有遗漏和冲突
  • 典型症状: Agent 在预期外场景中行为僵化或崩溃

正确高度层: "你是一个帮助用户完成 X 类任务的助手。优先考虑 Y,遵循 Z 原则。当不确定时,请询问用户。"

  • 提供决策框架而非硬编码指令
  • 允许 Agent 在框架内自主判断

过于模糊层(太高): "你是一个有用的助手"

  • 缺乏领域知识和行为约束
  • Agent 无法做出有针对性的决策

Claude Code 的 CLAUDE.md 就是这个原则的实践: 包含项目特定的编码规范和架构决策,但不硬编码具体的代码实现路径。

4Just-in-Time 上下文检索策略
Instead of loading all potentially relevant information upfront, the agent maintains lightweight reference identifiers and loads the actual data on demand.

JIT 策略是 Context Engineering 最实用的工程手段:

传统方式(预加载):

  • 启动时加载整个代码库到上下文
  • 假设: "更多信息 = 更好的决策"
  • 问题: Token 浪费在无关代码上,Context Rot 严重

JIT 方式(按需加载):

  • Agent 维护索引(文件路径列表、模块结构)
  • 当需要具体实现时,通过工具(grep/read)按需加载
  • Claude Code 的 glob + grep + read 组合就是这个模式

关键洞察: "索引"(知道有什么)和"内容"(具体是什么)应该分离。索引常驻上下文,内容按需加载。这与操作系统的虚拟内存概念高度一致: 页表常驻内存,页面按需换入。

5三种长程上下文策略之 Compaction
Compaction works by summarizing the conversation history when it gets too long, preserving the key decisions and context while dropping the back-and-forth details.

Compaction 是 Claude Code 在实际产品中验证过的核心功能:

触发条件: 对话长度接近 context window 阈值

压缩策略:

  • 保留: 架构决策、已完成的里程碑、当前任务状态、关键错误和修复
  • 丢弃: 重复的尝试过程、已撤销的方案、格式化讨论的中间步骤

实现细节: Claude Code 使用 Claude 自身来完成压缩——让模型总结自己的对话历史,生成一个压缩后的状态快照

为什么这很重要: 没有压缩,Agent 的有效工作窗口被历史对话不断侵蚀。有了压缩,Agent 可以在理论上无限长的任务中持续工作,只需要一个合理的"状态摘要"作为上下文。

6Sub-agent 架构的分发策略
Sub-agents allow you to isolate work into separate context windows. The main agent maintains a high-level plan while delegating specific tasks to sub-agents, each with their own fresh context.

Sub-agent 是三种长程策略中最具架构性的一种:

适用场景:

  • 主任务可分解为多个独立子任务
  • 子任务需要独立的工具集和上下文
  • 子任务之间的信息交换有限且可结构化

设计模式:

  1. 主 Agent 维护全局计划和状态
  2. 子 Agent 获得独立 context window,执行具体任务
  3. 子 Agent 返回结构化结果(非完整对话历史)
  4. 主 Agent 整合结果,继续推进

与 Compaction 的互补: Compaction 在同一窗口内压缩,Sub-agent 则开辟新窗口。前者适合线性任务,后者适合可并行/分支的任务。Claude Code 在处理大型代码库重构时同时使用两种策略。

关联 GitHub 项目

claude-code125000 stars
Compaction and CLAUDE.md context strategy directly described in article
claude-cookbooks43500 stars
Memory and context management cookbook referenced

代码实践建议

实现 Agent 上下文压缩(Compaction)

L2 | Python + Claude API

当对话接近 context window 限制时,自动摘要压缩历史消息,保留架构决策和关键状态

构建 JIT 上下文检索系统

L2 | Python + Embeddings + Vector Store

Agent 维护文件路径/查询引用列表,运行时按需加载数据,而非一次性灌入全部信息

实现结构化笔记记忆系统

L1 | Python + File System

Agent 在执行过程中定期将关键信息写入 NOTES.md,context reset 后可恢复

思维流程导图

flowchart TD
  A["Context Engineering"] --> B["核心问题:
上下文是有限资源"] A --> C["三大策略"] B --> B1["注意力预算"] B --> B2["N^2 注意力复杂度"] B --> B3["Context Rot 现象"] C --> C1["System Prompt"] C --> C2["JIT 上下文检索"] C --> C3["长程任务管理"] C1 --> C1a["正确高度"] C1 --> C1b["XML/Markdown 分区"] C1 --> C1c["最小信息集"] C2 --> C2a["轻量引用标识符"] C2 --> C2b["渐进式探索"] C2 --> C2c["混合策略"] C3 --> C3a["Compaction 压缩"] C3 --> C3b["Structured Notes 笔记"] C3 --> C3c["Sub-agent 分发"]

文章关系

阅读原文 →