AIDaily · 深度学习文档

上下文工程 Context Engineering

模型不是不够聪明,而是"喂给它的信息不对"。上下文工程,就是在 Agent 每一步都往上下文窗口里塞进"恰好正确"的信息的工程学科——这是 2026 年做 Agent 绕不开的第一门手艺。

调研时间:2026-07-08 · 面向"有技术常识、第一次系统了解本主题"的读者 · 关键事实均标注来源,以官方最新文档为准

030 秒速览

一句话:上下文工程 = 在 Agent 运行的每一步,决定"把哪些信息、以什么结构、在什么时候"放进模型的上下文窗口。

大语言模型的上下文窗口,就像电脑的内存(RAM):容量有限,而且塞得越满、越乱,处理质量反而越差。Agent 要跑几十上百轮、不断吞入工具返回的结果,很容易把这块"内存"塞爆或塞脏。上下文工程就是那套"内存管理"手艺——把信息出去存好、需要时回来、太长了缩、不相干的开。

LLM(像 CPU) 负责"思考/推理" 每一步做一次决策 但看不到窗口外的东西 上下文窗口(像 RAM) 模型的"工作记忆" 容量有限、放满会溢出 塞太满/太乱→质量下降 上下文工程 决定往 RAM 里放什么、 何时清理
类比:Karpathy 把 LLM 比作一种新操作系统,LLM 是 CPU、上下文窗口是 RAM,上下文工程就是那套"内存调度"。图源:概念改编自 LangChain《Context Engineering》
本文你会拿到: 为什么会出现这门学科 → 上下文崩坏的四种典型方式 → 应对它的四大策略(写 Write / 选 Select / 压 Compress / 隔 Isolate)→ 怎么在真实框架里落地 → 谁在用、踩过什么坑。

1为什么需要它:痛点先行

先设身处地想一个场景:你让一个 Agent 帮你做调研。它调用搜索工具、读网页、调数据库、再搜、再读……跑了几十轮。每一次工具返回的内容都会被追加进上下文里。跑到后面,上下文窗口里堆满了几十次工具调用的原始输出——又长又杂。

结果就出问题了。Drew Breunig 和 LangChain 团队总结了长上下文常见的三类恶果:要么直接超出上下文窗口塞不下;要么 token 暴涨、成本和延迟飙升;要么——最隐蔽的——模型性能反而下降,该记住的没记住,被无关内容带偏了。(来源:LangChaindbreunig)

Cognition 团队直言:"上下文工程……实际上是构建 AI Agent 的工程师的第一号工作。"Anthropic 也说:"Agent 常常进行长达数百轮的对话,需要精心的上下文管理策略。"(来源:LangChain 引述)

换句话说:当模型能力已经足够强,制约 Agent 表现的瓶颈,常常不在模型本身,而在"我们喂给它的上下文对不对"。这就是上下文工程作为一门独立学科出现的根本原因。

~50K
相关信息超过约 5 万 token 后,性能开始明显下降(即便窗口标称 1M+)
5 个子 Agent 各喂 100K token,成本是必要量的 5 倍;上下文路由可压到约 20K/Agent
100K
Gemini 2.5 团队观察到:超过约 10 万 token 阈值后,模型"分心"效应显现
数据来源:ivern.ai 上下文工程指南(2026)dbreunig。属工程经验/观测,非官方硬性阈值,具体随模型与任务变化。

2它到底是什么

定义(Karpathy 的说法): 上下文工程是"往上下文窗口里,为下一步填入恰好正确的信息的那门精细的艺术与科学"。通俗讲——不是写一句好 prompt 就完事,而是动态地、在 Agent 每一步管理进出上下文窗口的所有信息。(来源:LangChain 引述 Karpathy)

"上下文"不止是你写的那段提示词。LangChain 把它归纳为一把"伞",覆盖三类信息:

① 指令类 Instructions

提示词、记忆、few-shot 示例、工具说明——告诉模型"要做什么、怎么做"。

② 知识类 Knowledge

事实、长期记忆、检索到的资料——模型完成任务需要的"背景知识"。

③ 工具反馈 Tools

工具调用返回的结果(搜索结果、数据库记录、代码执行输出)——这是 Agent 场景里增长最快、最容易失控的部分。

关键区别

Prompt 工程管的是"那一段静态提示词";上下文工程管的是"整个运行过程中,窗口里所有信息的动态调度"。范围大得多。
换个更严谨的说法 上下文工程是一套系统性方法,决定哪些信息进入 Agent 的上下文窗口、如何组织,以及何时被淘汰或刷新;目标是在最低 token 成本下,保证模型每一步都拿到"相关、充分、彼此不打架"的信息。有研究进一步提出五项质量标准:相关性、充分性、隔离性、经济性、可溯源性。(来源:arXiv 2603.09619ivern.ai)

