上下文工程

从 Prompt Engineering 到 Context Engineering 的转变 — 为什么 Agent 的注意力预算是稀缺资源,三支柱(提示词、记忆、上下文生命周期)如何组合

从 Prompt Engineering 到 Context Engineering

Prompt Engineering 是写好单条指令的技艺:选对词、搭好结构、挑准示例,让一次模型调用产出期望结果。这门手艺仍然有用 — 但已经不够了。

Context Engineering 是更宏观的学科。它问的是另一个问题:

“什么样的上下文配置,最可能让模型产生期望的行为?” — Anthropic, Effective Context Engineering for AI Agents

Agent 不是一次调用。它是一个循环:模型读上下文、调工具、拿结果、推理、继续 — 往往几十上百轮。每一轮,上下文窗口都会被完整重读一次。窗口里留了什么、怎么进来的、何时退出、被什么取代 — 这些选择在整个运行中累积。Prompt Engineering 优化一次调用;Context Engineering 优化整个信息生命周期。

这种转变之所以重要,是因为失败方式不同。糟糕的 prompt 产出糟糕的回答。糟糕的上下文策略则产出一个开始连贯但逐渐腐坏的 Agent — 忘记早期决策、前后矛盾、十轮前的用户目标已经丢了。第二种失败在越过某个阈值之前是不可见的;等你察觉,对话已经无法挽救。


注意力预算 (Attention Budget)

语言模型的工作记忆是有限的。长上下文基准的研究 — “大海捞针”检索、多文档问答、Agent 编码评测 — 揭示了 Anthropic 称为上下文衰退 (context rot) 的现象:

随着上下文窗口中的 token 数增加,模型准确召回特定信息的能力下降。

这不是在某个特定 token 数上出现的硬断崖,而是一个梯度:模型的有效精度在上下文远未”填满”之前就已经开始缓慢下降。因此结论不是”用更小的上下文”,而是:

找到最小的高信号 token 集合,最大化产生期望结果的可能性。

窗口中的每个 token 都在和其他所有 token 竞争注意力。低价值 token — 过时的工具输出、重复的样板、走不通的猜测 — 不仅仅是占位,它们会主动稀释模型对高价值 token 的关注。Context Engineering 就是最大化信号密度的学科。

两个推论:

  • 上下文不是越多越好。 把所有”可能有用的”文档都预加载进去,往往会可衡量地伤害性能。一个塞满弱信号的 100k token 上下文,常常输给一个精心挑选的 10k token 上下文。
  • 上下文有成本。 Token 是计费的。缓存能摊薄成本,但只对稳定前缀有效(参见 提示词设计,这点直接决定了 prompt 布局)。

三支柱

上下文工程三支柱 (Context Engineering Pillars) 同一份有限资源 —— 注意力预算 —— 的三个视角 提示词设计 (Prompt Design) 静态骨架 问题 Agent 始终看到的 是什么? 关注点 • 正确的高度 • XML / Markdown 结构 • 示例 > 规则 • 工具定义 • 缓存感知排序 记忆设计 (Memory Design) 窗口之外持久的东西 问题 什么信息存在窗口外、 按需召回? 关注点 • 记忆分类学 • 读写策略 • 结构化笔记 • 失效机制 • 召回预算 上下文管理 (Context Management) 运行时的纪律 问题 此刻窗口里装着什么、 为什么? 关注点 • 注意力预算 • 压缩谱系 • 即时加载 • 子 Agent 隔离 • Checkpoint 恢复 常载入前缀 按召回载入 修剪与重载 模型的上下文窗口 —— 有限的共享资源 注意力预算 · 信号密度 · Token 成本 三支柱都在竞争 —— 同时又治理 —— 这同一个窗口,一轮接一轮 最小的高信号 token 集合 → 最大化产生期望结果的可能性

Context Engineering 是个大的设计空间。更方便的思考方式,是把它拆成三个各自回答不同问题的支柱:

