跳转到内容

上下文组装与管理

基础篇将上下文工程(context engineering)定义为为一次模型推理所提供信息的设计。本章在运行时落实这一理念。重点不在于更好的提示词措辞,而在于那条用于决定某次决策应纳入哪些内容、以何种形式、具备何种权威与来源、以及有意排除哪些内容的组装流水线。

上下文应被组装为一份字段含义明确、受预算约束且可检查的当前任务视图,而不是作为不断增长的对话记录持续累积。

权威事实来源仍在提示词之外。每次调用都接收一个适配该次决策的投影。组装记录应能回答:考虑了哪些信息、它们来自哪里、发生了哪些转换、为何被纳入,以及适用了哪些限制或访问规则?

一个有用的约定会指明某次决策所需的各类信息:

信息类别 目的 示例控制项
约束性指令 定义角色、策略、输出与决策约定 版本、优先级、受保护来源
目标与当前子任务 说明此调用必须完成什么 明确范围、成功条件
权威状态投影 表示任务或环境中当前为真的事实 状态版本、时效性、访问控制
选取的历史 保留相关的承诺、更正与尝试 压缩策略、遗漏历史标记
证据 提供检索到或用户提供的支撑 来源、权威性、日期、引用标识
工具能力 描述此步骤可用的操作 适用性、输入输出结构、风险、权限
近期结果 报告结构化的工具或验证器结果 结果类别、行动 ID、不确定性
待决决策与限制 暴露审批、截止期限、预算与停机条件 所有者、剩余额度、到期时间

并非每次调用都需要每类信息。分类器不应继承整个工具目录;用于生成行动参数的调用不应接收不相关的私人历史。明确列出这些类别,能让遗漏与冗余变得可见。

在检索前解析活动主体(principal)、租户(tenant)、运行(run)、步骤(step)与决策约定。对敏感内容的访问过滤必须发生在其进入模型可见上下文之前。提示中“不要泄露此内容”的指令不是访问控制边界。

从权威记录系统(system of record)读取当前任务事实,并仅投影此次决策所需字段。当陈旧性重要时,包含版本或观察时间。不要让模型从同时包含旧值与更正值的对话中去推断当前状态。

在该主体与任务允许的集合中搜索。检索可组合元数据过滤、词法搜索、向量嵌入、图或应用特定查询。最初的 RAG(Retrieval-Augmented Generation)工作确立了将模型生成与可更新的外部知识结合的价值(Lewis et al., 2020);这并不意味着检索结果默认具有权威性。

相关性只是一个准则。还要应用权威性、时效性、权限、文档状态、来源多样性与冲突规则。当相反证据会改变决策时予以保留。去除重复段落,避免同一材料因多次出现而被赋予过高权重。

用结构化任务状态承载当前事实。仅在措辞、承诺、更正或交互连贯性重要时才包含先前消息。检索到的记忆是具备范围与有效性的候选输入,而非指令或当前事实。其生命周期由“状态与记忆”章节负责。

仅提供在当前状态和权限下可用的工具。庞大且重叠的目录会增加 token,并使选择变得含糊。工具描述与输入输出结构是上下文的一部分,但权限与行动验证仍应在模型之外进行。

应把接口本身视为塑造行为的上下文。清晰的操作名称、带类型的参数、枚举、状态转换和结果结构,可以比用额外文字弥补含糊工具接口更可靠地表达可用能力。每条指令只保留一个主要负责人,不要在全局指南和每项工具描述中重复同一规则。

如果符合条件的工具目录仍然很大,可以采用渐进式披露(progressive disclosure):先暴露简洁且有区分度的描述或索引,只在当前决策需要时才载入完整的工具定义、Skill 或参考资料。只有当正确能力仍然易于发现时,延迟载入才真正节省上下文。

应把 Skill 描述视为路由元数据,而不是微型实现指南。写明任务触发条件和有用的排除项,再让根文档指向详细参考材料或脚本。随着目录增长,要测试误触发和相邻任务遗漏;宿主环境的截断或排序行为可能让原本足够的描述失效。

为指令、状态、证据、工具定义、历史与输出预留容量。优先保障必需信息,而非在任意边界处截断串联的提示。提供方缓存有用时可保留稳定前缀,但不要让缓存设计使过时策略继续生效。

保留所含项目的标识符与版本、查询与过滤、变换、对诊断有实质影响的排除项、token 计数与最终模板版本。敏感的原始上下文不必复制到每条追踪记录中;引用与受保护快照可在适当留存下支持审计。

