历史 · 模型、Agent 与 MCP
重构前档案,仅供追溯,不作为新版本执行指令
历史档案 · 2026-09-11 重构前快照。 本文中的“当前”“已冻结”和实施顺序属于旧基线。新版本以现行总览和实施计划为准。
模型、Agent 与 MCP 是一条能力链上的不同层:模型提供推理与生成,MCP 提供外部数据和动作,Agent 负责在明确上下文、权限和预算内编排两者。任何一层都不应绕过 Run、账本和审计。
模型体系
模型体系分为四层,避免把供应商返回的一长串 ID 直接暴露给用户:
| 层级 | 示例 | Owner / 来源 | 面向对象 | 是否稳定 |
|---|---|---|---|---|
| Provider Model Observation | 上游同步到的原始模型 ID 与元数据 | Text/Media Gateway 私有观测,OceanWay 审核 | 平台运营 | 否 |
| Model Deployment | 某供应商、区域、协议和渠道上的真实部署 | 私有网关基础设施 | 路由与运维 | 有条件稳定 |
| Logical Model | OceanWay 统一能力、参数和候选路由 | 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 | 可见范围 | 必要门禁 |
|---|---|---|
web | Canvas、统一 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
returnBindingHandoff 必须在界面中可见,用户知道哪些资产、约束和费用被带到下一工作台。目标 Agent 产生新 Run;完成后按 returnBinding 返回候选结果,源产品再显式接收。
MCP 领域模型
MCP 与普通模型渠道不是同一个概念。建议对象:
| 对象 | 作用 |
|---|---|
| Connector | 某类外部系统或 MCP Server 的集成定义 |
| Connection | 某组织、Workspace、Project 或个人对外部账户的授权实例 |
| Credential | Vault 中的 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:
- 校验 Run Principal 与 Tool Grant;
- 检查数据分类、外发目标和风险策略;
- 对高风险写操作请求审批;
- 从 Vault 取得短期凭据并代为调用;
- 过滤响应中的 Secret 与不必要敏感字段;
- 记录外部账户、工具版本、请求摘要、结果与
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、资产版本和价格快照。
- 外部副作用与第三方费用必须独立识别、审批和审计。