Agent 上下文工程 ​

本篇边界:上下文工程只负责“这一轮模型看到什么、为什么看到、以什么顺序和格式看到”。它不拥有 Run State(运行状态),不负责把信息长期写成 Memory(长期记忆),也不决定真实动作权限;这些分别属于 Runtime(运行时)、Memory / Skill(记忆与技能)和 Policy Service(策略服务)。Harness(执行外壳)负责在模型之外编排并强制执行策略门禁,但不是身份或业务规则的权威来源。这样可以防止 Context Platform(上下文平台)被误做成新的超级状态中心。

本文要解决的不是“怎样把提示词写得更长”,而是一个企业级运行问题:当任务跨越多轮、多个工具和多个数据源时,怎样稳定地把正确事实、当前状态与可用能力投影给模型,同时把过期、越权、低价值和不可恢复的信息挡在模型之外。读完本文,读者应能设计上下文流水线、诊断上下文故障,并判断什么时候需要平台化、什么时候局部实现已经足够。

本文已经接近参考手册体量,不同目标不需要从头读到尾:

阅读目标 建议路径 读完应能回答什么
首次学习 第一章 → 第二章 → 3.1 → 4.1~4.4 → 6.1 Context 与 State、Knowledge、Memory 有什么区别;一次模型调用的输入怎样形成
架构评审 3.2~3.4 → 第六章 → 7.3~7.5 契约、Owner、发布门和采购门槛是否足以支撑生产系统
排障查询 7.1~7.2 → 附录 A 的对应短答 → 回到正文机制章节 一次 Missing、Stale、Wrong Scope 或 Compaction Loss 应先查什么证据

附录 A 是阅读索引和快速回答,不替代正文论证;需要做设计决策时,应回到表中对应的机制章节。

一、Context Engineering 到底是什么 ​

1.1 Context Engineering 到底负责什么 ​

核心结论 ​

Context Engineering(上下文工程)解决的不是:

“怎样把更多信息塞进模型。”

而是:

在有限的 Context Window(上下文窗口)、延迟、成本和注意力预算内,让模型在每一次决策时看到“正确、相关、及时、可信、最小必要”的信息与能力。

可以把它压缩成:

text
Context Engineering
=
What to include
+ What to exclude
+ When to include
+ In what format
+ At what priority
+ For which model / agent / turn

从上一章 Agent Loop(智能体循环)的视角看:

text
Run State + External Sources
        ↓
Context Engineering
        ↓
Model-visible Context
        ↓
Decision

因此:

State 是系统知道什么;Context 是这一轮模型被允许、被选择看到什么。

整篇可以先压缩成一张母图:

治理

观测

Context Sources
State / Session / Memory / Knowledge / Tool / Skill

Context Engineering

Select
选择

Compress
压缩

Externalize
外部化

Isolate
隔离

Context Pack
模型上下文包

Model Call

Decision

Observation / Update

Policy / Trust / Freshness / Budget

Snapshot / Trace / Eval

这张图表达了整篇的核心:

text
Context Source 很多
≠
全部进入模型

Context Engineering
= 在每个 Turn 动态管理“什么进、什么不进、什么压、什么外部化、什么隔离”

本文重点聚焦 Model-visible Context(模型可见上下文)如何被构建、更新、压缩、隔离和治理,同时明确 Tool Context 与 Lifecycle Context 的接口边界。

以下内容只讲必要边界,不在本文深入:

  • 企业 Knowledge Source(知识源)、Retrieval(检索)、Authority(权威等级)与 ACL(访问控制列表):知识检索与治理架构;
  • Session(会话)和 Run State 的耐久化:Runtime 与持久执行;
  • 长期 Memory / Skill 学习:记忆、技能与持续学习;
  • Multi-Agent(多智能体)协作:多智能体与工作流编排;
  • MCP(Model Context Protocol,模型上下文协议)等跨系统协议:跨系统交互与集成治理。

Context 到底是什么 ​

先给一个最简单、最不容易误解的定义:

Context(上下文)就是“模型在这一次调用里实际能够看到、并可能影响它本次决策的全部信息”。

这里有两个关键词:

  1. “这一次调用”:Context 是按每次 Model Call(模型调用)动态变化的,不是一个永久不变的资料包。
  2. “实际能够看到”:系统里存在的信息,不等于模型已经看到的信息。

例如一个 Coding Agent(编码智能体)修复登录 Bug(缺陷):

text
系统知道:
- 整个代码仓库
- 1000 个历史提交
- 全部测试日志
- 当前用户权限
- 过去 50 轮会话
- 20 个可用工具

这一轮模型实际看到:
- 当前修复目标
- 3 个相关文件
- 最新测试错误
- 当前 diff
- 6 个当前允许使用的工具

后面这一小部分,才是这一轮真正的 Context。


Model Context(模型上下文)通常由哪些内容组成 ​

不是所有 Agent 都必须同时包含下面所有内容。

更准确地说:

这些是“可能的 Context 组成部分”,具体是否存在,取决于任务、框架、模型和当前 Turn(回合)。

Context 类型 中文含义 是否通常必需 示例 为什么需要
System / Policy Instructions 系统规则 / 策略指令 基础必需 “不得访问生产数据库” 定义最高优先级规则
Agent / Domain Instructions Agent / 领域指令 基础必需或复杂任务常需 “你是 Data Agent,优先使用语义层口径” 定义角色、领域工作方式
Current Task 当前任务 基础必需 “分析华东区上月 GMV 同比” 告诉模型当前到底要做什么
Relevant Run State 相关运行状态 复杂任务常需 已完成步骤、当前 Plan、最新错误 避免模型忘记当前执行进度
Recent Messages 最近会话 复杂任务常需 用户最近 5 轮澄清 保持对话连续性
Retrieved Knowledge 检索知识 按需 企业文档、代码片段、指标定义 补充模型本身不知道的事实
Memory 长期记忆 按需 用户偏好、历史经验 跨 Session 保留长期信息
Skills 技能 / 工作方法 按需 SQL(结构化查询语言)分析 Skill、部署 Skill 按需加载专业流程
Tool / Capability Definitions 工具 / 能力定义 使用 Tool 时必需 query_sql、read_file 告诉模型能做什么、参数怎么传
Tool Observations 工具观察结果 Tool 执行后需要 SQL 报错、测试失败 让环境反馈进入下一轮决策
Artifact / Pointer 产物 / 引用指针 按需 artifact://result.parquet 大内容不直接塞入 Context
Output Schema 输出结构 按需 JSON Schema 约束模型最终输出格式

这里真正重要的是这些来源为什么拥有不同生命周期、权限和可信度:

Context 是一个“按任务动态组装的视图”,不是一套固定字段。


为什么有的 Context 是“必须的”,有的是“按需的” ​

可以分成三档:

这里的三档表示上下文必要程度,不是投资优先级或系统成熟度等级:

text
基础必需:没有就无法正确理解当前任务
→ Current Task / 关键 System Policy

复杂任务常需:任务跨轮次、工具或阶段后通常需要
→ Relevant State / Recent History / Tool Definitions

按需提供:只有任务命中对应事实或能力时才加载
→ Retrieval / Memory / Skill / Artifact

例如:

简单问答

text
Current Task
+ Basic Instruction

可能就够。

Data Agent

text
Task
+ Metric Definition
+ Allowed Schema
+ SQL Tool
+ Query Observation

才比较完整。

Coding Agent

text
Task
+ Relevant Files
+ Current Diff
+ Test Failure
+ Edit / Test Tools

Context 会完全不同。

所以:

不存在一份所有 Agent 都应该永久携带的“标准 Context 全家桶”。


广义 Agent Context 还包括什么 ​

除了“模型这次看到了什么”,工程上还有两个相关概念。

类型 解决什么问题 例子
Model Context(模型上下文) 模型本次调用看什么 Task、History、Tool Definition
Tool Context(工具上下文) Tool 执行时能访问什么运行信息 User Identity、Tenant、DB Connection、Run ID
Lifecycle Context(生命周期上下文) Context 在不同 Turn / Hook 间如何变化 Compaction、State Update、Context Snapshot

例如:

text
模型看到:
“查询订单 123”

但 query_order Tool 执行时还可能需要:

text
user_id
tenant_id
database_connection
trace_id

这些信息不一定应该暴露给模型,却是 Tool 执行所需要的。

这就是:

Model Context 和 Tool Context 不完全相同。

LangChain 当前官方也使用 Model Context、Tool Context、Life-cycle Context 来描述 Agent Context Engineering。[^langchain-context]


Context Item 需要关注哪些属性 ​

任何一条 Context Item(上下文项),至少应该回答六个问题:

维度 它回答什么 例子 进入模型前由谁处理
Visibility(可见范围) 哪个用户、租户或 Agent 能看到? 仅主 Agent / 指定子 Agent / 当前 Tenant(租户) 权限过滤器
Lifetime(生命周期) 它在什么时候有效? 当前 Turn(回合)/ 当前 Run / 30 天 生命周期策略
Authority(权威等级) 多个来源冲突时以谁为准? Semantic Registry(语义注册表)高于历史 Memory 冲突消解器
Trust(可信等级) 内容可否被当作指令或事实? 外部网页只能作为不可信数据 信任边界与内容隔离
Provenance(来源链路) 它从哪里来、经过什么转换? 文档版本、查询时间、摘要版本 上下文血缘记录
Cost(成本) 它占用多少资源? Token、Latency(延迟)、Cache(缓存) 预算管理器

这些属性不是展示标签。它们会直接参与过滤、冲突消解、排序、压缩和审计:Visibility 或 Trust 不满足时必须在相关性排序之前拒绝;Authority 和 Lifetime 决定冲突项谁胜出;Provenance 让摘要错误可以追溯;Cost 只在正确性和安全边界满足以后参与取舍。


Context 与 Session / State / Memory / Knowledge 怎样划边界 ​

这一组概念不适合靠连续文字记忆,最清楚的方式是横向对比。

概念 核心问题 生命周期 是否直接给模型 典型内容 谁负责
Context(上下文) 这一轮模型看到什么? 单次 Model Call / Turn 是 Task、相关文件、Tool Observation Context Engine
Session / Thread(会话 / 线程) 多轮交互历史怎么组织? 多轮 / 多 Run 不一定 User / Assistant Message、Tool History Session / Runtime
Run State(运行状态) 当前任务真实执行到了哪里? 单次 Run 只选相关部分 completed_steps、budget、approval Runtime / Harness
Memory(长期记忆) 什么值得跨任务长期保存? 跨 Session / Run 按需读取 用户偏好、历史经验 Memory System
Knowledge(外部知识) 外部事实在哪里? 独立于 Run 按需检索 文档、数据库、Repo、Wiki Knowledge / Data System

可以进一步记成一句话:

text
Session = 历史容器
State   = 当前执行事实
Memory  = 长期保留
Knowledge = 外部事实源
Context = 从上面这些来源中选出来,真正给模型看的“当前视图”

一个具体例子:Data Agent 查询 GMV(商品交易总额) ​

用户问:

“帮我查华东区上个月 GMV 同比。”

系统中可能存在:

text
Session
→ 用户前面问过“只看自营业务”

Run State
→ 已经定位到销售主题域,当前还未执行 SQL

Memory
→ 用户习惯金额单位用万元

Knowledge
→ 当前最新 GMV 指标定义、表结构、区域定义

Context
→ 当前 Task
 + “只看自营业务”
 + 最新 GMV 定义
 + 相关表 Schema
 + SQL Tool

这时就能看出:

Context 是多个来源经过选择以后形成的“当前模型输入”,并不是任何一个来源本身。


1.2 Context Engineering 与相邻技术的边界 ​

与 Prompt Engineering 的区别 ​

两者有关,但关注的问题完全不同。

对比维度 Prompt Engineering(提示词工程) Context Engineering(上下文工程)
核心问题 怎么说 给什么、不给什么、什么时候给、怎么组织
主要对象 Instruction、Example、Format Task、State、History、Retrieval、Memory、Tool、Observation
是否动态 通常相对静态 高度动态,每个 Turn 都可能变化
是否管理外部数据 通常不负责 核心职责之一
是否管理 Tool 更多关注 Tool 描述写法 还要关注哪些 Tool 该暴露
是否处理 Freshness 很少 必须处理
是否处理权限 / Scope 很少 企业 Context 必须考虑
是否处理 Compaction 通常不是重点 长任务核心问题
典型失败 指令含糊、格式不稳定 Missing、Stale、Noisy、Conflict、Wrong Scope

可以用一个 Data Agent 例子区分。

Prompt Engineering 问:

“我要怎么写 System Prompt,才能让 Agent 先确认指标口径再写 SQL?”

Context Engineering 问:

“当前最新指标口径从哪里来?旧口径是否应该过滤?哪些 Schema 用户有权限看到?SQL Result 太大时怎么进入下一轮?”

所以本文采用的工程视角是:

Prompt Engineering 主要解决 Context 最终如何表达;Context Engineering 还负责这些信息从哪里来、为什么进入、优先级是什么以及如何随运行变化。


与 RAG 的区别 ​

RAG(Retrieval-Augmented Generation,检索增强生成)也只是 Context Engineering 的一部分能力。

对比维度 RAG(检索增强生成) Context Engineering(上下文工程)
核心问题 从外部知识中检索什么? 当前模型整体应该看到什么?
主要 Source 文档 / Knowledge Base State、Session、Knowledge、Memory、Tool、Skill 等
是否处理 Run State 通常不处理 处理
是否处理 Tool Result 通常不处理 处理
是否处理 Tool Definition 通常不处理 处理
是否处理 Memory 可结合,但不是核心定义 作为 Context Source 管理
是否处理 Compaction 通常不是核心 核心机制
是否处理 Authority / Freshness 可做 Metadata Filter 企业级 Context 必须系统化处理
是否处理 Context Budget 一般只关注 Top-K / Chunk 管理整轮 Token / Attention Budget
是否负责最终 Assembly 通常返回检索片段 负责所有 Source 的最终组合

例如 RAG 很成功地找到了:

text
GMV 相关的 5 篇文档

但其中:

text
文档 A:2024 旧口径
文档 B:2026 新口径
Session:用户只看自营
Tool Observation:当前表缺少某分区

RAG 只解决“找到了什么”。

Context Engineering 还必须解决:

text
哪个更权威?
哪个已过期?
Session 条件是否要叠加?
Tool Observation 是否改变下一步?
最终给模型多少?

因此:

高质量 RAG 是高质量 Context Engineering 的重要组成部分,但不是全部。


1.3 什么时候上下文会成为独立架构问题 ​

不是所有应用都需要复杂 Context Platform。

可以用下面这个判断表:

场景 Context 复杂度 推荐做法
单轮问答,只有用户输入 低 简单 Prompt 即可
多轮 Chat,但信息量稳定 中低 Session + History Window
RAG 问答 中 Retrieval + Ranking + Source Metadata
多 Tool Agent 中高 Tool Context + Observation 管理
长任务 Agent 高 State + Compaction(上下文压缩)+ Externalization(上下文外部化)
Multi-Agent 高 Context Isolation + Scope
企业 Data / Coding Agent 很高 Authority + Security + Snapshot + Eval

不能用“出现任意 3~4 个信号”作为平台化阈值,因为信号的风险权重不同。更可靠的判断分成硬触发和软触发:

text
Risk / Governance 硬触发
→ 跨租户或敏感数据可能越权进入模型
→ 高风险决策必须证明模型当时看到了什么
→ 法规、审计或删除要求必须落实到 Context Item

Failure / Scale / Reuse 多项软触发
→ Missing / Stale / Conflict / Compaction Loss 持续造成任务失败
→ 长任务、多 Tool、多来源使组装延迟或 Token 成本失控
→ 多个 Agent 重复实现相同 Snapshot、Policy Version 与质量门

硬触发出现一个就应建立明确的 Context Contract、快照和治理责任,但不等于必须建设集中式平台;软触发需要在同一业务周期内反复出现,并且共享机制的复用收益高于迁移、值班与发布成本,才支持平台化。单个多轮 RAG 应用即使同时具备多个技术特征,也可能只需要领域内流水线;反过来,一次严重跨租户泄漏即使没有规模问题,也足以触发治理升级。


为什么会从 Prompt 技巧演进成架构能力 ​

Context Engineering 不是因为“Prompt 越来越复杂”才出现,而是 Agent 的信息环境发生了质变。

可以把演进过程理解为:

text
Static Prompt
→ 信息少、来源固定
→ 重点是“怎么表达”

RAG
→ 外部知识增多
→ 开始解决“从哪里找”

Tool-using Agent
→ Tool Schema / Tool Result 进入模型
→ Context 不再只是文档

Long-running Agent
→ State / History / Observation 持续增长
→ 需要 Compaction(上下文压缩)/ Externalization(上下文外部化)/ Rehydrate(上下文重建)

Multi-Agent / Multi-tenant
→ Context 出现 Scope / Isolation / Permission
→ “相关”不再等于“允许进入”

Enterprise Scale
→ Source、版本、模型、策略持续变化
→ 需要 Provenance / Freshness / Authority / Snapshot / Eval / Release

Context Control Plane
→ Context 从 Prompt 拼接升级为受治理的运行时数据管道

所以真正的架构变化是:

text
Prompt Engineering
→ Presentation Problem(表达问题)

RAG
→ Retrieval Problem(检索问题)

Context Engineering
→ Runtime Information Governance Problem(运行时信息治理问题)

关键结论:

Context Engineering 的独立价值,不是“更会拼 Prompt”,而是让模型每一次决策都工作在一个可选择、可验证、可治理、可复现的信息世界里。

这也是为什么 Context 最终会成为 Agent Platform 的一等基础设施,而不是某个 Prompt Utility。


二、为什么需要 Context Engineering ​

2.1 为什么更大窗口仍解决不了问题 ​

模型能力不等于 Agent 能力 ​

Agent 的每一次行为,可以粗略理解为:

text
Decision Quality
=
f(
  Model Capability,
  Visible Context,
  Tool / Capability Set
)

模型再强,如果看不到:

  • 当前数据库 Schema;
  • 最新错误日志;
  • 当前用户权限;
  • 最新业务指标定义;

仍然会做错。

大量所谓:

“模型 hallucination(幻觉)”

真实根因可能是:

text
Missing Context
Stale Context
Conflicting Context
Buried Context
Wrong Tool Context

因此 Context Quality(上下文质量)是 Agent Quality(智能体质量)的核心变量。


