Agent Platform · Detail Design

三层架构设计

Agent Platform、协同运行时、执行内核三层的边界划分与协作契约——这是平台的"地图"文档,所有模块设计都挂在这张图下。

返回文档目录平台首页

Tier 1 · 应用层

产品入口与组织资产:Agent 管理、协作工作台、能力中心、运营控制台、开放平台

Tier 2 · 协同运行时

多 Agent 调度与会话状态:任务编排、协作策略、AgentSession、共享记忆

Tier 3 · 执行内核

单 Run 的安全执行:Run 管理、上下文装配、计划执行、工具控制、HITL、审计

详细设计说明

DESIGN DOCUMENT · THREE-LAYER ARCHITECTURE

用三层架构把产品入口、运行时协同和内核治理分开

这份文档明确 Tier 1 应用层、Tier 2 协同运行时、Tier 3 执行内核三层的边界与协作契约。评审重点是每层"承担什么 / 不承担什么"是否能在版本演进中保持稳定,让上层产品可替换、运行时可演进、内核保持治理底线。

设计主张

三层不是简单的代码分层,而是三种变化频率不同的关注点:应用层跟着业务走、运行时跟着协作模式走、内核跟着治理与合规走。让它们各自演进,是平台能持续生长的前提。

Tier 1 应用Tier 2 运行时Tier 3 内核横切治理跨层契约

评审关注点

  • 每层承担与不承担是否清晰
  • 跨层调用是否只走契约、不漏抽象
  • 治理 / 可观测 / 隔离三条横切是否真贯穿三层
  • 新模块加入时该落在哪一层、是否需要破坏边界
D1产品入口上浮Agent 管理与协作属于 Tier 1
D2协同沉到运行时多 Agent 调度与会话属于 Tier 2
D3治理沉到内核状态、策略、审批、审计属于 Tier 3
D4基础设施可替换模型、工具、沙箱走 Provider 抽象
D5跨层只通过契约禁止跨层私有数据结构互通

1. 定位与概念

SECTION GOAL

用一张总体架构图和一张跨层时序图,回答"三层各装什么、一次任务怎么穿过三层"两个问题。这是阅读其余章节的入口。

1.1 总体架构图

下图按 Tier 1 / Tier 2 / Tier 3 三条横向带组织,每条带列出该层的主要模块;顶部是终端用户与外部系统入口,底部是基础设施依赖;右侧贯穿三层的纵列是横切关注点(治理、可观测、隔离),它们不属于任何单层,但渗透每一层。点击任一层标签跳到对应章节。

Agent Platform · 三层架构总览
入口 INGRESS 终端用户 / 群聊 移动端 App 邮件 / IM 渠道 企业系统集成 开放平台 API / SDK T1 · 应用层 Agent Platform 产品入口 组织资产 运营治理 CLICK ↗ Agent 管理 Persona · 配置 · 版本 能力绑定 · 上下架 协作工作台 群聊 · @团队 · Team 长会话 · 多端同步 能力中心 Skill 仓 · MCP 接入 凭据 · 工具白名单 运营控制台 组织 · 权限 · 审计 成本 · HITL 审批入口 渠道接入与集成 入站:群聊 · 邮件 · IM · Webhook 出站:通知 · 凭据托管 开放平台 REST / SDK · 应用市场 · 计费 第三方 Agent 与 Skill 上架 T2 · 运行时 Coordinator 协作调度 会话状态 共享记忆 CLICK ↗ 多 Agent 协作 @mention 解析 · 派单 fan-out / sequential / lead consolidation 汇总 任务调度 Job 队列 · 优先级 child Run 派发 · 重试 DelegationTrace 串接 AgentSession 会话 长会话状态 · 成员名册 轮次水位 · 上下文检查点 休眠 · 唤醒 · 归档 共享记忆 个人 / 团队 / 会话三档 scope · embedding 召回 跨 user / 跨 team 严格隔离 · 写入回流到 T1 治理面 协作策略引擎 读 Team config · 注入 RunConfig 策略缺失回退全局默认 T3 · 内核 Harness Kernel 单 Run 执行 RunState 治理基线 CLICK ↗ Run 管理器 run_id · 状态机 必经 Trace 收口 上下文装配器 memory · 历史 system prompt 装配 计划执行器 LLM 推理调度 步骤序列 · 重规划 工具调用控制器 Skill schema · 入参 沙箱 · 重试 · 结果 HITL 控制器 Policy 路由 · 风险分流 人工审批 · 通过 / 拒绝 审计追踪器 RunTrace · StepTrace 所有终态前必经 沙箱 Provider OpenClaw · Hermes · K8s Provider 抽象 · 可替换 基础设施 INFRA PostgreSQL Redis 队列 向量索引 OSS 对象存储 LLM Provider 可观测后端 横切关注点 CROSS-CUTTING 治理 权限 · RBAC 成本预算 风险等级 HITL 阈值 合规与审计 T1 配置 → T2 注入 → T3 强制执行 可观测 RunTrace DelegationTrace StepTrace ToolTrace · 成本 Replay / Diff T3 写入 T2 串接 · T1 查询 隔离 租户 / 组织 Workspace 个人 / 团队 scope 凭据 / Skill 白名单 沙箱执行边界 T1 定义 scope T2/T3 强制执行
每条带的左侧大色块是该层标签(可点击跳到该章),中间色块是该层主要模块。右侧贯穿三层的纵列是横切关注点:治理 / 可观测 / 隔离三条线在每层都有落点,但不归属任何单层。虚线边框=外部依赖或可替换 Provider。

