
企业采用 Agent 的真正瓶颈从来不是"单个 Agent 有多聪明",而是"多个参与者(人、Agent、系统)如何协同"。本文提出协同四象限模型(P2P / P2A / A2P / A2A),并以 ooderAgent 的真实实现为证据,论证一个核心命题:
协同的本质,是责任的"可移交、可追溯"属性。每一次象限之间的跃迁都是一次责任移交;而每一次移交都必须同时完成三件事——上下文传递、权限校验、问责记录(CAA 三元组)。
ooderAgent 把这个抽象模型变成了可运行、可持久化、可审计的工程系统——从流程引擎的 HUMAN 暂停节点,到 A2A 协议服务的 MQTT 跨节点桥,再到权限行(RT_ACTIVITY_PERSON)状态机,构成了一条完整的责任链基础设施。
需要强调:协同四象限并不是"只能长在某套代码上"的私有设计。只要一个系统能表达三件事——"暂停下来等人"、"把等待人工的结果接回来"、"给每一次动作留痕"——这套模型就能投影上去。因此本文把 ooderAgent 的实现当作一份可移植的设计蓝图来讲解,而不是对某个旧系统的考古记录。

图 1 原理:每一次象限跃迁都是一次责任移交,须同时完成 CAA(上下文-权限-问责)三元组
天花板 | 症状 | 后果 |
|---|---|---|
能力 | 一个 Agent 无法精通所有领域(财务、法务、研发、供应链) | 样样通样样松,或退化为大量单一用途 Agent |
上下文 | 窗口有限,长任务无法保持连贯记忆 | 任务无法恢复,状态丢失 |
可靠性 | LLM 输出是概率性的,关键业务无法冒险 | 必须有人工闸门,但人参与又破坏自动化 |
结论:企业场景要的是多参与者协同,而不是一个全知全能的 Agent。
方案 | 贡献 | 对企业落地的局限 |
|---|---|---|
FIPA-ACL | 定义了 Agent 通信的言语行为与本体 | 规范重、工程轻;与业务流程引擎无绑定 |
微服务编排(Camunda、Temporal) | 可靠状态机、长事务、补偿 | 为确定性服务设计,而非概率性 Agent |
Google A2A 协议(2025) | Agent Card、Task、Artifact 标准 | 只解决传输与发现;人不作为一等公民;无责任链与审计模型 |
Anthropic MCP | 统一的 Agent 到工具接口 | 解决 Agent 到工具;不解决 Agent 到 Agent 或人到 Agent 的治理 |
结论:现有方案各自解决一小块。企业落地需要一套统一框架,既能表达自动化的 Agent 间流转,又能表达人机责任往返。
象限 | 语义 | 自动化程度 | 典型场景 |
|---|---|---|---|
P2P | 人到人 | 最低(完全人工) | 审批流、委派、撤回、退回、抄送、会签 |
P2A | 人到 Agent | 较高(委派即执行) | 用某个技能处理这份文件;让这个 Agent 出方案 |
A2P | Agent 到人 | 中等(产出由人裁决) | 结果复核、确认后继续、表单补全、异常干预 |
A2A | Agent 到 Agent | 最高(完全自动化) | 自活事件、上下文传递、能力调用、跨实例委派 |
P2P(人全程持有)→ P2A(人发起、机器执行)→ A2P(机器产出、人裁决)→ A2A(机器自闭环)。
一个业务过程会反复穿越全部四个象限。报销示例:员工提交(P2A:委派 Agent 解析发票);Agent 发现金额异常(A2P:请求人工确认);经理审批(P2P);审批通过,自动记账(A2A)。
每一次象限跃迁都是一次责任移交。只有以下三者同时成立,移交才有效:
三者合称协同三元组(上下文-权限-问责,CAA)。ooderAgent 的设计就是 CAA 的工程化展开。
从 \ 到 | P(人) | A(Agent) |
|---|---|---|
P(人) | P2P:委派、移交、退回、抄送 | P2A:选择执行者、立即执行 |
A(Agent) | A2P:暂停复核、确认、表单 | A2A:自活事件、上下文传递、委派 |