Context Window 大不等于问题消失 ​

更大的 Context Window 只解决:

能不能装下。

它不解决:

text
信息是否相关
信息是否最新
信息是否可信
不同来源是否冲突
硬约束是否被埋没
Token 是否值得花
模型注意力是否被稀释
敏感数据是否越权

甚至窗口越大,“什么都塞进去”的诱惑越强。

所以:

Context Window 变大,Context Engineering 不会消失,反而会从容量问题升级为信息质量与治理问题。


Context 为什么本质上是 Attention Budget ​

Token Budget(Token 预算)只是显性约束。

还有一个更重要但不可直接观测的资源:

Model Attention(模型注意力)。

Context 中每加入一个 Item,都可能产生两种效果:

text
Useful Signal
or
Noise / Conflict

因此优化目标不应该只是:

text
Minimize Tokens

而应该是:

Maximize Decision-relevant Information Density(决策相关信息密度)。

可以建立一个工程视角:

text
Context Item
├─ Must-have
├─ Helpful
├─ Nice-to-have
├─ Noise
└─ Harmful / Conflicting

成熟 Context Engine 的目标:

保留前两类,控制第三类,尽量消除后两类。


2.2 上下文为什么会随任务持续退化 ​

Context Rot(上下文腐化) ​

Context Window(上下文窗口)是容量上限,但真正需要关注的是:

Context Utilization(上下文利用能力)并不会随着 Context Length 线性增长。

Anthropic 当前把这种现象概括为 context rot:随着 Context Token 增加,模型对其中信息的精准召回和长距离关系理解会逐渐下降。[^anthropic-context]

这和 Lost in the Middle(长上下文中部信息利用下降)共同说明:

text
More Tokens
≠
More Usable Information

可以把 Context 的边际价值理解成:

text
Context Utility
↑
│        ________
│      /
│    /
│  /
│_/________________→ Context Size
        边际收益下降

因此 Context Engineering 的核心不是:

text
maximize context size

而是:

text
maximize useful context

Context Rot(上下文退化)不是一个可由单一阈值直接判定的系统状态,而是几种压力叠加后的行为结果:旧历史持续累积会稀释当前任务;相似但不同版本的事实会增加冲突;大段工具输出会把关键约束推离最近注意力区;多次摘要还可能逐步丢掉数字、因果关系和失败记录。窗口尚未装满时,这些问题就可能发生。

因此生产系统不能把“接近最大 Token 才压缩”作为唯一策略。更可靠的处理链是:先通过 Snapshot(快照)和任务评测识别 Missing、Buried、Conflict 与 Compaction Loss 等可观察症状,再选择去重、重新排序、结果外部化、结构化压缩或开启 Fresh Context(新上下文)等不同动作。处理后必须在同一任务集上比较任务成功率、关键约束保留率和成本;仅仅看到 Token 下降,不能证明退化已经被修复。

这也是为什么:

  • Tool Result 要压缩;
  • History 要裁剪;
  • Retrieval 要排序;
  • Skill 要按需加载;
  • Subagent 要隔离;

这些机制都不是“为了省 Token”这么简单,而是在保护模型的 Attention Budget(注意力预算)。


Context 怎样随 Agent Loop 动态变化 ​

Context 不是启动时生成一次。

真实 Agent:

text
Turn 1
→ 搜索代码

Observation
→ 找到相关文件

Turn 2 Context
→ 加入相关文件

Action
→ 运行测试

Turn 3 Context
→ 加入测试失败
→ 降低旧搜索结果权重

所以 Context 是:

Agent Loop 中不断重建的动态视图。

这也是为什么 Context Engineering 更像:

text
Runtime Data Pipeline

而不是静态 Prompt Template。


Context Failure 为什么会累积并放大 ​

一个错误 Context Item 不一定只影响一轮。

例如:

text
旧业务口径
→ 错误 SQL
→ 错误 Tool Observation
→ 被写入 History
→ Compaction 把错误结论总结下来
→ 后面持续引用

这就是:

Context Contamination(上下文污染)。

它会跨 Turn 传播,甚至跨 Session 写入 Memory。

因此 Context 管理必须关心:

  • Provenance(来源);
  • Freshness(新鲜度);
  • Authority(权威等级);
  • Version(版本);
  • Scope(作用域)。

2.3 高质量上下文应该满足哪些系统性质 ​

不是下面所有性质都应该“平均关注”。

更合理的方式是按质量优先级分三层。这里的 P0/P1/P2 只表示上下文质量目标的处理顺序,不表示内容必要程度、投资阶段或平台成熟度:

text
P0:Correctness(正确性)
→ 没有它,任务直接做错

P1:Governance(治理性)
→ 没有它,系统难以安全、稳定、可追溯

P2:Efficiency(效率性)
→ 没有它,系统能跑,但成本 / 延迟 / 利用率会很差

P0:正确性,最优先 ​

P0 包括四个性质:

性质 它解决什么问题 不满足会怎样 例子
Completeness(必要完整性) 必须的信息有没有进来 模型根本不知道关键事实 Data Agent 没拿到指标定义
Relevance(相关性) 进入的信息是否与当前决策有关 Noise 增多,注意力被稀释 修登录 Bug 却加载全仓库
Freshness(新鲜度) 信息是否仍然有效 使用过期事实 用 2024 年旧 GMV 口径
Authority(权威性) 冲突时应该信谁 低可信来源覆盖官方事实 历史 Session 覆盖 Semantic Registry

这四个性质决定:

模型是不是在“正确的事实世界”里做决策。

Completeness(必要完整性) ​

不是要求“信息越全越好”。

它只要求:

当前 Decision 所必需的信息不能缺。

例如 Coding Agent 当前要修改函数:

text
必须:
- 当前函数代码
- 调用关系
- 最新测试失败

不一定需要:
- 3 年前全部 commit
- 整个 monorepo 文档

衡量思路:

text
Context Recall
= 必须信息中成功进入 Context 的比例

Relevance(相关性) ​

Context 中虽然每条信息都可能“有点关系”,但真正有价值的是:

它是否能改变当前 Decision。

例如:

text
用户问 auth 401

相关:
auth middleware
token refresh
failed test

弱相关:
README
unrelated payment module
historical changelog

衡量:

text
Context Precision
= 进入 Context 的 Item 中真正有决策价值的比例

Freshness(新鲜度) ​

很多 Context 错误不是事实本身错误,而是:

曾经正确,现在已经过期。

例如:

text
旧 Schema
旧 API
旧 Feature Flag
旧业务口径
旧部署状态

因此 Context Item 最好带:

text
created_at
valid_until
source_version
observed_at

Authority(权威性) ​

相关、最新也不代表一定可信。

例如:

text
用户历史聊天:
“GMV 好像包含退款”

企业 Semantic Registry:
“GMV 明确定义为不含退款”

必须知道:

text
哪个 Source 是 Source of Truth(权威事实源)

所以 Authority 本质上是:

当多个 Context Source 冲突时,系统如何决定谁有最终解释权。


P1:治理性,企业生产必须关注 ​

P1 主要包括:

性质 核心问题 典型风险
Isolation(隔离性) 信息是否只进入正确的用户 / Agent / Tenant 数据越权、跨 Agent 污染
Reproducibility(可复现性) 能否还原模型当时看到的内容 无法 Debug / Audit
Provenance(来源可追踪) 这条信息来自哪里 无法判断可信度和时效性
Isolation(隔离性) ​

例如两个租户:

text
Tenant A 的销售数据
Tenant B 的 Agent

即使语义上高度相关,也绝不能因为 Retrieval 命中而进入 Context。

因此 Isolation 是:

text
relevance 之前的硬约束

Reproducibility(可复现性) ​

发生错误时必须回答:

“模型做出这个决策的那一刻,实际看到了什么?”

这就是 Context Snapshot 的价值。

否则今天重放 Session 时,底层文档已经更新,你看到的 Context 可能和当时完全不同。


Provenance(来源可追踪) ​

Context Item 最好能回答:

text
来自哪个系统?
哪个文档?
哪个版本?
什么时候读取?
是否经过 Summary?

没有 Provenance,Authority、Freshness、Audit 都很难成立。


P2:效率性,系统规模起来以后重点优化 ​

P2 包括:

性质 解决什么问题 主要指标
Compactness(紧凑性) 不浪费 Token / Attention Context Token、Compression Ratio
Utilization(有效利用) 信息进来了,模型是否真的使用 Position Sensitivity、Task Success
Cacheability(可缓存性) 稳定内容能否复用 Cache Hit Rate
Compactness(紧凑性) ​

目标不是“越短越好”。

而是:

在不损失 P0 Correctness 的前提下,用尽可能少的 Context 表达足够信息。

因此:

text
先保证正确
再优化 Token

顺序不能反。


Utilization(有效利用) ​

一个 Item 已经进入 Context,不代表模型一定有效利用。

尤其超长 Context 中可能出现:

text
included
but
ignored

这就是为什么还要关注 Ordering、Structure 和 Context Rot。


Cacheability(可缓存性) ​

Context 中:

text
System Policy
Stable Instructions
Stable Skills

通常更适合成为稳定 Prefix。

而:

text
Current Time
Latest Observation
Run ID

属于动态部分。

这是成本优化问题,不应优先于 P0/P1。


最终优先级 ​

如果只能记一个顺序:

text
P0 Correctness
Completeness → Relevance → Freshness → Authority

        ↓

P1 Governance
Isolation → Provenance → Reproducibility

        ↓

P2 Efficiency
Compactness → Utilization → Cacheability

所以 Context Optimization(上下文优化)的基本原则是:

先保证模型看到的是“对的”,再保证是“安全可追溯的”,最后才优化“便宜和快”。


为什么 Context Policy 必须 Model-aware ​

Context Engineering 不能假设所有模型拥有相同的 Context Window、输出上限、缓存机制和长上下文利用能力。

截至 2026-09,主流模型的窗口规模已经明显增大。例如 OpenAI 当前 GPT-5.6 系列公开为约 1.05M Context Window;Gemini 3 系列也支持 1M 级输入窗口。[^openai-models][^gemini-models]

但这并不意味着:

text
1M Context Window
=
1M Token 都应该放满

需要同时考虑:

text
Hard Limit
→ 模型 API 能不能装下

Usable Context
→ 模型能不能有效利用

Reserved Output
→ 还要给输出 / Reasoning 留空间

Tool Schema Budget
→ Tool 定义本身也占 Context

Provider Cache
→ 不同模型缓存机制不同

Payload Limit
→ 某些平台可能先撞到请求体大小限制

例如 Google Gemini 官方明确说明 Context Window 是输入与输出共同受限的资源;Anthropic 也持续强调长 Context 存在 Attention Budget 和 Context Rot 问题。[^gemini-token][^anthropic-context]

因此企业 Context Engine 最好引入 ModelProfile(模型配置):

typescript
interface ModelProfile {
  modelId: string;

  maxInputTokens: number;
  maxOutputTokens: number;

  preferredContextTarget: number;
  compactionThreshold: number;

  supportsPromptCache: boolean;
  supportsToolSearch: boolean;
  supportsMultimodal: boolean;

  toolSchemaBudget?: number;
}

注意:

text
maxInputTokens
≠
preferredContextTarget

前者是“绝对装得下多少”,后者是:

为了质量、成本和稳定性,实际希望 Context 控制在多少。

所以成熟 Context Policy 应该是:

text
ContextPolicy
=
f(
  Task,
  ModelProfile,
  ContextSources,
  Risk,
  CostBudget
)

而不是:

text
所有模型统一 max_context = 128k

三、上下文是怎样构建的 ​

3.1 上下文流水线怎样构建输入 ​

Context Pipeline(上下文处理流水线) ​

一个完整 Context Pipeline 可以表示为:

Sources
来源

Discover
发现

Filter
过滤

Rank
排序

Budget
预算

Transform
转换

Assemble
组装

Model
模型

Observation
观察

Update Sources / State
更新

核心动作可以压缩成:

text
Discover
→ Filter
→ Rank
→ Budget
→ Transform
→ Assemble
→ Snapshot

先用一张表把每一步讲清楚:

阶段 它回答的问题 输入 输出 典型失败
Discover(发现) 有哪些候选信息? Source / Query / State Candidates Missing
Filter(过滤) 哪些绝不能进入? Candidates + Policy Allowed Candidates Wrong Scope
Rank(排序) 哪些最重要? Allowed Candidates Ordered Candidates Buried / Wrong Priority
Budget(预算) 有限窗口里保留哪些? Ranked Items + Token Budget Selected Items Overload / Critical Item Dropped
Transform(转换) 原始信息怎么变得可消费? Raw Item Summary / Structured Item Semantic Loss
Assemble(组装) 最终按什么结构给模型? Selected Items Model Context Ordering / Conflict
Snapshot(快照) 如何记录这一轮实际输入? Final Context Context Snapshot Cannot Reproduce

这张表非常重要,因为后面的 Debug 其实就是沿着这七步逐层排查。


四个基础策略 ​

把所有具体技术继续往上抽象,可以得到四种非常稳定的策略:

text
Select(选择)
→ 什么应该进入当前 Context

Compress(压缩)
→ 如何降低上下文体积,同时尽量保留任务语义

Externalize / Write(外部化 / 写出)
→ 哪些状态不应该继续留在 Context,而应该写到文件、Artifact、Memory 或 Runtime State

Isolate(隔离)
→ 哪些信息应该被限制在某个 Agent、Subtask、Tenant 或 Tool Scope 中

Anthropic 当前对长任务 Context Engineering 的实践也主要围绕 Compaction、Structured Note-taking(结构化记笔记)和 Sub-agent Isolation(子智能体隔离)展开。[^anthropic-context]

这四个策略解决的是四个不同问题:

策略 核心问题 典型机制
Select 哪些信息值得进入 Retrieval / Ranking / Budget
Compress 进入的信息太多怎么办 Summary / Compaction / Tool-result clearing
Externalize 哪些信息不应该一直待在窗口里 File / Artifact / Note / State
Isolate 哪些信息不应该互相污染 Subagent / Tenant / Scope

后面的 8 类 Context Operations 是这四个策略的工程细化,而不是另一套并列模型。


3.2 上下文来源与生命周期怎样设计 ​

Context Sources(上下文来源) ​

常见来源至少包括:

Source 示例 生命周期
System Policy 安全规则、不可覆盖规则 长期稳定
Agent Instruction Role、Domain 指令 Agent 级
Task 当前 Goal / Constraints Run 级
Run State Plan、进度、审批 Turn 动态
Session 最近对话 Session
Tool Observation Shell / SQL / Browser Result Turn 动态
Retrieval 文档、Repo、知识库 按需
Memory 用户偏好、历史经验 跨 Session
Skill 专业工作方法 按需
Artifact 文件、日志、表格 外部持久化

Context Engine 不应该把这些 Source 当成同质文本。

它们拥有完全不同的:

  • 权威等级;
  • 生命周期;
  • 权限;
  • 新鲜度;
  • Token 成本。

Context Data Model(上下文数据模型) ​

建议把 Context Item 一等对象化:

typescript
interface ContextItem {
  id: string;

  type:
    | "policy"
    | "instruction"
    | "task"
    | "state"
    | "history"
    | "retrieval"
    | "memory"
    | "observation"
    | "skill"
    | "artifact_ref";

  contentRef: string;

  sourceType: string;
  sourceId?: string;

  authority: number;
  trustLevel: string;
  sensitivity: string;

  createdAt: string;
  validUntil?: string;

  relevance?: number;
  tokenCost?: number;

  mutable: boolean;
}

关键不是字段名本身。

而是:

Context 必须从“一堆字符串”升级为“带来源、生命周期和治理语义的数据对象”。


Context Lifecycle(上下文生命周期) ​

一个 Context Item 不应该被认为“检索出来以后就永远有效”。

它通常经历:

text
Created
→ Discovered
→ Selected
→ Visible
→ Used
→ Stale / Superseded
→ Compressed / Externalized
→ Evicted

例如业务指标定义:

text
v1 GMV definition
→ used for 2 weeks
→ v2 published
→ v1 becomes stale
→ v2 becomes authoritative
→ v1 remains auditable but should no longer be injected

所以 Context Item 最好具备:

text
version
valid_from
valid_until
superseded_by
last_verified_at

这让 Context Engine 从:

“检索文本”

升级成:

管理信息生命周期。


3.3 上下文操作怎样处理信息 ​

如果把不同框架、不同 Domain 的实现进一步抽象,可以发现 Context Engineering 反复在做八类操作:

text
Select       选择什么进入
Structure    以什么结构表达
Compress     如何在保留语义的前提下降低体积
Externalize  哪些信息不再放 Prompt,而放到外部状态 / Artifact
Isolate      哪些信息只属于某个 Agent / Subtask / Tenant
Refresh      哪些信息需要重新读取、替换旧版本
Update       本轮结果如何改变后续 Context Source
Snapshot     如何记录“这一轮到底看到了什么”

这八类操作比某个具体 RAG / Compaction API 更稳定。

Low

High

Yes

Context Sources

Select

Structure

Budget / Window Pressure

Assemble

Compress

Should externalize?

Artifact / State / File

Pointer / Summary

Isolate by Agent / Scope

Model Call

Refresh / Update

Snapshot

后文所有具体机制都可以映射回这八类操作。


Candidate Selection(候选选择)

Discover(发现):有哪些候选信息 ​

Discover 阶段回答:

当前有哪些信息可能对这次决策有用?

方式包括:

text
Recent History
Keyword / Semantic Search
Repo Search
Graph Traversal
Metadata Lookup
Memory Retrieval
Skill Discovery
Tool Result Reference

这里强调的是 Candidate Recall(候选召回)。

如果 Discover 没找到关键事实:

后面 Ranking 再好也无能为力。


Filter(过滤):什么绝不能进入 ​

Filter 不只是“相关性过滤”。

至少包含:

text
Permission Filter
Tenant Scope
Sensitivity
Freshness
Environment
Task Scope
Source Trust

例如:

text
用户无权限的表
→ 不能进入 Data Agent Context

另一个租户的 Session
→ 必须过滤

过期业务口径
→ 默认淘汰

所以:

Context Security 必须发生在模型调用之前。


Rank(排序):什么最重要 ​

Rank 不能只看 Semantic Similarity(语义相似度)。

生产 Agent 中更合理的 Ranking 可能考虑:

