迪图
发布于 2026-10-20 / 14 阅读
0
0

上下文工程完全指南:写穿、选择、压缩、隔离

上下文工程完全指南:写穿、选择、压缩、隔离

模型在商品化,上下文工程在差异化。两个团队用同一个 Claude 做同一款 Agent,效果差 3 倍——差的从来不是模型,而是谁把上下文调度得更聪明。

上下文工程取代提示词工程了吗

先说清楚区别,因为这两个词经常被混用。

维度

Prompt Engineering

Context Engineering

关注点

单次输入的指令写法

整个生命周期的信息流

比喻

教你怎么问问题

帮 AI 布置一个干净的工作台

面向

单轮对话

多轮 Agent + 长任务

核心技能

措辞、结构、示例

检索、压缩、记忆、调度

Anthropic 在 2025 年 9 月的官方博客里说得很直接:上下文工程是提示词工程的自然进化。提示词工程问"什么样的词能产生最好的输出",上下文工程问"什么样的信息配置最可能产生我想要的行为"。

为什么会变:因为 Agent 在多轮循环里跑,每一轮都产生更多材料,而这些材料未必都该进入下一轮。决定什么留下、什么移除,才是工程问题。

一个具象的比喻:LLM 是 CPU,上下文窗口是它的 RAM。你的工作就是做好这块 RAM 的调度。

上下文腐烂:Context Rot

这是上下文工程存在的根本原因。

Chroma 在 2025 年 7 月的技术报告里测试了 18 个模型(含 Claude Opus 4、GPT-4.1、Gemini 2.5 Pro、Qwen3),任务是难度固定、只变输入长度。结果是:所有实验的性能都一致地下降。

Anthropic 也报告同样的模式:有些模型退化更平缓,但没有一个免疫。

原因是架构性的——Transformer 让每个 token 关注其他所有 token,产生 n² 的成对关系,注意力随上下文增长而稀释。

Lost in the Middle

Liu 等人的经典发现(TACL,被引 7000+):模型对长上下文中段的信息利用率显著下降,规模化场景下退化可达 40%。

上下文长度

模型表现

10K token

还能准确捕捉每处细节

50K token

信息开始相互干扰

100K token

经典"迷失在中间"爆发——开头结尾记得,中间全忘

200K token

即使"记得",推理准确率也明显衰减

关键推论:能塞进窗口的信息量,和使用好它的能力,是两条完全不同的曲线。

更大的窗口能解决问题吗

不能。这是最普遍的认知误区。

百万 token 窗口仍然会上下文腐烂,仍然逼你做选择。Anthropic 明确表示等更大窗口不是策略。

指导原则在任何窗口大小下都成立:找到能产生目标结果的、最小的高信号 token 集合。

四个被混用的术语

Token 预算 vs 注意力预算

Token 预算

注意力预算

是什么

Context Window 的物理空间

模型有效消化能力

边界

模型规格(128K / 1M)

由模型、任务、信息布局共同决定

超出时

API 报错

准确率下降、Lost in the Middle

怎么测

tiktoken 计数

评估集 + benchmark

Token 预算只是硬性上限,注意力预算才是有效上限。 Token 预算控制器实际要控制的是注意力预算,通常设在物理边界的 60-80%。

KV Cache vs Prompt Cache

两个名字相似,层次完全不同。

KV Cache

Prompt Cache

是什么

推理服务内部的缓存

供应商在 API 层的前缀复用

在哪

加速器内存或分层缓存

服务端 API 层

存什么

各层已计算的 Key/Value

相同或可复用的稳定前缀

谁维护

推理系统

Anthropic / OpenAI / Google

你能控制吗

通常不能

能(设计稳定前缀)

超长上下文的 KV Cache 可能达到数十 GB——1M token 约需 15GB 显存/用户。这决定了"无脑全量上下文"在服务端不可扩展。

四条实战路线

Anthropic 的工程方法论收敛为四个动词,社区总结成标准框架。它们不是四选一,是分层组合。

路线

做什么

最大坑

写穿 Write-through

关键状态写进外部文件,主上下文只留指针

写出去就忘了读

选择 Select

只把当下需要的拉进窗口

检索质量 = 系统天花板

压缩 Compress

对长期对话做摘要或剪枝

按时间一刀切丢约束

隔离 Isolate

脏活分给独立上下文的子任务

子代理世界观冲突

判断标准只有一条:每一层都要回答"这个信息为什么值得占用主上下文"。

路线一:写穿(Write-through)

核心理念:不是所有信息都要一直待在上下文里。写到外部存储,用的时候再调。

这像人的记忆方式——你不会把一整本书背下来,而是记住它在书架上的位置。

形式

用途

Scratchpad 草稿本

单次任务内的临时笔记,如自动维护的待办列表

长期记忆

跨会话持久化:用户偏好、项目规范

NOTES.md

项目状态、决策记录

坑:Agent 把东西写出去就忘了读。指针体系必须有读回机制——只写不读的外部存储等于没有。

路线二:选择(Select)

核心理念:别一次性把知识库全塞进去,按需动态加载。

从预检索到即时检索(Just-in-Time Retrieval)

这是 2026 年的重要趋势转变:

  • 过去:RAG 在推理前一次性把相关文档塞满上下文

  • 现在:Agent 只保留轻量"指针"(文件路径、URL、数据库查询),真需要了再用工具拉数据

Claude Code 就是这么干的——它不会一次性读完整个代码库,而是用 head、tail、grep、find 定点加载。

这就像人的认知:你查资料不会把整个图书馆搬回家,只带回那几页需要的。

代价要说清楚:检索质量的天花板就是系统的天花板。检索不准,选择机制再精巧也没用。

路线三:压缩(Compress)