图 2 一个报销流程穿越全部四个象限——自动化程度逐级抬升
SDK 采用南北向分层架构(agent-sdk NORTHBOUND_SOUTHBOUND_ARCHITECTURE.md):
为什么重要:南向保证信任域内的确定性协同;北向处理跨信任域的、概率性的、联邦化自组织协同。四个象限天然落在这条切分上。
定义:人到人、完全人工流转——发送、委派、撤回、退回、抄送、会签、已读办结。
实现载体:BPM 引擎 WorkflowClientServiceImpl + IOTRightEngine(RT_ACTIVITY_PERSON 权限行)。五个子引擎共用一个事务外观:
子引擎 | 持久化 | 协同触发 |
|---|---|---|
workflowEngine | BPM_PROCESSINSTANCE / BPM_ACTIVITYINSTANCE / BPM_ACTIVITYHISTORY / BPM_ROUTEINST | 转发、退回、撤回、办结 |
rightEngine | RT_ACTIVITY_PERSON / RT_ACTIVITYHISTORY_PERSON | 办理人/阅读人行:插入、迁移、恢复、删除重建 |
agentEngine | RT_ACTIVITY_AGENT(HISTORY) | Agent 行:启动、转发、委派、升级、归档 |
device/service/eventEngine | RT_ACTIVITY_DEVICE/SERVICE/EVENT | 同构的 IOT 引擎 |
P2P 责任操作族——业务语义是第一视角,状态机是实现手段:
业务操作 | 谁 → 谁 | 责任语义 | 业务上的可逆性 |
|---|---|---|---|
转发(移交) | 办理人 A → 办理人 B | 已办事项连同单据上下文一起移交给 B 继续办理 | 可逆:B 未办结前可退回给 A |
委派 / 转办 | A → 代办人 B | B 暂代行使办理权,单据归属仍可追踪 | 收回之前可撤销 |
撤回 | 发送方收回待办 | 接收方尚未办理时收回,A 重新持有 | 撤回本身就是回退 |
退回 | B → A 或指定前序 | 单据不合格,附理由退回上一步 | 退回后 A 修好可再提交 |
抄送 | A → 多个只读方 | 知会关键人,不改变办理权 | 只读、不参与回退 |
会签 / 已读办结 | 多人并行签署 | 多人共同对结果负责 | 需要全体一致才能撤回 |
底层原理:上述每一种操作最终都落在"当前办理人/阅读人"行的归档与重建上(详见 5.2 权限行状态机),而不是改一个状态字段。因为责任在"行"上而不在"字段"上,退回、撤回、追责才真正成立。

图 3 审批待办界面示意:操作条由服务端按当前办理权生成(P2P 责任链)
定义:人发起,选择执行者(技能/能力/LLM/Agent),立即执行。
实现要点:
P2A 设计教训:委派给执行者时,"选了什么技能或 Agent、为什么"这件事本身必须作为一次可审计操作被记录——否则责任链里就有一个沉默环节。
定义:Agent 执行,人复核 / 确认 / 补表单 / 委派。
实现要点:
设计边界(与具体引擎无关):HUMAN 不是"底层引擎里的某种特殊节点",而是协同模型的一等参与者。它的四种模式——确认(CONFIRM)、补单(FORM)、审批(APPROVAL)、转派(DELEGATE)——由场景层解释并驱动;被调用的流程服务只需要回答一个问题:"这份单据当前停在哪个办理状态、由谁持有"。决策逻辑与持久化分离,业务规则就能在不更换底层流程引擎的前提下独立演进——这是"模型可移植"的关键。
A2P 业务规则:凡涉及钱、合同、对外承诺的活动,默认必须停在人工确认点。自动通过只能在流程配置里被显式声明——任何"超时自动放行""强度参数"都不得越过这条业务边界。理由很朴素:让一个本该把关的人失去把关机会,比流程慢几小时严重得多。