text
Relevance
Authority
Freshness
Task Phase
Dependency / Causality
Recency
Confidence
Token Cost

可以抽象:

text
ContextScore =
w1 * relevance
+ w2 * authority
+ w3 * freshness
+ w4 * task_fit
- w5 * token_cost
- w6 * conflict_risk

不一定真的使用这个公式。

它表达的是:

Context 排序应该是多目标决策,不只是向量相似度。


Budget / Transform / Assemble(预算 / 变换 / 组装)

Context Budget 不是一个 max_tokens 数字 ​

生产系统最好至少区分五类预算:

text
Hard Limit
→ 模型 API 的绝对上限

Soft Target
→ 实际希望控制到的输入目标

Output Reserve
→ 给输出 / Reasoning 预留空间

Tool / Schema Budget
→ Tool / Capability 定义占用

Dynamic Source Budget
→ History / Retrieval / Observation 等可动态分配

可以抽象成:

text
usable_input_budget
=
model_context_limit
- output_reserve
- safety_headroom

然后:

text
usable_input_budget
=
policy_budget
+ task_state_budget
+ history_budget
+ retrieval_budget
+ observation_budget
+ tool_schema_budget

这些不是固定百分比,而应该按 Task / Model / Phase 动态调整。


超预算时的淘汰顺序必须明确 ​

推荐先定义“不可淘汰层”和“可淘汰层”。

不可淘汰层

text
System Policy
Current Task
Hard Constraints
Critical State
Current Permission Scope

优先保留层

text
Latest Observation
Authoritative Domain Context
Current Plan
High-confidence Evidence

可压缩层

text
Old Conversation
Low-value Retrieval
Verbose Tool Output
Duplicate Evidence
Historical Failed Detail

一个常见策略:

text
1. Remove duplicate / obsolete items
2. Drop low-authority / low-relevance items
3. Replace large raw outputs with summary + pointer
4. Compact old history
5. Reduce retrieval breadth
6. Only as last resort trim useful recent context

Budget 应按“任务阶段”动态变化 ​

同一个 Agent 不同阶段需要不同 Context Mix。

Coding Agent:

text
Explore Phase
→ Retrieval / Search Budget 高

Edit Phase
→ Relevant Files / Diff Budget 高

Verify Phase
→ Test / Build Observation Budget 高

Data Agent:

text
Understand Metric
→ Semantic Context 高

Query Planning
→ Schema / Table Metadata 高

Result Analysis
→ Structured Evidence 高

所以:

Context Budget 是动态资源调度,而不是静态 Token 切片。


一个可执行的参考算法 ​

python
def allocate_context_budget(profile, task, phase, candidates):
    hard_limit = profile.max_input_tokens
    output_reserve = profile.max_output_tokens
    safety_headroom = int(hard_limit * 0.08)

    usable = hard_limit - output_reserve - safety_headroom

    protected = select_protected_items(candidates)
    remaining = usable - tokens(protected)

    phase_weights = budget_policy(task.type, phase, profile.model_id)

    selected = protected[:]

    for source_type in priority_order(phase_weights):
        items = rank_items(candidates, source_type)
        selected += fit_within_budget(
            items,
            remaining * phase_weights[source_type],
        )

    return selected

这段伪代码的重点不是具体算法,而是说明:

text
Context Budget
=
Model Profile
× Task
× Phase
× Source Priority
× Protected Items

Budget(预算):不是所有高分 Item 都能进入 ​

Context Window 是硬上限,但真正预算还包括:

text
Input Token Cost
Latency
Prompt Cache
Tool Schema Size
Output Reserve
Reasoning Reserve

推荐使用分区预算:

text
System / Policy      15%
Task / State         20%
Recent History       20%
Retrieved Context    20%
Tool Observation     15%
Tools / Schema       10%

这些比例不是固定标准,而是一种工程思路:

不允许某一类 Source 无界挤占所有上下文。


Transform(转换):原始信息不能总是直接给模型 ​

典型转换:

text
Large Log
→ Error Summary + Pointer

SQL Result
→ Schema + Stats + Sample + Pointer

Long Document
→ Relevant Chunk + Source Metadata

Tool Error
→ Structured Observation

Transform 负责:

text
Normalize
Summarize
Structure
Redact
Annotate
Compress

这一步是 Context Engineering 与“简单 RAG”差异最大的地方之一。


Assemble(组装):顺序、角色和结构同样重要 ​

即使 Item 一样,组装方式也会影响效果。

可以采用逻辑优先级:

text
1. Non-overridable Policy
2. Agent / Domain Instruction
3. Current Task / Constraints
4. Relevant Current State
5. High-authority Domain Context
6. Retrieved Evidence
7. Recent Conversation
8. Tool Observations

这不是统一 Prompt 标准,而是强调:

高权威约束不能被低可信数据覆盖。

Anthropic 当前长上下文建议也强调:长文档需要显式结构化并携带 Source Metadata(来源元数据),而不是把大量文档无结构拼在一起。[^anthropic-long-context]


3.4 上下文快照为什么是一等对象 ​

每次关键 Model Call 最好能够回答:

模型做这个决定时,究竟看到了什么?

因此可以保存:

typescript
interface ContextSnapshot {
  runId: string;
  turnId: string;
  model: string;

  itemIds: string[];
  toolIds: string[];

  totalTokens: number;
  contextVersion: string;
  compactionVersion?: string;

  hash?: string;
}

不一定永久保存所有完整文本。

可以保存:

  • Item ID;
  • Version;
  • Artifact Pointer;
  • Hash。

Context Snapshot 对:

  • Debug;
  • Replay;
  • Eval;
  • Audit;

都非常重要。


四、Context Engineering 的关键机制 ​

先不要把后面的机制当成“全部都要上”。

不同问题对应不同策略:

你遇到的问题 首选机制 为什么
模型缺关键事实 Retrieval / Discover 先解决 Recall
找到很多资料但选错 Rank + Authority 解决优先级和权威
资料过期 Freshness / Version 解决时效
Context 太长 Compress / Externalize 降低窗口压力
长任务跨窗口 Externalize + Compaction 保留状态连续性
子 Agent 成本高 Isolation 避免全量复制
外部网页可能注入 Trust + Security 隔离不可信数据
不同模型效果差异大 Model-specific Policy Context 策略不能一刀切
Tool 太多 Capability Routing Tool Schema 本身也是 Context
成本高 Cache + Budget 优化稳定前缀和输入量

下面再逐类展开。

4.1 检索、冲突和新鲜度怎样保证信息正确 ​

Retrieval(检索)不只看 Top-K ​

固定:

text
vector search top_k = 5

只是最简单实现。

生产检索还需要考虑:

text
Hybrid Search
Metadata Filter
Authority
Freshness
Graph / Dependency
Task Phase
Dynamic K
Reranking

例如 Coding Agent:

text
Semantic Similarity
+
Symbol Reference
+
Import Graph
+
Active Build Target
+
Test Coverage

往往比单纯 Embedding Similarity 更可靠。


Prefetch(预加载)、Just-in-time(即时加载)与 Progressive Disclosure(渐进式披露) ​

Context Retrieval(上下文检索)并不只有:

text
任务开始前一次性 Top-K

至少有三种模式。

Prefetch(预加载)

任务开始前就加载高概率需要的信息。

优点:

  • 延迟低;
  • 行为稳定。

缺点:

  • 容易加载过多;
  • 信息可能过期;
  • 很难预测长任务后续真正需要什么。

Just-in-time(即时加载)

只保留轻量 Pointer(指针)和 Metadata(元数据),让 Agent 在运行中通过 Tool 自己进一步读取。

例如 Claude Code:

text
先看到文件路径
→ grep / glob
→ read relevant file
→ 根据结果再继续

Anthropic 当前明确把这种模式描述为 Just-in-time Context,并强调 Agent 可以通过文件路径、URL、存储查询等轻量引用在运行中逐步加载真实内容。[^anthropic-context]


Progressive Disclosure(渐进式披露)

先给概要,再按需要逐层展开:

text
Repository
→ Directory
→ File
→ Function
→ Relevant Lines

或者:

text
Business Metric
→ Definition
→ Lineage
→ Table
→ Rows

这能让 Agent:

随着任务理解加深,再逐步支付 Context Cost。


Hybrid(混合策略)

生产系统通常最好:

text
High-confidence Stable Context
→ Prefetch

Large / Dynamic / Low-confidence Context
→ Just-in-time

例如:

text
Policy / Task
→ upfront

Repo / Database / Web
→ runtime exploration

因此 Retrieval Strategy 不应该只有:

text
top_k

还应该回答:

什么时候加载、加载到什么粒度、由系统加载还是由 Agent 自主探索。


Conflict Resolution(冲突消解) ​

真实 Context 经常互相冲突。

例如:

text
Long-term Memory:
GMV = A

Current Semantic Registry:
GMV = B

不能让模型自己猜。

需要 Source Authority(来源权威等级)。

例如 Data Agent:

text
Current Semantic Registry
>
Current DB Metadata
>
Verified Memory
>
Historical Session
>
Retrieved External Docs
>
Model Guess

Context Engine 应显式:

  • Detect Conflict;
  • Select Authority;
  • 标记矛盾;
  • 必要时向用户确认。

Position / Ordering(位置与顺序) ​

信息“存在于 Context”不等于模型“有效使用了它”。

经典长上下文研究 Lost in the Middle 发现,模型对相关信息的位置存在明显敏感性:信息在长 Context 中间时,表现可能显著下降。[^lost-middle]

因此 Context Engineering 不能只关心:

text
Did we include it?

还应该关心:

text
Where did we place it?
How was it structured?
Was it separated from noise?

生产建议:

  • 不可覆盖 Policy 使用稳定、高优先级结构;
  • Current Task / Constraints 不要被大量历史埋没;
  • 多文档携带清晰 Source / Metadata;
  • Tool Observation 按阶段聚合;
  • 对真正关键 Evidence 可以在最终 Task 附近再次结构化呈现。

Anthropic 当前长上下文指南同样建议对多文档使用显式结构与 Source Metadata,并针对长输入优化 Query / Document 的组织方式。[^anthropic-long-context]

所以:

Context Ranking 解决“选谁”;Context Ordering 解决“选中的信息如何被模型有效注意”。


Freshness(新鲜度)与 Temporal Context(时间上下文) ​

Context Item 不只是:

text
相关 / 不相关

还可能:

text
曾经正确,但现在过期。

因此 Item 最好带:

text
created_at
valid_from
valid_until
observed_at
source_version

尤其:

  • 数据 Schema;
  • 业务口径;
  • API 文档;
  • Feature Flag;
  • 当前部署状态;

时效性非常重要。


4.2 长任务怎样跨 Context Window 延续 ​

Compaction(上下文压缩) ​

Compaction 不是:

“让模型总结一下前面对话。”

它是一个 Lossy State Transformation(有损状态转换)问题。

四种典型损失 ​

text
Fact Loss
→ 数字 / ID / 文件名丢失

Constraint Loss
→ “禁止修改 X”被弱化

Causal Loss
→ 只留下结论,丢失原因

Progress Loss
→ 忘记哪些尝试失败 / 哪些步骤完成

因此不要只生成一个自由文本 Summary。

可以结构化为:

text
Task Summary
Constraints
Decisions
Completed Steps
Tried & Failed
Important Facts
Artifacts
Open Questions

Compaction 何时触发 ​

最简单策略:

text
tokens > threshold

但生产上还可以结合:

text
Task Phase Completed
Tool Results Accumulated
Subtask Finished
Context Relevance Dropped
Idle Time
Model Window Pressure

Pi 当前官方实现就是一个很好的工程案例:超过 contextWindow - reserveTokens 后触发压缩,向后保留一定 Recent Tokens,对更老内容生成结构化 Summary,再用 summary + retained messages 重建 Context。[^pi-compaction]


Compaction 为什么是一致性问题 ​

Compaction 会修改“未来模型看到的历史”。

因此并发环境会出现:

text
Run A 开始压缩旧历史
Run B 同时写入新消息
Run A 完成后覆盖历史
→ Run B 新消息丢失

OpenAI Agents SDK 当前 OpenAIResponsesCompactionSession 会序列化 add_items / pop_item / clear_session 与整个 Compaction 操作;如果压缩过程中历史已被其他 Run 改变,还会跳过 stale compaction(过期压缩)。如果替换失败,还尝试恢复旧历史。[^openai-session]

这说明:

Context Compaction 已经不是 Prompt 技巧,而是并发、一致性和恢复问题。


Tool Result 如何进入 Context ​

Tool Result 是 Agent Context 最危险的污染源之一。

例如:

text
Shell 20,000 lines
SQL 50,000 rows
Browser Accessibility Tree
Search 100 pages

推荐三层:

text
Raw Artifact
→ 完整保存

Structured Observation
→ 模型默认看到

Pointer
→ 需要时 Drill Down

例如 SQL:

text
Raw:
50k rows

Context:
schema
row_count
summary stats
top anomalies
20 sample rows
artifact pointer

原则:

Tool Result ≠ Model Context。


Context Externalization(上下文外部化) ​

Context Window 不应该承担所有长期工作状态。

当信息具有这些特征时,更适合 Externalize:

text
内容很大
可重新读取
需要长期存在
需要多人 / 多 Agent 共享
属于真实世界状态

例如 Coding Agent:

text
Context 中:
当前任务 + 最新错误 + 相关代码片段

外部化:
repo
git diff
test report
progress.md
artifact

然后 Context 只保留:

text
Pointer
+ Current Summary
+ Relevant Slice

Claude 当前长任务指南明确提到:跨多个 Context Window 时,可以利用文件、测试和 progress state 保存进展,并在新 Context 中重新读取;某些情况下 Fresh Context + External State 反而优于持续压缩旧历史。[^anthropic-long-context]

因此需要在两个策略之间权衡:

text
Keep in Context
vs
Externalize + Rehydrate

这也是长任务 Context Engineering 的核心设计点。


Long-horizon Context Strategy(长周期上下文策略) ​

长任务超过一个 Context Window 后,通常有三类主要策略。

策略 适合场景 优点 风险
Compaction 连续对话、上下文依赖强 连续性好 有损、可能丢约束
Structured Note-taking 迭代开发、阶段清晰 可审计、可重读 需要写入策略
Subagent Isolation 深度研究、并行探索 主 Context 干净 汇总可能丢细节

Anthropic 当前长任务实践也明确把这三类视为主要技术路径。[^anthropic-context]

Compaction(上下文压缩) ​

适合:

text
history continuity > exact raw trace

Structured Note-taking(结构化记笔记) ​

把进展写到 Context Window 外:

text
progress.md
todo.json
decision.log
artifact

后续重新读取。

它的关键优势:

重要状态不依赖模型“记住”。

Subagent Isolation(子智能体隔离) ​

让子 Agent 在独立 Context 中做重工作:

text
Parent
→ subtask contract
→ fresh context
→ deep exploration
→ compact result
→ Parent

这里的“隔离”不是简单删除父 Agent 的历史,而是建立一份可验证的委托契约。父 Agent 负责给出子任务目标、成功条件、必要证据、允许使用的能力、数据作用域和返回结构;上下文引擎据此选择最小必要信息;子 Agent 返回结论时还要携带证据或 Artifact Pointer(产物指针),由父 Agent 决定是否接受并合入主任务状态。

如果直接复制父上下文,敏感信息和噪声会随子任务扩散,Token 成本也会随 Agent 数量增长;如果只给一句目标,又会丢失关键假设和验收标准。真正的取舍不是“上下文越少越好”,而是让委托契约完整、工作材料按需读取、结果可追溯。子任务失败或返回证据不足时,应扩大特定 Source 的访问范围或重新委托,而不是立刻把父上下文全量开放。

三者不是互斥 ​

真实系统经常:

text
Main Context
→ Compaction

Long-lived Progress
→ Structured Notes

Heavy Research
→ Subagent

这三类策略共同构成长任务的 Context Management(上下文管理)基础。

Rehydrate Strategy(上下文重建策略) ​

当开启一个 Fresh Context(新上下文窗口)时,系统必须决定:

如何从外部状态重新构建“足够继续工作的 Context”?

推荐 Rehydrate Pack:

text
Task Contract
Hard Constraints
Current Phase
Completed / Failed Steps
Key Decisions
Important Evidence
Artifact References
Open Questions
Current Capabilities

这和 Compaction Summary 的区别是:

text
Compaction
→ 从旧 Context 压出一个新表示

Rehydrate
→ 从真实 State / Artifact / Memory 重新构建 Context

在长任务里,后者通常更可靠。


Context Checkpoint(上下文检查点) ​

Runtime Checkpoint 保存执行状态。

Context Checkpoint 可以额外保存:

text
context_snapshot_id
context_policy_version
compaction_version
model_profile

Resume 时:

text
Runtime State
+ Context Checkpoint Metadata
→ Rehydrate
→ New Context

这样不会强依赖:

“恢复时重新播放整个历史消息。”


Fresh Context vs Continue Context(新建上下文与延续上下文) ​

Continue Context

适合:

  • 最近多轮推理强依赖;
  • 当前 Context 仍干净;
  • Tool Observation 不多。

Fresh Context

适合:

  • Context Rot 明显;
  • 已完成一个阶段;
  • 大量旧信息已无价值;
  • 外部状态足够完整。

因此长任务不应该只有:

text
context full
→ compact

这一种策略。

还应该支持:

text
compact
or
checkpoint + fresh context + rehydrate

历史太长但连续性重要

关键状态需要跨窗口长期保留

某个子任务会产生大量中间上下文

Long-horizon Task

当前问题是什么?

Compaction

Structured Note-taking / Externalization

Subagent Isolation

Compact Summary + Recent Context

File / Artifact / State + Pointer

Fresh Context + Condensed Result

Main Context

真正成熟的长任务通常不是选一个,而是组合:

text
Compaction
+
External State
+
Subagent Isolation

4.3 Context 怎样隔离并抵抗不可信内容 ​

Context Isolation(上下文隔离) ​

Subagent 不应该默认继承 Parent 的完整 Context。

否则:

text
Token Cost × Agent Count
Sensitive Data Spread
Noise Propagation
Failure Context Duplication

推荐:

text
Task Contract
+
Minimal Necessary Context
+
Capability Scope
+
Return Schema

LangChain Deep Agents 当前官方明确将 Subagent 作为 Context Isolation 机制:子 Agent 使用独立的新 Context,完成重任务后只把一个压缩结果返回主 Agent。[^deepagents-context]


