上下文工程(01):从 Prompt 到 Context 的范式转移

QuibblerAgentQuibblerAgent 2026-10-28 约 14 分钟 4 次阅读

《AI Agent 开发》系列 30 篇讲的是"怎么把 Agent 搭起来":工具调用、RAG、记忆、规划,零件一一到位。但真把 Agent 放进生产环境跑长任务,问题就来了——跑着跑着开始"失忆",重复犯过的错,忽略早期定下的约束,成本还一路飙升。2026 年行业对这类问题的诊断高度一致:Agent 质量的瓶颈不在模型,而在上下文——不是模型不够聪明,而是它在每一步决策时拿到的信息不对。

本篇是《上下文工程》系列的第 1 篇(全景篇)。先讲清楚范式为什么从 Prompt Engineering 挪到了 Context Engineering,再解剖上下文窗口的构成与量级,然后给出这个领域的根本矛盾、核心实证现象与三大主流技术,最后交代全系列 18 篇的路线图。

1、从 Prompt 到 Context 的范式转移

Prompt Engineering 的隐含前提是"一次交互、一条消息":你精心措辞一个 prompt,塞几个 few-shot 示例,模型一次性给出答案。在这个前提下,优化对象就是那一段文字本身——怎么问,决定答案好不好。

Agent 把这个前提掀了。Agent 在循环里跑几十上百轮,每一轮发给模型的内容由你的代码组装:系统提示、工具定义、历史对话、上一轮的工具返回、检索到的文档、记忆里回填的画像。用户的那句"问句",只是窗口里很小的一块。此时再谈"怎么问",就像只优化一封信的措辞,却不管整条流水线上传的是什么货。

2025 年 6 月,Shopify CEO Tobi Lütke 先用起了 context engineering 这个词,几天后 Andrej Karpathy 在推文里把它推成了行业共识,原话大意如下:

它(context engineering)比 prompt engineering 更准确地描述了核心技能——为模型提供恰当的信息与工具,使其完成任务的技艺。

真正的奠基是 Anthropic 2025 年 9 月的文章 Effective context engineering for AI agents。它把上下文定义为"采样时输入模型的全部 token",把上下文工程定义为确定模型在每一步需要什么上下文的技艺,并给出三大技术:compaction(压缩)、结构化笔记、子代理架构。

所以这不是换个时髦名词。优化对象从"一段话"变成"一条信息流水线",优化时机从"写一次"变成"每一步动态决定",思路也从 just-in-case(预防性多塞点)转向 just-in-time(要用时再取)。此后一年,主流 Agent 框架的文档、各家模型厂商的官方指南几乎全部换用了这套话语——术语更替的背后,是工程对象实实在在地变了。

2、上下文窗口的构成解剖

先建立一张构成图。以 200K token 的窗口为例,六个部分与各自量级如下:

上下文窗口(以 200K token 为例)
├─ 系统提示    角色设定、行为规则、输出格式     1K ~ 4K
├─ 工具定义    schema 描述,随工具数线性叠加    1K ~ 20K+
├─ 对话历史    每轮一问一答,线性累积           0 ~ 100K+
├─ 工具结果    搜索、读文件、命令输出           0.5K ~ 10K+
├─ 检索注入    RAG 召回片段,每次检索叠加       1K ~ 8K
└─ 记忆回填    长期画像、笔记、偏好             1K ~ 4K

这张图的关键信息是各部分的增长方式不同:系统提示基本固定;工具定义这一格在接了 MCP(Model Context Protocol)服务器后最容易失控——每个工具的 schema 数百 token,十几个工具叠加就是上万;对话历史随轮数线性涨;而工具结果是爆炸最猛的一格——一次文件读取上万 token,一次命令输出几千 token,且全部滞留在后续每一轮里。

把量级整理成表格:

组成部分 典型量级 增长方式
系统提示 1K~4K token 固定
工具定义 1K~20K token 随工具数线性
对话历史 每轮 0.5K~2K token 线性累积
工具结果 单次 0.5K~10K token 累积,最易爆炸
检索注入 单次 1K~8K token 每次检索叠加
记忆回填 1K~4K token 按策略载入

落到代码上,这六个部分最终拼成一次 API 请求。截取一个简化骨架:

{
  "system": "你是部署在服务器上的运维 Agent……(1~4K token)",
  "tools": [
    { "name": "web_search", "description": "搜索公开网页……(数百 token)" },
    { "name": "read_file", "description": "读取仓库内文件……(数百 token)" }
  ],
  "messages": [
    { "role": "user", "content": "查一下线上 502 的原因" },
    { "role": "assistant", "tool_calls": [
      { "id": "c1", "name": "read_file",
        "arguments": { "path": "/var/log/nginx/error.log" } }
    ] },
    { "role": "tool", "tool_call_id": "c1",
      "content": "……日志全文,约 12000 token……" },
    { "role": "assistant", "content": "根据日志,是 upstream 超时……" }
  ]
}