1.2 跨层调用时序图

下图把一次完整任务拆开来看:从用户在 Tier 1 发出请求,经 Tier 2 协同运行时派单,到 Tier 3 内核执行单次 Run,再原路返回 Tier 1。点击顶部任一 lifeline 色块跳到对应章节。这张图也是后续每个模块设计文档的"坐标系"。

三层协作 · 一次任务的端到端时序
用户 / 渠道CLIENT T1 · 应用层AGENT OS T2 · 协同运行时COORDINATOR T3 · 执行内核HARNESS 横切关注点CROSS-CUTTING 1 提交消息 / @团队 2 ↻ 鉴权 + 解析 Persona / Team 3 enqueue Job · 派单上下文 4 ↻ 协作策略选择 + @team 展开 5 create_run · RunConfig + caller_extra 6 ↻ 8 步执行管道 装配 · 计划 · Policy · Tool · HITL 7 ⤴ 写 Trace · 计成本 · 命中风险等级 8 RunResult · 状态 + 输出 9 ↻ 多 agent 结果汇总 · DelegationTrace 10 JobResult · 多 agent 输出 11 推送消息 / 邮件 / Webhook T1 接收 T2 路由 T3 执行 T2 收回 T1 推回
实线 = 必走调用,虚线 = 横切写入(Trace / 成本 / 治理事件)。T3 内核内部的 8 步管道(装配 / 计划 / Policy / Tool / HITL / Trace 等)见 Harness Kernel 详细设计;本图只展示三层之间的边界穿越。

1.3 为什么三层

"产品入口、运行时、内核"听起来像 MVC,但三层架构要解决的是变化频率不一致带来的工程问题。下表是不分层时的具体缺口:

缺口具体表现影响
业务逻辑与执行机制纠缠Agent 配置改动要触碰底层 Run 调用栈;新增协作模式要改单次执行代码每个产品迭代都在动核心治理代码,回归面巨大
多 Agent 协作没有承载层派单 / 汇总 / 会话状态散落在产品代码或单 Run 内部新增协作模式要复制一份调度逻辑;DelegationTrace 串不起来
治理能力散点HITL 阈值在前端、成本预算在中间件、审计在数据库无法统一审计;同一种风险在不同模块用不同标准
基础设施假设硬编码沙箱 / 模型 / 向量库 直接引用具体实现换一家 LLM 或换一个沙箱就改大量调用方代码
跨层数据结构互通产品代码直接读 RunState 的内部字段做展示内核每次调整字段都要等业务跟着改,演进锁死

