第 9 章 Context Engineering 基础¶
在很多 Agent 项目里,效果问题最终都会落到同一个词上:上下文。模型并不是在真空中工作,它总是在某个输入包里做判断。这个输入包里放了什么、没放什么、放了多少、按什么顺序放、哪些信息被摘要过、哪些信息被裁掉,这些决定往往比 Prompt 文案本身更重要。Context Engineering 讨论的,正是这种输入工程。
如果说 Prompt 是控制协议,那么 Context Engineering 更像是模型运行前的“供给系统”。它负责把任务目标、历史状态、检索结果、工具说明、用户约束和环境事实组织成一个可被模型消费的工作面。本章要回答的核心问题是:上下文到底是什么,它为什么会成为 Agent 设计的中心问题,以及一个工程团队应该如何建立对上下文的基本判断框架。
9.1 为什么上下文会成为核心问题¶
传统软件系统的控制逻辑主要依赖显式状态和确定性分支,而 Agent 系统把大量判断交给了模型。模型能做出什么判断,首先取决于它看到了什么。只要输入组织方式变化,哪怕模型本身没变,系统行为也会明显变化。
这意味着 Agent 的很多“智能问题”,其实首先是上下文问题。例如:
- 模型为什么忽略了某条关键约束。
- 模型为什么没有使用明明已经检索到的信息。
- 模型为什么重复调用已经失败过的工具。
- 模型为什么在长任务后半段开始丢失目标感。
这些现象未必说明模型不够强,很多时候说明系统给它的工作面已经失真了。Context Engineering 的价值,就在于把这种“输入失真”从偶然现象变成可设计对象。
9.2 什么是上下文¶
对 Agent 而言,上下文不是“把所有相关文本拼在一起”。它更准确的定义应当是:当前这一步决策所需的最小充分信息集合。
这里面至少包含五类信息:
- 当前任务目标和阶段。
- 必须遵守的系统约束。
- 与本轮动作直接相关的环境事实。
- 已经完成的关键动作和中间结果。
- 当前可用的工具、知识或下一步选择空间。
这个定义里最重要的词是“当前这一步”和“最小充分”。前者强调上下文是面向当前决策的,而不是面向整段会话的;后者强调信息并不是越多越好,而是要足以支撑判断,同时不过度稀释注意力。
9.3 Context Engineering 与 Prompt Engineering 的区别¶
Prompt Engineering 关注的是“怎么描述规则和任务”,Context Engineering 关注的是“什么信息应该被送进这一轮输入,以及怎么组织”。两者相关,但不等价。
一个系统可以有不错的 Prompt,却因为上下文装配混乱而表现很差。也可以有普通的 Prompt,但上下文供给稳定,因此整体效果更可控。两者最大的区别在于:
- Prompt 偏控制层。
- Context 偏供给层。
- Prompt 更稳定。
- Context 更动态。
工程上常见的误区,是把所有问题都推给 Prompt。事实上,只要问题涉及信息选择、摘要、去重、顺序、裁剪和多来源拼装,它更可能属于 Context Engineering。
9.4 上下文工程的基本目标¶
一个成熟的 Context Engineering 至少应该同时服务四个目标。
第一是相关性。进入上下文的信息必须和当前决策直接相关,而不是“也许以后有用”。无关但看起来重要的信息,往往比缺一点信息更危险,因为它会稳定分散模型注意力。
第二是完整性。相关信息再少,也不能少到让模型只能猜。尤其在高风险任务里,宁可先补充事实,也不要在信息不足时强行推进。
第三是可控性。系统需要知道某条信息为什么会进上下文、什么时候该被替换、什么时候应该被移除。否则上下文会逐渐演化成不可解释的文本堆。
第四是成本意识。上下文是有预算的,不只是 token 成本,还有延迟、排序、调试和认知复杂度成本。一个输入包如果长到人都看不明白,模型通常也不会稳定地用好它。
9.5 上下文的层次¶
为了让上下文工程更容易设计,可以把上下文粗分成三个层次。
第一层是稳定控制层,包括角色、任务边界、输出约束和工具使用原则。这一层变化较慢,通常由 System Prompt 和固定规则承载。
第二层是任务状态层,包括当前阶段、已完成动作、中间结论、待验证信息和失败记录。这一层跟着任务推进不断变化,是 Agent 连续性的关键来源。
第三层是外部补充层,包括检索结果、数据库数据、文件片段、用户补充信息和工具输出。这一层最动态,也最需要裁剪、排序和摘要。
把这三层分开思考,有助于系统回答“为什么这条信息在这里”。没有层次的上下文设计,后续几乎必然陷入堆料。
9.6 常见误区¶
第一个误区是“能塞进去就先塞进去”。这是最常见也最昂贵的做法。它短期能提升命中率,长期会稳定损害可解释性。
第二个误区是把上下文等同于聊天历史。历史只是来源之一,不是上下文本身。真正重要的是历史中哪些内容仍然影响当前决策。
第三个误区是把上下文工程看成纯粹的模型适配问题。实际上它同样是状态设计、知识设计和执行设计问题,因为这些系统都决定了信息最终如何进入模型。
9.7 本章小结¶
Context Engineering 讨论的不是“输入长一点还是短一点”,而是如何把当前决策真正需要的信息,以可控、可解释、可维护的方式提供给模型。它是 Agent 系统的供给层,直接决定模型看到什么,因此也直接决定模型更可能做出什么判断。
下一章会继续把这个问题落到更具体的实现层面:当系统已经知道上下文很重要时,到底应该如何装配上下文,哪些信息先放、哪些后放、哪些要摘要、哪些该直接裁掉。