大的上下文窗口提供的是容量,并不证明每个条目都会被使用。Lost in the Middle 发现,在其评估的模型与长上下文任务中存在位置敏感性(Liu et al., 2024)。更新的模型可能表现不同,因此应将布局视为评估变量,而非永久规则。

用表示揭示结构:

  • 将约束性指令与证据和不受信内容分离;
  • 在重要处标注来源、时间、权威性与引文标识符;
  • 清晰呈现当前要作出的决策与所需输出约定;
  • 在精确性重要时用结构化字段表达当前状态;
  • 区分缺失、未知、已隐去与不适用;以及
  • 保留结构化的工具结果,而不是将所有结果改写为叙述性文字。

XML、JSON、Markdown 标题、消息角色或提供方特定区块都可行。分隔符有助于模型理解结构;它们不是安全边界。

渐进式披露把详细材料移出始终载入的上下文。简洁层说明有哪些材料、何时适用以及如何载入;详细层则提供执行所需的指令、工具定义或参考产物。这可以减少噪声和成本,但也会引入一种检索失败:模型可能从未请求真正需要的材料。

两个阶段都要评估。第一,描述信息能否让系统发现正确的延迟载入项,包括含糊案例和容易混淆的相邻项?第二,载入后模型能否正确使用它?还要为触发遗漏记录恢复路径,而不是假定“存在于某处”就等同于“当前决策可用”。

应根据具体要求选择表示方式。结构与枚举揭示合法结构;代码和测试可以规定可执行行为;界面稿与截图传达视觉关系;文字说明理由和例外;评分准则使判断标准显式化。对于某些任务,高保真产物可能优于冗长描述,但任何媒介都不存在普适排名。当一种表示会遗漏重要要求时,应组合使用多种表示。

Anthropic 在当前 Claude Code 实践中介绍了选择性载入的 Skill、延迟工具、结构化接口与更丰富的参考产物(Anthropic, 2026)。OpenAI 同样建议只暴露相关工具,并逐步移除重复的提示词内容(OpenAI,当前指南)。这些是有用的厂商实践;发现召回率与表示质量仍必须通过本地评估确定。

仓库指导也应遵循同一原则。让任务指向完成当前决策所需的文档,而不是要求每个低风险编辑都预先加载完整仓库地图。对于安全、发布、迁移、负责人不清晰或其他高后果工作,应扩大上下文范围。这是风险分级策略,并不意味着能力较强的模型可以安全地推断所有被省略的依赖。

长时工作最终会超出可行的输入预算。常见做法包括:

  • 移除不相关轮次;
  • 用带引用的产物替换原始工具输出;
  • 总结已完成的工作;
  • 维护包含目标、决策、证据、影响与待办的结构化台账;
  • 按需取回较旧细节;或
  • 隔离一个子任务并返回边界清晰的结果。

每次压缩都应声明必须保留的内容:当前目标、已接受的决策、用户更正、已提交的影响、未解决的义务、证据标识符、不确定性与恢复条件。由模型生成的摘要是一个派生视图。它应链接至底层记录,并在发现不准确时可替换。

Anthropic 将面向智能体的上下文工程描述为在有限注意力下持续筛选和组织信息,并建议针对长任务组合使用压缩、结构化笔记与子智能体(Anthropic, 2025)。这些是有用方法,但不能替代明确识别当前任务必须保留的信息。

网页、文档、电子邮件、代码库内容、工具输出与记忆中可能包含试图重定向模型的文本。Google 将间接提示注入(indirect prompt injection)描述为消费不受信网页内容的系统持续面临的安全挑战(Google Security Blog, 2025)。没有任何包裹性文本能保证模型会忽略它。

使用分层控制:

  1. 将外部内容标注为数据并保留其来源;
  2. 排除当前操作不需要的秘密与数据;
  3. 限制此步骤可用的工具与权限;
  4. 在应用代码中验证模型提议与输出;
  5. 对影响重大的效果要求审批;以及
  6. 使用恶意与相互冲突的内容进行测试。

信任标签应在抽取与摘要后仍能存续。若对不受信页面的摘要随后以没有来源信息的“记忆”被存储,那么边界已被抹除。

上下文可能在检索与执行之间变陈旧。应根据来源与后果定义时效性:一项策略可能数月内有效;库存或权限则可能需要在提交前立即读取。当模型需要基于时间进行推理时,应注明信息的有效时间。

