跳到主内容

上下文工程(Context Engineering)怎么做:用最小高信号 token 喂给大模型的 6 个动作

100%
上下文工程(Context Engineering)怎么做:用最小高信号 token 喂给大模型的 6 个动作

上下文工程(Context Engineering)的本质,是在大模型有限的注意力预算里,只放入「最小且高信号」的 token 集合——不是把资料塞满上下文窗口,而是让每一个进入上下文的 token 都真正改变模型的输出概率。上下文变长会引发 context rot(上下文腐烂),模型召回与长程推理精度会梯度式下降;因此比”换更大窗口”更有效的做法是:控制提示高度、压缩工具集、清理工具结果、把记忆外置、用子代理隔离探索噪声。

Anthropic 在工程博客《 Effective context engineering for AI agents 》中把这条原则写得很直白:找到 the smallest possible set of high-signal tokens that maximize the likelihood of some desired outcome。本文把它拆成 6 个可以今天就在项目里落地的动作。

上下文腐烂:为什么塞得越满越笨

Transformer 里 n 个 token 会产生 n² 量级的成对注意力关系,而训练分布中短序列远多于长序列。结果是:上下文越长,模型对其中信息的回忆能力越弱,而且这种退化是梯度式的,不是到某个阈值才突然崩掉——你只会感觉它”越来越不准”,却很难定位。

所以上下文是消耗品:每增加一个 token 都在稀释其他 token 的权重。这也是为什么”等 200 万 token 窗口出来就好了”这个想法不成立——只要你在跑长任务,上下文污染管理就不会消失。

判断上下文是否失控的最快指标:让模型复述”当前任务的三个硬性约束”。复述不全,说明有效信号已经被稀释,该做压缩而不是加提示词。

动作一:系统提示保持在「正确高度」

系统提示有两个典型失败极端,中间那条窄路才是对的:

  • 过脆:把 if-else 逻辑硬编码进提示词,试图精确触发行为。短期有效,长期维护成本爆炸,模型一换版本就崩。
  • 过虚:只给”你是一个专业的助手”这类高层指导,缺少具体信号,还默认模型已经知道你的业务口径。

正确高度是:specific enough to guide behavior, yet flexible enough to give the model strong heuristics。做法上,把提示词按区块切分,用 XML 标签或 Markdown 标题界定:

<background_information>
  你是内部客服工单系统的 Agent,只对已登录用户开放。
</background_information>

## Tool guidance
  优先用 search_order 定位订单,禁止直接查库表。

## Output description
  只输出 JSON,不要解释。

迭代顺序也很关键:先用最小提示 + 当前最强模型跑一遍,根据暴露的失败模式再加指令,而不是一开始就写三千字规范。

动作二:维护「最小可用工具集」

工具定义了 Agent 与信息/行动空间之间的契约,所以它必须同时满足两件事:返回 token 高效、鼓励高效行为。常见失败是工具集臃肿,导致”该用哪个工具”本身产生歧义。

一条实用的判断标准:如果人类工程师都说不清某个场景该用哪个工具,就别指望 Agent 能选对。把工具砍到最小可用集,既减少歧义,也让长对话中的上下文维护变得可控。

工具设计自查清单(展开)
  • 工具是否自包含、抗错、用途一句话说得清?
  • 输入参数是否描述性强且无歧义?
  • 返回值是否只带必要字段,而不是整张数据库行?
  • 是否让 Agent 拿到轻量标识符(文件路径、查询 ID 、 URL)而不是整块数据?
  • 是否存在功能重叠的两个工具?有就合并。

动作三:少样本示例要「典型」,不要「穷举」

Few-shot 依然是强推荐实践,但很多人把边缘案例堆成”洗衣清单”,试图穷举所有规则——这不推荐。正确做法是挑选一组多样化、规范化(canonical)的示例,让示例本身承载行为范式。对模型来说,示例是”一图胜千言”。

动作四:压缩(Compaction)——长任务的第一手段