三层架构解决的具体问题:

  1. 把变化频率不同的关注点拆开——T1 跟业务变、T2 跟协作模式变、T3 跟治理与合规变,互不干扰
  2. 给"多 Agent 协作"一个独立运行时——T2 是 Coordinator 的家,机制(fan-out / sequential / lead-driven)和承载实体(Team / Session)都在这层
  3. 让治理沉到内核——状态机、Policy、HITL、Trace 不再每个产品自己实现一遍,T3 提供统一基线
  4. 让基础设施可替换——LLM、沙箱、向量库走 Provider 抽象,业务代码不感知具体后端
  5. 让跨层只通过契约通信——T1 不读 RunState 内部字段、T2 不读 RunContext 私有结构,避免内核演进锁死

1.4 三层契约定位

层承担不承担
Tier 1 · 应用层(Agent Platform)组织与权限、Agent / Persona / Team / Skill 的 CRUD、协作工作台 UI、运营治理面、渠道接入、开放平台 API不负责协作调度;不持有运行时状态机;不直接调用 LLM 或沙箱
Tier 2 · 协同运行时多 Agent 协作策略选择、@mention 展开、AgentSession 长会话状态、Job 调度与 child Run 派发、共享记忆 scope 路由不存储产品实体;不暴露管理 API;不感知具体业务语义;不替内核做单 Run 的执行
Tier 3 · 执行内核(Harness Kernel)单 Run 的 8 步管道:上下文装配、计划执行、工具调用、Policy 校验、HITL 审批、Trace 收口;RunState 状态机;Provider 抽象(LLM / Sandbox)不感知 Team / Session / Job 等多 Run 概念;不做协作调度;不做产品 UI;不直接服务终端用户
关键边界:T1 的实体可以变(新增 Team、新增 Persona 字段)但 T2/T3 不动;T2 的协作策略可以变(新增 sequential-relay)但 T1/T3 不动;T3 的内核保持稳定,是整个平台的治理底座。三层之间只通过定义好的契约(见第 6 章)通信,禁止跨层私有结构互通。

2. Tier 1 · 应用层

SECTION GOAL

列出应用层承载的产品入口与组织资产模块,明确每个模块的边界以及与下层的接口定位。这一层贴近用户与组织运营,迭代最快。

2.1 模块清单

模块承担主要交付物
组织与权限租户 / 组织 / 用户 / 角色的实体与 RBAC;Workspace 隔离组织管理 UI · 权限矩阵 · 邀请与转让
Agent 管理Persona 的定义、配置、版本、能力绑定、上下架Agent 商店 · 配置编辑器 · 版本历史
协作工作台群聊 / 长会话 / @mention / @团队;多端同步;Team 管理 UI主交互界面 · Team 管理面板
能力中心Skill 仓库、MCP 接入、第三方工具凭据托管、工具白名单Skill 列表 · 凭据管理 · 工具白名单配置
运营控制台审计中心、成本面板、HITL 审批入口、合规报表审计 dashboard · 审批工作台 · 成本报表
渠道接入与集成入站:群聊 / 邮件 / IM / Webhook;出站:通知 / 凭据;外部系统对接渠道适配器 · 凭据托管 · Webhook 网关
开放平台对外 REST / SDK、应用市场、计费、第三方 Agent / Skill 上架开发者门户 · API 网关 · 应用市场

2.2 与下层的接口定位

应用层不直接执行任务,所有需要"跑一次 Agent"的能力都通过提交 Job下沉到 Tier 2。具体接口位置:

2.3 设计原则

  1. UI 状态归 T1——草稿、表单、编辑器状态属于产品层;运行时不持有这些
  2. 实体的真值在 T1——Persona / Team / Skill 的配置定义归 T1,T2/T3 只读这些定义的快照
  3. 不要在 T1 拼协作逻辑——只要涉及"派给多个 Agent / 串接多步",立刻下沉 T2,避免 T1 长成第二个运行时

3. Tier 2 · 协同运行时

SECTION GOAL

说明运行时层的四大组件——多 Agent 协作、任务调度、AgentSession、共享记忆——的职责与彼此关系。这一层是"机制层":把单 Run 的内核能力组合成多 Agent 协作。

3.1 模块清单

