Context Gateway

Context Gateway 是 Agent 获取上下文的唯一受控入口。Agent 不做全库搜索,而是按任务意图、身份、部门、目标对象和预期 Action Type 请求最小可用上下文包——不过宽,不过窄,每个包可记录、可回放、可审计。

// 定义

Context Gateway 位于六层架构的 L3,在 Policy & Identity Plane(L2)之上、Department Agent Cells(L4)之下。它根据任务、身份、权限和 Ontology 查询生成最小可用上下文:Ontology 决定"什么相关",策略平面决定"什么可见",Gateway 把两者组装成一个带版本号的 context package 交给 Agent。

为什么 Agent 不能全库搜索

企业 AI 落地最直觉的做法,是把全部企业数据灌进一个向量库,让 Agent 自由检索。这个做法在演示里成立,在组织里不成立——因为它必然落入两难之一:

// 两难

上下文过宽:Agent 获得不必要的敏感资料,授权无法成立,任何一次检索都是一次潜在的越权。上下文过窄:Agent 只看到孤立文件,无法理解企业对象之间的关系,任务质量随之崩塌。两个方向上的失败,根因相同——检索范围由相似度决定,而不是由语义和权限决定。

失败方向典型表现直接后果
上下文过宽全库向量检索把合同金额、薪酬、客户明细等无关敏感内容召回进 prompt权限边界形同虚设,无法对 Agent 做任何有意义的授权与审计
上下文过窄Agent 只拿到关键词命中的孤立文件,看不到"项目—客户—合同"这类关系链路Agent 无法理解对象在企业语义中的位置,输出不可靠,人工接管率升高

Context Gateway 的答案是把"检索"换成"路由":Agent 声明它要做什么、以什么身份做、对哪个对象做,由 Gateway 依据 Ontology 找到相关语义子图,再由策略平面按三层权限裁剪,最后生成刚好够用的上下文包。范围由语义和权限决定,而不是由 embedding 相似度决定。

六步流程

一次完整的上下文请求—执行—提交闭环分为六步。前四步发生在中央(Gateway 与策略平面),后两步发生在部门 Agent Cell 本地:

  1. Agent 提交上下文请求

    输入:任务意图、身份、部门、目标对象和预期 Action Type。输出:一次结构化的上下文请求。Agent 必须先声明"我是谁、我要对哪个对象做什么",而不是抛出一个自由文本检索词——预期 Action Type 让 Gateway 能提前判断这次任务需要哪些上下文、将触发哪些权限检查。

  2. Gateway 查询 Ontology

    输入:请求中的目标对象与任务意图。输出:相关 ObjectLinkActionInterface 的候选集合——一个以目标对象为中心的语义子图。这一步只回答"什么相关",不回答"什么可见"。

  3. Policy & Identity Plane 过滤

    输入:候选集合,加上请求者的身份与策略。输出:裁剪后的可访问集合——不可访问的对象、字段、文件和工具被逐项移除。过滤依据是权限模型的 Data 层与 Tool 层:对象级、字段级、关系级、文件级、工具级,逐层收窄。

  4. Gateway 生成 context package

    输入:裁剪后的可访问集合。输出:一个带版本号的最小上下文包,内容包括对象摘要、关系路径、相关文件、历史 action log 和可执行动作(详见下节)。版本号让这个包成为可审计对象:之后任何动作都能回溯到"基于哪个版本的上下文"。

  5. Agent 在本地执行

    输入:context package。输出:执行结果写回本部门文件系统与事件总线——而不是直接写企业状态。Cell 在自己的隔离环境里完成思考与产出,过程产物落在部门私有文件系统,结果通过 Event Producer 发布。

  6. 受控 Action 提交

    输入:执行结果中需要改变企业状态的部分。输出:一次 Action Type 提交,绑定发起者、Agent 版本和上下文包版本,写入 Action Log。改变企业状态必须走这条通道,不允许绕过审计直接改底层表。

Context Package 里有什么

Context package 不是一堆检索片段的拼接,而是一个有固定结构的合约对象。五个组成部分各自回答 Agent 执行任务所需的一个问题:

组成部分内容回答的问题
对象摘要目标对象及相关对象的受控摘要:类型、关键属性、当前状态——经过字段级裁剪,而非完整记录我在操作什么
关系路径目标对象在 Ontology 中的关系链路,如"项目—服务—客户—签订—合同"它在企业语义中处于什么位置
相关文件按权限裁剪后与任务相关的文件引用与片段,范围由策略决定而非检索器决定我可以依据哪些材料
历史 action log与目标对象相关的历史动作摘要:谁在何时对它做过什么之前发生过什么,我会不会重复或冲突
可执行动作该身份在该对象上被允许提交的 Action Type 清单我被允许做什么
// 治理规则

每个 context package 都有版本号。Agent 之后提交的任何 Action 都必须绑定上下文包版本——审计因此能回答"这个决定是基于哪个版本的上下文做出的",而不只是"做了什么"。

注意第五项:可执行动作清单把"能做什么"显式化为操作合约。Agent 不需要猜测自己的权限边界,越权动作在上下文层面就不存在,而不是提交后才被拒绝。

质量评估:记录每一个包,用评估器回放

上下文路由质量差是这套架构的关键风险之一:Gateway 给的包过宽是安全问题,过窄是质量问题。对应的缓解手段只有一个——让每一次路由决策本身变成可评估的数据:

  1. 记录 — 每次生成的 context package 连同请求参数一起带版本号持久化,Cell 侧在本地缓存(如 context/packages/ 目录),中央侧归档。
  2. 回放 — 评估器用相同的请求参数重放历史路由,对比包内容与最终任务结果:任务失败时,是材料缺失(过窄)还是噪声过多(过宽)?
  3. 度量 — 持续收集任务成功率、失败原因、上下文缺口和人工接管点,把"包的质量"变成可观测指标,进入 L6 Observability 层。
  4. 演化 — Gateway 的检索和压缩规则属于允许自演化的对象,但每次变更必须走演化闭环:proposal、approval、灰度发布到单个部门 Cell、对比指标后再推广,且保留 rollback。

同时为了让审计可读,Action Log 只记录可复盘的上下文摘要与包版本号,不保存全部敏感上下文——回放时按版本号重建,而不是把敏感内容复制进日志。

失败模式与降级

Gateway 是中央组件,但它的短暂故障不应让全公司停摆。降级策略的原则是:本地低风险任务继续,跨部门读取与高风险动作暂停,审计链永不中断:

失败模式降级行为
中央 Context Gateway 短暂不可用Cell 基于本部门 Context Index 处理低风险本地任务,高风险动作暂停等待恢复
Ontology schema 更新失败回滚到上一稳定版本,Gateway 继续以稳定版本提供路由
Event Bus 延迟本地 action buffer 保留状态,恢复后补发,消费端幂等
中央日志短暂不可用Local Audit Buffer 保留本地审计链,恢复后异步汇入 Action Log,不产生审计缺口
上下文包质量退化(过宽 / 过窄)通过包记录与评估器回放定位问题,经演化闭环修正检索与压缩规则后灰度发布
// 降级边界

降级期间,Cell 只能依赖本部门 Context Index——这个索引本身被权限边界裁剪过,天然不会越权。任何跨部门读取与企业状态变更都必须等待 Gateway 与策略平面恢复。可用性永远不以越权为代价。

完整的冗余设计与各层故障的降级策略,见可靠性与降级

相关阅读