图 4 HUMAN 强制人工界面示意:不可跳过的确认与人工路由选择(A2P)
实现分三层:
A2A 设计教训:完全自动化的协同需要三样东西同时到位——事件自活机制(让 Agent 不等即动)、带请求-响应闭环的消息协议(让 Agent 会对话而不是只广播)、以及一座让流程引擎以对等节点身份接入 Agent 网络的桥。
AgentEventConfig.AudienceType 定义了五层寻址模型:
受众 | 范围 | 用途 |
|---|---|---|
SAME_PROCESS | 同一流程实例内的其他活动 | 场景内参与者(默认) |
SCENE_GROUP | 同一 SceneGroup 内的其他流程实例 | 业务域内跨流程协同 |
CAPABILITY | 持有某一能力的 Agent | 基于能力发现:谁能编译 |
AGENT | 某个具体的 Agent | 点对点任务委派 |
BROADCAST | 全部已注册 Agent | 广播、黑板式协同 |
设计教训:寻址粒度映射信任粒度——SAME_PROCESS 继承流程信任;BROADCAST 需要最强的把关。
A2A MQTT 桥在规划好的主题空间中订阅与发布:
主题 | 方向 | 用途 |
|---|---|---|
ooder/p2p/{agentId}/inbox | 定向 | 跨节点、针对某 Agent 的消息(P2A/A2A/P2P 都走这里) |
ooder/event/A2A/{group} | 广播 | 场景组广播 |
信封:protocol=a2a、version=1.0,消息体含 messageId、conversationId、sceneGroupId、fromAgentId、toAgentId、messageType、payload、priority、timestamp、headers、traceId。
跨节点请求-响应闭环:sendMessage 发布 TASK_REQUEST,在 pendingRequests 中以 requestId 为键存一个 CompletableFuture<A2AResponse>;远端处理并回 TASK_RESPONSE + header.requestId;桥的 dispatchMqttMessage 完成该 future。调用方阻塞或在 future 上恢复——在发布-订阅之上实现了完整的跨节点 RPC。
降级:broker 连接失败置 mqttTransport=null,退化为进程内处理器 + 消息队列的本地 A2A。绝不阻塞流程。
上下文随 A2ACommand.contextTransfer 传输:
模式 | 隐喻 | 数据量 | 适用场景 |
|---|---|---|---|
FULL | 整车直达 | 最大 | 首次协同、上下文剧变 |
DELTA | 增量更新 | 中 | 持续协同,只传上次同步以来的变化 |
REFERENCE | 收货自取 | 极小(ID+位置) | 目标可从共享存储按需加载 |
SELECTIVE(默认) | 精准投递 | 均衡 | 含 USER、KNOWLEDGE、FUNCTIONS、MEMORY;默认排除 SECURITY_CREDENTIALS、INTERNAL_STATE |
上下文四个核心部分:用户上下文(身份、角色、偏好;默认排除凭证)、知识上下文(知识库引用、RAG 结果)、函数上下文(可用工具)、记忆上下文(会话历史)。
命令示例:
A2ACommand:header(commandId、commandType=LLM_CONTEXT_SHARE、sourceAgent=agent-a、targetAgent=agent-b),contextTransfer(transferMode=SELECTIVE、includedParts=USER KNOWLEDGE FUNCTIONS、contextReference 含 contextId、skillId=recruitment-skill、sessionId=sess-xxx)

图 5 上下文传递四种模式:传多少、传什么由业务场景决定
MQTT 之下,北向层还提供自组织 P2P 网络(agent-sdk network/p2p):
为什么需要两套传输?EMQX 上的 MQTT 在信任边界内提供受管、可靠、有序的投递;Gossip 与 UDP 在动态或不可信边缘提供无托管、有韧性、自组织的发现。企业部署通常两者并用:EMQX 在集群内,Gossip 在边缘。
把跨实例委派想成企业里的"转办单":它不能只是一句话,而必须是一份单据。ooderAgent 用四个要素构成这份契约:
业务启示:跨实例委派不是"发一条消息",而是"凭一份可持久、可回放的单据远程启动一个流程"。这保证跨部门、跨系统的单据在任何时刻都答得上三问:办到哪一步了、由谁在办、依据是什么。

