文档
历史档案文档OceanWay 架构

历史 · 模型、Agent 与 MCP

重构前档案,仅供追溯,不作为新版本执行指令

历史档案 · 2026-09-11 重构前快照。 本文中的“当前”“已冻结”和实施顺序属于旧基线。新版本以现行总览实施计划为准。

模型、Agent 与 MCP 是一条能力链上的不同层:模型提供推理与生成,MCP 提供外部数据和动作,Agent 负责在明确上下文、权限和预算内编排两者。任何一层都不应绕过 Run、账本和审计。

模型体系

模型体系分为四层,避免把供应商返回的一长串 ID 直接暴露给用户:

层级示例Owner / 来源面向对象是否稳定
Provider Model Observation上游同步到的原始模型 ID 与元数据Text/Media Gateway 私有观测,OceanWay 审核平台运营
Model Deployment某供应商、区域、协议和渠道上的真实部署私有网关基础设施路由与运维有条件稳定
Logical ModelOceanWay 统一能力、参数和候选路由OceanWay Model Control工作台与内部运行时稳定
Model Offering对某 Surface 发布的公开名称、Family、费率和协议OceanWay Product Control最终用户或开发者稳定契约

工作台和公开 API 只引用 Logical Model / Offering,不直接绑定供应商渠道。RunAdmissionManifest 固定价格快照、initial Model Deployment 与 Routing Policy Revision;每个实际 Deployment 由对应 AttemptExecutionManifest 固定,Gateway 的物理渠道只进入唯一 AttemptRouteBinding + GatewayRouteSnapshot

模型如何进入 Run、如何选择 Text 或 Media Pool 中的私有 Gateway Deployment,以及同步、流式、异步任务的重试和结算边界,见调度、执行与模型网关池。每个 Model Deployment 只能属于一个明确的 Pool。

显式发布面

逻辑模型使用显式 surfaces,不根据名称、提供方或能力猜测:

Surface可见范围必要门禁
webCanvas、统一 Agent 与各网页工作台启用、可路由、能力符合当前工作台
api开发者模型目录和公共 API启用、可路由、存在公开协议与有效费率
internal规划、审核、路由、质量评估等平台内部任务仅内部服务身份可调用

Surface 是只允许 web | api | internal 的三值发布目标。unpublished 是独立发布状态,不是第四个 Surface;新接入模型在审核前保持 unpublished 状态,即使存储层暂以 surfaces=[] 表达“尚未选择发布目标”,也不能把空数组或 unpublished 当作 Surface 值导出。

codex-auto-review 这类审核模型应只标记 internal,因此不会出现在网页模型选择器或开发者公共目录。一个模型确实需要跨面时可以显式拥有多个 Surface,但任何范围都不能自动推导。

UUMI/new-api 和 Media Gateway 都不是 Provider 品牌或 Surface。网关内部模型别名、能力、Channel、Supply 与成本配置只是运营元数据,不是公共 Model Offering、模型广场或用户售价;只有 OceanWay Product Control 能审核并发布 Surface、Offering 和 Rate Card。新同步的上游模型默认处于 unpublished,Agent 与 Canvas 不感知物理网关、Provider 账号或 Credential Version。

两级产品过滤

web 只是第一层发布门禁,不代表该模型能出现在所有网页:

逻辑模型公共目录
  → Surface = web
  → 当前产品支持的 Capability
  → 当前任务、素材与参数兼容
  → 当前组织策略与预算
  → 用户可选或 Agent 自动规划

例如:

  • 生图工作台只展示图片生成模型;
  • 视频工作台展示视频及其真实音频能力;
  • 漫剧按分镜、视频、配音和审核阶段过滤;
  • 电商按文案、图片、视频和商品理解任务过滤;
  • 默认文本模型可以参与内部规划,但不必公开给用户选择。

这保证共享同一目录时不会把“不相关但存在”的模型塞进每个工作台。

开发者模型目录

大量文本模型进入 API 后,目录按“能力 → Family → Variant”组织:

能力
├── 文本与对话
│   ├── 通用
│   ├── 推理
│   ├── 编程
│   ├── 长上下文
│   └── 轻量低延迟
├── Embedding / Rerank
├── 图像理解与生成
├── 视频理解与生成
└── 音频理解与生成

Family
└── Variant:上下文、速度、质量、版本或区域

每个 Model Offering 应展示:

  • 稳定公开 ID 与 Family;
  • 能力、输入输出模态和上下文;
  • 支持的 API 协议与流式能力;
  • 生命周期:Preview、GA、Deprecated、Retired;
  • 费率单位、限制与可用区域;
  • 数据使用与训练政策摘要;
  • 已知参数差异和迁移建议。

Provider、Channel、上游账号、候选权重和内部失败原因不进入公共目录。公开别名解析到具体 Offering Revision;运行开始后固定版本,不能因别名变化改变正在执行的请求。

发布与下线流程

模型下线不能让历史 Run、账单和资产失去可解释性。Agent 与 Canvas 发布版本应固定 Logical Model Policy,并声明模型不可用时是允许同 Family 替代、等待恢复,还是明确失败。

Agent 模型

Agent 分为定义、版本、部署与运行:

对象作用
Agent稳定身份、名称、Owner 与用途
Agent Revision不可变指令、输入输出 Schema、能力、模型策略和工具需求
Agent Deployment / Alias某环境当前允许使用的 Revision
Agent Run一次实际执行,拥有短期最小权限

Agent Revision 可声明:

  • 输入、输出与失败契约;
  • 允许的模型 Family 和回退策略;
  • 需要读取或生成的 Asset 类型;
  • MCP Tool 与风险级别;
  • Memory 与知识源策略;
  • 单次、每日和项目预算;
  • 是否需要人工审批;
  • 允许在哪些产品与环境部署。

平台私有基础提示词、路由策略、审核规则和 Secret 与可分享 Agent 定义分离。用户可以获得“运行 Agent”的权限,而没有查看内部定义或编辑版本的权限。

Agent Run 权限

Agent Definition 不携带生产权限。每次真正执行 Agent 都创建一个独立、authentication.kind=delegated_agent 的 Run 与短期 Run Principal,权限取交集:

发起人当前权限
∩ Service Account 权限(如有)
∩ Agent Revision 能力声明
∩ Workspace / Project 授权
∩ MCP Tool Grant
∩ 企业安全与数据外发策略
∩ 当前预算

Developer Credential、Playground Grant 或 Customer Session 可以发起 Agent,但它们只用于验证发起人并签发绑定预分配 runId 的 Delegation Grant;Core 在同一准入事务创建 Delegated Agent Run、Manifest 与 agent_run Principal。若发起动作本身已有普通 Run,Agent 是通过 parentRunId + causationId 关联的独立子 Run,而不是把父 Run 的 Service Account/Customer Execution Principal 原地替换为 Agent Principal。发起认证的版本化 Ref/摘要保存在 Delegation Grant 的不可变 Claims 中,不混入子 Run 的 Authentication 分支。非 Agent 的直接模型调用继续使用原 developer_credential | playground_execution_grant | customer_session 分支,且不创建 Agent Run Principal。

Agent 永远不能读取原始 API Key 或 MCP Token,也不能自行切换付款组织。执行器向 MCP Gateway 或其他受控执行面发出的凭据必须是下文的 RunExecutionToken@1,而不是泛化的 Service Account Token。

RunExecutionToken@1

RunExecutionToken@1 是由 Core Identity / Authorization 签发的短时、签名、严格 Schema 凭据;它只授权一个已准入的 Run 在一个明确的 Operation 中执行最小能力。其签名 Claims 至少为:

schemaVersion = RunExecutionToken@1
iss                         # OceanWay Core Identity / Authorization 的固定签发者
aud                         # 精确的受理方:Run Executor 或 MCP Gateway,不能是通配 audience
jti                         # 单次受理防重放标识
iat / nbf / exp             # 短时有效期;受理方同时校验时钟边界
tenantKind / tenantId
workspaceId
projectId?                  # 缺省也属于受签名的空值,不得由调用方补写
runId
operationId
actorPrincipalId
executionPrincipalId
sub = executionPrincipalId
authenticationKind = delegated_agent
authorizationDecisionId / authorizationDecisionSchemaVersion
authorizationDecisionInputDigestAlgorithmVersion / authorizationDecisionInputDigest
executionManifestRef
executionManifestSchemaVersion
executionManifestDigestAlgorithmVersion = jcs-sha256-v1
executionManifestDigest
authorizationScopeSnapshotRef / authorizationScopeSnapshotSchemaVersion
authorizationScopeSnapshotDigestAlgorithmVersion / authorizationScopeSnapshotDigest
allowedAssetVersionRefs[]
allowedModelOfferingRevisionIds[]
allowedToolVersionRefs[]
authorizationActionIds[]   # 规范排序的精确动作集合,不能以“agent:*”等宽泛 Scope 替代
billingAccountId / billingReservationId
budgetPolicyRevisionId
budgetCap =
  { kind=credits; amount }
  | { kind=entitlement; entitlementKey; quantity; unit }
  | { kind=money; money={ amount; currency } }
traceId

签发器必须先通过版本化 Core Manifest Read Contract 解析并校验 Token 中的 executionManifestRef + executionManifestSchemaVersion + executionManifestDigestAlgorithmVersion + executionManifestDigest 完整四元组,验证 Tenant、Workspace、可选 Project、Actor、执行主体、Authorization Decision 与 RunAdmissionManifest.authentication.kind=delegated_agent 的冻结值完全一致。Token中的 Authorization Scope Snapshot完整四元组必须与 Manifest相等;Allowed Asset/Model/Tool数组与 authorizationActionIds[]必须分别是 Manifest executionAuthorization对应排序集合的规范子集,不能用展示型 Scope名称代替 Action ID。billingAccountId + billingReservationId + budgetPolicyRevisionId 必须与 Manifest budgetAuthorization 精确相等。budgetCap 使用同一严格 BillingValue 联合:Kind 必须相同;Credits/Money Amount 或 Entitlement Quantity 是同精度正规范 Decimal 且不超过 reservedValue;Entitlement Key/Unit 或 Money Currency 必须逐项相等。跨 Kind、错 Bucket/Unit/Currency、缺联合字段和把 Money 当 Credits 全部拒绝。Manifest Scope Snapshot/Authorization Decision/Delegation Grant 的摘要链也必须一致。任何字段都不能由 Executor、Agent Prompt 或 MCP Server推断、扩展或覆盖。sub 等价于 executionPrincipalId,且必为本 Run 唯一的 agent_run Principal。Token 不能赋予 Manifest 未声明的模型、资产、Tool、数据外发范围、预算或付款账户,也不能用于另一个 runId / operationId

以下 Delegated Agent 字段全部必填并与准入 Manifest 逐字段相等:

executionPrincipalId        # Principal Registry 中 kind=agent_run 的不可复用主体
agentRevisionId
delegationGrantRef
delegationGrantSchemaVersion
delegationGrantClaimsDigestAlgorithmVersion = jcs-sha256-v1
delegationGrantClaimsDigest

agent_run Principal 的 runId 必须等于 Token runId,并与同 Tenant / Workspace / Project(如有)绑定;它绝不能复用为另一个 Run 的执行身份,也不能以 Agent Definition、Agent Alias 或 Service Account 冒充。委托授权已过期、撤销、Schema 或 Claims Digest 不一致时,受理方拒绝签发和使用。

签发器为每个受理动作签发新的 jti。MCP Gateway / Executor 在验证签名、精确 iss / aud、时间窗、所有冻结引用和主体状态后,以原子 compare-and-set 消费该 jti;已消费、未知、过期或已撤销的 jti 必须拒绝,不得通过重试重放外部副作用。长 Run 只能按仍有效的 Manifest、授权与预算重新签发新的短时 Token,不能延长、克隆或刷新旧 Token。