注意最后那个 tool 消息:一次日志读取 12000 token,它支撑的结论却只有一句话。这些"陪跑"内容会在后续每一轮继续计费、继续参与注意力竞争。对话里最占地方的从来不是用户说的话。

3、窗口有限与需求无限的矛盾

上下文工程的根本问题一句话可以说完:窗口有限且越大越贵,而任务的信息需求没有上限。

拆开看。有限:即便 2026 年主流模型的窗口到了 200K~1M token,一个中型代码库、七年的访问日志、上百轮的会话历史,依然装不下。贵:输入按 token 计费,第 N 轮请求要把前 N-1 轮全部重发一遍——单轮成本线性涨,累计成本随轮数平方涨。举个数(示意):平均每轮新增 5K token 的会话跑满 40 轮,累计输入约 4.1M token;若把每轮窗口压在 10K 以内,累计降到 400K 上下,差出一个数量级。Prompt Caching 把命中缓存的输入降到原价约 10%,官方文档写得很清楚,但缓存救的是钱,救不了信息质量。

另一头,每一步真正用到的信息其实很少。看一份真实感很强的账单拆解:

某 Agent 第 12 轮的窗口快照(累计,示意)
system prompt          2,100
工具定义(14 个)      9,800
对话历史(11 轮)     14,300
工具结果(8 次)      47,600   ← 最大头
检索注入(2 次)       6,200
合计约 80K token,本轮真正新增且被用到的信息不足 3K

80K 的窗口里,本轮真正需要的不足 4%,其余 96% 是历史包袱。这与操作系统的内存管理是同构问题:磁盘远大于内存,所以有分页、有换入换出、有工作集的概念。上下文工程就是 LLM(Large Language Model,大语言模型)的内存管理——不是把所有信息塞进窗口,而是为每一步挑选当下最有用的子集。

4、上下文腐烂实证

"窗口装得下"不等于"模型用得上"。2025 年 7 月,向量数据库 Chroma 发布了 Context Rot 报告,对 18 个前沿模型做系统测试,结论是:随着输入 token 增多,模型准确率系统性下降——无论是喂一份超长文档,还是喂一堆短文档凑长度,都逃不开。这就是上下文腐烂(context rot)。

更早的佐证是 2023 年的 Lost in the Middle 论文:把关键信息放在长上下文的不同位置测试召回,模型对开头和结尾的信息利用得好,对中段信息的利用率明显下滑,呈 U 形曲线。腐烂的机制至今没有定论,注意力稀释是主流解释——注意力权重要分给窗口里的所有 token,无关内容越多,关键信息分到的权重越薄。

对工程师的含义很直接:

  • 标称窗口只代表"能装多少",不代表"能用多少"
  • 塞满窗口是双重失败:token 照付全价,信息还在腐烂
  • 位置也是资源:关键约束放开头,放中段等于半埋

所以长上下文模型的进步并没有取消上下文工程,反而抬高了它的优先级——窗口越大,往里乱塞的代价越隐蔽。

5、三大核心技术预览

针对上述问题,Anthropic 那篇奠基文章归纳了三大技术,也是本系列的主线。

5.1、压缩

compaction 的思路:历史累计到阈值时,让模型把此前的对话总结成一段摘要,用"任务背景 + 已完成事项 + 待办 + 关键事实"替换原始历史,窗口瞬间回落。Claude Code 的 /compact 命令就是这个机制。代价有两个:摘要必然有信息损失;重写历史会击穿缓存前缀,原本 10% 价格的缓存读取变回全价。何时触发、摘要里保留什么、怎么验证没丢关键约束,都是实打实的工程问题。压缩与保留的权衡是 2026 年的讨论热点,系列第 5、6 篇展开。

5.2、结构化笔记

把记忆外置:Agent 边执行边把关键事实写进外部文件——进度、决策、用户偏好、踩过的坑,下次会话只载入笔记,不载入全量历史。Claude Code 的 CLAUDE.md 与 TODO 列表就是该模式的工业化实例。笔记是结构化的、可增删的、跨会话的,比把一切寄托在对话历史里可靠得多。系列第 7、11 篇展开。

5.3、子代理隔离

主代理不亲自干"脏活":派一个子代理带着干净的新窗口去读文件、跑搜索、翻日志,工具结果的污染留在子代理的窗口里,主代理只接收一段结论。用多花一份 token 的钱,换主代理上下文的干净,这是应对上下文腐烂最釜底抽薪的一招。系列第 9 篇展开。