支柱回答的问题关注点
提示词设计Agent 始终看到的静态骨架是什么?高度、结构、示例、工具定义、缓存
记忆设计什么信息存在窗口之外、按需召回?记忆分类学、读写策略、结构化笔记
上下文管理循环过程中如何修剪、替换、重载信息?预算、即时加载、子 Agent 隔离、checkpoint

第三支柱里有一个操作足够厚重、值得独立成章上下文压缩 —— 运行时已无法把窗口控制在预算内时启动的操作。触发、谱系、保留、调优、多 Agent 协调、跨框架对比都住在那里。它在阅读顺序里放在记忆和上下文管理之间 —— 因为它描述的是内容层溢出时会发生什么先于把它编排进循环的运行时层。

三个支柱并非彼此独立:

  • 记忆写入的信息,要由上下文管理在循环中载入;好的记忆如果从不被召回,等于没有。
  • 工具定义属于提示词,但工具返回结果的形态由上下文管理治理(保留多少、如何截断)。
  • 子 Agent 继承一个新鲜 prompt、用自己的记忆通道、回归时和压缩组合 — 一次委托同时涉及三个支柱。

把三支柱当成推理权衡时的词汇,不是正交的模块。


指导原则

后续页面讲的每一个技法 — XML 标签、示例挑选、记忆类型、即时加载、压缩级联、子 Agent 架构 — 都是同一个原则的局部实例:

在循环的每一步,识别出最小的高信号 token 集合,最大化产生期望结果的可能性。

模型进步后,上下文窗口会增大、注意力质量会提升。为弱模型搭的某些脚手架会变得多余。但底层约束不会消失:上下文仍然是稀缺资源,仍然有真实的机会成本。更强的模型让人去做更雄心的任务,那些任务又会用新类型的信息填满窗口。张力不会消失,它只是换一种形态出现。

阅读三支柱时如果感到某个技法令人困惑、或权衡看起来武断,回到这条原则重新看。


关于度量

三支柱各有值得测的东西 —— prompt 回归、记忆命中率、上下文占用。把它们当工程件对待,不是手艺。每个支柱页末尾都有一段简短的”如何度量”小节,点明那根支柱专属的信号。

三支柱共有的元原则:没有回归装置,每次改动都是观点。 最小的有用装置通常是一组固定的真实输入 + 期望行为 —— 20-50 条起步就够,也足以抓住生产里大多数会出的问题。


阅读指南

如果你对这个话题不熟,按顺序读;后面的支柱会把前面的作为词汇使用。

  1. 提示词设计 — 静态骨架。如何找对高度、把指令结构化以便模型解析、用示例作为主要的引导手段、排布 prompt 块让缓存真正生效。

  2. 记忆设计 — 窗口之外持久的东西。记忆类型分类(情景、语义、程序、工作),何时该写、何时该召回,结构化笔记作为持久的规划状态,以及记忆如何失效。

  3. 上下文压缩 —— 窗口装不下需要的内容时启动的操作:压缩谱系、触发策略、保留政策、自定义指令、设计扩展(多 Agent / 缓存 / 恢复)、跨框架参考。

  4. 上下文管理 —— 把上述各项整合起来的运行时纪律。注意力预算、即时加载、渐进式披露、把子 Agent 本身作为一种上下文工程手段、checkpoint、失败模式。

还有两个压轴,把理论转成实践:

  • 案例:Claude 设计 Agent 提示词 —— 对一份 ~340 行真实生产级系统提示词的精读,点名每一个值得学的设计动作。理论在真实提示词里的样子
  • 从案例到范式 —— 从那次精读蒸馏出的方法:10 步设计流程,以及同一套不变量如何从单体 prompt 延伸到运行时装配的组合式架构

如果你想了解 Zapvol 的具体实现(压缩层级、记忆服务、prompt registry),请看 架构 — 本章讲的是设计理论,不是代码走读。


来源

这页有帮助吗?