模块承担关键产出
多 Agent 协作@mention 解析、@team 展开成员列表、协作策略选择(fan-out-broadcast / sequential-relay / lead-driven)、consolidation 汇总轮派单上下文 · 多 Agent 输出汇总
任务调度Job 队列与优先级、child Run 派发、跨 Run 重试、DelegationTrace 串接RunGraph · 跨 Run 状态可观测
AgentSession 会话长会话状态机:成员名册、轮次水位、上下文检查点、休眠 / 唤醒 / 归档持久化群会话 · 上下文快照
共享记忆个人 / 团队 / 会话三档 scope 的写入与召回;隔离规则;写入回流到 T1 治理面多 Agent 共享上下文 · 团队级经验沉淀
协作策略引擎读取 Team config / Persona config,注入 RunConfig(max_round / hitl_threshold / cost_budget)策略下发 · 默认值回退

3.2 与上下层的接口定位

3.3 设计原则

  1. 机制 ≠ 产品——T2 不知道用户在做什么业务,只知道协作模式。新业务通过组合现有协作模式落地,不要在 T2 加业务分支
  2. 多 Agent 协作的承载实体在 T2——Team 在 T1 定义但 T2 用它驱动协作;AgentSession 完全在 T2,T1 只是消费它的快照
  3. 共享记忆 scope 由 T2 管——T3 的单 Run 不知道"团队级"概念,所有 scope 路由都在 T2 完成
  4. 策略缺失回退默认——任何 team / persona 级配置缺失时回退到全局默认,不让 T3 看到空值

4. Tier 3 · 执行内核

SECTION GOAL

说明执行内核的六个组件与它们组成的 8 步管道。内核只做一件事——把一次单 Run 安全地从输入跑到终态,并保证治理底线在每一步都强制执行。

4.1 模块清单

组件承担对应 8 步
Run 管理器创建 run_id、维护 RunState 状态机、所有终态前必经 Trace 的不变量① Run 创建 · 主控全局
上下文装配器从记忆 / 历史 / system prompt 装配本次 Run 的输入上下文;无副作用、可重试② 上下文装配
计划执行器调用 LLM 生成步骤序列;管理重规划、步骤推进、工具结果回写③ Skill 加载 · ④ Plan 规划
工具调用控制器Skill schema 注入与参数校验;走沙箱 Provider 执行;重试与结果回包⑥ Tool 调用
HITL 控制器Policy 路由(结构 / 权限 / 成本 / 安全);高风险动作分流到人工审批;通过 / 拒绝决议⑤ Policy 校验 · ⑦ HITL 审批
审计追踪器写 RunTrace / StepTrace / ToolTrace;成本结算;状态收口;所有终态前必经⑧ Trace 留痕

详见 Harness Kernel 设计文档。本章只标定它在三层架构里的位置与边界。

4.2 与上下层的接口定位

4.3 设计原则

  1. 单 Run 纯粹——内核只跑一次 Run,不知道这个 Run 是 child 还是 root、属不属于某个 team
  2. 所有终态必经 Trace——SUCCEEDED / REJECTED / FAILED / TIMEOUT 在写入终态前必须先写 Trace,这是治理底线
  3. Policy 与 HITL 双守门员——结构 / 权限 / 成本 / 安全四类规则在 ⑤ 自动判断;不可逆动作必须经 ⑦ 人工审批
  4. Provider 抽象——LLM 与 Sandbox 走 Provider,OpenClaw 非必须、可替换为 Hermes Agent / K8s 等
  5. 内核稳定优先于功能堆叠——内核演进遵循"打基础"节奏,不为短期产品需求破坏边界

5. 横切关注点

SECTION GOAL

列出贯穿三层的三条纵线——治理 / 可观测 / 隔离——以及它们在每一层的具体落点。横切不归属任何单层,但每一层都必须为它们留出钩子。

5.1 治理

治理是"谁可以做什么、在什么预算 / 风险 / 合规边界内、出了问题如何追责"。三层各自的落点:

层治理落点典型能力
Tier 1治理定义面——配置与审批入口RBAC 编辑、HITL 阈值配置、成本预算编辑、Skill 白名单、合规报表、审批工作台
Tier 2治理注入面——把 T1 的配置注入到每次 Run读取 Team / Persona 配置生成 RunConfig;策略缺失时回退默认;HITL 决策回传
Tier 3治理执行面——强制执行规则、写入审计Policy 校验、HITL 审批拦截、风险等级判定、所有终态写 Trace