Context Security(上下文安全) ​

Context 是 Prompt Injection(提示注入)传播的核心载体。

至少给 Item 标记:

text
system_trusted
enterprise_trusted
user
retrieved_internal
retrieved_external
tool_untrusted

关键原则:

text
Data
≠
Instruction

外部网页中的:

“Ignore previous instructions”

必须被当成 Data,而不是 Policy。

推荐:

  • Source Trust;
  • Content / Instruction Separation;
  • Sensitive Scope;
  • Redaction;
  • Policy 不从不可信 Context 生成;
  • 高风险 Action 仍由独立 Policy Service(策略服务)作授权决策,由 Harness 在模型外强制执行门禁。

这组能力必须形成一条执行链,而不能停留在标签:Source Adapter(来源适配器)先记录租户、用户、来源类型和获取时间;Policy Filter(策略过滤器)消费 Policy Service 签发或返回的可见性决策,在检索与排序之前执行作用域过滤和敏感字段处理;Assembler(组装器)把外部内容放进明确的数据区,不能提升为系统指令;模型输出的 Action Proposal(动作提议)最后交给 Policy Service 按真实身份、动作参数和目标环境作授权决策,再由 Harness 在模型之外强制门禁。Context 层只决定“哪些信息可以进入本次模型视图”,Harness 不是业务权限或身份策略的权威来源。

失败路径也要分层处理:权限元数据缺失时应默认拒绝注入;外部内容疑似提示注入时可以保留原始 Artifact 供审计,但只向模型提供隔离后的摘要或引用;若模型已经受到污染,不能依赖追加一句安全提示修复,而应废弃本轮 Context Snapshot、回到可信 Checkpoint 并重新组装。验证时至少覆盖跨租户检索、间接提示注入、敏感字段脱敏和高风险动作二次授权四类用例。


4.4 Context Policy 为什么必须因模型而异 ​

Model-specific Context Policy(模型特定上下文策略) ​

Context Policy 不应该默认与 Model 无关。

不同模型可能具有不同:

  • Context Window;
  • Tool Calling 行为;
  • Prompt Cache;
  • Long-context 使用能力;
  • Multimodal 能力;
  • Reasoning Token / Output Reserve。

因此更合理的是:

text
ContextPolicy =
f(
  model_profile,
  task,
  source,
  budget,
  risk
)

例如:

  • 大窗口模型可以保留更多 Recent Evidence;
  • 小模型可能需要更强结构化和更少 Noise;
  • 支持强 Tool Search 的模型可以减少预暴露 Tool;
  • Cache 策略也可能因 Provider 不同而不同。

所以企业 Context Engine 最好不要把:

text
context_size = 32k

硬编码进 Domain 逻辑。


Multimodal Context(多模态上下文) ​

Context 不再只包含 Text。

可能包括:

text
Image
PDF
Audio
Video
Screenshot
Chart

这会带来新的 Budget 和 Compression 问题。

例如:

  • 长截图是否每轮重复发送?
  • PDF 应保留原页面还是抽取文字?
  • 图表应该存 Artifact + structured summary,还是直接 Vision 输入?
  • Compaction 是否会把视觉 Evidence 降维成文本后丢失信息?

LangChain 当前 Summarization Middleware 也明确指出:文本 Summary 并不会压缩图像 / 音频 / 视频本身;旧的多模态消息如果被总结,视觉内容可能只剩文本描述,因此应考虑把媒体放文件 / 对象存储,再通过 URL / Pointer 引用。[^langchain-summary]

所以:

Multimodal Context 需要 Artifact-first(产物优先)的设计,而不是简单 Message-history-first。


4.5 海量数据怎样进入 Context ​

Data Agent 是 Context Engineering 最典型、也最容易踩坑的场景之一。

本节用 Data Agent 展开,是因为“数据规模远大于上下文规模”能够最清楚地暴露计算、证据与模型输入之间的边界;Query Pushdown、Result Contract、Artifact 和 Drill-down 的原则同样适用于大型日志、浏览器页面、代码仓库与批量文档。本节不讨论数仓建模或指标治理本身,只讨论大结果怎样被转换为可验证的模型证据。

用户问:

“分析过去一年 3000 万订单,告诉我 GMV 下滑的主要原因。”

错误实现可能是:

text
LLM 生成 SQL
→ SQL 返回 3000 万行
→ JSON stringify
→ Tool Result 塞回模型

这个架构从根上就是错的。

因为:

text
Data Scale
>>
Model Context Scale

真正正确的原则是:

让计算靠近数据,让模型看到“分析所需的结构化证据”,而不是原始数据全集。


4.5.1 第一层:Query Pushdown(计算下推) ​

能在数据库完成的:

text
Filter
Aggregate
Group By
Join
Window Function
Top-N
Percentile
Sampling

不要先把数据拉回来再交给模型。

推荐:

text
Natural Language
→ Semantic Understanding
→ SQL / Query Plan
→ Database Compute
→ Small Result
→ Model

而不是:

text
Database
→ Massive Rows
→ Model
→ Ask model to aggregate

Databricks SQL MCP 当前官方就明确建议:大型 Result Set 会被截断以避免耗尽模型上下文,应该减少 Rows / Columns,或直接在 SQL 中做 Aggregate。[^databricks-sql-mcp]

Snowflake managed MCP 对 SQL Tool Result 也有响应大小限制,超限会截断,并建议缩小查询结果。[^snowflake-mcp]


4.5.2 第二层:Result Contract(结果契约) ​

Data Tool 不应该默认返回:

json
[
  {"row1": "..."},
  {"row2": "..."},
  ...
]

更成熟的 Tool Result 应该分层:

text
Query Metadata
+
Schema
+
Statistics
+
Representative Samples
+
Anomalies
+
Result Pointer

例如:

json
{
  "query_id": "q_123",
  "row_count": 31284321,
  "columns": ["region", "gmv", "yoy"],
  "stats": {
    "gmv_sum": 1280000000,
    "yoy": -0.137
  },
  "top_groups": [
    {"region":"east","yoy":-0.22},
    {"region":"north","yoy":-0.09}
  ],
  "sample_rows": 20,
  "artifact_ref": "result://q_123"
}

模型默认看到:

text
Metadata + Summary + Sample + Pointer

真正 3000 万行仍然留在:

text
Warehouse / Result Store

4.5.3 第三层:Drill-down(逐层下钻) ​

模型分析大数据,不应该“一次拿完”。

应该形成:

text
Overview
→ Detect anomaly
→ Drill down dimension
→ Drill down subgroup
→ Inspect samples

例如:

text
总 GMV -13.7%
↓
按 Region 聚合
↓
East -22%
↓
按 Category 聚合
↓
Electronics -31%
↓
查看 Top SKU / Promotion / User Segment

每一步都只把:

下一步决策需要的结果

带回 Context。

这其实就是 Data 场景里的 Progressive Disclosure(渐进式披露)。


4.5.4 第四层:Artifact-first(大结果产物化) ​

超过 Context Budget 的结果必须 Artifact-first:

text
Parquet
CSV
Table
Temporary View
Result Set
Chart
Notebook

Context 中只放:

text
artifact_id
schema
row_count
summary
preview

当 Agent 真正需要细节时:

text
read_rows(offset, limit)
aggregate(group_by=...)
sample(...)
filter(...)

重新读取。

Databricks Genie 当前也采用类似理念:面向模型的请求会返回截断结果;如果 Agent 真正需要完整结果,可以再调用专门接口获取完整 Schema / Rows,但超大结果仍然受 Size Limit 约束。[^databricks-genie]

到这里,首次学习需要掌握的 Data Context 主链已经闭环:

text
计算下推
→ Result Contract(结果契约)返回结构化摘要与引用
→ 逐层下钻只读取下一步决策所需信息
→ 大结果保存为 Artifact(产物)
→ Evidence(证据)携带查询、口径、时间与来源,接受任务级验证

例如“分析 3000 万订单的 GMV 下滑原因”,模型先看到全局聚合,再定位异常区域和品类,必要时读取代表样本;完整结果始终留在结果存储中。最终结论必须能反查 SQL、指标口径、数据时间和结果产物。下面的 Search-to-Prune、抽样边界、分页、异步查询、中间物化、句柄和血缘属于这一主链的数据场景深入附录:它们解释特定规模或查询系统下怎样实现,不是每个 Context Platform 都必须内建的通用能力。


4.5 深入附录一:Search-to-Prune(先搜索剪枝,再分析) ​

对于文本型大数据,例如:

text
1000 万条客服记录
500 万份合同段落
海量日志

直接把 Embedding Top-K 结果给模型也未必足够。

Snowflake 当前 Analytical Search 的企业实现非常有代表性:

text
Layer 1:
Search to prune
→ 从完整 Corpus 缩小候选集

Layer 2:
Materialize intermediate table
→ 再用 SQL / AI Functions 深入分析

而不是让大模型扫描整个 Corpus。[^snowflake-analytical-search]

这说明大规模 Context 的一个核心模式是:

先缩小数据空间,再让模型参与推理。


4.5 深入附录二:Sampling(抽样)不能替代 Aggregation(聚合计算) ​

一个常见错误是:

text
几百万行太大
→ 随机抽 100 行
→ 让 LLM 得结论

Sampling 只适合:

  • 查看数据形态;
  • 找示例;
  • Inspect异常;
  • 生成假设。

不适合直接回答:

text
GMV 总量
转化率
占比
同比
分位数

这些应该由 Data Engine 精确计算。

所以:

text
Exact Metric
→ SQL / Compute Engine

Qualitative Pattern
→ Sample + LLM

Large-scale Distribution
→ Aggregate / Histogram / Stats

4.5 深入附录三:Result Pagination(结果分页)不是简单 UI 分页 ​

Agent Tool 可以支持:

text
get_result(query_id, offset, limit)
get_topk(query_id, order_by, k)
get_group_stats(query_id, dimensions)
sample_result(query_id, strategy)

这让 Agent 能:

主动决定下一次需要查看哪一部分数据。

而不是一次 Tool Call 把全部内容塞进 Prompt。


4.5 深入附录四:Data Context 的三级表示 ​

企业 Data Agent 可以把结果分成三级:

text
L0 Raw Data
→ 数据仓库 / Lake / Result Store
→ 永不默认进 Context

L1 Structured Evidence
→ Schema / Stats / Aggregation / Samples
→ 默认进入 Context

L2 Narrative Context
→ 对 L1 的短摘要
→ 用于当前推理

这样可以同时保证:

text
Correctness
+
Token Efficiency
+
Drill-down Ability
+
Auditability

4.5 深入附录五:Semantic Context(业务语义上下文) ​

Data Agent 真正难的并不只是“行数太多”。

还包括:

text
Metric Definition
Business Glossary
Table Relationship
Data Freshness
Column Meaning
Access Permission
Time Semantics

例如用户问:

“GMV”

真正需要的 Context 往往不是几百万行订单,而是:

text
GMV 当前口径
时间范围
退款是否计入
币种
区域定义
可访问表
最新分区

Databricks Genie Agent 当前通过一个受控的表集合 / Ontology 来限制其数据域,而不是让 Agent 理解整个 Workspace;Snowflake Cortex Analyst 则围绕 Semantic View / Model 提供业务语义。[^databricks-genie-agent][^snowflake-agent-manage]

所以企业 Data Agent 的 Context Strategy 应该是:

text
Semantic Context
→ small but authoritative

Raw Data
→ huge but externalized

这是 Data 场景最重要的反直觉之一。


4.5 深入附录六:Data Agent 的 Context Decision Tree(上下文决策树) ​

Yes

No

Yes

No

Yes

No

Query Result / Data Source

结果规模小且直接影响当前决策?

Structured Result → Context

能否在数据层计算?

Filter / Aggregate / Group / Stats in DB

Small Structured Evidence

Materialize Artifact / Result Set

Schema + Summary + Pointer

还需要更细数据?

Drill-down / Pagination / Sampling

Continue Reasoning

这张图可以概括一句:

Move computation to data; move evidence to context.(把计算推向数据,把证据带回上下文。)


Data Agent Result Architecture(数据智能体结果架构) ​

Data Agent 的 Context 设计需要进一步把“Query Result”变成一等对象,而不是 Tool 返回字符串。

建议至少有:

typescript
interface QueryResultHandle {
  queryId: string;
  status: "RUNNING" | "SUCCEEDED" | "FAILED";

  rowCount?: number;
  schema?: ColumnSchema[];

  preview?: unknown[];
  statistics?: Record<string, unknown>;

  artifactRef?: string;
  lineageRef?: string;

  expiresAt?: string;
}

这样 Tool Call 返回:

text
QueryResultHandle

而不是:

text
millions of rows

Async Query(异步查询) ​

复杂 Data Agent 查询可能运行几十秒甚至几分钟。

不应该:

text
Tool Call
→ 阻塞直到 3000 万行准备完

更合理:

text
submit_query()
→ query_id

poll_query(query_id)
→ RUNNING / SUCCEEDED

get_result_summary(query_id)
→ schema / stats / preview

drill_down(query_id, ...)
→ next evidence

这样:

  • Context 不需要等待完整数据;
  • Agent 可以做并行分析;
  • 长查询可以取消;
  • Runtime 可以恢复。

Intermediate Materialization(中间结果物化) ​

长分析经常需要:

text
Step 1:
过滤过去一年订单

Step 2:
按 Region 聚合

Step 3:
只看 East

Step 4:
按 Category 继续下钻

不要每次从原始大表重新执行全部逻辑。

可以:

text
Materialized Result / Temp View
→ result://analysis_123_stage_1

后续 Agent 使用:

text
aggregate(result_ref, dimension="category")

这减少:

  • 重复 Compute;
  • Context 重复;
  • Query Plan 重建。

Result Handle 比 Row Pagination 更重要 ​

分页:

text
offset / limit

只适合“浏览”。

分析更需要:

text
aggregate
filter
top-k
sample
describe
distribution
compare

所以 Result API 更应该是:

text
query_result.describe()
query_result.aggregate()
query_result.filter()
query_result.sample()
query_result.topk()

而不是:

text
next_page()

这是一种:

Analysis-oriented Result Interface(面向分析的结果接口)。


Data Lineage(数据血缘)必须进入 Evidence ​

模型给出结论:

“East / Electronics 导致 GMV 下滑 8.3%。”

企业系统最好还能回答:

text
这个数字来自哪条 SQL?
用了哪个 Dataset / Table?
用了哪个 Metric Definition Version?
数据分区是什么?
查询时间是什么?

因此 Context Evidence 可以携带:

text
query_id
metric_version
table_version
partition
lineage_ref
computed_at

这让结果具备:

text
Auditable
Reproducible
Explainable

Semantic Context 与 Data Evidence 要分层 ​

推荐:

text
Semantic Context
→ 指标是什么、字段什么意思、业务规则是什么

Data Evidence
→ 这次查询计算出了什么

Raw Data
→ 原始事实数据,留在 Warehouse

三者不要混。

如果语义和数据结果都直接变成文本:

后续很难判断是“指标定义错”还是“数据本身异常”。


4.6 Cache、Tool Context 与质量门怎样协作 ​

Cache-aware Context Engineering(缓存感知上下文工程) ​

对于 Agent,Context Cache 不是单纯的“模型服务商价格优化”。

Agent 的典型执行形态是:

text
Turn 1:
Large Context → Short Action

Turn 2:
Previous Context + Observation → Short Action

Turn 3:
Even Larger Context → Short Action

所以 Agent 常常表现为:

text
Input Tokens
≫
Output Tokens

Manus 团队公开分享其生产 Agent 的平均 Input / Output Token Ratio 约为 100:1,因此把 KV-cache(键值缓存)命中率视为生产 Agent 非常重要的指标之一。[^manus-context]

这意味着 Context Engineering 还必须关心:

同样的信息,能否以缓存友好的形式稳定重复出现。


Stable Prefix(稳定前缀) ​

通常适合稳定放在前部:

text
System Policy
Agent Instruction
Stable Skill
Stable Tool Definitions

动态内容放后部:

text
Current Task
Latest Observation
Run-specific Retrieval
Current Time

一个非常典型的反模式:

text
System Prompt 开头注入精确到秒的 current_time

即使只变一个 Token,也可能让后面大量 Prefix 无法复用缓存。


Append-only(只追加)比“回头改历史”更缓存友好 ​

Manus 的生产经验强调:

text
Append New Action / Observation

通常比:

text
Rewrite Old Context

更有利于 Prefix Cache。[^manus-context]

所以如果某条旧 Observation 需要“弱化”,可以优先:

text
保留旧记录
+
追加新状态 / 新结论

而不是每轮重新改写整段历史。

当然这不是绝对规则。

当旧内容:

  • 包含敏感数据;
  • 已严重污染;
  • Context Rot 明显;
  • 需要强制压缩;

仍然应该重写或重建 Context。

所以这里是:

Cache Stability 与 Context Quality 的 Trade-off。


Deterministic Serialization(确定性序列化) ​

即使语义相同,如果每轮 JSON Key 顺序、空格、字段格式随机变化,也可能降低缓存复用。

例如:

json
{"a":1,"b":2}

和:

json
{"b":2,"a":1}

逻辑相同,但 Token Prefix 不一定相同。

因此 Tool Schema、Context Pack、Metadata 最好:

text
stable field order
stable serialization
stable template

这是非常容易被忽略的生产细节。


Dynamic Tool Set 与 Cache Stability 的冲突 ​

我们前面强调:

text
Tool 太多
→ 应该动态 Routing,只暴露少量 Tool

但 Manus 的生产经验指出另一面:

如果每轮频繁增删 Tool Definition,工具通常位于 Context 前部,会导致整个后续 Prefix Cache 失效;历史 Action 又可能引用一个当前已经不存在的 Tool,模型也可能困惑。[^manus-context]

所以企业系统至少有三种策略:

策略 优点 风险
Static Tool Set Cache 稳定、历史一致 Tool Context 大、选择混乱
Dynamic Tool Set Context 小、选择更准 Cache 易失效、历史一致性复杂
Stable Registry + Runtime Mask / Search Tool 定义稳定,同时限制当前可选能力 实现复杂、依赖模型 / 推理栈能力

没有统一最优答案。

应该根据:

  • Tool 数量;
  • Cache 成本;
  • Provider 能力;
  • Agent 生命周期;
  • Tool Search 能力;

