上下文组装与管理
基础篇将上下文工程(context engineering)定义为为一次模型推理所提供信息的设计。本章在运行时落实这一理念。重点不在于更好的提示词措辞,而在于那条用于决定某次决策应纳入哪些内容、以何种形式、具备何种权威与来源、以及有意排除哪些内容的组装流水线。
上下文应被组装为一份字段含义明确、受预算约束且可检查的当前任务视图,而不是作为不断增长的对话记录持续累积。
权威事实来源仍在提示词之外。每次调用都接收一个适配该次决策的投影。组装记录应能回答:考虑了哪些信息、它们来自哪里、发生了哪些转换、为何被纳入,以及适用了哪些限制或访问规则?
为每个决策定义上下文约定
Section titled “为每个决策定义上下文约定”一个有用的约定会指明某次决策所需的各类信息:
| 信息类别 | 目的 | 示例控制项 |
|---|---|---|
| 约束性指令 | 定义角色、策略、输出与决策约定 | 版本、优先级、受保护来源 |
| 目标与当前子任务 | 说明此调用必须完成什么 | 明确范围、成功条件 |
| 权威状态投影 | 表示任务或环境中当前为真的事实 | 状态版本、时效性、访问控制 |
| 选取的历史 | 保留相关的承诺、更正与尝试 | 压缩策略、遗漏历史标记 |
| 证据 | 提供检索到或用户提供的支撑 | 来源、权威性、日期、引用标识 |
| 工具能力 | 描述此步骤可用的操作 | 适用性、输入输出结构、风险、权限 |
| 近期结果 | 报告结构化的工具或验证器结果 | 结果类别、行动 ID、不确定性 |
| 待决决策与限制 | 暴露审批、截止期限、预算与停机条件 | 所有者、剩余额度、到期时间 |
并非每次调用都需要每类信息。分类器不应继承整个工具目录;用于生成行动参数的调用不应接收不相关的私人历史。明确列出这些类别,能让遗漏与冗余变得可见。
1. 确立身份、权限与决策范围
Section titled “1. 确立身份、权限与决策范围”在检索前解析活动主体(principal)、租户(tenant)、运行(run)、步骤(step)与决策约定。对敏感内容的访问过滤必须发生在其进入模型可见上下文之前。提示中“不要泄露此内容”的指令不是访问控制边界。
2. 载入权威状态
Section titled “2. 载入权威状态”从权威记录系统(system of record)读取当前任务事实,并仅投影此次决策所需字段。当陈旧性重要时,包含版本或观察时间。不要让模型从同时包含旧值与更正值的对话中去推断当前状态。
3. 检索候选证据
Section titled “3. 检索候选证据”在该主体与任务允许的集合中搜索。检索可组合元数据过滤、词法搜索、向量嵌入、图或应用特定查询。最初的 RAG(Retrieval-Augmented Generation)工作确立了将模型生成与可更新的外部知识结合的价值(Lewis et al., 2020);这并不意味着检索结果默认具有权威性。
4. 过滤、排序、多样化与去重
Section titled “4. 过滤、排序、多样化与去重”相关性只是一个准则。还要应用权威性、时效性、权限、文档状态、来源多样性与冲突规则。当相反证据会改变决策时予以保留。去除重复段落,避免同一材料因多次出现而被赋予过高权重。
5. 选择历史与记忆
Section titled “5. 选择历史与记忆”用结构化任务状态承载当前事实。仅在措辞、承诺、更正或交互连贯性重要时才包含先前消息。检索到的记忆是具备范围与有效性的候选输入,而非指令或当前事实。其生命周期由“状态与记忆”章节负责。
6. 仅暴露有资格的工具
Section titled “6. 仅暴露有资格的工具”仅提供在当前状态和权限下可用的工具。庞大且重叠的目录会增加 token,并使选择变得含糊。工具描述与输入输出结构是上下文的一部分,但权限与行动验证仍应在模型之外进行。
应把接口本身视为塑造行为的上下文。清晰的操作名称、带类型的参数、枚举、状态转换和结果结构,可以比用额外文字弥补含糊工具接口更可靠地表达可用能力。每条指令只保留一个主要负责人,不要在全局指南和每项工具描述中重复同一规则。
如果符合条件的工具目录仍然很大,可以采用渐进式披露(progressive disclosure):先暴露简洁且有区分度的描述或索引,只在当前决策需要时才载入完整的工具定义、Skill 或参考资料。只有当正确能力仍然易于发现时,延迟载入才真正节省上下文。
应把 Skill 描述视为路由元数据,而不是微型实现指南。写明任务触发条件和有用的排除项,再让根文档指向详细参考材料或脚本。随着目录增长,要测试误触发和相邻任务遗漏;宿主环境的截断或排序行为可能让原本足够的描述失效。
7. 分配预算并组装
Section titled “7. 分配预算并组装”为指令、状态、证据、工具定义、历史与输出预留容量。优先保障必需信息,而非在任意边界处截断串联的提示。提供方缓存有用时可保留稳定前缀,但不要让缓存设计使过时策略继续生效。
8. 记录组装清单
Section titled “8. 记录组装清单”保留所含项目的标识符与版本、查询与过滤、变换、对诊断有实质影响的排除项、token 计数与最终模板版本。敏感的原始上下文不必复制到每条追踪记录中;引用与受保护快照可在适当留存下支持审计。
位置与表示很重要
Section titled “位置与表示很重要”大的上下文窗口提供的是容量,并不证明每个条目都会被使用。Lost in the Middle 发现,在其评估的模型与长上下文任务中存在位置敏感性(Liu et al., 2024)。更新的模型可能表现不同,因此应将布局视为评估变量,而非永久规则。
用表示揭示结构:
- 将约束性指令与证据和不受信内容分离;
- 在重要处标注来源、时间、权威性与引文标识符;
- 清晰呈现当前要作出的决策与所需输出约定;
- 在精确性重要时用结构化字段表达当前状态;
- 区分缺失、未知、已隐去与不适用;以及
- 保留结构化的工具结果,而不是将所有结果改写为叙述性文字。
XML、JSON、Markdown 标题、消息角色或提供方特定区块都可行。分隔符有助于模型理解结构;它们不是安全边界。
渐进式披露是一种检索策略
Section titled “渐进式披露是一种检索策略”渐进式披露把详细材料移出始终载入的上下文。简洁层说明有哪些材料、何时适用以及如何载入;详细层则提供执行所需的指令、工具定义或参考产物。这可以减少噪声和成本,但也会引入一种检索失败:模型可能从未请求真正需要的材料。
两个阶段都要评估。第一,描述信息能否让系统发现正确的延迟载入项,包括含糊案例和容易混淆的相邻项?第二,载入后模型能否正确使用它?还要为触发遗漏记录恢复路径,而不是假定“存在于某处”就等同于“当前决策可用”。
应根据具体要求选择表示方式。结构与枚举揭示合法结构;代码和测试可以规定可执行行为;界面稿与截图传达视觉关系;文字说明理由和例外;评分准则使判断标准显式化。对于某些任务,高保真产物可能优于冗长描述,但任何媒介都不存在普适排名。当一种表示会遗漏重要要求时,应组合使用多种表示。
Anthropic 在当前 Claude Code 实践中介绍了选择性载入的 Skill、延迟工具、结构化接口与更丰富的参考产物(Anthropic, 2026)。OpenAI 同样建议只暴露相关工具,并逐步移除重复的提示词内容(OpenAI,当前指南)。这些是有用的厂商实践;发现召回率与表示质量仍必须通过本地评估确定。
仓库指导也应遵循同一原则。让任务指向完成当前决策所需的文档,而不是要求每个低风险编辑都预先加载完整仓库地图。对于安全、发布、迁移、负责人不清晰或其他高后果工作,应扩大上下文范围。这是风险分级策略,并不意味着能力较强的模型可以安全地推断所有被省略的依赖。
上下文压缩是有损的状态转换
Section titled “上下文压缩是有损的状态转换”长时工作最终会超出可行的输入预算。常见做法包括:
- 移除不相关轮次;
- 用带引用的产物替换原始工具输出;
- 总结已完成的工作;
- 维护包含目标、决策、证据、影响与待办的结构化台账;
- 按需取回较旧细节;或
- 隔离一个子任务并返回边界清晰的结果。
每次压缩都应声明必须保留的内容:当前目标、已接受的决策、用户更正、已提交的影响、未解决的义务、证据标识符、不确定性与恢复条件。由模型生成的摘要是一个派生视图。它应链接至底层记录,并在发现不准确时可替换。
Anthropic 将面向智能体的上下文工程描述为在有限注意力下持续筛选和组织信息,并建议针对长任务组合使用压缩、结构化笔记与子智能体(Anthropic, 2025)。这些是有用方法,但不能替代明确识别当前任务必须保留的信息。
保持信任与指令边界
Section titled “保持信任与指令边界”网页、文档、电子邮件、代码库内容、工具输出与记忆中可能包含试图重定向模型的文本。Google 将间接提示注入(indirect prompt injection)描述为消费不受信网页内容的系统持续面临的安全挑战(Google Security Blog, 2025)。没有任何包裹性文本能保证模型会忽略它。
使用分层控制:
- 将外部内容标注为数据并保留其来源;
- 排除当前操作不需要的秘密与数据;
- 限制此步骤可用的工具与权限;
- 在应用代码中验证模型提议与输出;
- 对影响重大的效果要求审批;以及
- 使用恶意与相互冲突的内容进行测试。
信任标签应在抽取与摘要后仍能存续。若对不受信页面的摘要随后以没有来源信息的“记忆”被存储,那么边界已被抹除。
时效性、失效与缓存
Section titled “时效性、失效与缓存”上下文可能在检索与执行之间变陈旧。应根据来源与后果定义时效性:一项策略可能数月内有效;库存或权限则可能需要在提交前立即读取。当模型需要基于时间进行推理时,应注明信息的有效时间。
在有用时缓存稳定的指令、输入输出结构与不可变证据。动态缓存的键应包含租户、权限、来源版本、查询、转换与相关策略版本。缓存失效策略是正确性的一部分。快速但陈旧的答案不是成功的优化。
评估组装系统
Section titled “评估组装系统”测试实际的流水线,而不仅是手工打造的黄金提示。用例应包括:
- 顶部检索结果中缺失的必需事实;
- 同一来源的陈旧与当前版本;
- 权威与非权威论断的冲突;
- 重复的证据;
- 在其他方面相关的文档中包含的恶意指令;
- 过大的工具目录;
- 未被发现的必需延迟指令、工具或参考资料;
- 指令层与工具层之间重复或冲突的指导;
- 遗漏重要要求的表示方式;
- 丢失待办义务的摘要;
- 缓存条目创建后权限发生变更;以及
- 位于不同上下文位置附近的相关信息。
度量检索覆盖率、不受支撑的论断、引文正确性、上下文大小与延迟、陈旧输入率、访问违规、行动质量与端到端结果。仅有检索评分并不能表明模型正确使用了证据。
只追加上下文
Section titled “只追加上下文”每轮对话与工具结果被永久保留。噪声、成本、矛盾与暴露不断增长。请基于当前需求与权威状态重新组装。
以 Top-k 作为上下文策略
Section titled “以 Top-k 作为上下文策略”相似度排序被用来决定事实与完整性。还应加入权威性、时效性、多样性、权限与任务特定要求。
将对话记录当作状态
Section titled “将对话记录当作状态”模型从散文重建事实并据过时值行动。请显式投影当前状态。
以摘要作为事实来源
Section titled “以摘要作为事实来源”有损派生物覆盖了证据与未解决不确定性。请将摘要链接至底层记录,并使其范围可见。
变换后信任被扁平化
Section titled “变换后信任被扁平化”抽取或摘要后的不受信文本失去其标签,随后显得权威。请传播来源与信任元数据。
提供商或应用在不知道丢失了哪项必要信息的情况下截断内容。请按信息类别分配预算并记录遗漏。
通用上下文模板
Section titled “通用上下文模板”每次决策都接收相同的历史、工具与文档。请按决策类别定义约定。
预先加载过多仓库内容
Section titled “预先加载过多仓库内容”每次编辑都加载全部仓库指导并重复相同的仪式,即使决策局部且可逆。额外上下文可能稀释信号,或诱发不必要的确认与测试。应使用按任务范围划分的指针,并用明确的风险等级规定何时因依赖或后果重大而扩大复核。
延迟载入但无法发现
Section titled “延迟载入但无法发现”工具、Skill 或参考资料被移出默认上下文,但其描述过于含糊,无法触发检索。应分别测试发现过程与载入后的正确使用,并为触发遗漏提供恢复路径。
指令负责人重复
Section titled “指令负责人重复”同一规则出现在多个上下文层级,却只在其中一处发生变化。应指定一个主要负责人;其他层只引用该规则,或仅暴露各自接口所需的部分。
审阅一个成功案例与一个失败案例的组装清单:
decision contract and template versionprincipal, tenant, run, step, and state versionincluded instruction, state, evidence, history, memory, and tool identifiersdescriptors, triggers, and decisions for deferred contexttask and risk class plus repository or Skill pointers selected for this decisionsource authority, trust, freshness, and permission decisionsretrieval query, filters, ranking, deduplication, and transformationsslot budgets, actual tokens, omissions, and truncationcache keys and source versionsresulting action or artifact and its verifier outcome如果团队无法还原某个实质性条目为何存在或缺席,则上下文流水线的可观测性仍不足以实现可靠改进。
- 每个重要的模型决策是否都有包含必需与排除信息的上下文约定?
- 是否在检索前解析了身份、租户、权限与决策范围?
- 当前状态是否从权威记录投影,而不是从对话记录中推断?
- 检索规则是否同时考虑权威性、时效性、多样性、冲突与权限,而不仅是相似度?
- 不受信内容及其转换结果是否在整个流水线中带有标签?
- 是否仅暴露当前有资格的工具?
- 每条指令是否只有一个主要负责人,而不是跨层存在互相冲突的副本?
- 延迟工具、Skill 与参考资料是否具有区分度明确的描述、经过测试的发现用例和恢复路径?
- 仓库和 Skill 指针是否按任务与风险选择,并在后果重大或不确定时要求扩大阅读?
- 所选表示是否比当前任务可用的文字、结构、代码、测试或视觉参考更完整地保留了要求?
- 上下文预算是否按用途分配,并保护必需信息不被任意截断?
- 压缩是否保留了决策、影响、义务、证据与不确定性?
- 系统是否能重建一次决策背后的输入、版本、转换与遗漏?
- 评估是否覆盖了陈旧、冲突、缺失、敌对与过长的上下文?
参考文献与其使用方式
Section titled “参考文献与其使用方式”- Lewis et al., “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks” — 将生成与外部、可更新证据结合的奠基性研究;并未被用作“检索段落即为真”的论据。
- Liu et al., “Lost in the Middle: How Language Models Use Long Contexts” — 同行评审证据,指出“被包含”与“被有效使用”可能不同;结论范围限于所测模型与任务。
- Anthropic, “Effective context engineering for AI agents” — Anthropic 工程文章,用于支持有限上下文、即时检索、压缩、结构化笔记与上下文隔离。
- Google Security Blog, “Mitigating prompt injection attacks with a layered defense strategy” — Google Security Blog 文章,用于支持针对间接提示词注入的分层控制,而非依赖提示措辞。
- NIST AI 600-1, Generative Artificial Intelligence Profile — 跨行业风险管理资料,支持内容来源、数据谱系、访问控制与对 GAI 信息流的评估。
- Anthropic, “The new rules of context engineering for Claude 5 generation models” (2026) — Anthropic 工程报告,用于说明当前的渐进式披露、延迟工具、结构化接口与丰富参考资料等案例。其针对特定产品的内部评估既不能证明发现召回率,也不能确立普适的表示方式层级。
- OpenAI, “Model guidance: Favor leaner prompts” — OpenAI 当前的开发者指南,用于支持只暴露相关工具、精简描述、为指令指定单一负责人,以及在边界明确的上下文移除后进行评估。
- OpenAI, “Rethinking skills and prompts for GPT-6 Astra” — OpenAI 的带日期工程证据,用于说明简洁且有区分度的 Skill 描述、最小根路由器、渐进式披露和按任务范围的仓库指针;它不提供通用的宿主截断或加载规则。