跳转到内容

上下文组装与管理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

用表示揭示结构:

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

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

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

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

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

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

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

使用分层控制:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

decision contract and template version
principal, tenant, run, step, and state version
included instruction, state, evidence, history, memory, and tool identifiers
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

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

  • 每个重要的模型决策是否都有包含必需与排除信息的上下文约定?
  • 是否在检索前解析了身份、租户、权限与决策范围?
  • 当前状态是否从权威记录投影,而不是从对话记录中推断?
  • 检索规则是否同时考虑权威性、时效性、多样性、冲突与权限,而不仅是相似度?
  • 不受信内容及其转换结果是否在整个流水线中带有标签?
  • 是否仅暴露当前有资格的工具?
  • 上下文预算是否按用途分配,并保护必需信息不被任意截断?
  • 压缩是否保留了决策、影响、义务、证据与不确定性?
  • 系统是否能重建一次决策背后的输入、版本、转换与遗漏?
  • 评估是否覆盖了陈旧、冲突、缺失、敌对与过长的上下文?