当上下文接近上限,把历史摘要化,用摘要开启新窗口。

1. 调用模型总结历史对话
2. 抽取:关键决策、未解决问题、重要文件路径
3. 丢弃:冗余的工具原始输出(老的 ls 输出没必要留)
4. 用摘要作为新上下文起点继续工作

分层压缩:2026 年更好的做法

默认方案——"把旧轮次压成短段落、保留最近轮次原文"——把同一段时间的所有信息一视同仁,这在 2026 年已被明确指出是粗糙的。

更好的做法是分层压缩:

信息类型

处理方式

事实与约束

全量保留

过程性叙述

进摘要

压缩的第一原则是永不丢约束。 丢掉"用户要求周一交"这种句子的代价,远大于丢掉一千字过程描写。

最安全的压缩形式:Tool Result Clearing

已经调用过很久、结果也已被后续消化的老工具输出,可以直接清掉,基本无损。

Anthropic 的务实建议:先保召回(recall),再优化精度(precision)。压缩初期宁可多留,确保不丢关键信息;稳定后再逐步剪掉明显多余的部分。

路线四:隔离(Isolate)

把 Agent 搞不定的复杂任务,拆给子 Agent,每个在自己的干净窗口里工作。

主 Agent:高层规划、任务分发、结果汇总
  └─ 子 Agent A:独立窗口,专注子任务(可能消耗几万 token 探索)
  └─ 子 Agent B:独立窗口,专注另一子任务
     ↓
  只返回 1-2K token 的精炼总结

主 Agent 的上下文始终干净,不被子任务细节淹没。

隔离的边界

Cognition 的两条原则最值得记住:

1. 共享上下文(Share context)

2. 行动携带隐含决策(Actions carry implicit decisions)

2026 年的判断标准:

适用隔离

不适用隔离

结果可独立验收

决策相互依赖

并行检索、批量格式转换

架构设计、长链路编排

多角度分析

需要谈判的协作

看子任务之间需不需要谈判——需要谈判的不要拆。

四种上下文灾难

名称

表现

解法

Context Poisoning 上下文中毒

模型产生幻觉,错误留在上下文里,后续每步都参考它

压缩 + 校验

Context Distraction 上下文分心

塞了太多历史工具结果,模型盯着历史动作复读

压缩 + 工具结果清理

Context Confusion 上下文混淆

工具列表塞了 50 个描述相似的工具,模型像抽盲盒

选择 + 精简工具

Context Clash 上下文冲突

早期定了"用 PostgreSQL",后来改成"MongoDB",两条指令同时在上下文里

压缩时丢弃被推翻的决策

成本账:最硬的存在理由

上下文工程的成本差距已经大到离谱。

项目

数据

填满 1M token 窗口的价格跨度

$0.14 – $10.00(71 倍价差)

Gemini 缓存命中 vs 未缓存

$0.3125 vs $1.25 每百万 token(约 1/4)

DeepSeek 缓存命中

约为未命中价的 1/10

Claude 超 200K 长上下文溢价

输入 $6 / 输出 $22.50 每百万

策略性缓存 + 压缩 + 上下文工程

可降本 50-90%

三个实务结论:

结论一:这是比换模型更大的杠杆。 同样效果,省 50-90% 成本。

结论二:TTFT(首 token 延迟)随窗口膨胀而恶化。 上下文长度同时是成本问题和体验问题。

结论三:KV cache 决定了无脑全量上下文在服务端不可扩展。 上下文工程是刚需,不是优化。

场景化选型

任务场景

推荐策略

代表产品

多轮对话、需要流畅连贯

Compaction 压缩

Claude Code 对话模式

有明确里程碑的迭代开发

Note-taking 结构化笔记

Cursor、Manus 项目模式

复杂研究、可并行探索

Multi-agent 子 Agent 隔离

深度研究类 Agent

短平快的单步任务

Just-in-Time 即时检索

Claude Code 文件操作

一条朴素但重要的原则:Do the simplest thing that works。

上下文工程会消失吗

窗口从 2018 年的 512 token 涨到 2026 年的 1M,八年两千倍。流行的判断是"窗口足够大时上下文工程自然死亡"。

我的判断是:不会消失,会下沉。

观察哨一:从应用层沉到运行时。 压缩、缓存、选择正从开发者手写逻辑变成推理框架的内建能力(auto-compaction 已出现在主流 Agent 运行时里)。下沉完成后"上下文工程师"这个头衔会消失,但它管理的东西会变成和数据库连接池一样的基础设施。

观察哨二:TTFT 和缓存命中率成为新 KPI。 当成本差距主要来自缓存命中与否,优化目标会从"怎么写 prompt"转移到"怎么让上下文可缓存"——稳定 system prompt、稳定前缀、把变化的部分往后放。

观察哨三:1M 窗口的利用率问题。 如果 2027 年还看到"塞满窗口不如精选 10%"的实证结果,说明上下文经济学的基本盘没变——信息是有的,注意力是稀缺的。

注意力稀缺,就是上下文工程存在的全部理由。

参考资料

  • Anthropic, *Effective context engineering for AI agents*(2025-09)— https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents

  • LangChain, *Context Engineering for Agents* — https://blog.langchain.com/context-engineering-for-agents/

  • Chroma, *Context Rot: How Increasing Input Tokens Impacts LLM Performance*(2025-07)— https://research.trychroma.com/context-rot

  • Liu et al., *Lost in the Middle: How Language Models Use Long Contexts*(TACL)— https://arxiv.org/abs/2307.03172

  • Manus, *Context Engineering for AI Agents* — https://manus.im/blog/context-engineering-for-ai-agents

  • Cognition, *Don't Build Multi-Agents* — https://cognition.ai/blog/dont-build-multi-agents


评论