跳到正文

上下文、状态与能力资产 ​

一句话:上下文不是拼出来的,是编译出来的。窗口有限而任务世界持续增长,模型每轮看见什么,必须由一层独立的确定性管线决定,而不是让调用方随手拼接。

对应原书:第 5 章《信息:上下文、状态与可复用能力资产》。

为什么需要 ​

把资料塞进窗口,看起来最省事,但它同时破坏三件事:

  • 成本与注意力:窗口越满,单位 token 的信息密度越低,关键约束越容易被淹没;
  • 一致性:重复注入同一事实,不同位置说法不一致时,模型只能猜;
  • 可追溯:出问题时无法回答“模型当时到底看到了什么”。

更根本的问题是作用域:如果先跨租户召回、再在提示词里提醒“不要泄漏”,数据其实已经进入了模型输入,隔离在那一刻就失败了。上下文必须在进入模型之前就完成过滤与编译。

核心机制 ​

一、上下文的固定分层 ​

系统侧六层,约束强度自上而下:Platform Policy(不可被项目文档覆盖)→ Agent Contract(职责与禁区)→ Tenant / Project Rule(附加约束)→ Runtime Reminder(阶段、预算、等待原因)→ Selected Skill(本轮方法资产)→ Tool Descriptors(工具说明与参数)。任务侧七项:用户目标、Plan/Todo、最近交互、压缩后的历史、检索到的记忆、检索到的知识、工作区引用。

冲突按层级与权威来源取舍:用户最新要求可以改方向,但不能突破安全边界;记忆里的偏好不替代当前业务事实;工具返回的内容不自动升级为系统指令。

二、Context Builder:一条确定性管线 ​

两个顺序不能反:先过滤再排序,否则排序阶段就已经跨作用域看到了不该看的内容;先提交事实再压缩,否则压缩会改变任务事实。

Manifest 是这条管线的产出,也是排障入口。它记录每个条目的来源、作用域、版本、可信度、权限依据、入选原因、token 数、变换方式、内容哈希。出问题时先看 Manifest,再怀疑模型。

预算不是平均分:规则与目标设固定下限,动态额度随阶段浮动,并且必须预留输出与 Observation 的空间。优先级按七个维度排:约束强度、任务相关性、时间有效性、来源可信度、执行依赖、信息增量、token 成本。

三、压缩的四个动作 ​

压缩不是一次摘要,而是四步循环:

  1. Commit:把结构化事实提交到 Task State 或工作区;
  2. Compact:把叙述性历史转成摘要,带来源与覆盖范围;
  3. Rebuild:用摘要、状态和最近消息重建上下文;
  4. Validate:检查目标、未决项、权限、证据是否完整,并用续行用例验证。

任何一步不满足,回到 Commit。数万行的大结果不能留在窗口里,要卸载到工作区或制品库,活动上下文只保留摘要和稳定引用——引用要受权限保护、带版本与时间戳,按需取回。

“最近”也不只按时间算:目标的最新修改、未解决的工具错误、待审批动作、验收失败的证据,即使更早,也属于活动状态。

四、三个边界与三种状态表示 ​

概念边界说明
Call一次请求,秒到分钟模型调用与工具调用的最小单位
Session一段交互,分钟到数天一个 Session 可以发起多个 Task
Task一个可验收目标可跨 Call、Session、进程与节点

状态有三表示,互不可替代:

  • Event Log 记过程,用于审计与重建;
  • Snapshot 看当前,用于快速读取;
  • Checkpoint 是安全恢复点,包含续行位置、幂等信息与环境依赖。

只有含完整状态变更和必要输入的事件才能重放;诊断日志不能冒充事件日志。

五、工作区、制品与四类记忆 ​

工作区分六个区:inputs、scratch、state、artifacts、evidence、manifest。各区的生命周期与保留策略不同,混在一起会导致“临时文件被当成交付物”或“证据被清理掉”。

制品有完整生命周期:Draft → Validating → Ready → Published/Rejected → Archived/Deleted。模型写出文件不等于产物完成——前者是动作,后者要经过校验与验收。

记忆分四类:

类型内容来源
Working当前任务的事实Task State / 工作区
Episodic过往任务的经验任务轨迹 + 结果质量
Semantic稳定事实、偏好、实体用户确认或权威系统
Procedural已验证的方法多次验证后升级为 Skill