5.2 可观测

可观测是"任何一次 Run 都要可回溯、可解释、可重放"。三层各自的落点:

层可观测落点典型能力
Tier 1查询面——审计中心 / 成本报表 / Replay 入口按时间 / 团队 / 用户 / 风险等级筛选;导出报表;触发 Replay
Tier 2串接面——把多个 RunTrace 串成 DelegationTrace跨 Run 链路视图;多 Agent 协作可观测;Session 状态历史
Tier 3采集面——RunTrace / StepTrace / ToolTrace 写入每一步的输入输出、成本、耗时、错误堆栈;终态前必写

5.3 隔离

隔离是"租户 / 组织 / 团队 / 个人 / 凭据 / 沙箱执行边界"在三层都要保持一致,任何一层泄漏都意味着治理失败。三层各自的落点:

层隔离落点典型能力
Tier 1定义 scope——组织 / Workspace / Team 边界实体的可见性矩阵;凭据托管;Skill 白名单
Tier 2路由 scope——记忆召回与派单都按 scope个人 / 团队 / 会话三档共享记忆 scope;@team 展开不跨边界
Tier 3执行 scope——沙箱内执行不可越界Sandbox Provider 强制隔离;凭据按 Run 注入;Skill 白名单在 ⑥ 强制
关键约束:横切关注点不能"只放在某一层"。HITL 阈值在 T1 配置但必须在 T3 执行;DelegationTrace 在 T2 串接但 T3 必须先写好 RunTrace;隔离在 T1 定义但 T2/T3 必须强制。任何一层缺位,整条横切就失效。

6. 跨层契约

SECTION GOAL

简要列出 T1↔T2、T2↔T3 两条边界上的关键调用契约。契约稳定是三层架构能持续演进的前提;这里只列轮廓,详细字段在各模块设计文档中。

6.1 T1 ↔ T2 契约

方向契约关键载荷
T1 → T2提交 Job消息文本、Persona / Team 引用、用户与组织身份、caller_extra(团队 ID、风险标签)、回调通道
T1 → T2HITL 决策回传审批 token、决议(通过 / 拒绝 / 备注)、操作人身份
T2 → T1Job 完成回调JobResult、多 Agent 输出、终态、引用的 RunTrace / DelegationTrace ID
T2 → T1HITL 审批请求风险描述、待审批动作摘要、超时时间、审批 token
T2 → T1RunTrace 只读视图状态、步骤摘要、成本、耗时;不暴露 RunState 内部字段

6.2 T2 ↔ T3 契约

方向契约关键载荷
T2 → T3create_runRunConfig(max_round / hitl_threshold / cost_budget / tools_whitelist)、调用人身份、caller_extra(team_id 等仅透传字段)、上下文输入
T2 → T3HITL 决策回传审批 token、通过 / 拒绝;T3 据此从 AWAITING_HITL 推进到下一态
T3 → T2ResultSinkRunResult(终态 + 输出)、引用的 Trace ID、成本结算
T3 → T2HITL 审批请求风险描述、待执行动作摘要、超时时间、审批 token;由 T2 转给 T1
T3 → T2Trace 写入事件RunTrace / StepTrace / ToolTrace;T2 据此串接 DelegationTrace

6.3 契约稳定性原则

  1. caller_extra 是透传通道——T2 想给 T3 任何上下文都通过 caller_extra;T3 不解析这些字段,只在 Trace 留痕
  2. 禁止跨层私有结构——T1 不读 RunState 内部字段、T2 不读 RunContext 私有结构;只通过上述契约通信
  3. 新增字段向后兼容——契约新增字段必须可选(带默认值),下层旧版本能忽略不识别的字段
  4. HITL 审批跨两条契约——T3 发审批请求 → T2 转 T1 → T1 用户决策 → T2 回传 T3,途中不能丢、超时要降级到拒绝
  5. Trace 是单向写——只有 T3 写、T2 串接、T1 读,没有反向调用
演进策略:契约是平台稳定性的护城河。新增能力优先通过 caller_extra 与可选字段扩展;只有当新能力本质上属于另一层时,才考虑挪动模块归属,而不是破坏契约让上下层互通私有数据。