最小负向测试至少覆盖:使用非 delegated_agent Manifest 签发 Agent Token、把父 Run 的 Service Account/Customer Principal 当成 Token sub、跨 Tenant / Workspace / Project、跨 Run / Operation、Scope Snapshot四元组错配、宽泛或增补 Action、未授权 Asset/Model/Tool、付款账户或 Reservation 替换、Budget Policy/Unit 错配、Cap 超过冻结上限、Actor/执行主体与 Manifest 不一致、错误 iss/aud、过期或提前使用、重复 jti、已撤销 Run Principal、委托 Grant 过期/撤销、Agent Revision 或 Grant Digest 不一致,以及把 agent_run Principal 复用于第二个 Run。

专业 Agent 与跨产品 Handoff

每个产品可以有专业 Agent,但它们通过结构化 Context Package 协作,不转发整段聊天历史:

handoffId
sourceProduct
targetProduct
tenantKind / tenantId / workspaceId / projectId?
objective
inputResourceVersions[]
constraints
requestedOutputSchema
budgetPolicy
returnBinding

Handoff 必须在界面中可见,用户知道哪些资产、约束和费用被带到下一工作台。目标 Agent 产生新 Run;完成后按 returnBinding 返回候选结果,源产品再显式接收。

MCP 领域模型

MCP 与普通模型渠道不是同一个概念。建议对象:

对象作用
Connector某类外部系统或 MCP Server 的集成定义
Connection某组织、Workspace、Project 或个人对外部账户的授权实例
CredentialVault 中的 OAuth Token、Key 或证书
Tool Version某个可调用工具的 Schema 与风险等级
Tool Grant哪个主体可在什么范围调用哪些工具
Invocation一次经 Gateway 代理的实际调用与结果摘要

Connection 分为:

  • Personal Connection:只属于个人,默认不能进入企业项目;
  • Organization Connection:由企业管理员维护,可授权给多个 Workspace;
  • Project Connection:只服务一个 Project;
  • Production Connection:独立审批,严格限制写操作和网络环境。

普通用户界面使用“连接”和“工具”文案,不要求理解 MCP 协议;开发者与管理员可以查看 Server、Tool Schema、版本、授权和调用日志。

MCP Gateway

Agent 永远不直接接触 Credential,由 MCP Gateway:

  1. 校验 Run Principal 与 Tool Grant;
  2. 检查数据分类、外发目标和风险策略;
  3. 对高风险写操作请求审批;
  4. 从 Vault 取得短期凭据并代为调用;
  5. 过滤响应中的 Secret 与不必要敏感字段;
  6. 记录外部账户、工具版本、请求摘要、结果与 traceId

工具风险至少分为:

等级示例默认策略
Read查询商品、读取文档、获取库存按授权直接执行
Write创建草稿、更新内部记录可按项目策略执行
External Publish发布商品、发邮件、投放广告人工审批或预批准工作流
Destructive / Financial删除、退款、调价、采购强制审批、额度与完整审计

Prompt Injection、工具描述投毒和返回数据污染都视为不受信输入。Tool 输出不能自动提升权限或修改 Run Policy。

双向生态

近期重点是 OceanWay 作为 MCP Client 连接客户与 SaaS 系统。后续可以把 OceanWay 的受控能力作为 MCP Server 暴露,例如:

  • 搜索已授权 Asset;
  • 创建 OceanWay Run;
  • 查询 Run 状态;
  • 读取已授权输出;
  • 触发 Canvas 模板或 Agent Deployment。

对外暴露时仍使用 Service Account、Scope、预算、幂等和审计,不能把内部管理工具直接公开。

能力链不变量

  • 新 Model、Agent、Tool 默认不公开。
  • Web、API、Internal 模型面显式隔离。
  • API 目录按能力和 Family 组织,不暴露供应商渠道噪声。
  • Agent Definition、运行权限和凭据彼此分离。
  • MCP Credential 只存在 Vault/Gateway,不进入 Prompt、Canvas、事件或浏览器。
  • 每次 Run 固定模型部署、Agent Revision、Tool Version、资产版本和价格快照。
  • 外部副作用与第三方费用必须独立识别、审批和审计。

On this page