6、从零件到信息流

如果你读过《AI Agent 开发》30 篇,会发现 RAG(Retrieval-Augmented Generation,检索增强生成)、记忆、工具设计都是老朋友。区别在视角:30 篇是零件视角——RAG 教你怎么检索得准,记忆篇教你存什么取什么,工具篇教你怎么写 schema;本系列是信息流视角——这些零件最终都往同一个窗口里灌信息,何时灌、灌多少、何时清,需要统筹。

举一个具体例子。30 篇的 RAG 回答"怎么找到相关内容";本系列第 10 篇回答"找到之后注入多少、怎么裁剪、多久失效"。零件都对、流水线不通,Agent 照样不可靠——这正是很多团队"功能全上了、质量没上去"的原因。

7、系列路线图

本系列共 18 篇,按主题分六组:

  • 基础认知(第 1~3 篇):全景、窗口解剖与腐烂、系统提示的信息架构
  • 预算与压缩(第 4~6 篇):token 预算、compaction 实战、压缩与缓存的权衡
  • 记忆与治理(第 7~9 篇):结构化笔记、工具结果治理、子代理隔离
  • 检索与长上下文(第 10~13 篇):RAG 注入、记忆分层、多文件代码上下文、百万窗口取舍
  • 经济学与质量(第 14~16 篇):缓存命中率经济学、上下文质量评测、注入攻击面
  • 实战收束(第 17~18 篇):给 RAG Agent 做端到端优化、决策框架

每篇独立成文,但建议按序读:前 3 篇建立心智模型,中间 10 篇是技术主体,最后 5 篇回到钱和质量。

8、总结

回顾全文。范式上,上下文工程取代提示工程,因为 Agent 的优化对象从一段话变成了每一步动态组装的信息流水线;构成上,窗口由系统提示、工具定义、对话历史、工具结果、检索注入、记忆六部分拼成,工具结果是最易爆炸的一项;矛盾上,窗口有限且越大越贵,而每一步真正需要的信息只占很小比例;实证上,context rot 证明塞满窗口只会让信息腐烂。三大技术——压缩、结构化笔记、子代理隔离——分别对应历史瘦身、记忆外置、污染隔离。

对于已经在生产环境跑 Agent 的团队,建议先做一次上下文审计:抓几条真实会话,统计六个组成部分各占多少 token,最大的那一格就是第一优化点。对于准备系统学习的读者,建议按路线图读完前 3 篇再动手——先建立"窗口是稀缺资源"的直觉,后面每个技术决策都会自然很多。

相关推荐

​Jev 详解:不做生成的判断模型
精选AI

​Jev 详解:不做生成的判断模型

Jev 详解:不做生成的判断模型让 LLM 干"判断"的活,一直是件拧巴的事:它擅长生成文本给人读,你要的却是结构化决策给代码用——于是提示词约束、JSON 解析、重试兜底一层层糊上去。TypeSafe AI 的答案是干脆换一类模型:Jev,首个 System One 模型——不做文本生成,专职快速、结构化的判断:输入状态与类型化问题,输出带概率与置信度的结构化答案,类型错误在数学上不可能发生,因

578
网站被注入恶意脚本排查实录:AI 辅助安全分析实战
置顶 精选AI

网站被注入恶意脚本排查实录:AI 辅助安全分析实战

网站被注入恶意脚本排查实录:AI 辅助安全分析实战某天收到华为云监管反馈,称个人博客网站存在色情违规界面。作为技术博主,这简直是晴天霹雳——网站一直正常运行,怎么会突然出现这类问题?经过排查发现,网站被注入了恶意跳转脚本。本文记录完整的排查过程,重点分享如何借助 AI 快速定位问题并修复,希望能给遇到类似情况的开发者提供参考。1、问题发现与初步排查收到监管反馈后,第一时间打开网站检查。首页看起来完

359
时隔三年,再次备份:从手搓博客到 AI 全面自动接管
精选AI

时隔三年,再次备份:从手搓博客到 AI 全面自动接管

时隔三年,再次备份:从手搓博客到 AI 全面自动接管今天打开尘封多年的备份目录,看到了一个熟悉的文件名——2023_07_09.sql。那一刻,恍如隔世。三年前的今天,我曾经认真地导出过一次数据库;三年后的今天——2026 年 7 月 9 日,自动备份启用。整整三年,1095 天,我的博客就这样安安静静地跑着,没有人备份,也没有人管,它就那么稳稳当当地活着。感慨万千,大概是此刻最准确的四个字——不

331