上下文工程为什么不只是把提示词写得更长?

什么是上下文工程

约 11 分钟5 道自测更新于 2026-11-01

一句话记住上下文工程不是把提示词写长,而是管理每一步窗口里放什么、放多少、怎么排;优先用高密度信息,并按需写入、选择、压缩和隔离。

01学完你能做到

理解从「写一句提示」到「管理整个上下文」的转变。

02从提示词到上下文

第 16–21 讲讲的是提示词工程:怎么把一段指令写好。

但在真实的 AI 应用里,尤其是 Agent(第 28 讲(什么是 Agent)起),模型每一步看到的远不止一句指令。它的上下文窗口里塞着:

  • 系统提示(角色、规则);
  • 工具说明(第 29 讲(工具调用 / Function Calling));
  • 历史对话;
  • 检索来的资料(第 24 讲(RAG 原理));
  • 记忆和笔记(第 26 讲(记忆));
  • 上一步工具调用返回的结果。

上下文工程(context engineering)关心的问题是:在每一步,窗口里该放哪些信息、放多少、按什么顺序放。

Anthropic 的工程文章给出的核心原则是:找到尽可能小、信息密度尽可能高的一组 token,让期望结果出现的可能性最大。

LangChain 的文章引用了 Andrej Karpathy 的比喻:大模型像一种新的操作系统,模型是 CPU,上下文窗口是内存(RAM),也就是模型的「工作记忆」。内存容量有限,所以要管理好装进去的东西。

提示词工程与上下文工程
  1. 提示词工程写清一段指令
  2. 上下文工程管理整个窗口

03为什么上下文是「有限资源」

很多模型的窗口已经有几十万甚至上百万 token,为什么还要省着用?

Anthropic 的文章给了两个理由。

理由一:上下文腐化。 窗口里的 token 越多,模型从中准确找回信息的能力越差。这种现象在所有模型上都存在,只是有的下降得平缓些。第 23 讲(上下文窗口与上下文腐化)会详细讲。

理由二:注意力预算。 文章说,大模型和人一样有「注意力预算」,每多一个 token 就消耗一点。原因来自架构:第 7 讲(注意力机制)讲过,Transformer 里每个 token 都要和其他所有 token 计算关系,n 个 token 就有 n² 对关系。

算一下:

  • 1 千个 token:10³ × 10³ = 10⁶,一百万对关系;
  • 1 万个 token:10⁸,一亿对;
  • 10 万个 token:10¹⁰,一百亿对。

token 每多 10 倍,两两关系就多 100 倍。窗口越长,注意力就越被「摊薄」。文章还提到,模型在训练时见过的短文本远多于长文本,所以它对超长距离关系的经验也更少。

结论:上下文不是越多越好,而是边际收益递减。多放一段无关资料不是「免费」的,它会稀释真正重要的信息。

04四类策略

LangChain 的文章把上下文工程的常见做法归为四类:写入、选择、压缩、隔离。

策略意思例子后面在哪节细讲
写入 Write把信息存到窗口外面,留着以后用草稿本(scratchpad)、跨会话的长期记忆第 26 讲(记忆)
选择 Select需要时把相关信息取回窗口检索资料、调出相关记忆、只挑相关的工具说明第 24、25 讲
压缩 Compress只保留要点把长对话总结成摘要、裁掉旧的工具结果第 27 讲(压缩与隔离)
隔离 Isolate把不同任务的上下文分开子智能体各用各的窗口、在沙箱里运行代码第 27、32 讲
上下文工程的四类策略
  1. 写入存到窗口外
  2. 选择按需取回
  3. 压缩只留要点
  4. 隔离分开任务

05演示:给一个 Agent 记一笔上下文账

假设一个「研报助手」Agent,模型窗口是 128k token。第 15 步时,窗口里有:

内容token 数
系统提示2,000
20 个工具的说明6,000
前 14 步的完整对话和工具调用记录45,000
检索到的 30 段研报全文60,000
合计113,000

(数字是示意。)

已经用掉 113k / 128k ≈ 88%,而且大部分是过时或低相关的内容。按四类策略逐项「瘦身」:

  1. 选择:这一步只需要用到 3 个工具,只放这 3 个的说明:6,000 → 约 1,000。
  2. 选择:30 段资料里只取与当前问题最相关的 5 段:60,000 → 约 10,000。
  3. 压缩:前 14 步的记录总结成一份「进展摘要」:45,000 → 约 3,000。
  4. 写入:完整的原始记录写进文件,需要时再读取,不占窗口。

瘦身后:2,000 + 1,000 + 10,000 + 3,000 = 16,000 token,只有原来的约 14%。剩下的都是和当前这一步最相关的信息。

上下文账示意:通过选择、压缩和写入,把窗口从 113k token 聚焦到 16k。
上下文账示意:通过选择、压缩和写入,把窗口从 113k token 聚焦到 16k。

06预先加载,还是「即用即取」

Anthropic 的文章还对比了两种获取信息的方式:

  • 预先加载:一开始就把可能相关的资料检索好、全部放进窗口(传统 RAG 的做法);
  • 即用即取(just in time):只在窗口里放轻量的「指针」,比如文件路径、存好的查询、网页链接,Agent 需要时用工具把内容读进来。

文章举的例子是 Claude Code。它采用混合策略:项目说明文件(CLAUDE.md)一开始就放进上下文,其他文件则让 Agent 用 glob、grep 这类搜索工具按需查找、读取。

文章也提醒:即用即取更慢,而且 Agent 如果不会用工具,可能会走弯路、浪费上下文。对于内容不常变化的场景(文章举了法律、金融),混合策略可能更合适。第 25 讲(RAG 进阶与常见失败)讲 Agentic RAG 时还会用到这个思路。

07延伸阅读

  • Anthropic, Effective context engineering for AI agents:anthropic.com
  • LangChain, Context Engineering(for agents):langchain.com

08一分钟讲给别人

试着用自己的话讲一遍上下文工程关心的是:每一步窗口里放什么、放多少。原则是找到尽可能小、信息密度尽可能高的一组 token。上下文是有限资源:token 越多,模型越难准确找回信息;n 个 token 有 n² 对关系,注意力会被摊薄,边际收益递减。常用策略分四类:写入(存到窗口外)、选择(按需取回)、压缩(只留要点)、隔离(分开放)。获取信息有两种方式:预先加载和即用即取,也可以两者混合。

想一想

5 道自测

先在心里答一遍,再展开对照。能说清理由,比答对数字更重要。

  1. 01提示词工程和上下文工程关注点有什么不同?

  2. 02上下文从 2 万 token 增加到 20 万 token,两两关系数增加多少倍?

  3. 03把「前 30 轮对话总结成 500 字摘要」属于四类策略中的哪一类?把「用户偏好存进数据库」呢?

  4. 04什么是「即用即取」?它的风险是什么?

  5. 05窗口还没满,为什么也不该把所有资料都放进去?

已看 0/5 题

练动手练习

找一个你熟悉的任务,例如让 AI 根据一份研报回答问题。把系统规则、全部资料、历史对话一次性堆在一起,再做一版:只留下当前问题最相关的资料,并把其余内容改成文件名或要点,比较两版的回答和成本感受。

完成这一课

完成这一课

读完讲义、看完自测答案,这一课就算学完了。

  • 读完讲义
  • 看完全部自测

本课为投资者教育内容,案例数字均为示意,不构成任何投资建议,也不承诺收益。规则和费率会变,实际操作前请以交易所、监管机构和产品的最新公告为准。