图 6 结构:流程决策层经事件桥与跨节点协议服务接入 Agent 网络
每一次协同 Operation 必须携带 USERID(操作的人)、OPERATOR_ID(执行主体)、AGENT_ID(执行体)。服务端禁止自报身份——身份必须来自已认证会话,绝不来自请求载荷。
单据的"办理权"不落在流程状态字段上,而落在独立的权限行上(RT_ACTIVITY_PERSON)。每一行回答三件事:谁能办(PERSON_ID)、以什么身份办(RIGHT_GRP_CODE:办理人 PERFORMER / 发起人 SPONSOR / 阅读人 READER / 历史办理人 HISTORYPERFORMER)、办到哪一步(PERSON_ACTIVITY_STATE:待办 WAITING / 正在办理 CURRENT / 办结 FINISH / 已读 READ / 已读办结 ENDREAD),外加一个供回退使用的恢复锚点(LAST_RIGHT_GRP)。
于是"退回"与"撤回"不是改状态,而是恢复权限行:撤回时把锚点行恢复为当前办理人;退回时从历史办理人行重建待办。行级承载让责任链真正可逆——这也是财务"冲正"、合同"收回"、单据"驳回重报"这些业务动作在工程上的统一落点。

图 7 办理权行状态机:责任移交与退回恢复都发生在"行"上
每一次协同动作都以操作记录(操作人、动作、对象、载荷)落库,同时写入个人文件空间的消息流(会话消息、人工决策、跨节点记录三类)与本地审计库。审批意见、委派理由、路由选择一并进入会话记录——事后追溯时顺着会话记录逐条翻看,责任链便完整可查。
SELECTIVE 模式默认排除 SECURITY_CREDENTIALS 与 INTERNAL_STATE。审批结果与审计轨迹落入流程上下文,而不进入面向用户的记忆。
公网入口:subdomain.heb10010.com 端口 9890,经云 NAT 到内网 nginx 81,再分发到内网主机上的服务网格。
服务清单:studio 8099(流程决策与编排、会话、流程设计器)、aiserver 9004 与公网 9890(集群中心:认证、NLP/LLM、模板服务)、bpm-server 5340(业务流程持久化服务:单据实例 EI + 权限 RT 表)、vfs-namenode 5342 与 vfs-store 5341(虚拟文件系统)、org 5332(身份)、emqx 1883(MQTT broker,A2A 桥加集群 gossip)、lucene 5343(检索)。
象限 | 主要组件 | 持久化 |
|---|---|---|
P2P | 流程与权限服务(工作流 + 办理权引擎)、org 身份 | 单据实例表 + 办理权行 RT_ACTIVITY_PERSON |
P2A | 活动分发器、北向委派队列、执行记录引擎 | 执行权行 RT_ACTIVITY_AGENT |
A2P | HUMAN 节点、人工操作引擎、confirm 与 human-op 人工操作端点 | 权限行 + 会话记录 |
A2A | 跨节点协议服务与 MQTT 桥、事件桥、子流程关系表 | a2a 契约文件 + 执行权行 RT_ACTIVITY_AGENT |
真正让协同系统上线后"不好用"的,往往不是 Agent 聪不聪明,而是下面六个业务问题在设计期没有被回答:
把这六个问题放进验收清单,比盯着单点技术指标更能判断一套协同系统是否真的能上生产。

图 8 部署拓扑与象限到组件的映射
从业务视角出发的闭环检查清单——每一条都对应一次责任移交的 CAA 三元组:
最容易踩的四个雷区:
结语:四象限不是一套分类法——而是一套纪律。每当你为一个 Agent 新功能写代码,先问自己:这落在哪一次象限跃迁上?它完成 CAA 三元组了吗?如果完成了,它就能在生产里活下来;如果没有,它就会成为责任链上下一个缺失的沉默环节。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。