3上下文为何会崩:四种失败模式

要理解四大策略在"治什么病",得先认识"病症"。Drew Breunig 总结了长上下文出问题的四种典型方式,已被 LangChain、Anthropic 等广泛引用。(来源:dbreunigLangChain)

① 中毒 Poisoning 一个幻觉/错误进了上下文,之后被反复 引用,Agent 追着一个不存在的目标跑 例:打宝可梦的 Agent 目标区被错误信息污染 ② 分心 Distraction 上下文长到模型过度盯着历史记录, 反而忽略了它在训练中学到的能力 例:Gemini 2.5 团队观测到超 10 万 token 后出现 ③ 混淆 Confusion 上下文里塞了多余信息,模型把它 也用上了,生成了低质量回答 例:工具太多、描述重叠,模型选错工具 ④ 冲突 Clash 上下文不同部分互相矛盾——尤其接入 多个第三方工具时,说明彼此打架 例:多来源资料自相矛盾,模型无所适从
上下文的四种失败模式。图源:概念来自 Drew Breunig《How Long Contexts Fail》,经 LangChain 引用
关键直觉: "上下文越多越好"是错的。窗口塞得越满,中毒、分心、混淆、冲突这四种毛病越容易发作。上下文工程的目标不是"填满",而是"填对"。

4四大策略:写 / 选 / 压 / 隔

LangChain 团队(Lance Martin)把业界常见做法归纳成四个桶——写(Write)、选(Select)、压(Compress)、隔(Isolate)。这套分类现在几乎是讨论上下文工程的通用语言。下面逐个用大白话讲透。(来源:LangChainAtlan)

上下文窗口 模型的工作记忆 写 Write · 存出去 选 Select · 取回来 压 Compress · 缩短 隔 Isolate · 分开
四大策略都围绕"上下文窗口"这块有限内存做文章。图源:概念改编自 LangChain《Context Engineering》

① 写 Write — 把信息存到窗口外面

"写"就是把有用的信息保存到上下文窗口之外,需要时再拿。就像人做复杂任务时会在草稿纸上记笔记。两种典型:

  • 草稿本 Scratchpad(单次任务内): Agent 把中间信息写到一个文件或运行时状态对象里。Anthropic 的多 Agent 研究系统就是例子——主研究员一开始就把计划"写进 Memory",因为一旦上下文超过 20 万 token 会被截断,必须先把计划保住。(来源:Anthropic,经 LangChain 引用)
  • 长期记忆 Memory(跨多次会话): 像 ChatGPT、Cursor、Windsurf 都能自动生成跨会话的长期记忆。学术上,Reflexion 提出每轮后"反思"并复用自生成的记忆。

② 选 Select — 需要时把对的信息拉进来

"选"就是在每一步,只把当下相关的信息拉进上下文窗口。存了不等于会用,关键是"选得准"。它作用在几类对象上:

  • 记忆的选取: 挑相关的 few-shot 示例(情景记忆)、指令(程序性记忆)或事实(语义记忆)。很多代码 Agent 用固定文件常驻上下文,比如 Claude Code 的 CLAUDE.md、Cursor/Windsurf 的 rules 文件。
  • 工具的选取: 工具太多会让模型"挑花眼"(描述重叠导致选错)。对工具描述做 RAG、只拉最相关的几个工具,有论文显示能把工具选择准确率提升约 3 倍
  • 知识的选取(RAG): 代码 Agent 是大规模 RAG 的最佳实战场——Windsurf 指出,代码库一大,单纯 embedding 检索就不可靠,得组合 grep/文件搜索、知识图谱检索,再加一步重排序(re-ranking)。
"选"也会翻车: Simon Willison 举过例子——ChatGPT 从记忆里取出他的位置,意外注入到一张他要生成的图里,让人觉得"上下文窗口不再属于自己了"。选择过度或选错,一样有害。

③ 压 Compress — 只留完成任务必需的 token

"压"就是把上下文缩短,只保留任务真正需要的那部分 token。两种手法:

  • 摘要 Summarization: 用 LLM 把长轨迹提炼成短摘要。用过 Claude Code 就见过——超过窗口 95% 时它会自动 "auto-compact",把整段交互历史压缩。也可在特定位置压,比如对 token 很重的搜索工具输出做后处理,或在"Agent 与 Agent 交接"时压缩以减少交接 token(Cognition 甚至专门微调了一个模型来做这步)。
  • 修剪 Trimming: 不用模型,直接按规则"剪枝"——比如删掉过老的消息。Drew Breunig 还提到 Provence,一个为问答训练的上下文剪枝器。

