{
  "title": "上下文工程：为什么提示工程从来都不够",
  "excerpt": "到2026年，现代AI系统中真正的工作不是写出一个巧妙的提示，而是决定模型看到什么、何时看到、以及上下文如何被结构化、持久化，并转化为可靠的记忆。",
  "content_html": "<p>有一段时间，\"提示工程\"是我们用来描述从大型语言模型中获得好结果的技艺的名称。在早期，这说得通。大多数人使用的是一次性交互，而主要的杠杆确实感觉像是措辞：问得更清楚、加一个例子、限制格式，模型的表现就会更好。</p>\n<p>但这种框架对于真正的问题来说，现在已经太小了。</p>\n<p>当一个AI系统在生产环境中失败时，问题通常不是模型需要在系统提示中再多一句巧妙的话。问题在于模型没有看到正确的信息、看到了太多无关信息、以错误的格式看到了正确信息，或者无法将正确的状态从一个步骤传递到下一个步骤。换句话说，问题不仅仅是提示。问题是<strong>整个上下文管道</strong>。</p>\n<p>这就是为什么<strong>上下文工程</strong>这个术语开始流行起来。这个短语在2025年中期进入主流AI讨论，当时Tobi Lütke和Andrej Karpathy认为\"提示工程\"低估了构建可靠LLM系统所涉及的真正工作量。[1] 但背后的学科比这个名字更古老。如果你构建过RAG、工具调用、记忆系统、摘要或评估循环，你已经做过上下文工程的各个部分。变化的是我们终于有了一个描述整个工作的名字。</p>\n<h2>一个简单的思维模型</h2>\n<p>如果你想要最简单的图景，上下文工程就是外部世界与模型工作记忆之间的那一层。</p>\n<pre><code class=\"language-mermaid\">flowchart TD\n    U[\"User request\"] --> CE[\"Context engine\"]\n\n    I[\"Instructions and policies\"] --> CE\n    R[\"Retrieved knowledge\"] --> CE\n    M[\"Memory and saved state\"] --> CE\n    T[\"Tool definitions and results\"] --> CE\n    H[\"Recent conversation history\"] --> CE\n\n    CE --> W[\"Model context window\"]\n    W --> L[\"LLM reasons and acts\"]\n    L --> O[\"Answer or tool call\"]\n    O --> S[\"New memory, logs, and state\"]\n    S --> CE\n</code></pre>\n<p>这就是整个游戏。</p>\n<p>模型是推理引擎。上下文引擎决定模型可以对什么进行推理。</p>\n<h2>名字是新的，工作不是</h2>\n<p>这个术语引起共鸣的一个原因是，它将几条一直在独立发展的线索联系在了一起。</p>\n<p>检索增强生成（RAG）教会我们，模型在推理时需要访问外部知识。[2] ReAct教会我们，当模型能够调用工具、观察结果并继续推理时，推理和行动的效果会更好。[3] 记忆研究教会我们，长期运行的助手需要索引、检索和阅读策略，而不是无休止地累积对话记录。[4] 长上下文评估表明，简单地将更多token塞入模型并不等同于给它更好的工作记忆。[5][6][7]</p>\n<p>这样看来，上下文工程并不是要取代这些想法。它是它们之上的那把伞。</p>\n<p>这把伞很重要，因为现代AI系统不再是孤立的提示。它们是动态系统，将指令、文档、结构化数据、工具输出和先前状态组装到下一步的临时上下文窗口中。LangChain很好地描述了这一点，它将上下文工程定义为提供正确信息和工具以正确格式呈现的工作，以便LLM能够合理地完成任务。[8]</p>\n<p>\"合理地完成任务\"这个短语在这里做了很多工作。它是正确的测试标准。</p>\n<p>如果一个智能体失败了，第一个问题不应该是\"如何让提示更聪明？\"</p>\n<p>第一个问题应该是，\"我是否真的给了模型成功所需的东西？\"</p>\n<h2>为什么提示工程变得太小了</h2>\n<p>提示工程仍然重要。它只是变成了一个更大学科的一个子集。</p>\n<p>旧的思维模型是：</p>\n<table>\n<thead>\n<tr>\n<th>提示工程</th>\n<th>上下文工程</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>写出更好的指令</td>\n<td>构建完整的信息环境</td>\n</tr>\n<tr>\n<td>专注于单个请求</td>\n<td>专注于多步骤系统</td>\n</tr>\n<tr>\n<td>大多是静态的</td>\n<td>动态且有状态的</td>\n</tr>\n<tr>\n<td>优化措辞</td>\n<td>优化选择、结构、记忆和工具</td>\n</tr>\n<tr>\n<td>改进单次模型调用</td>\n<td>改进整个循环</td>\n</tr>\n</tbody>\n</table>\n<p>这种区别在你构建一个智能体的那一刻就变得显而易见了。</p>\n<p>假设你正在为企业软件构建一个支持智能体。用户问：\"为什么我们的API请求超时了？\"</p>\n<p>如果你只从提示的角度思考，你可能会改进措辞：</p>\n<ul>\n<li>要求模型简洁</li>\n<li>要求它引用证据</li>\n<li>要求它逐步思考</li>\n</ul>\n<p>这些都是不错的改进。但还不够。</p>\n<p>真正的系统问题更难：</p>\n<ul>\n<li>智能体能否访问事件处理手册？</li>\n<li>它能否看到最新的日志和状态页面？</li>\n<li>它知道这个账户属于哪个客户层级吗？</li>\n<li>它记得对话中更早的回合吗？</li>\n<li>它能查询工单系统吗？</li>\n<li>它能区分过时的文档和当前的文档吗？</li>\n<li>如果它获得太多上下文，什么会被裁剪？</li>\n</ul>\n<p>这就是上下文工程。</p>\n<p>提示只是其中的一行项目。</p>\n<h2>什么算作上下文</h2>\n<p>在实践中，上下文包括模型在推理时看到的所有内容，不仅仅是可见的提示。[8][9]</p>\n<p>这通常意味着：</p>\n<ul>\n<li>系统指令</li>\n<li>当前用户请求</li>\n<li>检索到的文档</li>\n<li>结构化数据，如JSON、表格、模式和记录</li>\n<li>工具定义</li>\n<li>工具输出</li>\n<li>最近的对话历史</li>\n<li>长期记忆或保存的笔记</li>\n<li>安全、策略和格式约束</li>\n<li>环境状态，如文件、标签页、工单或工作目录</li>\n</ul>\n<p>这就是为什么\"填充上下文窗口\"这个短语变得如此核心。上下文窗口不仅仅是放置文本的地方。它是模型的临时工作记忆。进入其中的所有内容都在争夺注意力。</p>\n<p>而<strong>竞争</strong>就是关键词。</p>\n<p>每一个额外的token不仅仅是额外的信息。它也是额外的干扰。</p>\n<h2>为什么更大的上下文窗口没有解决问题</h2>\n<p>当前AI市场中最常见的误解之一是，更大的上下文窗口让上下文工程变得不那么重要了。</p>\n<p>研究指向的是相反的方向。</p>\n<p><em>Lost in the Middle</em>表明，模型对长上下文的使用往往是不均衡的，当相关信息出现在开头或结尾时表现更好，而当重要信息位于中间时表现更差。[5] Databricks的长上下文RAG研究发现，虽然添加更多检索到的文档可能有帮助，但只有少数最先进的模型在64k token以上保持强劲性能。[6] Chroma的<em>Context Rot</em>报告更进一步：即使是简单的任务，随着输入长度增加也会变得更不可靠，特别是在引入模糊性和干扰项时。[7]</p>\n<p>这是许多团队通过惨痛教训学到的部分。</p>\n<p>更大的窗口并没有消除选择的需要。它们起初让错误选择的代价不那么明显，但之后会更加痛苦。</p>\n<p>一个长提示至少可能以四种不同的方式失败：</p>\n<ol>\n<li><strong>上下文污染</strong>：一个错误的事实、幻觉或过时的结果被带入后续步骤。</li>\n<li><strong>上下文干扰</strong>：太多相关但不关键的细节淹没了核心任务。</li>\n<li><strong>上下文混淆</strong>：上下文的不同部分相互矛盾。</li>\n<li><strong>上下文浪费</strong>：有用的token被冗余或低价值的内容埋没。</li>\n</ol>\n<p>这就是为什么上下文工程不是关于最大化token。它是关于最大化上下文窗口内的<strong>信号密度</strong>。</p>\n<h2>从检索到导航</h2>\n<p>这就是最近最好的想法之一进入画面的地方。</p>\n<p>Jason Liu认为，经典基于分块的RAG之后的下一步，是停止只思考\"最相似的段落\"，而开始思考<strong>搜索空间的形状</strong>。[10] 他的框架特别有用，因为它描绘了许多团队已经在经历的演进路径：</p>\n<ol>\n<li>最小化分块</li>\n<li>带有来源元数据的分块</li>\n<li>更好地处理多模态和结构化内容</li>\n<li>分面和查询细化</li>\n</ol>\n<p>前三项是对检索内容的改进。</p>\n<p>第四项更有趣。它改进了智能体<strong>关于语料库本身</strong>所学到的内容。</p>\n<p>分面给模型提供了类似周边视觉的东西。系统不仅可以返回最前面的几个分块，还可以返回聚合的元数据：</p>\n<ul>\n<li>哪些文档类型主导了结果集</li>\n<li>哪些团队或所有者出现得最频繁</li>\n<li>哪些日期聚集在一起</li>\n<li>哪些类别存在但在顶部结果中代表性不足</li>\n</ul>\n<p>这很重要，因为相似性搜索偏向于最容易匹配的内容，而不一定是最需要检查的内容。[10] 检索系统可能过度呈现记录完善的已解决事件，而低估稀疏的、仍然开放的事件。法律搜索可能过度呈现已签署的合同，而隐藏实际上需要关注的未签署合同。分面帮助智能体不仅看到\"什么匹配了\"，还看到\"附近还有什么存在\"。</p>\n<p>这是一个重大的概念转变。</p>\n<p>RAG主要是关于检索。</p>\n<p>上下文工程越来越是关于<strong>导航</strong>。</p>\n<h2>上下文工程的六项工作</h2>\n<p>让上下文工程具体化的最简单方法，是将其分解为实际执行的工作。</p>\n<h3>1. 选择</h3>\n<p>第一项工作是决定什么值得进入窗口。</p>\n<p>这包括检索、排序、过滤、来源选择和时效性检查。这听起来很明显，但这仍然是大量质量得失的地方。像BRIGHT这样的基准测试表明，现实的检索比表面层次的语义匹配要困难得多。[11] 如果你的检索质量很弱，再多的下游提示润色也无法完全挽救结果。</p>\n<p>选择不仅仅是\"找到相关的分块\"。它是：</p>\n<ul>\n<li>选择正确的来源</li>\n<li>选择正确的粒度</li>\n<li>选择正确的数量</li>\n<li>选择正确的排序</li>\n</ul>\n<p>好的系统通常比朴素的系统检索得更少，但检索得更有意图。</p>\n<h3>2. 结构</h3>\n<p>第二项工作是决定所选上下文如何呈现。</p>\n<p>相同的信息根据格式不同可能有用也可能无用。Anthropic的工具使用指南明确指出了这一点：工具描述和接口强烈影响模型行为。[9] 长上下文提示指南对XML标签、来源标签和清晰分隔的文档部分也提出了类似的建议。[12]</p>\n<p>在实践中，结构意味着：</p>\n<ul>\n<li>标注来源</li>\n<li>将指令与数据分开</li>\n<li>用一致的标记包裹复杂文档</li>\n<li>在重要时保留表格形式</li>\n<li>返回带有证据的引用和元数据</li>\n</ul>\n<p>一个简短、标注良好的结果往往胜过一个巨大的JSON blob。</p>\n<h3>3. 压缩</h3>\n<p>第三项工作是在不破坏重要内容的前提下减少上下文。</p>\n<p>这是许多智能体系统要么变得更好、要么变得更差的地方。</p>\n<p>压缩可以意味着：</p>\n<ul>\n<li>总结较早的回合</li>\n<li>裁剪过时的历史</li>\n<li>只保留最近几个用户回合的原文</li>\n<li>从长线程中提取持久的事实</li>\n<li>缓存稳定的前缀以降低成本和延迟</li>\n</ul>\n<p>OpenAI的提示缓存文档表明，提示顺序在经济上和认知上都很重要：静态共享前缀放在前面时更便宜更快，因为缓存命中依赖于精确的前缀复用。[13] OpenAI较新的Responses API在压缩方面进一步推进了同样的想法，将长期运行的智能体历史视为应该在窗口填满之前被压缩成更token高效的表示的东西。[14]</p>\n<p>压缩不是可选的。唯一的问题是你有意地做，还是让上下文窗口自行退化。</p>\n<h3>4. 记忆</h3>\n<p>第四项工作是决定什么应该超越当前回合而持久存在。</p>\n<p>这是许多团队犯同样错误的地方：他们将记忆与对话记录保留混淆了。</p>\n<p>但好的记忆不是\"永远保留一切\"。LongMemEval将长期记忆框定为一个三阶段问题：索引、检索和阅读。[4] 这是正确的思考方式。记忆系统应该帮助模型在正确的时刻恢复正确的事实，而不是用完整的过去淹没它。</p>\n<p>这引出了一个有用的区分：</p>\n<ul>\n<li><strong>工作记忆</strong>：当前任务所需的短期上下文</li>\n<li><strong>参考记忆</strong>：可以稍后重新加载的外部化事实、摘要、笔记或工件</li>\n</ul>\n<p>如果一切都留在工作记忆中，模型会分心。\n如果一切都被推出去，模型会失去连续性。</p>\n<p>上下文工程决定什么属于每一层。</p>\n<h3>5. 工具和接口设计</h3>\n<p>第五项工作是使工具对模型可读。</p>\n<p>这是该学科中一个被低估的部分。工具表面不仅仅是软件API设计。它也是上下文设计。</p>\n<p>模型需要理解：</p>\n<ul>\n<li>工具做什么</li>\n<li>何时使用它</li>\n<li>每个参数的含义</li>\n<li>输出意味着什么</li>\n<li>看到结果后下一步做什么</li>\n</ul>\n<p>这就是为什么工具描述如此重要。[9] 这也是为什么Jason Liu对工具结果的强调很重要。[10] 工具的输出不仅仅回答当前查询。它教会智能体如何思考下一个查询。</p>\n<p>当工具表面通过像MCP这样的协议标准化时，这变得更加重要。MCP使连接工具、资源和提示到LLM应用变得更容易，但它不决定应该呈现什么信息、如何过滤，或者多少信息应该注入到下一次模型调用中。[15] 协议是管道。上下文工程仍然是手艺。</p>\n<h3>6. 隔离与编排</h3>\n<p>第六项工作是决定何时不共享上下文。</p>\n<p>这是玩具演示和生产智能体之间最大的区别之一。</p>\n<p>有时正确的答案不是更大的共享提示。而是多个具有隔离范围的较小提示。</p>\n<p>Anthropic的多智能体研究系统就是一个有力的例子。[16] 他们的子智能体在独立的上下文窗口中并行运行，这有助于它们探索问题的不同分支，而不会因为每一个中间细节而相互污染。LangChain在\"隔离\"下描述了类似的模式：有时提高智能体可靠性的最佳方式是分割上下文，而不是累积它们。[17]</p>\n<p>这很重要，因为共享上下文有一个隐藏的成本。它创造了路径依赖。一个坏的分支可以影响下一步，再下一步，再下一步。</p>\n<p>隔离是一种限制爆炸半径的方式。</p>\n<h2>2026年发生了什么变化</h2>\n<p>2025年，上下文工程主要是一个对人们已经感受到的问题有用的名字。2026年，它开始硬化为一种架构。</p>\n<p>第一个重大转变是构建者将持久状态<strong>移出</strong>原始上下文窗口。Anthropic的上下文编辑和记忆工具明确区分了留在工作窗口中的内容和应该跨会话持久存在的内容。[18] OpenAI 2026年1月关于个性化的cookbook以不同的形式做出了同样的转变：结构化状态对象跨运行持久存在，并在每次运行开始时被有意地注入回工作记忆。[19] OpenAI的Responses API然后通过原生压缩进一步推进了这一点，因此长期运行的智能体循环不需要每个团队都从头构建自定义摘要子系统。[14]</p>\n<p>Anthropic的Managed Agents使底层模式异常明确：<strong>会话不是模型的上下文窗口</strong>。[20] 这是2026年的一个关键思想。窗口是临时工作记忆。会话日志是持久对象。框架决定如何切片、压缩和重新水合那个持久上下文回到下一次模型调用中。</p>\n<p>第二个转变是检索变得更加<strong>即时</strong>和更加<strong>原生接口化</strong>。团队不再预先加载每一个可能相关的token，而是给智能体提供它们已经知道如何操作的检索表面。Mintlify的ChromaFs就是一个很好的例子：不是为文档检索启动完整的沙盒，而是将文档呈现为可通过<code>ls</code>、<code>cat</code>和<code>grep</code>导航的虚拟文件系统，将p90会话创建时间从约46秒缩短到约100毫秒。[21] Turso的AgentFS将同样的直觉推向通用智能体执行：一个具有可移植单文件存储和内置审计的写时复制文件系统抽象。[22]</p>\n<p>第三个转变是<strong>上下文图</strong>正在成为一个实现方向，而不仅仅是一个隐喻。Foundation Capital的论文使这个术语可见，但更强的主张是架构性的：当智能体位于执行路径中时，它们可以将决策痕迹捕获为持久工件，而不仅仅是发出最终输出。[26][27] 像Graphiti这样的开源系统和像Zep这样的商业平台将其操作化为具有有效性窗口、来源片段和跨语义、关键词与图结构的混合检索的时间上下文图。[23] TrustGraph采取相关方法，将上下文视为版本化工件：图、嵌入、证据和策略被打包成可移植的\"上下文核心\"，可以像构建输出一样被提升或回滚。[24][25]</p>\n<p>第四个转变是上下文工程现在可见于真实的软件实践中，而不仅仅是平台博客。2026年关于开源软件中上下文工程的MSR论文研究了466个仓库，发现AI上下文文件如<code>AGENTS.md</code>正在传播，但还没有稳定的内容结构。[28] 这很重要，因为它标志着从理论到运维工件的转变。上下文不再只是运行时推断的东西。它正在成为软件生命周期中被编写、版本化、审查和挖掘的一部分。</p>\n<p>如果你想要2026年的思维模型用一张图表示，它看起来像这样：</p>\n<pre><code class=\"language-mermaid\">flowchart LR\n    E[\"Session log / events\"] --> A[\"Context assembler\"]\n    F[\"Files, docs, and tools\"] --> A\n    G[\"Context graph / memory\"] --> A\n    P[\"Policies and AGENTS.md\"] --> A\n\n    A --> W[\"Working context window\"]\n    W --> X[\"Agent action\"]\n\n    X --> E\n    X --> G\n</code></pre>\n<p>这与\"提示 + 向量搜索\"是非常不同的架构。</p>\n<h2>上下文图实际适合在哪里</h2>\n<p>这个对话变得模糊的一个原因是，人们使用<strong>上下文工程</strong>和<strong>上下文图</strong>，好像它们意思相同。它们不是。</p>\n<p>上下文工程是更广泛的学科。它是决定什么进入下一个上下文窗口、什么留在外面、什么被压缩、什么按需检索的工作。</p>\n<p>上下文图是更大系统中的一种可能的长期记忆基底。</p>\n<p>这种区分很重要，因为不是每个有用的智能体都需要上下文图。一个主要覆盖静态内容的文档助手可能需要良好的检索、工具设计和压缩，但不需要图。一个编码智能体可能通过仓库指令、持久会话日志和文件系统抽象就能走得很远。[20][21][22][28]</p>\n<p>当问题具有四个特征时，上下文图变得引人注目：</p>\n<ul>\n<li><strong>时间性事实很重要。</strong>你需要知道不仅仅是现在什么是真的，而是在决策时刻什么是真的。[23]</li>\n<li><strong>来源很重要。</strong>你需要将事实追溯到产生它们的片段、文档或交互。[23][24]</li>\n<li><strong>先例很重要。</strong>任务依赖于类似案例以前是如何处理的，包括例外和批准。[26][27]</li>\n<li><strong>跨实体推理很重要。</strong>有用的记忆不是一张扁平的笔记，而是人、策略、事件、账户、工单和结果的网络。[23][25]</li>\n</ul>\n<p>这就是为什么在我看来，上下文图最好的定义不是\"AI的图数据库\"。它是<strong>先例的持久表示</strong>。</p>\n<p>这也是为什么决策痕迹如此重要。Foundation Capital的框架在这里很有用：规则告诉智能体一般情况下应该发生什么；决策痕迹告诉它在特定情况下发生了什么，在真实约束下，有真实的例外。[26] 一旦这些痕迹跨实体和时间链接起来，你得到的东西比通用记忆更有价值。你得到的是可搜索的判断。</p>\n<h2>如果我在2026年构建，我会怎么做</h2>\n<p>如果我今天正在构建一个严肃的上下文工程栈，我不会从图开始。我会从接口和提升规则开始。</p>\n<h3>1. 首先构建一个持久会话层</h3>\n<p>每一个动作、工具结果、观察和重要的中间工件都应该落在一个仅追加的会话日志或事件存储中。这是你的可恢复上下文对象。[14][20]</p>\n<p>不要将活动上下文窗口与真相来源混淆。</p>\n<p>窗口用于推理。\n会话用于恢复、重放、调试和选择性重新水合。</p>\n<h3>2. 将上下文组装器视为产品表面</h3>\n<p>组装器应该明确管理：</p>\n<ul>\n<li>token预算</li>\n<li>来源优先级</li>\n<li>时效性</li>\n<li>压缩阈值</li>\n<li>历史裁剪</li>\n<li>引用格式</li>\n<li>缓存感知排序</li>\n</ul>\n<p>这是决定模型<strong>现在</strong>看到什么的层。它应该是可观察的、可测试的，并且易于更改。[18][19][14]</p>\n<h3>3. 偏好即时检索而非急切填充</h3>\n<p>首先给模型轻量级的句柄：文件路径、对象ID、URL、查询模板、工单ID、事件ID。然后让它只在需要时拉取细节。[9][18][21]</p>\n<p>这就是文件系统、MCP工具、搜索API和结构化查询变得比巨大的top-K转储更有价值的地方。</p>\n<h3>4. 只将高价值状态提升为长期记忆</h3>\n<p>不是一切都应该成为记忆。</p>\n<p>我会提升四类工件：</p>\n<ul>\n<li>稳定的用户或账户偏好</li>\n<li>带有来源的持久事实</li>\n<li>重要的中间摘要</li>\n<li>决策痕迹和例外</li>\n</ul>\n<p>其他一切都应该留在会话日志中，直到它证明自己值得被提升。</p>\n<h3>5. 将上下文图构建为被提升的记忆层</h3>\n<p>这是许多团队颠倒的部分。</p>\n<p>图不应该是你的原始对话记录的图形式。它应该是位于会话之上、实时组装之下的策划层：</p>\n<ul>\n<li>实体</li>\n<li>关系</li>\n<li>时间有效性</li>\n<li>来源片段</li>\n<li>批准</li>\n<li>例外</li>\n<li>结果</li>\n</ul>\n<p>如果你跳过提升步骤，图会变成垃圾场。\n如果你做对了提升，图会变成组织实际如何推理的记忆。[23][26]</p>\n<h3>6. 像代码一样打包上下文</h3>\n<p>到2026年，最有前途的想法之一是将上下文视为版本化工件。在软件项目中，这表现为<code>AGENTS.md</code>和其他仓库特定的上下文文件。[28] 在图原生系统中，这表现为上下文核心：可移植的本体、图结构、嵌入、来源和检索策略的捆绑包。[24][25]</p>\n<p>这很重要，因为上下文变更需要与代码变更相同的运维纪律：</p>\n<ul>\n<li>审查</li>\n<li>版本化</li>\n<li>回滚</li>\n<li>环境提升</li>\n<li>评估</li>\n</ul>\n<p>一旦上下文成为工件，它就变得可治理。</p>\n<h3>7. 将可观察性与智能分离</h3>\n<p>你需要两者：</p>\n<ul>\n<li><strong>智能体运行的可观察性</strong></li>\n<li><strong>上下文系统的可观察性</strong></li>\n</ul>\n<p>这两者不是一回事。</p>\n<p>我想知道：</p>\n<ul>\n<li>模型看到了什么</li>\n<li>它没有看到什么</li>\n<li>什么被压缩了</li>\n<li>什么是即时检索的</li>\n<li>什么被提升为记忆</li>\n<li>遍历了哪个图邻域</li>\n<li>哪个先例实际影响了动作</li>\n</ul>\n<p>如果你无法回答这些问题，你仍然在黑暗中调试提示。</p>\n<h2>一个实用的成熟度模型</h2>\n<p>如果你试图评估自己的系统处于什么位置，这个成熟度模型比抽象定义更有用。</p>\n<h3>Level 0：仅提示</h3>\n<p>你有一个系统提示、一条用户消息，也许还有几个例子。</p>\n<p>对于狭窄的任务，这可以出奇地有效。当任务需要新鲜知识、持久性或工具时，它很快就会崩溃。</p>\n<h3>Level 1：检索增强</h3>\n<p>你在运行时添加文档。</p>\n<p>这是许多团队停止的地方。这也是许多团队开始看到朴素分块、排序和上下文膨胀局限性的地方。</p>\n<h3>Level 2：智能体感知</h3>\n<p>你现在有意地管理历史、工具结果、记忆和格式。</p>\n<p>这是\"上下文工程\"首次成为有用术语的级别，因为系统不再只是提示加检索。它是动态地组装多种形式的上下文。</p>\n<h3>Level 3：自适应</h3>\n<p>系统根据任务改变构建上下文的方式。</p>\n<p>它可能：</p>\n<ul>\n<li>在来源之间选择</li>\n<li>压缩较旧的历史</li>\n<li>选择性地重新加载记忆</li>\n<li>将工作路由到专门的工具</li>\n<li>将子问题隔离到独立的上下文中</li>\n</ul>\n<p>在这一点上，上下文构建是应用核心逻辑的一部分。</p>\n<h3>Level 4：上下文原生</h3>\n<p>系统将上下文视为一流的工程表面。</p>\n<p>它具有：</p>\n<ul>\n<li>明确的上下文预算</li>\n<li>检索和生成评估</li>\n<li>元数据和分面感知导航</li>\n<li>记忆策略</li>\n<li>围绕故障模式的可观察性</li>\n<li>成本感知的提示组装</li>\n</ul>\n<p>这是最强的生产系统正在走向的方向。</p>\n<h2>好的上下文工程在实践中看起来如何</h2>\n<p>如果我要将整个学科简化为一个检查清单，它看起来会是这样：</p>\n<ol>\n<li>从任务开始，而不是从提示开始。首先定义成功是什么样子。</li>\n<li>列举模型可能需要的上下文来源。指令、文档、工具、记忆、状态、策略。</li>\n<li>将工作记忆与参考记忆分开。不是一切都应该活在活动窗口中。</li>\n<li>有目的地检索。更多分块不等于更好的召回。</li>\n<li>结构化上下文，使模型能快速解析。标签、来源、表格和边界很重要。</li>\n<li>设计工具时把它们当作提示的一部分，因为它们就是。</li>\n<li>积极裁剪。如果你不会要求一个人重读它，就不要强迫模型重读它。</li>\n<li>分开测量检索和生成。否则你会诊断错误的问题。</li>\n<li>当任务分支或可以并行运行时，使用隔离的上下文。</li>\n<li>有意地提升持久事实和决策痕迹。不是每个对话记录都属于长期记忆。</li>\n<li>像代码一样打包关键上下文。指令、策略和图工件应该被版本化。</li>\n<li>像对待软件bug一样对待上下文bug。它们应该是可观察的、可复现的和可修复的。</li>\n</ol>\n<p>这些都不 glamorous。这正是它重要的原因。</p>\n<p>提示工程变得流行，因为它听起来像捷径。</p>\n<p>上下文工程重要，因为它描述了实际的工作。</p>\n<h2>真正的要点</h2>\n<p>AI的重心正在转移。</p>\n<p>前沿问题曾经是：<strong>模型有多聪明？</strong></p>\n<p>应用问题越来越变成：<strong>模型在必须行动之前能看到什么？</strong></p>\n<p>这是一个不同的工程问题。它更少关于单个提示，更多关于系统设计。更少关于措辞，更多关于信息流。更少关于一次性输出质量，更多关于智能体是否能随时间保持可靠。</p>\n<p>这就是为什么上下文工程将继续作为一个学科成长。模型越好，剩下的失败就越像上下文失败。缺失的状态。错误的工具。糟糕的检索。膨胀的历史。糟糕的格式。矛盾的证据。薄弱的记忆。无限制的循环。</p>\n<p>讽刺的是，这让AI系统感觉更像经典软件，而不是更少。我们回到了构建管道、接口、状态机、内存层次结构、缓存和可观察性层。新颖之处在于，所有这些部分现在都为概率推理引擎服务。</p>\n<p>名字可能是新的。方向不是。</p>\n<p>可靠的AI系统将由将上下文视为一流产品表面的团队构建。</p>\n<p>其他人会继续说模型不稳定。</p>\n<p><strong>参考文献：</strong></p>\n<p>[1] <a href=\"https://simonwillison.net/2025/Jun/27/context-engineering/\">Simon Willison. (2025, June 27). <em>Context engineering</em>.</a></p>\n<p>[2] <a href=\"https://arxiv.org/abs/2005.11401\">Lewis, P. et al. (2020). <em>Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks</em>.</a></p>\n<p>[3] <a href=\"https://arxiv.org/abs/2210.03629\">Yao, S. et al. (2023). <em>ReAct: Synergizing Reasoning and Acting in Language Models</em>.</a></p>\n<p>[4] <a href=\"https://arxiv.org/abs/2410.10813\">Wu, D. et al. (2025). <em>LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory</em>.</a></p>\n<p>[5] <a href=\"https://arxiv.org/abs/2307.03172\">Liu, N. F. et al. (2023). <em>Lost in the Middle: How Language Models Use Long Contexts</em>.</a></p>\n<p>[6] <a href=\"https://arxiv.org/abs/2411.03538\">Leng, Q. et al. (2024). <em>Long Context RAG Performance of Large Language Models</em>.</a></p>\n<p>[7] <a href=\"https://www.trychroma.com/research/context-rot\">Hong, K., Troynikov, A., and Huber, J. (2025, July 14). <em>Context Rot: How Increasing Input Tokens Impacts LLM Performance</em>.</a></p>\n<p>[8] <a href=\"https://blog.langchain.com/the-rise-of-context-engineering\">LangChain. (2025, June 23). <em>The rise of \"context engineering\"</em>.</a></p>\n<p>[9] <a href=\"https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/implement-tool-use\">Anthropic. <em>How to implement tool use</em>.</a></p>\n<p>[10] <a href=\"https://jxnl.co/writing/2025/08/27/facets-context-engineering/\">Jason Liu. (2025, August 27). <em>Beyond Chunks: Why Context Engineering is the Future of RAG</em>.</a></p>\n<p>[11] <a href=\"https://arxiv.org/abs/2407.12883\">Su, H. et al. (2025). <em>BRIGHT: A Realistic and Challenging Benchmark for Reasoning-Intensive Retrieval</em>.</a></p>\n<p>[12] <a href=\"https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/long-context-tips\">Anthropic. <em>Long context prompting tips</em>.</a></p>\n<p>[13] <a href=\"https://platform.openai.com/docs/guides/prompt-caching\">OpenAI. <em>Prompt caching</em>.</a></p>\n<p>[14] <a href=\"https://openai.com/index/equip-responses-api-computer-environment\">OpenAI. (2026, March 19). <em>From model to agent: Equipping the Responses API with a computer environment</em>.</a></p>\n<p>[15] <a href=\"https://modelcontextprotocol.io/\">Model Context Protocol. <em>What is the Model Context Protocol (MCP)?</em></a></p>\n<p>[16] <a href=\"https://www.anthropic.com/engineering/built-multi-agent-research-system\">Anthropic. (2025, June 13). <em>How we built our multi-agent research system</em>.</a></p>\n<p>[17] <a href=\"https://blog.langchain.com/context-engineering-for-agents/\">LangChain. (2025, July 2). <em>Context Engineering</em>.</a></p>\n<p>[18] <a href=\"https://claude.com/blog/context-management\">Anthropic. (2025, September 29). <em>Managing context on the Claude Developer Platform</em>.</a></p>\n<p>[19] <a href=\"https://developers.openai.com/cookbook/examples/agents_sdk/context_personalization\">Okcular, E. (2026, January 5). <em>Context Engineering for Personalization - State Management with Long-Term Memory Notes using OpenAI Agents SDK</em>.</a></p>\n<p>[20] <a href=\"https://www.anthropic.com/engineering/managed-agents\">Anthropic. <em>Scaling Managed Agents: Decoupling the brain from the hands</em>.</a></p>\n<p>[21] <a href=\"https://www.mintlify.com/blog/how-we-built-a-virtual-filesystem-for-our-assistant\">Mintlify. (2026, March 24). <em>How we built a virtual filesystem for our Assistant</em>.</a></p>\n<p>[22] <a href=\"https://docs.turso.tech/agentfs/introduction\">Turso. <em>AgentFS</em>.</a></p>\n<p>[23] <a href=\"https://github.com/getzep/graphiti\">Zep. <em>Graphiti: Build Real-Time Knowledge Graphs for AI Agents</em>.</a></p>\n<p>[24] <a href=\"https://github.com/trustgraph-ai/trustgraph\">TrustGraph. <em>The context development platform</em>.</a></p>\n<p>[25] <a href=\"https://docs.trustgraph.ai/guides/context-cores/\">TrustGraph. <em>Working with Context Cores</em>.</a></p>\n<p>[26] <a href=\"https://foundationcapital.com/ideas/context-graphs-ais-trillion-dollar-opportunity\">Gupta, J., and Garg, A. (2025, December 22). <em>AI's trillion-dollar opportunity: Context graphs</em>.</a></p>\n<p>[27] <a href=\"https://foundationcapital.com/ideas/why-context-graphs-are-the-missing-layer-for-ai\">Garg, A. (2026, January 16). <em>Why context graphs are the missing layer for AI</em>.</a></p>\n<p>[28] <a href=\"https://arxiv.org/abs/2510.21413\">Mohsenimofidi, S., Galster, M., Treude, C., and Baltes, S. (2026). <em>Context Engineering for AI Agents in Open-Source Software</em>.</a></p>",
  "source_hash": "sha256:43286410ec2f1b23129ef8d7330ac9e09e780a8159635d34658ade10aac0581a",
  "model": "moonshotai/kimi-k2.6",
  "generated_at": "2026-05-31T02:55:04.713367+00:00"
}