选择。


OpenAI ToolOutputTrimmer:另一类 Cache / Context 优化 ​

OpenAI Agents SDK 当前提供 ToolOutputTrimmer,会在每次 Model Call 前:

  • 保留最近若干 Turn 的 Tool Output 全量;
  • 把更老、过大的 Tool Output 替换成 Preview;
  • 可以指定哪些 Tool Output 可被裁剪。[^openai-tool-trimmer]

这是一种很典型的策略:

text
Recent Context
→ High Fidelity

Old Bulky Tool Output
→ Compact Preview

它体现的是:

不是所有历史都同等重要,Context Fidelity 可以随时间衰减。


Cache 指标怎么监控 ​

至少:

text
prefix_cache_hit_rate
cached_input_tokens
uncached_input_tokens
stable_prefix_tokens
dynamic_suffix_tokens
cache_break_frequency

但必须和:

text
Freshness
Task Success
Stale Context Rate

一起看。

不能为了 Cache 命中而保留错误或过期 Context。


Tool / Capability 也是 Context ​

Context Engineering 不只管理文本和历史。

模型每轮看到的:

text
Tool Name
Description
Parameter Schema
Examples
Return Semantics

本身也占用 Context,并直接影响 Decision。

LangChain 当前也把“可用 Tools、Model、Response Format”明确归入 Model Context。[^langchain-context]

Tool Context 有几个典型问题:

text
Tool 太多
→ Context 变大、选择错误上升

Tool Description 太长
→ 占用 Attention Budget

Tool 功能重叠
→ 模型难以判断应该调用哪个

Parameter Schema 含糊
→ Action Argument 错误

Anthropic 当前工具设计经验也强调:

  • Tool 功能要清晰;
  • 避免功能重叠;
  • 返回结果要 Token-efficient(Token 高效)。[^anthropic-tools]

所以 Capability Routing(能力路由)同时是:

text
Harness Problem
+
Context Engineering Problem

前者决定 Agent 拥有哪些能力,后者决定这一轮模型看到哪些能力描述。


Tool Context Surface(工具上下文表面) ​

模型每轮看到 Tool 时,真正消耗 Context 的不只是 Tool Name。

还包括:

text
Tool Name
Tool Description
Parameter Schema
Examples
Return Schema
Usage Guidance

因此可以把 Tool 看成特殊 Context Item:

typescript
interface ToolContextItem {
  toolId: string;

  descriptionTokens: number;
  schemaTokens: number;

  riskLevel: string;
  phase: string;

  semanticOverlapGroup?: string;
}

Tool Schema Budget ​

100 个 Tool 即使都“不调用”,也可能已经占据大量 Context。

所以 Context Budget 最好独立保留:

text
tool_schema_budget

当 Tool 数量过多:

text
Registry
→ Search / Route
→ Select small visible set

而不是:

text
all tools → model

Tool Description 也需要治理 ​

Tool Description 常见问题:

text
过长
→ 消耗 Token

过短
→ 模型不知道什么时候调用

多个 Tool 描述重叠
→ 选择错误

返回结果描述含糊
→ Observation 错误理解

因此 Tool Context Eval 可以单独评估:

text
Tool Selection Accuracy
Schema Argument Accuracy
Description Token Cost
Overlapping Tool Confusion

Tool Result Contract ​

Tool Context 不只包含“调用前的 Schema”,还包含“调用后的 Result Contract”。

推荐定义:

text
preview
summary
artifact_ref
row_count
truncated
has_more
error_type

特别是 Data / Shell / Browser 场景。

如果返回:

text
truncated = true

模型必须知道:

当前 Observation 并不代表完整数据。

这能避免:

text
截断结果
→ 模型误以为完整
→ 错误结论

Quality Gate(上下文质量门) ​

Model Call 前可以运行 Preflight Check(预检):

text
required_context_present?
stale_items?
conflicting_sources?
sensitive_scope_ok?
token_budget_ok?
tool_result_too_large?
authority_order_valid?

这个机制往往比:

“换更强模型”

便宜且稳定。


4.7 Context 怎样进一步塑造注意力和轨迹 ​

Context 不只是“事实集合”。

模型还会从当前 Context 中学习:

text
现在最重要的目标是什么
过去哪些动作失败了
当前行为模式是什么
接下来可能重复什么

因此 Context Engineering 也会影响 Agent 的行为轨迹。


Recitation(目标重述):把全局目标重新推回最近注意力区 ​

长任务中最常见的问题之一:

text
Context 越来越长
→ 原始 Goal 离当前 Token 越来越远
→ Agent 开始偏离目标

Manus 在复杂任务中会持续更新 todo.md,把 Goal / Plan 重新写入最近 Context。其目的不是普通任务管理,而是通过 Recitation(重述)让全局目标重新进入模型最近的注意区域。[^manus-context]

例如:

text
Goal:
完成竞争对手分析

Todo:
[x] 收集 5 家产品信息
[x] 比较定价
[ ] 验证 2026 年最新数据
[ ] 形成最终结论

每次更新以后:

text
Current Goal / Remaining Work

重新靠近 Context 尾部。

这可以降低:

  • Goal Drift(目标漂移);
  • 重复已完成步骤;
  • 忘记未完成任务。

Keep Failure Evidence(保留失败证据) ​

另一个常见反模式:

text
Tool 失败
→ 系统自动 Retry
→ 把失败记录删掉
→ 模型只看到“成功后的干净轨迹”

这样模型可能不知道:

某个方案刚刚已经失败过。

Manus 的实践是尽量保留错误 Action 和对应 Observation,让失败证据继续影响下一轮 Decision。[^manus-context]

这和本文前面的:

text
Tried & Failed

必须进入结构化 Compaction,是同一原则。

当然失败历史也不能无限累积。

推荐:

text
Recent Failure
→ Full Fidelity

Old Repeated Failure
→ Fingerprint + Summary

Pattern Lock-in(模式锁定):Context 也可能把 Agent“教坏” ​

如果 Context 中充满高度重复的:

text
Action A
→ Observation A
→ Action A
→ Observation A

模型可能开始机械模仿这种模式。

Manus 把这类风险描述为“don't get few-shotted”:上下文中过于一致的行动轨迹会让模型陷入重复行为。[^manus-context]

生产上应该注意:

  • 不要保留大量无价值重复轨迹;
  • 对重复 Action 做 Summary;
  • Progress Detection 与 Context Compression 联动;
  • 保留“为什么停止重复”的新 Evidence。

所以:

Context 不只是知识输入,也是一种 Behavior Prior(行为先验)。


五、主流上下文系统怎样设计 ​

5.1 主流实现怎样验证 Context 的关键机制 ​

先用统一维度比较 ​

统一比较时,不是看谁 Feature 多,而是回答九个机制问题:

  • Context Sources(上下文来源):模型输入来自 State、Session、Memory、文件、知识库还是 Tool Result;
  • State / Session Relation(与状态 / 会话关系):哪些内容属于真实状态,哪些只是当前可见投影;
  • Selection(选择):候选信息怎样进入当前 Context;
  • Compaction(压缩):窗口不够时什么保留、什么外部化;
  • Tool Result(工具结果):大结果怎样规范化、引用和按需展开;
  • Skill / Retrieval(技能 / 检索):程序性知识和外部知识什么时候注入;
  • Subagent Isolation(子智能体隔离):不同 Agent 是否复制全部 Parent Context;
  • Persistence(持久化):Context Snapshot / Session State 在哪里保存;
  • Debuggability(可调试性):能否解释“为什么这一轮看到了这些内容”。

这九个问题才是跨产品稳定的比较维度。


先看机制,不按产品 Feature 数量比较 ​

实现 Context Source Selection / Routing Compaction Isolation Persistence 最值得研究
Pi AGENTS / Session / Skill 显式文件 + 按需 Skill Structured Summary Session Branch Session Tree 可见、可定制 Context
OpenAI Agents SDK Session / Run Input Session Merge / History Control Responses Compaction Session / Run 多种 Session Backend Compaction 一致性
LangChain State / Store / Runtime Context Middleware Summarization Middleware State / Tool / Subagent LangGraph / Store Context 分层模型
Deep Agents Skill / Memory / Runtime 动态加载 Built-in Compression Fresh Subagent Context Filesystem / Store Context Isolation
Claude / Claude Code Prompt / Files / Tool Result Agent 自主读写 Auto / Harness Compaction Subagent / Files Files / Git / Session Externalized State
OpenCode Agent Profile / Session Agent Profile Compaction Agent Agent Profile Session Profile-specific Context

这张表只用于定位各实现公开呈现的差异点,不是产品能力排名。某个项目支持 Session、Compaction 或文件外部化,只能证明它提供了机制入口,不能证明它在企业数据上满足权限隔离、压缩保真、故障恢复和可替换性要求。下文因此只保留每条路线最有区分度的机制证据;选择平台时仍须用固定任务集、快照和失败注入做验证。 | Manus | Action / Observation / File System | JIT / Tool-driven | Restorable Compression | Files / Task State | File System / Sandbox | Cache-aware Production Context |

这张表要回答的是:

text
Context 从哪里来?
什么时候选?
怎么压?
怎么隔离?
状态保存在哪里?

而不是谁 Feature 更多。

Pi:显式 Context 文件与结构化 Compaction ​

Pi 的特点是:

text
AGENTS.md / CLAUDE.md
→ 启动时分层加载项目 Context

Skills
→ 按需加载

Session Tree
→ 保留分支

Compaction
→ 结构化摘要 + Recent Messages

其 Compaction 官方公开到触发公式、reserveTokens、keepRecentTokens、CompactionEntry 和 Branch Summary 等实现。[^pi-compaction][^pi-session]

最值得学习:

Context 可以显式、可定制、可观察,而不是隐藏在框架内部。


OpenAI:Session、服务端 Compaction 与 Session Compaction 是三件事 ​

OpenAI Agents SDK 当前 Session 是一个持久对话历史协议,支持 SQLite、Redis、SQLAlchemy、MongoDB、Dapr、Encrypted Session 等实现。[^openai-session-protocol]

2026 的实现需要进一步区分三层:

  1. Session(会话存储):决定历史 Item 在哪里保存、怎样读写;
  2. Responses Server-side Compaction(服务端压缩):在单次 Responses 请求的 Context Management 中,达到阈值后由 API 产生 Compaction Item;
  3. OpenAIResponsesCompactionSession(会话压缩包装器):在 Turn 之间调用 responses.compact,然后对底层 Session 做 clear-and-rewrite。

第三种模式已经不是简单 Summary。它需要处理:

text
并发 mutation 序列化
stale compaction 检测
失败后的历史恢复
streaming 结束等待
store=false 时的 input-based fallback

也就是说,Context Compaction 已经进入 Consistency / Recovery / Latency 的工程问题。[^openai-compaction-session][^openai-model-context]

OpenAIResponsesCompactionSession 则作为 Session Wrapper:

text
Underlying Session
      ↓
Compaction Wrapper
      ↓
Runner

重点不是“会总结”,而是:

  • 压缩后重写 Session;
  • mutation 与 compaction 序列化;
  • stale compaction 跳过;
  • 失败后恢复;
  • streaming latency trade-off。

最值得学习:

Context 生命周期已经进入 Runtime Consistency(运行时一致性)问题。


LangChain / Deep Agents:Model、Tool 与 Lifecycle Context ​

LangChain 当前官方把 Context Engineering 分为:[^langchain-context]

text
Model Context
Tool Context
Life-cycle Context

同时数据来源进一步区分:

text
Runtime Context
State
Store

这非常值得借鉴,因为它提醒我们:

“Context”不只是 Prompt 中的一段字符串,还包括 Tool 能访问什么、生命周期 Hook 如何修改状态。

Deep Agents 又进一步把:

text
Context Compression
Context Isolation
Memory
Skills
Runtime Context

组合进长任务 Agent Harness。[^deepagents-context]


Claude / Claude Code:JIT 与 Progressive Disclosure ​

Anthropic 当前 Context Engineering 实践有一条很鲜明的路线:

text
Stable Instructions
+
Just-in-time Retrieval
+
Progressive Disclosure
+
Compaction
+
Structured Note-taking
+
Subagent Isolation

Claude Code 不会把整个文件系统预加载进 Context,而是依赖 glob / grep / read / bash 等能力逐步发现和读取需要的信息,这就是 Just-in-time Context(即时上下文)和 Progressive Disclosure(渐进式披露)的典型实现。[^anthropic-context]

对于长任务,Anthropic 还强调:当任务跨多个 Context Window 时,可以主动把进展保存到文件、测试和结构化状态中,再在新 Context 中重新发现当前状态。[^anthropic-long-context]

这带来一个重要设计思想:

不一定所有长期状态都要通过 Summary 跨窗口传递。

对于 Coding Agent:

text
Filesystem
Git Diff
Tests
Progress File

本身就是外部 State。

因此 Context Engineering 还包括:

什么时候把信息留在 Context,什么时候外部化为可重新读取的 Artifact / State。


Microsoft Agent Framework:为什么 Context Provider 不等于 Tool ​

Microsoft Agent Framework 当前把 Context Provider(上下文提供器)放在 Agent 调用前后:它可以在模型生成之前主动注入 Memory、User Profile 或 RAG 结果,也可以在调用后提取需要长期保留的信息。[^ms-context-provider]

这个设计专门解决一个问题:

如果知识只能通过 Tool 获取,模型必须先意识到“我缺这条信息”才会主动调用。

对于用户画像、权限相关事实、稳定业务规则或高召回要求的信息,系统往往不能把“是否想起来调用 Tool”当成唯一入口。

因此 Context 进入模型至少有两类路径:

text
Reactive Tool Pull
→ 模型发现自己需要信息后主动调用

Proactive Context Provider
→ 系统在 Model Call 前基于 Policy 主动注入

两者没有谁绝对更好。

  • Reactive Pull 更省 Context,也更自主;
  • Proactive Injection 更可控、更适合必须出现的信息;
  • 企业 Context Engine 应该显式决定哪些 Source 属于哪一种路径。

OpenCode:Agent Profile 与 Compaction ​

OpenCode 的价值不在于“它有多个 Agent 名字”,而在于它把不同 Agent Profile(智能体配置)和不同 Context / Capability Policy 绑定起来。

这里需要特别标注版本差异:截至 2026-09-13,OpenCode 当前主文档列出 Build / Plan 两个 Primary Agent,以及 General / Explore / Scout 三个 Subagent;但 OpenCode V2 文档明确列出 Build / Plan、General / Explore,并写明 V2 没有内置 Scout。因此本文不把 Scout 当成跨版本稳定事实,而把它作为“版本相关的只读研究型 Profile”理解。

可以抽象理解:

Profile 主要目标 Context 特征 Capability 特征
Build 实际修改与执行 需要代码、Diff、测试结果 读写能力完整
Plan 规划和分析 更关注架构、约束和计划 写操作受限
General / Explore 通用子任务 / 搜索探索 更关注局部任务与检索证据 General 较宽,Explore 偏只读
Scout(版本相关) 外部文档 / 依赖研究 外部证据与依赖源码 只读;并非所有版本内置
Compaction Agent 压缩历史 读取历史、输出结构化摘要 不承担业务执行

这说明:

Context Policy 不应该只按“应用”配置,还可以按 Agent Role / Phase(角色 / 阶段)动态变化。

例如同一个 Coding Task:

text
Explore 阶段
→ 多 Search / Read Context

Edit 阶段
→ Current File + Diff + Test

Verify 阶段
→ Test Result + Completion Criteria

比“所有阶段共用同一份大 Context”更合理。


Manus:生产级 Context Engineering 经验路线 ​

Manus 的 Context Engineering 很值得单独研究,因为它不是框架 API 设计,而是面向真实 Agent 产品规模长期迭代出来的一组工程经验。团队公开说明,其 Agent Framework 曾多次重构,而 Context Engineering 是核心优化方向之一。[^manus-context]

它的主要思路可以总结为:

text
Design around KV-cache
Mask / constrain action space carefully
Use filesystem as external context
Recite goals
Keep useful failure traces
Avoid repetitive trajectory lock-in

文件系统作为 Context 外部层 ​

Manus 明确把 File System 视为近乎“无限”的外部 Context:

text
Context Window
→ 有限、昂贵、会衰减

File System
→ 大、持久、可按需读取

压缩时尽量保留可恢复 Pointer:

text
Web Page Content
→ 可以丢
→ URL 必须保留

Document Text
→ 可以丢
→ File Path 必须保留

这是一种很重要的设计原则:

好的 Context Compression 最好尽量可恢复,而不是永久销毁信息。

生产启示 ​

Manus 的经验不是行业统一标准,但它非常有价值,因为它揭示:

Context Engineering 不只是 Retrieval / Prompt / Compaction,而是同时影响 缓存成本、工具设计、外部状态、注意力、错误恢复和行为轨迹。


5.2 主流路线共同收敛到什么,真正分歧在哪里 ​

案例

案例

案例

案例

案例

案例

Context Design Space

Source Strategy
Static ↔ Dynamic

Retrieval
Eager ↔ On-demand

Compression
Raw ↔ Summarized

Isolation
Shared ↔ Scoped

Persistence
Ephemeral ↔ Durable

Governance
Implicit ↔ Provenance-aware

Cache Strategy
Dynamic ↔ Prefix-stable

Externalization
In-context ↔ File / Artifact

Pi Context Files

OpenAI / Pi Compaction

Deep Agents Subagent

Enterprise Context Engine

Manus KV-cache

Manus / Claude File State

这里同样不是 Ranking。

企业应该根据:

  • 任务长度;
  • 来源数量;
  • 风险;
  • Token 成本;
  • Domain;

选择不同策略。


主流实现共同收敛的 Context 机制 ​

跨 Pi、OpenAI、LangChain / Deep Agents、Claude Code、Microsoft Agent Framework、OpenCode 和 Manus,可以看到:

  1. Context 不再等于 Prompt 字符串,而是来自多种 Source 的运行时投影;
  2. 长任务必须 Compaction + Externalization,单纯扩大 Context Window 不够;
  3. 按需读取成为主流,文件、Skill、历史和 Tool Result 不应全部预加载;
  4. Context Isolation 成为多 Agent 的重要收益,Subagent 不应自动复制全部 Parent Context;
  5. Snapshot / Trace / Eval 必须能重建 Context 决策,否则 Context 问题无法 Debug;
  6. Context Policy 越来越 Model-aware / Phase-aware,不存在一套 Token 策略适配所有模型和阶段。
  7. 信息进入模型有 Proactive Injection(主动注入)和 Reactive Pull(主动拉取)两条路径,不能把所有 Context 都做成 RAG Tool,也不能全部预加载。