在有用时缓存稳定的指令、输入输出结构与不可变证据。动态缓存的键应包含租户、权限、来源版本、查询、转换与相关策略版本。缓存失效策略是正确性的一部分。快速但陈旧的答案不是成功的优化。

测试实际的流水线,而不仅是手工打造的黄金提示。用例应包括:

  • 顶部检索结果中缺失的必需事实;
  • 同一来源的陈旧与当前版本;
  • 权威与非权威论断的冲突;
  • 重复的证据;
  • 在其他方面相关的文档中包含的恶意指令;
  • 过大的工具目录;
  • 未被发现的必需延迟指令、工具或参考资料;
  • 指令层与工具层之间重复或冲突的指导;
  • 遗漏重要要求的表示方式;
  • 丢失待办义务的摘要;
  • 缓存条目创建后权限发生变更;以及
  • 位于不同上下文位置附近的相关信息。

度量检索覆盖率、不受支撑的论断、引文正确性、上下文大小与延迟、陈旧输入率、访问违规、行动质量与端到端结果。仅有检索评分并不能表明模型正确使用了证据。

每轮对话与工具结果被永久保留。噪声、成本、矛盾与暴露不断增长。请基于当前需求与权威状态重新组装。

相似度排序被用来决定事实与完整性。还应加入权威性、时效性、多样性、权限与任务特定要求。

模型从散文重建事实并据过时值行动。请显式投影当前状态。

有损派生物覆盖了证据与未解决不确定性。请将摘要链接至底层记录,并使其范围可见。

抽取或摘要后的不受信文本失去其标签,随后显得权威。请传播来源与信任元数据。

提供商或应用在不知道丢失了哪项必要信息的情况下截断内容。请按信息类别分配预算并记录遗漏。

每次决策都接收相同的历史、工具与文档。请按决策类别定义约定。

每次编辑都加载全部仓库指导并重复相同的仪式,即使决策局部且可逆。额外上下文可能稀释信号,或诱发不必要的确认与测试。应使用按任务范围划分的指针,并用明确的风险等级规定何时因依赖或后果重大而扩大复核。

工具、Skill 或参考资料被移出默认上下文,但其描述过于含糊,无法触发检索。应分别测试发现过程与载入后的正确使用,并为触发遗漏提供恢复路径。

同一规则出现在多个上下文层级,却只在其中一处发生变化。应指定一个主要负责人;其他层只引用该规则,或仅暴露各自接口所需的部分。

审阅一个成功案例与一个失败案例的组装清单:

decision contract and template version
principal, tenant, run, step, and state version
included instruction, state, evidence, history, memory, and tool identifiers
descriptors, triggers, and decisions for deferred context
task and risk class plus repository or Skill pointers selected for this decision
source authority, trust, freshness, and permission decisions
retrieval query, filters, ranking, deduplication, and transformations
slot budgets, actual tokens, omissions, and truncation
cache keys and source versions
resulting action or artifact and its verifier outcome

如果团队无法还原某个实质性条目为何存在或缺席,则上下文流水线的可观测性仍不足以实现可靠改进。

  • 每个重要的模型决策是否都有包含必需与排除信息的上下文约定?
  • 是否在检索前解析了身份、租户、权限与决策范围?
  • 当前状态是否从权威记录投影,而不是从对话记录中推断?
  • 检索规则是否同时考虑权威性、时效性、多样性、冲突与权限,而不仅是相似度?
  • 不受信内容及其转换结果是否在整个流水线中带有标签?
  • 是否仅暴露当前有资格的工具?
  • 每条指令是否只有一个主要负责人,而不是跨层存在互相冲突的副本?
  • 延迟工具、Skill 与参考资料是否具有区分度明确的描述、经过测试的发现用例和恢复路径?
  • 仓库和 Skill 指针是否按任务与风险选择,并在后果重大或不确定时要求扩大阅读?
  • 所选表示是否比当前任务可用的文字、结构、代码、测试或视觉参考更完整地保留了要求?
  • 上下文预算是否按用途分配,并保护必需信息不被任意截断?
  • 压缩是否保留了决策、影响、义务、证据与不确定性?
  • 系统是否能重建一次决策背后的输入、版本、转换与遗漏?
  • 评估是否覆盖了陈旧、冲突、缺失、敌对与过长的上下文?