当对话逼近窗口上限,用模型对历史做高保真摘要,再用摘要开启新上下文。保留什么、丢掉什么,是压缩的全部艺术:

保留丢弃
架构决策、未解决 bug 、关键实现细节重复的工具输出
任务目标与依赖关系已失效的中间结果
用户明确给出的硬约束冗余的确认性消息

调压缩提示词分两步:先在复杂 trace 上最大化召回,确保摘要覆盖所有相关信息;再迭代提升精确率,剔除多余内容。另外,最轻量的压缩手段是工具结果清理——深层历史里被调用过的工具,其原始调用与返回几乎不必再出现在上下文中。

动作五:结构化笔记,把记忆放在上下文之外

让 Agent 定期把笔记写到上下文窗口之外的持久化介质(文件、数据库、 memory 目录),需要时再读回。开销极小,却能支撑跨小时、跨会话的长周期任务。最简单的形态就是一个 NOTES.md 或待办清单:目标、已完成项、关键决策、依赖关系。

动作六:子代理架构隔离探索噪声

复杂研究/分析类任务,让主代理只做高层计划与综合,子代理带着干净的上下文深挖子任务,最后只回传 1,000–2,000 token 的精炼摘要。这样主上下文不会被几万 token 的探索细节淹没。

三项技术怎么选

技术适用场景代价
压缩 Compaction多轮对话、要保持对话流连贯可能丢失后续变关键的细节
外部笔记 Note-taking有清晰里程碑的迭代开发需要自己设计读写时机
子代理 Sub-agent可并行探索的研究/分析任务编排复杂、延迟更高

  1. 统计当前每轮请求的 token 构成:系统提示、工具定义、历史消息、工具返回各占多少。

  2. 把系统提示重写为「背景 / 指令 / 工具指引 / 输出描述」四个区块,删除所有硬编码 if-else 。

  3. 砍工具:合并功能重叠项,返回值改成分页或字段裁剪。

  4. 加上工具结果清理——超过 N 轮的历史工具返回不再回传。

  5. 设置压缩触发线(建议窗口用量的 70–80%),写好保留项白名单。

  6. 建立 NOTES.md 外部记忆:目标、已完成、关键决策、依赖,上下文重置后先读它。

常见误区

  • 以为上下文工程就是提示词工程:提示词只是上下文的一个组件,工具、示例、消息历史、外部记忆同样要治理。
  • 一次写好、长期不动:上下文是每轮都要重新策划的,不是一次性配置。
  • 为了短而牺牲必要信息:minimal 不等于 short,模型仍需足够前置信息来约束行为。

上下文工程(Context Engineering)和提示词工程有什么区别?
提示词工程关注的是”怎么写这句话”,上下文工程关注的是”这一轮推理该让模型看到哪些信息”。后者把系统提示、工具定义与返回、少样本示例、消息历史、外部记忆都纳入治理范围,是提示词工程在 Agent 时代的超集。

上下文窗口越来越大,还需要做上下文管理吗?
需要。窗口变大只推迟了问题,没有消除它。上下文腐烂是梯度式的,长上下文下模型在信息检索与长程推理上的精度仍会下降;同时更长的输入意味着更高的成本与延迟。

压缩(Compaction)应该在什么时机触发?
建议在上下文用量达到 70–80% 时触发,留出足够的摘要生成空间。不要等到窗口将满才压,那时摘要本身就可能挤爆剩余空间。

外部笔记和 Agent 记忆系统是一回事吗?
外部笔记是最小形态的实现,比如一个 NOTES.md 或待办清单;完整的 Agent 记忆系统通常还包含检索策略、过期淘汰与跨会话索引。先做笔记,再按需升级。

相关阅读

阅读 Anthropic 原文:Effective context engineering for AI agents

本文基于 Anthropic 官方工程博客的观点与实践经验重新组织撰写,结论与落地清单为本站整理。

这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

795文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示