真正的架构分歧 ​

不同实现仍然在这些维度上取舍:

  • Context 主要由 Framework 隐式管理,还是显式文件 / Context Pack;
  • Compaction 是摘要替换,还是尽量保留可恢复 Pointer;
  • Session / State 与 Context Engine 耦合多深;
  • Tool / Skill 是否由模型 JIT 主动拉取;
  • Cache / Prefix Stability 是否成为设计第一约束。

所以企业更应该标准化 Context Contract、Policy、Snapshot 和 Trace,而不是复制某一家 Compaction 算法。

六、企业级上下文平台怎样设计 ​

6.1 企业上下文平台应该统一什么 ​

核心原则 ​

企业 Context Architecture 最重要的不是建设:

“万能 Prompt 拼装平台”。

而是统一:

text
Context Item Semantics
Source Metadata
Authority
Scope
Freshness
Budget
Snapshot
Compaction Contract

核心原则:

统一 Context Contract,不统一所有 Context 内容。


Context Architecture 不会消灭复杂度,只会重新分配复杂度 ​

Context Engineering 的很多“优化”本质上只是把复杂度搬到更适合治理的位置。

设计选择 解决的问题 新复杂度进入哪里
Retrieval / Ranking 不再全量加载知识 Recall、Authority、Freshness、Ranking
Compaction 降低长历史体积 Semantic Loss、Version、Concurrency、Recovery
Externalization Context 不再无限增长 Pointer、Rehydrate、Artifact Lifecycle
Isolation 避免跨 Agent / Tenant 污染 Scope、Delegation、Shared State
Dynamic Tool Context 降低 Tool Schema 负担 Routing、Cache Stability、Historical Consistency
Context Snapshot 支持复现和审计 Storage、Privacy、Retention、Version
Shared Context Platform 减少重复实现 Contract、Ownership、Policy Release、Migration

因此评审 Context 方案时不能只问:

“Token 降了多少?”

还要问:

“为了减少 Context 复杂度,我们把复杂度转移到了哪里?新的复杂度是否可观测、可恢复、可治理?”

例如:

text
无限 History
→ Compaction
→ 新问题变成 Summary Loss / Compaction Version / Concurrency

Raw Tool Result
→ Structured Observation + Artifact
→ 新问题变成 Artifact Lifecycle / Drill-down / Result Contract

全量 Repo
→ JIT Read
→ 新问题变成 Search Quality / Tool Latency / Exploration Cost

Context 架构升级应该由 Trigger 驱动 ​

和 00 / 01 保持一致,Context 升级统一看五类 Trigger:

text
Failure Trigger
→ Missing / Stale / Conflict / Buried / Compaction Loss

Scale Trigger
→ History、Tool、Source、Result Size、Agent 数量持续增长

Risk Trigger
→ 多租户、敏感数据、外部网页、权限范围复杂

Reuse Trigger
→ 多个 Agent 重复实现 Source Metadata / Ranking / Snapshot / Compaction

Governance Trigger
→ 多模型、多策略、多版本无法归因和回滚

典型演进不是:

text
第一天
→ 建全公司的 Context Platform

而是:

text
Prompt / Simple History
→ 出现多 Source / RAG

Retrieval + Metadata
→ 出现 Stale / Conflict / Authority

Context Pipeline
→ 出现长任务 / 大 Tool Result

Compaction + Externalization + Snapshot
→ 出现多 Agent / 多租户 / 多模型

Context Contract + Policy + Eval + Control Plane

统一决策格式:

text
Trigger
→ 当前方案为什么开始失效

Decision
→ 引入什么 Context 机制

Trade-off
→ 新增什么复杂度

Evidence
→ 用什么 Context / Task 指标证明有效

6.2 契约、引擎和策略怎样协作 ​

Context Contract(上下文契约) ​

跨 Agent 平台真正值得统一的不是“Prompt 模板”,而是 Context Contract。

建议至少定义:

typescript
interface ContextRequest {
  runId: string;
  turnId: string;

  agentId: string;
  taskType: string;

  modelProfile: string;
  tokenBudget: number;

  identity: Identity;
  requiredTypes?: string[];
}

interface ContextPack {
  items: ContextItem[];
  capabilities: CapabilityRef[];

  policyVersion: string;
  rankingVersion: string;
  compactionVersion?: string;

  totalTokens: number;
}

这样 Context Engine 输出的不只是 String,而是:

一个可版本化、可审计、可复现的 Model Context Package(模型上下文包)。


Context Engine 参考接口 ​

typescript
interface ContextEngine {
  discover(
    request: ContextRequest
  ): Promise<ContextCandidate[]>;

  filter(
    candidates: ContextCandidate[],
    policy: ContextPolicy
  ): Promise<ContextCandidate[]>;

  rank(
    candidates: ContextCandidate[],
    request: ContextRequest
  ): Promise<ContextCandidate[]>;

  budget(
    candidates: ContextCandidate[],
    budget: TokenBudget
  ): Promise<ContextCandidate[]>;

  transform(
    candidates: ContextCandidate[]
  ): Promise<ContextItem[]>;

  assemble(
    items: ContextItem[]
  ): Promise<ModelContext>;

  snapshot(
    context: ModelContext
  ): Promise<ContextSnapshot>;
}

这仍然是参考抽象,不是行业标准 API。


Context Policy(上下文策略) ​

每一类 Source 建议定义:

text
when_to_load
authority
trust_level
max_budget
freshness
scope
retention
compaction
subagent_visibility

例如:

yaml
source: semantic_registry
authority: 100
freshness: 5m
subagent_visibility: domain_only

source: historical_session
authority: 30
freshness: 30d

source: external_web
authority: 20
trust_level: untrusted

这比:

“所有内容进向量库”

更符合企业治理。


6.3 上下文平台与相邻系统怎样分工 ​

这几个模块在真实系统里会协作,但不能混成一个“大 Context Service”。

能力 Context Engine Runtime Memory System Harness
决定这一轮模型看到什么 ✅ 主责 协同
保存 Run State ✅ 主责
保存 Session History ✅ 主责
长期 Memory 写入 / 合并 ✅ 主责
从 Memory 选择本轮内容 ✅ 提供 Source
Tool 是否暴露给模型 ✅ Context 视角 ✅ Capability 视角
Action 是否允许执行 ✅ 主责
Context Snapshot ✅ 主责 可持久化 Trace 协同
Compaction Policy ✅ 主责 负责一致性 / 持久化 协同

一句话:

text
Runtime
→ 保存“真实状态”

Memory
→ 保存“长期信息”

Harness
→ 控制“能做什么”

Context Engine
→ 决定“这一轮看到什么”

Context 与 Runtime 的边界 ​

Context Engine 负责:

text
这一轮模型看到什么

Runtime 负责:

text
Session / State 如何持久化、恢复、并发

例如:

text
Runtime
→ 存 Session History

Context Engine
→ 从 Session 中只选最近 20 条 + 相关历史

所以:

Context 不负责 Durable State;Context 消费 Runtime State,并生成模型视图。


Context 与 Memory 的边界 ​

Context Engine:

text
决定这一轮要不要读 Memory
决定读哪条
如何排序
如何注入

Memory System:

text
决定什么长期保存
如何写
如何合并
如何遗忘
如何学习

因此:

text
Memory
→ Context Source

Context Engineering
→ Memory Read Policy

Memory Write / Learning 留在《Agent 记忆、技能与持续学习》中深入讨论。


Context 与 Security 的边界 ​

Context Engine 应负责:

text
Source Trust
Data Scope
Redaction
Context Leakage Prevention

但:

text
模型看到某个 Tool

和:

text
模型被允许执行高风险 Action

不是同一件事。

真实动作授权仍由 Policy Service 作出;Harness 只负责消费授权结果,并在模型之外强制执行门禁。

即:

text
Context Security
≠
Action Authorization

6.4 Context 平台怎样做到可观测和可治理 ​

Context Snapshot 只能回答:

“最终进了什么?”

企业级 Debug 还需要回答:

text
为什么进?
为什么没进?
为什么排这么高?
为什么被压缩?
为什么被替换?

所以推荐记录 Context Decision Trace:

typescript
interface ContextDecisionTrace {
  itemId: string;

  discoveredBy?: string;
  filters: FilterDecision[];

  rankScore?: number;
  rankFeatures?: Record<string, number>;

  authority?: number;
  freshness?: number;
  tokenCost?: number;

  selected: boolean;
  selectedReason?: string;
  excludedReason?: string;

  transformHistory?: TransformRecord[];
  parentItemId?: string;
}

Context Lineage(上下文血缘) ​

一个最终 Summary Item 可能来自:

text
Raw Log
→ Tool Result
→ Structured Observation
→ Compaction
→ Final Context Item

如果只保存最后 Summary,就无法判断错误在哪一步产生。

因此可以保存:

text
source_item_id
parent_item_id
transform_type
transform_version
created_at

这样能回答:

这条上下文经历过哪些 Transform?


为什么 Context Observability 很重要 ​

真实 Failure 可能是:

text
Source 正确
→ Retrieval 正确
→ Ranking 正确
→ Summary 写错
→ Agent 最终决策错

没有 Transform Lineage 时,你只会看到:

“Context 里有一条错误 Summary。”

却不知道:

  • 原始数据是否正确;
  • 哪个 Summary Model 生成;
  • 哪个版本;
  • 是否 Compaction 导致。

所以:

Context Observability 应该覆盖 Context 的生成过程,而不仅是最终输入。


Context Diff(上下文差异) ​

A/B Context Policy 时,可以直接比较:

text
Context A
vs
Context B

Diff 内容:

text
added items
removed items
rank changes
summary changes
token delta
authority delta

然后结合任务结果:

text
Policy B 成功
Policy A 失败

反推哪个 Context Change 真正有价值。


Context Control Plane / Data Plane(控制面 / 数据面)

真实企业 Context Architecture 最好区分两层。

Context Control Plane(上下文控制平面) ​

负责:

text
Policy
Budget
Authority
Freshness
Ranking
Model Profile
Compaction Strategy
Snapshot
Version

它回答:

Context 应该怎么被管理?


Context Data Plane(上下文数据平面) ​

负责真正搬运 / 访问:

text
Session
State
Memory
Knowledge
Files
Tool Results
Query Results
Artifacts

它回答:

Context Item 真正从哪里来,存在哪里,怎么取?

Context Control Plane

Policy / Budget / Rank / Freshness / Model Profile

Context Data Plane

Runtime State

Session

Knowledge / RAG

Memory / Skill

Artifacts / Query Results

Context Engine

Model Context

这一区分在数据场景尤其重要:

text
Control Plane
→ 决定 Query Result 只能给 20 行 Sample

Data Plane
→ 3000 万行仍然保存在 Warehouse

而不是把 Context Platform 设计成另一个“大数据搬运系统”。


6.5 企业 Context 架构怎样落地并演进 ​

企业参考架构 ​

治理

约束

留痕

Sources
State / Session / Knowledge / Memory / Artifact

Registry
Metadata / Version / Scope

Select
Discover / Filter / Rank

Shape
Budget / Transform / Compaction

Assemble
Context Pack

Model Context

Control Plane
Policy / Authority / Freshness / Model Profile

Snapshot / Trace / Eval


贯穿案例:Data Agent ​

用户问:

“华东区上月 GMV 同比是多少?为什么变化?”

Source Discovery(来源发现) ​

候选:

text
Semantic Registry
Table Metadata
Historical Query
User Session
Metric Memory
Latest Data

Filter(过滤) ​

删除:

  • 用户无权限表;
  • 过期 Dataset;
  • 别的业务线 Context。

Conflict(冲突处理) ​

发现:

text
Historical Memory:
GMV old definition

Semantic Registry:
GMV current definition

按 Authority:

text
Semantic Registry > Memory

Ranking(排序) ​

优先:

  1. 当前 GMV 定义;
  2. 时间口径;
  3. 华东区域定义;
  4. 相关事实表;
  5. 最新数据分区。

Assembly(组装) ​

模型看到:

text
Task
Current Metric Definition
Allowed Schema
Relevant Tables
Recent User Clarification

而不是整个数仓。

Tool Observation(工具观察结果) ​

假设 SQL 实际命中:

text
31,284,321 rows

绝不能把 3000 多万行直接序列化进入 Context。

正确流程:

text
SQL Engine
→ 执行精确聚合
→ 物化完整 Result / Query ID

Context
→ row_count
→ schema
→ aggregate stats
→ YoY
→ top dimensions
→ representative sample
→ artifact / query pointer

例如:

json
{
  "row_count": 31284321,
  "gmv": 1280000000,
  "yoy": -0.137,
  "top_negative_dimensions": [
    {"dimension":"East / Electronics","contribution":-0.083}
  ],
  "query_id":"q_123",
  "artifact_ref":"warehouse://q_123"
}

如果模型发现:

East / Electronics 是主要异常来源

下一轮再:

text
query_result(
  query_id = q_123,
  group_by = ["sku"],
  filter = "region='east' and category='electronics'",
  top_k = 20
)

进行 Drill-down。

也就是说:

大数据 Context 管理不是“压缩 3000 万行”,而是根本不让 3000 万行进入模型。

Snapshot(快照) ​

保存:

  • Semantic Registry Version;
  • Context Item IDs;
  • SQL Schema Version;
  • Token Budget。

如果答案错,就能复现:

模型当时到底看到了哪个 GMV 定义。


跨领域案例 ​

Data Agent 说明了大结果外部化,但不同类型 Agent 给上下文带来的主要压力并不相同。下面的比较重点不是列举 Context Item,而是说明“场景特征怎样推导机制”。

Agent 场景 本质特征与压力 简单方案为什么失效 应采用的机制 验证证据
Coding Agent(编码智能体) 仓库大、依赖关系动态,编辑与测试会持续改变工作区 默认加载整个 Repo(代码仓库)会制造噪声;只看当前文件又可能漏掉调用方与约束 先以符号、依赖图和构建目标发现候选文件,再按阶段组装 Relevant Files、Current Diff(当前差异)和 Test Failure;完整仓库与测试报告留在外部 Artifact 相关文件召回率、跨文件修改成功率、重复读取量、验证通过率
Research Agent(研究智能体) 来源权威、发布时间和证据链决定结论是否成立 只按语义相似度汇总会让旧资料或二手资料覆盖最新一手来源 Context Item 携带 URL、Publisher(发布方)、Published Date(发布日期)、Retrieved Date(获取日期)、Evidence(证据片段)与 Confidence(可信度),冲突时按来源等级和时效显式处理 一手来源覆盖率、过期来源注入率、结论到证据的可追溯率
Browser Agent(浏览器智能体) 页面状态随导航和交互变化,完整 DOM(文档对象模型)通常很大且包含不可见噪声 永久累积整页结构会让模型依据旧节点操作,并把外部页面中的不可信文本混入指令区 每轮按 Current URL、Visible UI(可见界面)、Accessibility Tree Subset(可访问性树子集)、Recent Actions 和 Form State 重新构建;高风险提交前重新读取页面状态 过期节点率、错误点击率、表单状态一致性、提示注入拦截率

三个场景共享 Discover、Filter、Rank、Budget、Transform、Assemble 和 Snapshot 契约,但 Source Adapter、相关性特征、Transform 方式与任务级验收标准必须留在领域层。平台如果统一到“所有 Agent 使用同一组 Top-K 和同一份摘要模板”,只是把差异藏起来,并没有消除差异。


企业演进路线 ​

演进顺序不应该由功能清单驱动,而应该由可观察故障和跨团队复用证据驱动。

阶段 进入条件 本阶段机制 可验收产物 暂时不做什么
建立证据 已经无法回答“模型当时看到了什么” 统一 Context Snapshot(上下文快照)、Source Metadata(来源元数据)和模型调用关联标识 失败任务能还原 Item、版本、位置与模型 不先建设统一检索平台
控制输入 出现超预算、过期信息或巨大工具结果 Token Budget、Freshness、Provenance(来源追踪)、Tool Result Normalization(工具结果规范化) 必要信息保留率达标,超大结果均可通过 Pointer 重读 不强制所有领域使用同一排序特征
管理长任务 反复出现压缩丢约束、阶段恢复失败 Context Quality Gate、结构化 Compaction Contract、Checkpoint + Rehydrate 压缩前后关键事实和约束可对比,恢复任务能继续而不重复副作用 不把 Context Engine 变成 Run State 存储
跨 Agent 治理 多个 Agent 重复实现相同契约,策略版本无法统一回滚 Context Registry、Policy Version、Dynamic Routing(动态路由)和 Eval 发布门 策略可以灰度、归因和回滚,领域适配器仍由业务负责 不建设“全公司的万能 Context Service”

每一阶段都应保留恢复路径:新策略失败时回滚到上一版 Policy 与 Context Pack;Compaction 失败时保留旧历史或从 Checkpoint 重建;动态路由召回不足时允许退回显式能力集合。只有当共享机制的复用收益高于契约迁移和平台治理成本时,才进入下一阶段。


七、上下文问题怎样治理 ​

7.1 先建立失败分类和 Debug 路径 ​

Failure Taxonomy(失败分类) ​

Context Failure

Missing

Stale

Noisy

Conflicting

Buried

Overloaded

Wrong Scope

Compaction Loss

Retrieval Error

Injection / Trust Failure

Failure 典型症状 Evidence 修复
Missing 模型不知道关键事实 Context Snapshot 补 Discover / Recall
Stale 使用旧口径 Item Version / Time Freshness Policy
Noisy Tool 日志淹没重点 Token / Item Mix Transform
Conflicting 结论摇摆 Source Provenance Authority
Buried 信息存在但没被用 Position / Attention Ranking / Structure
Overloaded 成本高、效果降 Token Mix Budget
Wrong Scope 越权 / 串租户 Tenant / Permission Filter
Compaction Loss 忘记约束 / 进度 Pre/Post Snapshot Structured Compaction
Retrieval Error 找错资料 Retrieval Trace Search / Rerank
Injection 外部文本变成指令 Trust Metadata Content / Instruction Isolation

Debug 顺序 ​

推荐:

text
Did it exist?
↓
Was it discovered?
↓
Was it filtered?
↓
Was it ranked high enough?
↓
Did budget keep it?
↓
Was it transformed correctly?
↓
Was it assembled correctly?
↓
Did compaction corrupt it?
↓
Did model still ignore it?

只有前面都正常,才更应该归因模型。

No

Yes

No

Yes

No

Yes

No

Yes

No

Yes

No

Yes

Agent Decision Wrong

关键事实存在?

Source / Data Problem

被 Discover?

Retrieval / Discovery

Filter 后还在?

Scope / Policy

Rank / Budget 保留?

Ranking / Budget

Transform 正确?

Summary / Normalize

Assemble 正确?

Ordering / Prompt

Model / Reasoning


7.2 典型故障场景怎样暴露 Context 机制缺口 ​

下面是由公开机制和常见故障模式构造的架构推演,用于解释故障链、错误修复与正确恢复路径,不宣称来自某家企业未公开的生产事故。评审真实系统时,应以 Context Snapshot、Decision Trace、运行日志和任务结果替换示例中的假设证据。

旧业务口径覆盖新口径 ​

症状

SQL 正确,但业务定义错。

根因

text
Memory / Historical Context
>
Current Semantic Source

错误修复

在 Prompt 中写:

“请使用最新口径。”

这不能解决 Source Conflict。

正确修复

建立:

  • Authority;
  • Version;
  • Validity;
  • Conflict Detection。

结论

Context 不是相关性排序系统,还必须是事实权威治理系统。


Compaction 后 Agent 重复工作 ​

症状

压缩后重新做已完成步骤。

根因

Summary 保存:

text
Goal + Result

但没有:

text
Completed
Failed Attempts
Open Questions

正确修复

使用结构化 Compaction Schema。

结论

长任务压缩的核心不是压文本,而是保留任务状态语义。


日志全部塞给模型 ​

症状

Token 暴涨,但问题定位更差。

根因

text
Raw Tool Result == Context

正确修复

text
Raw Artifact
+
Structured Observation
+
Pointer

结论

原始信息完整性与模型信息密度应该分层解决。


Subagent 成本线性甚至超线性增长 ​

症状

拆了 5 个 Agent 后 Token 成本远高于 5 倍。

根因

每个 Agent 复制 Parent 全量历史。

正确修复

text
Task Contract
+ Minimal Context Pack
+ Capability Scope
+ Return Schema

结论

Multi-Agent 的 Context 默认应该隔离,而不是继承。


Prompt Injection 穿透 Tool Result ​

症状

网页内容中的指令改变 Agent 行为。

根因

把:

text
Untrusted Data

当成:

text
Instruction

正确修复

  • Source Trust;
  • Data / Instruction Separation;
  • Delimiter;
  • 高风险 Action 外部 Policy。

结论

Context Trust 是 Context Engineering 的一等维度。


关键信息在 Context 中但模型没有使用 ​

症状

Trace 显示关键规则已经进入 Prompt,但 Agent 仍然违反。

根因

text
included
≠
attended / effectively used

可能因为:

  • 被大量 Tool Result 淹没;
  • 位于超长 Context 中间;
  • 缺少清晰结构;
  • 与相似信息冲突。

错误修复

继续提高 Retrieval Top-K。

这会让 Context 更长,甚至更差。

正确修复

  • 缩小 Noise;
  • 提高 Authority Item 结构优先级;
  • 重排;
  • 将关键约束靠近当前 Task;
  • 建立专门 Long-context Eval。

结论

Context Recall 只是第一步,还要评估 Context Utilization(上下文有效利用)。


模型升级后 Context 策略回归 ​

症状

换了更大 Context Window 的新模型后,团队把历史全部放回 Prompt,成本上升且成功率下降。

根因

错误假设:

text
Bigger Context Window
→ More Context is always better

正确修复

Context Policy 与 Model Profile 版本化,针对新模型重新做:

  • Position Eval;
  • Noise Eval;
  • Tool Schema Budget;
  • Cache Eval;
  • Compaction A/B。

结论

Model Upgrade 也应该触发 Context Policy Regression Test(上下文策略回归测试)。


Data Agent 把百万行 SQL Result 塞回模型 ​

症状

text
SQL 成功
→ Tool 返回超大 JSON
→ Context 超限 / 截断
→ Agent 后续回答异常

有时并不会直接抛 Context Overflow,而会表现成:

  • Tool Result 被静默截断;
  • 最关键行在尾部被丢弃;
  • JSON 不完整;
  • 模型误以为看到的是完整结果;
  • 后续统计错误。

根因

架构错误:

text
Data Retrieval
=
Context Retrieval

把“数据库返回了多少数据”直接等价成“模型需要看多少数据”。

错误修复

把:

text
1,000,000 rows

改成:

text
100,000 rows

本质没有解决。

正确修复

text
Compute Pushdown
+
Result Contract
+
Artifact
+
Progressive Drill-down

例如:

text
SQL Aggregate
→ 20-row summary
→ Agent finds anomaly
→ targeted SQL
→ 10-row evidence

外部实践

Databricks SQL MCP 当前明确会截断大型 Result Set 以保护模型 Context,并建议减少 Row / Column 或在 SQL 中聚合;Snowflake MCP 也对 SQL Tool Result 设置 Size Limit。[^databricks-sql-mcp][^snowflake-mcp]

企业结论

Data Agent 的 Context Engine 必须把“Data Plane 的规模”和“Model Context 的规模”彻底解耦。


7.3 怎样证明上下文策略真的更好 ​

和前文的 Context Properties(上下文性质)一样,指标也不应该“全部同权”。

建议按“结果指标、治理诊断指标、效率指标”三组管理;这不是前文上下文质量目标的 P0 / P1 / P2 分级。

结果指标:先判断任务是否正确完成 ​

这些指标直接回答:

Context 是否导致任务做对?

Metric 含义 为什么优先
Context Recall 必要信息是否成功进入 缺关键事实直接失败
Stale Context Rate 过期信息注入比例 旧事实会直接导致错误
Authority Violation Rate 低权威 Source 错误覆盖高权威 Source 防止事实优先级错误
Context-caused Failure Rate 最终失败中 Context 根因占比 直接连接任务结果

这些指标必须先定义样本与分母,否则只是名称。例如 Context Recall 的分母不是“所有可能信息”,而是由领域专家或任务标注确定的必要 Context Item;Stale Context Rate 应按被注入模型的 Item 计数,而不是按知识库全部文档计数;Authority Violation 只有在同一事实存在冲突来源时才进入样本;Context-caused Failure 必须经过故障归因,不能把所有模型失败都算给 Context。


治理诊断指标:解释为什么成功或失败 ​

Metric 含义
Cross-scope Leakage Rate 越权 / 跨 Tenant 信息泄漏
Snapshot Coverage Model Call 可复现比例
Conflict Rate 同一事实多个 Source 冲突比例
Compaction Loss Rate 压缩后关键语义丢失
Retrieval Failure Rate 必要 Source 未被召回

治理指标同样需要事件口径:Cross-scope Leakage Rate(跨作用域泄漏率)以越权 Context Item 或受影响 Model Call 为分子;Snapshot Coverage(快照覆盖率)以要求留痕的关键 Model Call 为分母;Compaction Loss Rate(压缩损失率)以压缩后丢失必要事实、硬约束或进度状态的压缩事件为分子。安全指标出现一次严重泄漏就需要按事件等级处置,不能因为总体比例很低而被平均值掩盖。

这些指标决定系统是否:

text
可安全运行
可复现
可诊断

效率指标:在质量门禁内优化资源 ​

Metric 含义
Context Precision 进入内容中有决策价值的比例
Context Token / Run 每 Run Context 成本
Context Growth / Turn Context 增长速度
Tool Result Compression Ratio Raw → Observation 压缩比
Cache Hit Rate 稳定 Context 缓存收益
Context Utilization Rate 关键 Context 是否真正影响决策
Context Position Sensitivity 位置信息变化导致的性能波动
Raw Data → Context Ratio 原始结果规模与模型输入规模比
Query Pushdown Rate 可在数据层完成的计算中实际下推比例
Drill-down Efficiency 达到结论所需的数据下钻轮数

效率指标必须与结果质量联合观察。Context Token / Run(每次运行的上下文 Token)下降,只有在固定模型、工具、任务集和成功判定时才有比较意义;Cache Hit Rate(缓存命中率)提高,也不能以保留过期上下文为代价。企业看板至少应按任务类型、模型版本、Context Policy 版本和风险等级分组,否则总体平均值会掩盖某个关键场景的回归。

这些很重要,但必须在结果指标和治理诊断指标达到门禁后再优化。

例如:

text
Context Token 降低 40%
但 Stale Context Rate 上升

不是成功优化。


指标优先级总结 ​

text
结果指标:先保证正确
↓
治理诊断指标:再保证安全、可复现
↓
效率指标:最后优化 Token、Latency、Cache

北极星不是:

text
Context 越短越好

而是:

在 Cost / Latency / Security 约束下,最大化由高质量 Context 支撑的 Verified Task Success。

可以把 Context 的总体工程目标写成一个概念公式:

text
Context Utility
=
Decision Benefit
-
Token Cost
-
Latency Cost
-
Conflict Risk
-
Security Risk

这个公式不是数学标准,而是提醒:

Context 是带成本和风险的信息,不是免费的信息。

Context Eval(上下文评测) ​

Context Eval 不能只看最终 Task Success。

至少需要三层。

第一层:Pipeline Eval ​

评估每一步:

text
Discovery Recall
Filter Precision
Ranking Quality
Budget Retention
Transform Fidelity
Snapshot Coverage

第二层:Task Eval ​

固定:

text
Task
Model
Tool
Harness

只改变 Context Policy。

看:

text
Verified Task Success
Cost
Latency
Turns
Context-caused Failure

第三层:Ablation / Counterfactual Eval(消融 / 反事实评测) ​

这是判断某条 Context 是否真正有价值的关键方法。

Ablation(消融) ​

从 Context 中删除一类 Item:

text
Full Context
vs
Remove Memory
vs
Remove Retrieval
vs
Remove Tool Observation

观察成功率变化。

如果删除某一大类信息后结果不变:

这类 Context 可能长期浪费 Token。


Item-level Ablation ​

对单条关键 Context:

text
With Item X
vs
Without Item X

判断:

这条 Item 是否真的影响 Decision。


Counterfactual Context(反事实上下文) ​

构造:

text
正确 Context
vs
Stale Context
vs
Conflicting Context
vs
Wrong Authority

检查系统是否能:

  • 选对权威 Source;
  • 抵抗错误 Memory;
  • 识别过期事实。

这比普通 Golden QA 更接近企业真实 Context Failure。


Context Sensitivity Test(上下文敏感性测试) ​

变化:

text
Position
Order
Amount
Summary Version
Tool Set

观察输出稳定性。

如果只是把关键 Constraint 从顶部挪到中间,成功率就大幅下降:

Context Policy 对 Position 过度敏感。


Context Eval Dataset 应包含什么 ​

至少覆盖:

text
Missing Critical Fact
Stale Source
Conflicting Sources
Long History
Huge Tool Result
Compaction Boundary
Prompt Injection
Cross-agent Leakage
Million-row Data Result
Model Migration
Position Shift

Context Eval 的最终目标是:

不仅知道“有没有失败”,还知道“哪一类 Context 变化导致失败”。

7.4 上下文策略发布时真正要控制什么 ​

通用发布链路统一由第 9 篇定义;上下文工程真正需要版本化的是:

text
context_policy_version
ranking_version
compaction_version
retrieval_version
tool_context_schema_version

上下文发布最特殊的风险是 Silent Regression(静默回归):服务没有报错,但 Relevant Context 被排除、旧信息排序上升、Compaction 丢失约束,最终表现为“模型突然变笨”。

因此灰度时最重要的不是重复一遍通用 Canary 流程,而是固定 Model / Tool / Eval Set,比较:

  • Context Selection Diff;
  • Missing / Stale / Conflict Rate;
  • Token / Latency;
  • Task Success Delta;
  • Context-caused Failure Mix。

上下文发布的核心,是证明“模型看到的东西变了以后,行为变化可解释、可归因、可回滚”。


7.5 Context 能力采购时怎样设置准入和退出门 ​

Context 产品采购不能只比较最大窗口、连接器数量或演示效果。企业真正购买的是一条能够复现、治理、替换和退出的输入链路;以下门槛应写进 PoC(概念验证)与合同验收,而不是只停留在产品问答。

验证项 必须演示的机制 通过证据 淘汰信号
Snapshot 导出与复现 导出某次模型调用的 Item、顺序、版本、转换记录和策略版本,并在隔离环境重放 同一固定模型和工具下可还原输入,差异有明确解释 只能看平台 UI,无法批量导出或重放
Context Policy 版本与回滚 策略灰度、版本关联、失败回退和旧版本保留 一次故障注入后能在约定时间内恢复上一稳定版本 策略覆盖后不可恢复,或无法定位哪些 Run 受影响
Compaction 可替换性 压缩器可禁用、替换或并行对比,原始历史和结构化约束可保留 备用实现重放后关键事实、硬约束与进度仍满足评测门 压缩结果是供应商私有黑盒,无法导出或绕过
敏感输入隔离 检索前作用域过滤、字段脱敏、租户隔离和审计 跨租户、提示注入、敏感字段测试均不泄漏;严重事件按次阻断 只依赖模型拒答或生成后过滤
P95 组装延迟 P95(95% 请求不超过的延迟分位)按任务类型、数据规模和缓存状态测量 在约定并发下满足任务延迟目标,且没有牺牲必要信息召回 只给平均值,或缓存冷启动时明显失控
单位成功任务成本 汇总检索、排序、转换、压缩、存储和模型输入成本 以“验证成功任务”为分母,固定任务集和模型比较 只报每 Token 单价,失败重试与平台费用不可见
供应商退出演练 导出 Policy、Snapshot、Artifact Pointer、评测集和必要元数据,切到备用实现重放 关键任务达到约定成功率,差异可定位;删除与保留责任可证明 评测集、快照或引用绑定私有运行时,迁移后无法解释历史 Run

这里的成本口径应为:

text
单位验证成功任务成本
=
(检索 + 排序 + 转换 + 压缩 + 快照存储 + 模型输入 + 失败重试)总成本
÷
通过任务级验证的任务数

采购评审最终要回答两个问题:供应商发生故障时,企业能否用自己的 Snapshot 和评测集定位并恢复;供应商退出时,企业能否带走契约、证据和任务验证能力。两个问题任一无法演练,就不应把该产品放在不可替换的 Context 控制面位置。


附录 A:高频架构问题与快速回答 ​

A.1 核心概念与边界问题 ​

Q1:什么是 Context Engineering? ​

30 秒答案

Context Engineering 是动态选择、过滤、排序、转换和组装模型每次决策所需信息与能力的工程体系,目标不是给更多 Context,而是在有限预算内提供最有决策价值的 Context。

详细答案

Context 包括:

  • Instruction;
  • Task;
  • State;
  • History;
  • Retrieval;
  • Memory;
  • Skill;
  • Tool Definition;
  • Observation。

Context Engineering 控制:

text
what
when
which source
which priority
which format
how much

它比 Prompt Engineering 更宽,也比 RAG 更宽。

常见追问

  • Context 和 State 有什么区别?
  • Context Window 越大还需要吗?
  • RAG 为什么不等于 Context Engineering?

Q2:Context、Session、State、Memory 有什么区别? ​

详细答案

四者分别回答不同问题:

text
Context
→ 这次模型看到什么

Session
→ 多轮交互如何组织

State
→ 当前任务真实发生了什么

Memory
→ 哪些信息跨任务长期保留

它们的关系是:

text
Session / State / Memory / Knowledge
              ↓
        Context Engineering
              ↓
       Model-visible Context

所以 Session 很长不代表 Context 必须很长;Memory 存在也不代表每轮必须注入。


Q3:Context Engineering 与 Prompt Engineering 有什么区别? ​

详细答案

Prompt Engineering 优化的是“给定信息如何表达”。

Context Engineering 则先决定:

  • 哪些信息存在;
  • 哪些信息应该出现;
  • 从哪里取;
  • 哪些冲突;
  • 哪些压缩;
  • 哪些 Tool 要暴露。

可以理解:

text
Prompt Engineering
= Presentation Layer

Context Engineering
= Data + Selection + Governance + Presentation

因此 Prompt 是 Context 的最后一公里,而不是全部。


Q4:RAG 为什么不等于 Context Engineering? ​

详细答案

RAG 主要负责 External Knowledge Retrieval(外部知识检索)。

但 Agent 每轮 Context 还可能来自:

  • State;
  • History;
  • Tool Observation;
  • Memory;
  • Skills;
  • Capability Schema;
  • Policy。

而且检索出来以后仍然需要:

  • Filter;
  • Authority;
  • Freshness;
  • Rank;
  • Budget;
  • Transform;
  • Assemble。

所以:

text
RAG = 一个 Context Source Pipeline

而不是完整 Context Engineering。


Q5:Context Window 越大,Context Engineering 会不会消失? ​

详细答案

大 Context Window 只增加容量,不自动提高信息利用率。

经典 Lost in the Middle 研究说明长 Context 中关键信息位置会影响性能。[^lost-middle]

同时大窗口仍存在:

  • Token Cost;
  • Latency;
  • Noise;
  • Conflict;
  • Stale Data;
  • Security;
  • Cache;

所以真正目标仍是:

让模型看到更高质量的信息,而不是最大化输入长度。


Q6:为什么 State 不能直接等于 Context? ​

详细答案

State 是 Source of Truth,Context 是 View。

如果直接相等:

  • 压缩 Context 等于破坏状态;
  • 内部字段全部泄露;
  • 无法针对不同模型生成不同输入;
  • Resume / Replay 变困难。

正确关系:

text
State
→ Context Builder
→ Context Snapshot
→ Model

Context 可以随 Turn 重建,但 State 不应因为 Prompt 被截断而丢失。


Q7:为什么 Tool Result 不能直接塞模型? ​

详细答案

Tool Result 往往是为机器和 Debug 设计的:

  • 很长;
  • 噪声多;
  • 二进制 / 表格;
  • 不适合模型直接消费。

所以应该分:

text
Raw Result
→ Artifact

Normalized Summary
→ Observation / Context

Pointer
→ Drill Down

这样既保留完整性,也保持高信息密度。