写入前要过六问:未来有没有价值、是环境验证还是推测、归属与保留周期、是否含敏感数据、是新增还是合并、出错时谁纠正以及派生索引怎么清。四类记忆的权威责任不同,混用会导致把“某次任务的经验”当成“组织事实”。

六、Skill 的三层披露与治理 ​

Skill 是“在某类任务中如何正确使用若干动作”,不是 Prompt,不是工具的别名,也不直接拥有权限。它的加载分三层:

  1. 发现:只暴露名称与描述;
  2. 选择:加载 Manifest,判断是否适用;
  3. 执行:读取详细指令与脚本。

选择时要看六件事:模型兼容性、工具依赖、环境条件、租户许可、数据范围、版本状态。Skill Registry 的生命周期是 Draft → Test → Review → Publish → Observe → Update;Trace 必须能定位到具体 Skill 版本,Agent 版本要锁定 Skill 集。

七、多租户与真正的删除 ​

作用域分六级:Global、Tenant、Project、User、Session、Task。先定身份作用域再检索,这条顺序就是隔离本身。

删除不是删原文。完整动作是七步:用稳定资产 ID 追踪派生链 → 禁止读取 → 删除原文 → 清理索引、缓存、摘要 → 更新 Manifest 与 Skill → 保留最小审计 → 触发验证。只删向量库,下次重建会把内容带回来。

最小上手 ​

yaml
context:
  system_layers: [platform_policy, agent_contract, tenant_rule, runtime_reminder, skill, tools]
  task_items: [goal, plan, recent, compacted, memory, knowledge, workspace_refs]
  budget:
    fixed_floor: [policy, contract, goal]
    reserve_output: true
  manifest_fields: [source, scope, version, trust, permission_basis, reason, tokens, transform, hash]
compression:
  order: [commit, compact, rebuild, validate]
  keep_active: [goal_changes, unresolved_tool_errors, pending_approvals, verification_failures]
workspace:
  zones: [inputs, scratch, state, artifacts, evidence, manifest]

验收看三件事:任一轮都能导出 Manifest;压缩后用续行用例能接着跑;跨作用域检索在过滤阶段就被挡住。

生产动作 ​

  • 把 Manifest 当排障第一入口。模型答错时,先确认它看到了什么、没看到什么,再谈提示词。
  • 资产变更走反退化闭环:结构校验 → 影响分析 → 离线回放 → 灰度新版本 → 观察成本、延迟、引用准确性、泄漏、误选、膨胀 → 保留、修订或回滚。
  • 删除要可验证。删完跑一次召回测试,确认原文、摘要、索引、缓存都取不到。
  • Skill 版本要进 Trace。否则无法判断“是方法变了,还是模型变了”。

边界 ​

  • 全塞窗口不可持续。成本只是表面,真正的问题是约束被稀释、事实重复且互相矛盾。
  • 只留最近几轮会丢关键状态。目标变更、已确认事实、外部副作用、验收缺口、恢复位置,都可能不在最近几轮里。
  • 压缩会改事实。摘要没有来源与覆盖范围,重建后约束会悄悄消失。
  • 提示词补救不了隔离。跨作用域召回一旦发生,泄漏已经完成。
  • 统一存储不等于统一引擎。运行时状态、工作区、记忆、本体对一致性的要求不同,强行一个引擎会牺牲其中一类。

讲清楚 ​

上下文是编译产物:先定身份与作用域,再收集候选、过滤、排序、分配预算、压缩引用化、按层级编译,最后产出可解释的 Manifest。顺序里有两个硬约束——先过滤再排序,先提交事实再压缩。

状态要分成 Call、Session、Task 三层,用 Event Log 记过程、Snapshot 看当前、Checkpoint 做恢复点。工作区、制品、记忆、Skill 各有一套生命周期,混用会让“临时结果”变成“组织事实”。

Skill 按发现、选择、执行三层披露,Agent 版本锁定 Skill 集;多租户隔离在检索之前完成;删除要连派生物一起清。做到这些,上下文才既省 token,又能被追责。

适用:Agent 上下文工程与知识资产管理 | 初稿 2026-10

把 AI 工程讲到既懂也会用