2025年下半年,Anthropic 工程团队发布了一篇影响深远的技术博客《Effective Context Engineering for AI Agents》,在 Hacker News 上获得了 148 分的高赞。紧接着,Manus 团队也分享了他们在构建 AI Agent 过程中关于 Context Engineering 的实战经验,同样收获了 120 分。两篇文章不约而同地指向同一个结论:在 AI Agent 时代,Prompt Engineering 已经不够用了,我们需要 Context Engineering。
这不是一次简单的术语更替,而是 AI 应用开发范式的根本性转变。本文将深入剖析 Context Engineering 的技术原理、核心策略和工程实践,帮助你理解为什么它是让 AI Agent 从“能聊天”进化到“能干活”的关键一步。
一、从 Prompt Engineering 到 Context Engineering:为什么需要进化?
Prompt Engineering 关注的是如何写好一条指令,让模型在单次交互中给出最佳回答。这在 Chatbot 时代足够了——用户问一句,模型答一句,上下文就是对话历史。
但 AI Agent 完全不同。一个真正的 Agent 需要:
- 多步推理:将复杂任务分解为子步骤,逐步执行
- 工具调用:读写文件、调用 API、搜索网页、执行代码
- 长期记忆:跨会话保持对项目、用户偏好、历史决策的理解
- 动态上下文:根据当前任务阶段,灵活组装最相关的信息
当 Agent 的上下文窗口从简单的对话历史扩展到工具输出、文件内容、系统提示、技能文档等多维信息时,如何管理和组织这些上下文就成了核心挑战。这就是 Context Engineering 要解决的问题。
二、Context Engineering 的核心架构
一个成熟的 Context Engineering 系统通常包含以下层次:
┌─────────────────────────────────────────┐
│ System Prompt Layer │
│ (身份、规则、工具描述、安全约束) │
├─────────────────────────────────────────┤
│ Dynamic Context Layer │
│ (用户记忆、技能文档、相关文件) │
├─────────────────────────────────────────┤
│ Conversation Layer │
│ (对话历史、工具调用结果) │
├─────────────────────────────────────────┤
│ Retrieval Layer (RAG) │
│ (向量检索、知识库、代码搜索) │
├─────────────────────────────────────────┤
│ Working Memory Layer │
│ (当前任务状态、中间结果、TODO列表) │
└─────────────────────────────────────────┘
每一层都有其生命周期和更新策略。System Prompt 相对静态,而 Working Memory 则在每一步推理后都可能更新。关键在于如何在有限的上下文窗口中,动态地组合这些层的信息。
三、六大核心策略
策略1:上下文预算管理
上下文窗口是有限资源。以 Claude 3.5 Sonnet 的 200K tokens 窗口为例,一个典型的 Agent 交互可能消耗:
- System Prompt:2,000-5,000 tokens
- 工具定义:5,000-15,000 tokens
- 对话历史:随交互增长,可能达到 50,000+ tokens
- 工具输出:单次文件读取或 API 调用可能返回 10,000+ tokens
Anthropic 的建议是实施分层压缩策略:
# 伪代码:上下文预算管理
def manage_context(conversation, max_tokens=180000):
# 1. 保留最近 N 轮完整对话
recent = conversation[-6:] # 最近3轮交互
# 2. 压缩历史对话为摘要
older_summary = summarize(conversation[:-6])
# 3. 工具输出只保留关键部分
tool_outputs = extract_key_findings(conversation)
# 4. 动态注入相关记忆
relevant_memories = retrieve_relevant(conversation[-1])
return compose_context(
system_prompt, older_summary, recent,
tool_outputs, relevant_memories
)
策略2:工具输出的选择性注入
这是最容易被忽视但影响最大的策略。当 Agent 调用工具时,返回的结果可能非常庞大。直接将全部输出塞入上下文会导致:
- 上下文窗口快速耗尽
- 关键信息被大量无关内容稀释
- 模型注意力分散,推理质量下降
Manus 团队的经验是:在工具层就做好过滤和摘要,而不是让模型从海量原始数据中自行提取。
策略3:分层记忆系统
借鉴人类记忆的工作方式,一个完善的 Agent 记忆系统应该包含:
- 工作记忆(Working Memory):当前任务的即时状态
- 短期记忆(Short-term Memory):当前会话的关键信息
- 长期记忆(Long-term Memory):跨会话的持久化知识
class AgentMemory:
def __init__(self):
self.working = {}
self.session_store = []
self.persistent_db = None
def remember(self, fact, importance="medium"):
if importance == "critical":
self.working["critical_facts"] = fact
self.persistent_db.store(fact)
elif importance == "high":
self.session_store.append(fact)
def recall(self, query, top_k=5):
results = []
results.extend(self._search_working(query))
results.extend(self._search_session(query))
results.extend(self._search_persistent(query, top_k))
return deduplicate_and_rank(results)
策略4:动态技能注入
与其在 System Prompt 中塞入所有可能用到的知识,不如根据当前任务动态加载相关技能:
available_skills = ["python-debugging", "git-workflow", "docker-deploy"]
def select_skills(task_description):
relevant = []
for skill in available_skills:
if is_relevant(skill, task_description):
relevant.append(load_skill(skill))
return relevant
context["skills"] = select_skills(user_request)
这种方式的好处是:上下文中只包含当前任务需要的知识,避免了无关信息的干扰。
策略5:结构化输出约束
当 Agent 需要生成结构化数据时,在上下文中提供明确的 Schema 和示例比自然语言描述更有效。
策略6:上下文感知的错误恢复
当 Agent 执行出错时,如何将错误信息有效地注入上下文以指导恢复?关键原则是:
- 保留完整的错误堆栈
- 包含失败前的最后一步操作
- 注入相关的成功案例作为参考
四、Context Engineering 的工程实践
实践1:Token 计数与预算可视化
在生产环境中,你需要实时监控上下文的 token 使用情况。
实践2:上下文缓存与复用
Anthropic 的 Context Caching 功能可以显著降低成本。一个优化的 Agent 应该:
- 将静态内容放在上下文的前部
- 将动态内容放在后部
- 利用 API 的缓存机制减少重复计算
实践3:渐进式信息加载
不要一次性加载所有信息。采用渐进式加载策略:先只加载概览,根据需要深入,只在必要时读取全文。
五、常见陷阱与反模式
陷阱1:上下文过载 — 试图把所有相关信息都塞进上下文,结果模型被信息淹没。记住:更多不等于更好。
陷阱2:忽略工具输出质量 — 花大量精力优化 System Prompt,却放任工具返回未经处理的原始数据。
陷阱3:静态上下文策略 — 用固定的模板组装上下文,不考虑任务的不同阶段。
陷阱4:记忆系统过于简单 — 只用向量数据库存取记忆,没有考虑记忆的衰减、冲突解决和优先级管理。
六、展望:Context Engineering 的未来
随着模型上下文窗口从 128K 扩展到 1M+ tokens,有人可能会问:Context Engineering 还重要吗?答案是更加重要。原因在于:
- 更大的窗口 ≠ 更好的注意力:研究表明,模型在超长上下文中的“中间遗忘”问题依然存在
- 成本问题:即使窗口够大,处理 1M tokens 的成本和延迟也是不可接受的
- 信息质量 > 信息数量:精心组织的 10K tokens 上下文,胜过未经处理的 100K tokens 原始数据
Context Engineering 正在从一门“手艺”进化为一门“工程学科”。未来,我们可能会看到专门的 Context Management 中间件、标准化的上下文组装框架,以及自动化的上下文优化工具。
结语:如果你正在构建 AI Agent,把注意力从“如何写更好的 Prompt”转移到“如何设计更好的上下文系统”上来。这不仅仅是技术层面的升级,更是思维方式的转变——从“对模型说话”到“为模型构建世界”。