④ 隔 Isolate — 把不相干的上下文分开放

"隔"就是把上下文拆开,不让互不相关的部分互相干扰。三种做法:

  • 多 Agent: 最流行的隔离方式——把上下文拆给多个子 Agent,每个有自己的工具、指令和独立的上下文窗口,各管一块窄任务。
  • 用环境/沙箱隔离: HuggingFace 的 deep researcher 用 CodeAgent——模型输出的是代码,在沙箱里运行,只把需要的返回值传回给 LLM。特别适合把"token 很重的对象"(图片、音频)留在环境里,用变量引用,不塞进上下文。
  • 用状态对象隔离: 给 Agent 设计一个带 schema 的运行时 state,把工具结果写进某些字段,先不暴露给 LLM,等真正需要时再取。
把四招串起来记: 信息太多放不下 → 先出去;这一步用得着 → 回来;还是太长 → 缩;彼此会打架 → 开。绝大多数真实 Agent 是四招混用。

5怎么落地(以 LangGraph 为例)

策略讲完,落到工程上怎么做?LangChain 把 LangGraph 设计成对这四招都友好。注意:下面是官方博客给出的落地思路,不是可直接复制运行的完整代码,具体 API 请以 LangGraph 最新文档 为准(该框架迭代很快)。(来源:LangChain)

动手前的两块地基(官方强调): ① 先能"看见数据"——追踪 Agent 每一步的 token 用量,才知道该在哪儿下功夫(可观测性);② 先有办法"验证"——上下文改动到底让 Agent 变好还是变差,要能评测。没有这两样,优化就是盲调。
策略LangGraph 里怎么对应
写 Write短期记忆用 checkpointing 把 state 持久化(当"草稿本");长期记忆跨会话保存文件或记忆集合,LangMem 提供抽象。
选 Select每个节点(node)里可读取 state,细粒度控制这一步给模型看什么;工具选择用 LangGraph Bigtool 对工具描述做语义搜索。
压 Compress把消息列表作为 state,用内置工具定期摘要/修剪;或在特定节点、工具调用后加摘要逻辑。
隔 Isolate用带 schema 的 state 字段隔离工具结果;支持接入 E2B / Pyodide 沙箱;内置 supervisor、swarm 等多 Agent 架构。

一个"写→选"的最小心智模型,伪代码示意(思路来自官方描述,非官方原样代码):

// 一个 LangGraph 节点里的思路
node("research", (state) => {
  // 选:只取这一步需要的字段,而不是把整个 state 丢给模型
  const ctx = pick(state, ["plan", "recent_findings"]);
  const out = llm(ctx, tools);
  // 写:把重要中间结果写回 state 的独立字段(隔离),不立刻塞进 messages
  return { scratchpad: out.notes, messages: out.answer };
});
类比: 把 Agent 想成一个在处理大案子的侦探。=把线索钉在案情板上(不用全记脑子里);=每次只取跟当前线索相关的几张卡片;=把厚厚的卷宗浓缩成一页要点;=把不同案子分到不同房间,免得线索串味。

6真实场景与案例

隔离 · 多Agent

Anthropic 多 Agent 研究系统

多个带独立上下文的子 Agent 并行探索不同子问题,在广度优先研究任务上比单个 Claude Opus 4 高出 90.2%。代价:token 用量最高约为普通对话的 15 倍,且需要精心的子任务规划与协调。(来源:Anthropic)
压缩 · 摘要

Claude Code 自动压缩

交互超过上下文窗口 95% 时自动 "auto-compact",把完整的用户-Agent 交互轨迹做摘要,让长会话不至于爆窗口。(来源:LangChain 引 Anthropic 文档)
写 · 长期记忆

ChatGPT / Cursor / Windsurf

都内置了跨会话自动生成长期记忆的机制,基于用户-Agent 交互沉淀"记住的东西"。代码 Agent 常用固定 rules 文件(如 Claude Code 的 CLAUDE.md)作为常驻程序性记忆。
隔离 · 环境

HuggingFace deep researcher

用 CodeAgent + 沙箱:模型产出代码在沙箱执行,只把选定的返回值传回,把 token 很重的对象(图片/音频)留在环境里用变量引用。(来源:LangChain)

生产侧的落地样本也在增多:例如 Lyft 用 LangGraph + LangSmith 搭了自助式客服 AI Agent 平台(2026-05 案例),背后同样离不开对上下文与轨迹的追踪与评测。(来源:LangChain 案例)