Q8:什么是 Context Snapshot? ​

详细答案

Context Snapshot 是某个 Model Call 的“输入证据”。

至少应能恢复:

  • Item IDs / Versions;
  • Tool / Skill IDs;
  • Context Policy Version;
  • Compaction Version;
  • Token;
  • Model Version。

它是 Context Debug、Eval、Audit 的共同基础。

没有 Snapshot,只能看到“系统现在的数据”,无法知道“模型当时看到的数据”。


Q9:Compaction 的本质是什么? ​

详细答案

Compaction 会把旧 Context 映射成更短表示,因此本质是 Lossy Transformation。

风险包括:

  • Fact Loss;
  • Constraint Loss;
  • Causal Loss;
  • Progress Loss。

所以生产 Compaction 应该:

  • 保留 Immutable Constraint;
  • 使用结构化 Schema;
  • 有版本;
  • 有 Pre / Post Eval;
  • 必要时可恢复。

OpenAI Agents SDK 当前甚至对 Compaction 的并发修改、stale operation 和失败恢复做了专门处理,说明它已经是数据一致性问题。[^openai-session]


Q10:Context Quality 的核心目标是什么? ​

详细答案

最好的 Context 不是最短,也不是最长,而是:

在预算内,对当前决策具有最高有效信息密度。

可以同时看:

  • Recall:该有的有没有;
  • Precision:进来的是否有用;
  • Authority:是不是该信;
  • Freshness:是不是当前有效;
  • Utilization:模型是否真正用到了。

因此 Context Quality 是多维目标。


A.2 生产工程问题 ​

Q11:Context Pipeline 应该怎么设计? ​

详细答案

Context Pipeline 应该把“检索”和“组装”拆成独立阶段:

text
Discover
→ 先追求 Recall,找到所有候选

Filter
→ 做权限、租户、Freshness、Trust 过滤

Rank
→ 决定优先级

Budget
→ 在有限 Window 内分配额度

Transform
→ Summary / Normalize / Redact

Assemble
→ 决定最终结构和顺序

Snapshot
→ 记录本轮真实输入

拆开的价值是每个 Failure 都可诊断。比如关键文档没进入 Prompt,必须先判断是 Discover 没找到,还是 Budget 淘汰,而不是统一归因为“RAG 不准”。


Q12:Context Ranking 只用 Embedding 相似度够吗? ​

详细答案

Embedding 相似度只表达“语义像不像”,却不表达“应该不应该相信”。

企业 Context Ranking 至少还要看:

text
Authority
Freshness
Scope
Task Phase
Dependency
Confidence
Token Cost

Data Agent 中最新 Semantic Registry 即使和用户 Query 的文本相似度略低,也应该高于历史 Session 中一条旧定义。

因此生产 Ranking 更像多目标排序,而不是单一向量分数。


Q13:如何做 Context Budget? ​

详细答案

Context Budget 应该至少同时预留:

text
System / Policy
Task / State
History
Retrieval
Tool Observation
Tool Schema
Output / Reasoning Reserve

如果只有全局 max_tokens,最常见的问题是 Tool Result 或 History 把关键 Task Constraints 挤出去。

成熟做法是:

  • Source 分类预算;
  • 必须项保护;
  • 动态借用剩余额度;
  • 超预算时明确淘汰优先级;
  • 按 Model Profile 调整。

Budget 本质是一个资源调度问题。


Q14:Compaction 什么时候触发? ​

详细答案

Token Threshold 是最容易实现的 Trigger,但并不总是最佳。

可以考虑:

text
Window Pressure
Task Phase Boundary
Subtask Completion
Tool Burst
Idle Time
Low Relevance

例如 Coding Agent 完成“定位问题”阶段后,即使 Token 还没到阈值,也可以把探索过程压成:

  • root cause;
  • relevant files;
  • failed hypotheses;

然后进入修复阶段。

这样 Compaction 同时承担“阶段状态转换”的作用。


Q15:Compaction 如何避免丢硬约束? ​

详细答案

关键原则是:

Hard Constraint 不应该只存在于自由 Summary 里。

推荐将 Compaction 输出分成固定结构:

text
Goal
Hard Constraints
Decisions
Facts
Completed Steps
Failed Attempts
Artifacts
Open Questions
Recent Messages

其中 Constraints 甚至可以不经过 LLM Summary,而直接从原始 Task Contract 保留。

所以 Compaction 最好是:

text
Immutable Fields
+
Structured Extract
+
Generated Summary

而不是单个字符串。


Q16:如何解决多个 Source 冲突? ​

详细答案

Conflict Resolution 需要 Context Item 自带:

text
source
authority
version
validity
observed_at
confidence

处理顺序可以是:

text
Same fact?
→ Check Source Authority
→ Check Freshness / Validity
→ Check Scope
→ Select winner or mark conflict

如果两个同权威来源仍然冲突,不应静默选一个,可以:

  • 同时呈现;
  • 让 Agent 进一步 Tool Verify;
  • Ask User / Domain Expert。

高分回答的重点是:

Conflict 是数据治理问题,不是让 LLM“聪明判断”就够了。


Q17:Subagent Context 怎么设计? ​

详细答案

Subagent Context 应围绕“最小任务包”设计,而不是复制父 Agent History。

推荐:

text
Subtask Goal
Success Criteria
Necessary Evidence
Allowed Capabilities
Security Scope
Return Schema

重任务在子 Context 中展开,主 Agent 最终只接收:

  • Result;
  • Evidence;
  • Artifact Pointer。

这样同时解决 Token、隔离和注意力污染。

但如果子任务强依赖父 Agent 隐含决策,Context 太少也会失败,所以需要显式 Task Contract,而不是盲目最小化。


Q18:Context Security 怎么做? ​

详细答案

Context Security 至少有四层:

text
Source Trust
→ 这条信息来自哪里

Visibility Scope
→ 哪个用户 / Agent 可以看

Instruction Boundary
→ Data 是否被误解释为指令

Sensitive Data Handling
→ Redaction / Masking / Audit

尤其 Prompt Injection 场景,外部网页和 Tool Result 必须默认被当作 Untrusted Data。

但要注意:

Context Security 只能决定“看什么”;真正能否执行危险 Action,必须由 Policy Service 作授权决策,再由 Harness 在模型之外强制执行。Harness 不是业务权限或身份规则的权威来源。


Q19:Context Cache 怎么优化? ​

详细答案

Prompt Cache 的核心是稳定前缀。

通常可以把:

text
Policy
Agent Instruction
Stable Skill

保持稳定,把:

text
Current Task
Timestamp
Run ID
Retrieval
Observation

放在动态区域。

但 Cache 优化必须排在 Correctness 后面。

典型反模式是为了缓存命中率不更新过期业务定义。

所以必须同时看:

  • Cache Hit;
  • Stale Rate;
  • Context Version;
  • Token Cost。

Q20:Context Debug 最先看什么? ​

详细答案

先恢复 Context Snapshot,然后按 Pipeline 反向定位:

text
Source 中存在吗?
→ Discover 找到了吗?
→ Filter 为什么保留 / 删除?
→ Rank 分数是多少?
→ Budget 是否淘汰?
→ Transform 是否改错语义?
→ Assemble 放在哪里?
→ Compaction 是否破坏?

只有这些都正确,才进入 Model Reasoning 排查。

这是 Context Debug 和传统“看最终 Prompt”最大的区别:不仅看结果,还要解释每个 Context Item 的决策路径。


A.3 企业架构问题 ​

Q21:什么时候应该建设共享 Context Platform? ​

只有当多个 Agent 重复遇到同一类治理问题时,平台化才有意义。典型触发信号包括:来源与策略版本无法统一追踪、跨租户隔离需要统一审计、多模型切换造成重复回归、多个团队重复实现 Snapshot、Compaction 和 Tool Result Contract。

决策时需要同时计算两类成本:局部重复实现的长期成本,以及共享契约、迁移、值班和发布治理的新增成本。如果只有一个 Agent、来源稳定且失败可以快速定位,保持领域内实现往往更简单。平台首先应统一 Contract、Snapshot、Policy Version 和 Eval 证据,不应统一所有领域内容和排序特征。

Q22:Context Engine 与 Runtime、Memory 和 Harness 怎样划责任? ​

Runtime 保存可恢复的 Run State 与 Session;Memory 决定哪些信息跨任务长期写入、合并和遗忘;Policy Service 负责信息可见性和真实动作的授权决策;Harness 在模型外执行能力暴露、审批与动作门禁;Context Engine 消费已授权的来源,为某次模型调用生成可见视图,并记录选择证据。

评审边界时可以做一个反向检查:截断 Prompt 不应删除真实 Run State;清空 Memory 不应让本次已经执行的动作消失;模型看见某个 Tool 不代表动作已经获准执行;重新组装 Context 也不应该修改知识源本身。若这些条件不成立,职责通常已经混在一起。

Q23:怎样评审 Context 方案,而不是只听功能介绍? ​

要求方案方用一个失败任务提供四份证据:原始 Source 与权限范围、Context Decision Trace、最终 Context Snapshot、任务级验证结果。然后追问某条必要信息为何进入或被排除、冲突来源如何决胜、压缩失败怎样恢复、策略升级怎样灰度回滚。

产品宣称支持 RAG、长窗口、缓存或摘要,只能证明存在功能入口,不能证明 Context 机制可靠。企业 PoC(概念验证)应固定模型、工具和任务集,注入 Missing、Stale、Conflict、Wrong Scope 与 Compaction Loss 等故障,对比正确率、可归因性、恢复能力、成本和延迟。

Q24:Build(自建)、Buy(采购)与开源方案怎样选择? ​

优先购买或复用通用能力,例如模型调用记录、基础 Session、通用检索连接器和可观测组件;企业自身通常仍要掌握 Context Contract、权限与权威规则、领域相关性特征、评测集以及策略版本。原因是这些部分直接绑定企业数据语义和风险责任,很难完全外包。

选择产品时不要只比较最大窗口、连接器数量和演示效果。正文 7.5 已给出可执行的采购门槛;这里的快速结论是:Snapshot 必须可导出复现,策略必须可版本化回滚,Compaction 必须可替换或禁用,敏感来源必须在模型调用前隔离,成本必须按验证成功任务计算,并且供应商切换后 Artifact 与评测集仍可重放。退出路径无法演练,就意味着上下文治理实际上被供应商运行时锁定。

A.4 核心英文术语速查 ​

术语 中文解释 本文中的准确含义
Context Window 上下文窗口 单次模型调用可承载输入与输出的容量边界,不等于有效利用能力
Context Rot 上下文退化 信息增长后,噪声、冲突、位置与摘要损失共同造成的利用质量下降
Snapshot 快照 某次模型调用实际输入的 Item、版本、位置和策略证据
Compaction 上下文压缩 把旧上下文转换为更短表示的有损过程
Externalization 上下文外部化 把大内容或长期状态保存到文件、状态库或 Artifact,只在 Context 中保留摘要与指针
Rehydrate 上下文重建 从真实状态、产物和任务契约重新组装可继续执行的上下文
Provenance / Lineage 来源追踪 / 血缘 记录信息来自哪里、经过哪些转换以及使用了哪个版本
Authority / Trust 权威等级 / 可信等级 前者决定事实冲突时信谁,后者决定内容能否被当作事实或指令
Progressive Disclosure 渐进式披露 先提供概要或指针,再根据任务需要逐层读取细节
Artifact 产物 存放在上下文窗口之外、可引用和再次读取的文件、查询结果或报告
Token Budget Token 预算 为系统规则、任务状态、检索、工具定义、观察结果和输出预留的容量分配
KV-cache 键值缓存 模型推理中复用稳定输入前缀计算结果的机制
RAG 检索增强生成 从外部知识检索证据并加入模型输入,是上下文工程的一部分
API / SDK 应用程序接口 / 软件开发工具包 前者定义系统调用契约,后者提供调用实现与开发辅助能力
MCP 模型上下文协议 Agent 与外部工具、资源或服务交互的一种开放协议
Policy Service 策略服务 依据真实身份、资源、动作参数和目标环境作可见性或动作授权决策的权威服务
P95 第 95 百分位延迟 95% 请求不超过的延迟值,用于避免平均值掩盖长尾等待
GMV 商品交易总额 数据分析示例中的业务指标,真实口径必须来自企业权威语义源
Ablation / Counterfactual Eval 消融 / 反事实评测 通过删除或替换 Context Item,判断其真实贡献与抗错误能力

附录 B:正文资料脚注 ​

[^manus-context]: Manus, Context Engineering for AI Agents: Lessons from Building Manus, 2025-07-18. https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus [^openai-tool-trimmer]: OpenAI Agents SDK, Tool Output Trimmer. https://openai.github.io/openai-agents-python/ref/extensions/tool_output_trimmer/

[^openai-models]: OpenAI API Models, current GPT-5.6 model specifications. https://platform.openai.com/docs/models [^gemini-models]: Google Gemini 3 model documentation. https://ai.google.dev/gemini-api/docs/gemini-3 [^gemini-token]: Google Gemini API, Understand and count tokens. https://ai.google.dev/gemini-api/docs/tokens [^databricks-sql-mcp]: Databricks SQL MCP server limitations: large result sets are truncated; reduce rows/columns or aggregate in SQL. https://docs.databricks.com/aws/en/agents/mcp-tools/databricks-sql [^databricks-genie]: Databricks Genie One MCP: truncated query results and dedicated full-result retrieval. https://docs.databricks.com/aws/en/agents/mcp-tools/genie-mcp [^databricks-genie-agent]: Databricks Genie Agent MCP server: curated table scope and Unity Catalog permissions. https://docs.databricks.com/aws/en/agents/mcp-tools/genie-agent [^snowflake-mcp]: Snowflake-managed MCP server: SQL / generic tool response size limits and tool-count limits. https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp [^snowflake-analytical-search]: Snowflake Cortex Agents Analytical Search: search-to-prune, intermediate materialization, then SQL / AI analysis. https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-analytical-search [^snowflake-agent-manage]: Snowflake Cortex Agents: Cortex Analyst semantic views and tool resource configuration. https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-manage

[^anthropic-context]: Anthropic, Effective context engineering for AI agents, Sep 29, 2025. https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents [^anthropic-tools]: Anthropic, Writing effective tools for AI agents — with AI agents, Sep 11, 2025. https://www.anthropic.com/engineering/writing-tools-for-agents [^lost-middle]: Liu et al., Lost in the Middle: How Language Models Use Long Contexts. https://arxiv.org/abs/2307.03172 [^langchain-summary]: LangChain, Summarization Middleware. https://docs.langchain.com/oss/python/langchain/middleware/built-in

[^langchain-context]: LangChain, Context engineering in agents. https://docs.langchain.com/oss/python/langchain/context-engineering [^deepagents-context]: LangChain Deep Agents, Context engineering. https://docs.langchain.com/oss/python/deepagents/context-engineering [^openai-session]: OpenAI Agents SDK, Sessions / OpenAI Responses Compaction Sessions. https://openai.github.io/openai-agents-python/sessions/ [^openai-session-protocol]: OpenAI Agents SDK, Session protocol. https://openai.github.io/openai-agents-python/ref/memory/session/ [^pi-compaction]: Pi Documentation, Compaction & Branch Summarization. https://pi.dev/docs/latest/compaction [^pi-session]: Pi Documentation, Sessions. https://pi.dev/docs/latest/sessions [^anthropic-long-context]: Anthropic, Prompting best practices / long context and multi-window workflows. https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/prompt-templates-and-variables

[^openai-compaction-session]: OpenAI Agents SDK, OpenAI Responses Compaction Session. https://openai.github.io/openai-agents-python/sessions/ [^openai-model-context]: OpenAI Agents SDK, Models / context_management and server-side compaction. https://openai.github.io/openai-agents-python/models/ [^ms-context-provider]: Microsoft Agent Framework, Adding Context Providers. https://learn.microsoft.com/en-us/agent-framework/journey/adding-context-providers

附录 C:参考资料(截至 2026-09-13) ​

  1. LangChain — Context engineering in agents
    https://docs.langchain.com/oss/python/langchain/context-engineering

  2. LangChain — Context overview
    https://docs.langchain.com/oss/python/concepts/context

  3. LangChain Deep Agents — Context engineering
    https://docs.langchain.com/oss/python/deepagents/context-engineering

  4. LangChain — Summarization Middleware
    https://docs.langchain.com/oss/python/langchain/middleware/built-in

  5. OpenAI Agents SDK — Sessions
    https://openai.github.io/openai-agents-python/sessions/

  6. OpenAI Agents SDK — OpenAIResponsesCompactionSession
    https://openai.github.io/openai-agents-python/ref/memory/openai_responses_compaction_session/

  7. OpenAI Agents SDK — Session protocol
    https://openai.github.io/openai-agents-python/ref/memory/session/

  8. Pi — Compaction & Branch Summarization
    https://pi.dev/docs/latest/compaction

  9. Pi — Sessions
    https://pi.dev/docs/latest/sessions

  10. Pi — Usage / Context Files
    https://pi.dev/docs/latest/usage

  11. Anthropic — Prompting best practices / long context
    https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/prompt-templates-and-variables

  12. OpenCode — Agents
    https://github.com/anomalyco/opencode/blob/dev/packages/web/src/content/docs/agents.mdx

  13. Liu et al. — Lost in the Middle: How Language Models Use Long Contexts
    https://arxiv.org/abs/2307.03172

  14. Anthropic — Effective context engineering for AI agents
    https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents

  15. Anthropic — Writing effective tools for AI agents
    https://www.anthropic.com/engineering/writing-tools-for-agents

  16. OpenAI API — Model specifications
    https://platform.openai.com/docs/models

  17. Google Gemini API — Gemini 3 models
    https://ai.google.dev/gemini-api/docs/gemini-3

  18. Databricks — Databricks SQL MCP server
    https://docs.databricks.com/aws/en/agents/mcp-tools/databricks-sql

  19. Databricks — Genie One MCP server
    https://docs.databricks.com/aws/en/agents/mcp-tools/genie-mcp

  20. Snowflake — Cortex Agents managed MCP server
    https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp

  21. Snowflake — Analytical Search
    https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-analytical-search

  22. Manus — Context Engineering for AI Agents: Lessons from Building Manus
    https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus

  23. OpenAI Agents SDK — Tool Output Trimmer
    https://openai.github.io/openai-agents-python/ref/extensions/tool_output_trimmer/