7和 Prompt 工程、RAG 的关系

很多人会问:这跟提示词工程、跟 RAG 有啥不一样?一句话:上下文工程是更大的伞,Prompt 工程和 RAG 都是它的子集或组成部分。

维度Prompt 工程RAG(检索增强)上下文工程
管什么那一段静态提示词的措辞从外部知识库检索相关资料塞进上下文整个运行过程里,窗口内所有信息的动态调度
时机主要在调用前设计调用时检索Agent 每一步都在做(写/选/压/隔)
关系是上下文工程的一部分(指令类)是"选 Select"策略里的一种(知识选取)包含前两者,再加记忆、工具、压缩、隔离
可以这样记:Prompt 工程解决"怎么把话说清楚",RAG 解决"怎么把对的知识找进来",而上下文工程解决"在 Agent 跑的每一步,整块工作记忆该长什么样"。(综合自 LangChainFirecrawl,属社区共识性表述)

8常见坑与限制

① 多 Agent 不是银弹。 社区(Cognition)明确提醒:多 Agent 不会自动带来更好结果,如果只是拿 Agent 数量去弥补基础没打好,反而会失败;隔离带来的 token 成本可高达单 Agent 的 15 倍。只有当子 Agent 是"有独立角色+独立工具/权限"或并行确实提升吞吐时,才值得拆。(来源:行业观察Anthropic)
② 摘要会丢关键信息。 若某些具体事件或决策必须保留,粗暴摘要可能把它们抹掉;Cognition 为此专门微调了模型来做压缩,说明这步没那么轻松。
③ "选"可能选错、越权。 记忆检索出错会把不该出现的信息注入结果(Simon Willison 的位置泄漏案例),既是质量问题也是隐私/信任问题。
④ 窗口大 ≠ 可以偷懒。 就算模型标称 1M+ token,相关信息超过约 50K 后质量仍会掉;"分心/混淆"随长度上升而加剧。别指望靠大窗口省掉上下文工程。(来源:ivern.ai,属工程观测)
⑤ 榜单/基准要当上界读。 相关的评测研究(ABC 检查清单)提醒:公开测试集可能污染训练数据、抬高分数,最好用留出集或已验证的划分,把榜单数字当"上界"而非保证。(来源:arXiv 2507.02825)

9学习资源

来源清单

  1. LangChain,《Context Engineering》(核心来源,已 fetch 全文),2025-07-02 发布 — https://www.langchain.com/blog/context-engineering-for-agents
  2. Drew Breunig,《How Long Contexts Fail》,2025-06-22 — https://www.dbreunig.com/2025/06/22/how-contexts-fail-and-how-to-fix-them.html
  3. Drew Breunig,《How to Fix Your Context》,2025-06-26 — https://www.dbreunig.com/2025/06/26/how-to-fix-your-context.html
  4. Anthropic Engineering,多 Agent 研究系统 — https://www.anthropic.com/engineering/built-multi-agent-research-system
  5. Atlan,《Write, Select, Compress, Isolate》 — https://atlan.com/know/four-context-engineering-strategies/
  6. ivern.ai,《AI Agent Context Engineering: Complete Guide (2026)》 — https://ivern.ai/blog/ai-agent-context-engineering-complete-guide-2026
  7. arXiv 2603.09619,《Context Engineering: From Prompts to Corporate Multi-Agent Architecture》 — https://arxiv.org/abs/2603.09619
  8. arXiv 2507.02825,《Establishing Best Practices for Building Rigorous Agentic Benchmarks》 — https://arxiv.org/pdf/2507.02825
  9. Firecrawl,《Context Engineering vs Prompt Engineering》 — https://www.firecrawl.dev/blog/context-engineering
  10. Simon Willison,《How to Fix Your Context》,2025-06-29 — https://simonwillison.net/2025/Jun/29/how-to-fix-your-context/
  11. LangChain 案例,Lyft 自助客服 AI Agent 平台,2026-05 — https://www.langchain.com/blog/lyft-built-a-self-serve-ai-agent-platform-for-customer-support-with-langgraph-and-langsmith
说明:本文核心框架(四大策略、四种失败模式、Anthropic/HuggingFace 案例)来自已 fetch 全文的 LangChain 官方博客及其引用的一手来源,可信度较高;部分量化阈值(50K/100K/5×/15×)为工程观测或社区指南数据,非官方硬性标准,随模型与任务变化,决策时请核对官方最新文档与自身评测。「怎么用」一节的 LangGraph API 迭代较快,以官方文档为准。