
副标题:从 P2P 分享、委托、A2A、P2A、A2P 五个场景,看人机协同的责任链怎么设计、怎么落地、怎么不出事 日期:2026-09-10 | 性质:理论指导文章(以 OODER 平台已落地实现为工程证据) 读者:正在把 Agent 引入企业、并已经开始被"人和 Agent 怎么配合"困扰的架构师与产品负责人
企业引入 Agent 的真正瓶颈,从来不是"单个 Agent 有多聪明",而是多个参与者(员工、Agent、外部系统)如何通讯与协同。
这篇文章不谈模型能力,只谈一个被严重低估的工程问题:当一个 Agent 开始和普通员工坐在"同一个聊天框"里工作时,这个聊天框到底应该怎么管?
我们把问题拆成五个必须回答的场景:
场景 | 白话 | 本质 |
|---|---|---|
P2P 分享 | 我把这个会话转给同事看 | 责任可见范围的扩张 |
委托 | 这个活我不办了,你办 | 责任主体的更换 |
P2A 指令 | 我选一个 Agent 去干这件事 | 责任从人移交给机器 |
A2P 请求 | Agent 干到一半,回来找我签字 | 责任从机器回到人 |
A2A 消息 | Agent 之间自己商量 | 责任在机器之间流转(最难) |
贯穿这五个场景的是一条主线:每一次通讯,本质上都是一次责任移交;每一次责任移交,都必须同时完成三件事——上下文传递、权限校验、问责记录。
文章最后用一个真实场景收尾:财务 Agent 处理报销付款。你会看到这五个场景如何在一条业务线上依次发生,以及哪些设计让这条线在生产里活了下来、哪些还差得远。
很多企业引入 Agent 的路径是这样的:先做一个"很聪明"的助手,接上大模型,让它能查数据、能写文档、能调接口。演示效果惊艳。然后——
这三个坑,对应的正是可追溯性、责任归属、上下文完整性。它们都不是模型能力问题,而是通讯治理问题。
语义鸿沟:Agent A 说的"客户"和 Agent B 说的"客户"是同一个吗?上下文怎么传——全传(安全与性能风险)还是不传(责任悬空)?
信任鸿沟:这次操作是谁授权的?身份怎么确立?一个 Agent 能不能替另一个 Agent 承诺?越权怎么阻断?
时间鸿沟:Agent 毫秒级完成,人可能要三天后才看。这中间状态存在哪?怎么恢复?人回来时还能不能接上当时的上下文?
答案很朴素:员工不会为了用 Agent 去学一套新系统。他们已经在钉钉、企微、各种工作台里聊天了。Agent 要进入员工的工作流,最自然的形态就是"进到那个聊天框里"。
但这意味着聊天框要承担三倍的责任:
一句话:聊天框不是 UI,它是人机协同的记录面(record surface)。 后面所有设计分歧,都可以用这句话来裁决。
象限 | 语义 | 自动化程度 | 典型场景 |
|---|---|---|---|
P2P | 人到人 | 最低(完全人工) | 分享、委托、审批、退回、会签 |
P2A | 人到 Agent | 较高(委派即执行) | 选一个 Agent 去处理这份文件 |
A2P | Agent 到人 | 中等(产出由人裁决) | 结果复核、确认后继续、表单补全 |
A2A | Agent 到 Agent | 最高(完全自动化) | 能力调用、跨实例委派、并行分派 |
关键在于:这不是一个平面分类,而是一条责任梯度——
P2P(人全程持有) → P2A(人发起、机器执行) → A2P(机器产出、人裁决) → A2A(机器自闭环)一个真实的业务过程会反复穿越全部四个象限。以报销为例:
每一次象限跃迁都是一次责任移交。只有以下三者同时成立,移交才有效:
要素 | 含义 | 给少了 | 给多了 |
|---|---|---|---|
Context(上下文传递) | 接收方获得足以承担责任的上下文 | 责任悬空——接了活但不知道前因后果 | 安全与性能风险——凭证、内部状态外泄 |
Authority(权限校验) | 发送方有权移交吗?接收方有权接收吗? | 越权放大——一次移交绕过所有关卡 | 流程卡死——事事都要层层审批 |
Accountability(问责记录) | 移交这件事本身被记下来了吗? | 责任链出现"沉默环节"——出事查不到 | 审计库膨胀——需分级留存 |
三者合称 CAA 三元组。它是本文的判断标准:后面每一个场景,我们都会用 CAA 去检视它的设计是否成立。

图 1:四象限不是分类法,而是责任梯度;CAA 是每一次跃迁的验收条件。
原则一:责任在"行"上,不在"字段"上。
单据的办理权不落在流程状态字段上,而落在独立的权限行上(谁在办、以什么身份办、办到哪一步、回退锚点在哪)。于是"退回""撤回"不是改一个状态值,而是重建权限行——这就是为什么财务"冲正"、合同"收回"、单据"驳回重报"能统一落地。
原则二:HUMAN 是协同模型的一等参与者,不是引擎里的特殊节点。
"暂停下来等人"这件事,应该由业务层解释并驱动,而不是依赖某个流程引擎的私有能力。判断标准很朴素——一个系统只要能回答"这份单据当前停在哪个状态、由谁持有",四象限模型就能投影上去。
原则三:凡是钱、合同、对外承诺,默认必须停在人工确认点。
自动通过只能在流程配置里被显式声明。任何"超时自动放行""强度参数调节"都不得越过这条边界。理由很朴素:让一个本该把关的人失去把关机会,比流程慢几小时严重得多。
下面逐场景展开。每个场景给出:设计要点 → CAA 检验 → 实践中的坑。
#### 业务问题 财务小张用 Agent 做完一笔对账,需要主管老李复核。把结果截图发过去?老李看不到过程、看不到 Agent 剔除了哪些单;把账号给老李?权责不清。
#### 设计:会话级分享 + 双角色
机制 | 设计 | 要点 |
|---|---|---|
分享粒度 | 会话级(不是消息级、卡片级) | 分享的是"整个工作现场"——含全部历史、工具调用、产出物 |
角色模型 | 归一为member / reader两档 | 不要设计复杂的权限矩阵,两档覆盖 95% 场景 |
操作人 | operator取服务端登录人,不信任请求载荷 | 防冒充 |
可见范围 | 被分享人经参与者视角自然入列,携带mineRole | 接收方无需额外操作 |
只读守卫 | reader 输入框禁用 + 服务端assertCanWrite兜底 | 前端拦截是体验,服务端拦截才是安全 |
退出 | 非 owner 可离席(拒绝即 leave) | 协同必须可退出 |
#### CAA 检验
#### 坑:分享不是"转发" 一个常见错误是把分享做成"把这条消息转发给某人"。这在 CAA 上是破产的——接收方拿到的是结论,丢掉的是依据。正确做法是分享会话引用:对方打开后看到的是同一个工作现场。
实践教训:只读态必须由服务端兜底。前端禁用输入框只是体验优化,绕过前端直接调接口仍然能写——所以服务端必须有独立的写权限断言。
#### 业务问题 老李休假前,把待办转给小王。关键要求是:小王办完之后,任何人翻记录都能看出"这件事本是老李的,小王是代办的"。
#### 设计:两层委托,语义完全不同
层 | 语义 | 实现 |
|---|---|---|
会话级 | "你来看/你来跟" | 分享(前述) |
活动级(H2H) | "这个待办换人办" | 换人不换活动——重建办理人权限行,流程位置不变 |
H2A | "这个活交给 Agent 代办" | 委托给 Agent(当前是"半环",见下) |
活动级委托的核心工程动作:不是改一个 assignee 字段,而是重建办理人权限行。这保证了:
#### CAA 检验
#### 坑:委托最容易"三处断链"(真实修复案例)
我们在实现委托时踩过一组非常典型的坑,值得作为反面教材:
三个环节单独看都能跑(不报错),串起来就是"用户选了 A,实际委托给了 B"。这类 bug 的隐蔽性在于:每一环都在做事,只是没做对的那件。
由此沉淀出一条闭环鉴定法——对任一交互属性,按五环逐个追问,全部"是"才算闭环:
对应地,断链有四种典型形态,可以用来自查:
形态 | 症状 | 例子 |
|---|---|---|
读而不发 | 读了配置但没用 | 读取了自定义提交端点,全文再无引用 |
写而不判 | 写入上下文但无人消费 | 必填字段写进上下文,全库无消费者(等于零校验) |
发而不收 | 前端发了但后端不读 | 用户选择的委托目标未进请求体 |
收而不执 | 收到但不执行 | H2A 委托 Agent:有展示、有判定,无派发执行体 |
最后一条尤其值得警惕:"委托给 Agent"在我们的实现里一度是个半环——面板能选、请求能发、标记能写,但没有任何真正的 Agent 派发调用。这在演示时看不出来,在生产里就是"点了委托,什么也没发生"。

图 2:闭环鉴定的六环与断链四形态;右下的 H2A 案例即本文 §3.2 的真实修复。
#### 业务问题 出纳想让 Agent 处理报销付款。她需要选一个"懂报销付款"的 Agent,而不是一个通用聊天机器人。
#### 现实:不是 @agent,而是"选模式 + 选场景"
一个反直觉的发现:在企业里,"@某个人/Agent"这种提及式选择,并不是员工选 Agent 的主路径。 真正可用的是:
工作模式(workMode):chat(知识问答)/ architect(设计构建)/ business(业务编排)
↓
场景(Scene):每个模式下挂一批业务场景 —— 而"场景"就是 Agent也就是说,"选场景"即"选 Agent"。业务编排模式下,出纳看到的是一串业务场景:开票回款对账、报销付款导出、银行流水转换、往来挂账、税负分析、凭证填列……选一个,等于把这个领域的 Agent(含它的提示词规则、工具集、业务口径)唤起来。
为什么这样更好?因为企业员工是按"业务"思考的,不是按"Agent 人格"思考的。她不知道也不关心背后是"识别 Agent"还是"校验 Agent",她只知道"我要做报销付款导出"。
#### 执行者选择的四要素
一旦选定,系统要确定四件事,缺一不可:
要素 | 说明 |
|---|---|
技能与工具集 | 按技能 ID 定位执行器 + 挂载哪些工具 |
能力引用 | 需要哪些外部能力 |
模型插件与模式 | 用哪个模型、以什么模式驱动 |
执行者列表 | 人 / Agent / LLM / 远程机器 |
#### CAA 检验
最后一条常被忽略。如果"选了谁"不留痕,责任链里就有一个沉默环节:事后只知道"Agent 干了这件事",不知道"是谁让它干的"。
这是目前落地最完整的象限,也是企业场景里价值最高的一环。
#### 生命周期五环
① 定义 → 流程设计器配置 HUMAN 节点(模式/办理人/表单/路由/权限/时限)
② 展示 → 推送 human_confirm 事件 + 流程暂停事件 → 前端渲染确认卡/表单/审批面板
③ 行为 → 用户点击 → 三条通道:人工操作端点 / 确认端点 / 文件直传
④ 判定 → 端点校验 → 归一化动作 → 写上下文标记
⑤ 执行 → 路由引擎消费标记 → 恢复执行 → 流程步进事件回流(可观测)每一环都必须有消费方。 "定义必须有展示消费者;行为必须有接收端点;端点必须有判定逻辑;判定结果必须有执行消费者;执行必须有可观测结果。"——任一环"只写不读"即为断链。
#### 五类确认卡 + 三专用面板
Agent 找人,不是只会问"是/否"。交互类型收敛为五种,覆盖绝大多数场景:
类型 | 用途 | 场景 |
|---|---|---|
CONFIRM | 确认/拒绝 | "这些单据要导入吗?" |
CHOICE | 单选 | "这三笔异常单如何处理?" |
INPUT | 文本补充 | "请说明驳回理由" |
FILE_UPLOAD | 文件上传 | "请上传银行流水" |
FORM_SUBMIT | 表单提交 | "请补全付款信息" |
其中文件上传是独立通道(直传存储,不经委托处理器),这是为了避免"上传完成"与"确认提交"的竞态——这是真实踩过的坑。
#### 三条硬约束
#### CAA 检验
这是 A2P 最容易被低估的一点:人的决策要写回会话,而不是只写进流程库。 因为事后追溯时,人只会去翻聊天记录。
这是五个场景里最不成熟的一个,也是最有教育价值的一个——因为它最容易做出"看起来能用"的假象。
#### 现状:能发,能回,但什么都留不下
典型实现:Agent A 发一条组播消息,Agent B 收到后回一条回执,发起方把回执聚合成一条消息显示在聊天框里——
【A2A 聚合 · 对账Agent · TASK_RESPONSE】已收到任务,正在处理……(内容截断 300 字)看起来很完整,实际上在 CAA 上是全面失守:
维度 | 问题 | 后果 |
|---|---|---|
载荷 | 消息里没有流程实例 ID、活动 ID、流程定义、上下文引用、用户归属 | 无法把这次协同关联回发起方的业务 |
持久化 | 无;去重窗口是单实例内存(60 秒) | 断线/重启即丢;换台机器重放不了 |
执行 | 接收端是"哑端"——只拼一句回显字符串,不加载上下文、不创建流程 | 所谓"协同"只是回声 |
身份 | 无操作人、无节点归属 | 审计只能到"某个 Agent 名",越权无法阻断 |
寻址 | 主题命名漂移(定向/广播/遗留三套) | 消息可能静默丢失 |
记录 | 聊天框只有一条聚合气泡 | 违背"记录面"原则——交互与执行信息全部丢失 |
#### 正确的目标形态:委托 = 凭契约在远端起一个流程
A2A 不应该"发一句话",而应该"凭一份可持久、可回放的单据,远程启动一个流程"。这份契约有四个要素:
要素 | 内容 |
|---|---|
出处 | 父流程实例 + 流程定义——知道这笔活从哪来、按哪套规则办 |
内容 | 共享上下文引用 + 归属会话——双方拿到的是同一份单据 |
定位 | 注册表把契约路由到目标节点,目标按需求实例化子流程并返回标识 |
存证 | 按请求 ID 落一份持久化契约到个人文件空间——重启、断网后仍能凭契约回放接续 |
#### 对聊天框的要求(用户特别关心的那一条)
"Agent 之间发了什么,聊天框必须能完整还原。" 具体要求:
判断标准很简单:如果 Agent 之间的对话只能看到"一句话总结",那它就不叫被记录,只叫被通知。
理论讲完,看真实场景。财务是检验融合通讯最好的试金石——因为它同时具备:强合规(必须留痕)、强协同(多角色)、强外部依赖(单据来自别的系统)、零容错(钱不能错)。
财务域有六个业务场景(对 Agent 而言,每个场景就是一个"领域 Agent"):
场景 | 业务 | 外部数据源 |
|---|---|---|
开票回款对账 | 开票申请 → 回款核对 | 钉钉 OA 审批 |
报销付款导出 | 报销单 → 银行批量付款模板 | 有成费控 OPENAPI |
银行流水转换 | 流水 → 结构化 | 文件上传 |
往来挂账异常 | 账龄分析与推送 | 内部台账 + 钉钉通知 |
税负分析 | 税负测算 | 内部数据 |
凭证填列 | 凭证生成 | 文件上传 |

图 3:一条业务线上的四象限穿越(P2A → 执行 → A2P 红线 → P2P),以及贯穿全线的"记录面"。
第 1 步 · P2A:出纳选场景、下指令
出纳进入业务编排模式,选「报销付款导出」场景,说:"导入昨天的待支付报销单,生成付款模板。"
第 2 步 · A2P:Agent 停下来找人确认
Agent 不会自作主张生成付款文件。它停下来,推一张确认卡:
关键设计:确认卡上必须带决策所需的全部信息——不是"是否继续",而是"这些单、这些金额、按这个口径"。
第 3 步 · A2P 判定与执行
出纳确认 → 动作归一化 → 路由引擎消费标记 → 恢复执行 → 生成 15 列银行批量付款模板 → 流程步进事件回流聊天框(可观测)。
这一步人的决策(选了什么、批了什么)写回会话记录,而不是只进流程库——因为三个月后审计来查,人只会翻聊天记录。
第 4 步 · A2P 再次出现:业务红线
如果某笔金额超过阈值,或触发了"对外承诺"性质,默认必须停在人工确认点。这是硬规则,不由模型"觉得可以"来决定。
第 5 步 · P2P:复核与委托
出纳把会话分享给复核会计(member,可看全部历史与过程);或者,如果出纳要休假,把待办委托给同事——对方办理时,聊天框里每条消息都带「代 {出纳}」角标。
第 6 步 · A2A:这一环目前是缺失的
理想中的多 Agent 协作是:识别 Agent(读单据)→ 校验 Agent(对规则)→ 生成 Agent(出模板)分工并互相通信。
现实是:财务场景内部是单场景内的确定性工具链(解析 → 按业务口径筛选 → 映射 → 写台账/模板),加上 LLM 做审计,全部在同一进程内顺序执行。这有它的合理性——财务要的是确定性,不是 Agent 的自由度——但也意味着 A2A 的治理能力在财务域尚未被验证。
财务的场景里有一个细节,特别能说明"记录面"的价值——筛选口径:
这些规则如果只在代码里,业务同事复核时就会问:"为什么这笔没进来?"——Agent 必须能回答,且答案必须在聊天框里。
所以我们在财务场景里做了一件重要的事:把落库的真实台账数据注入审计上下文,强制 Agent 的"财务专家审计"基于具体数值展开,而不是基于它自己想象的数字。这是"上下文传递"(C)在 A2P 场景下的具体落地。
雷区 | 症状 | 原则 |
|---|---|---|
把"自动通过"当默认 | 该人工确认的单被静默放行 | 默认人工暂停,自动通过必须业务显式声明 |
操作条与权限"两张皮" | 客户端拼按钮、服务端另有一套 | 服务端权威,无数据不渲染 |
单据不带契约裸奔 | 跨系统传递无引用无存档,断网即丢 | 每个跨节点动作按请求 ID 落持久化记录 |
业务术语各说各话 | 同一个词不同部门含义不同 | 全局业务术语表,口径唯一 |
回到开头那个问题:企业 Agent 建设中,怎么管理 Agent 与普通员工的融合通讯?
答案不在某个协议里,也不在某个框架里。答案是一套可以逐条检查的纪律:
每当你要为 Agent 加一个新能力,先问自己两个问题: 一、这落在哪一次象限跃迁上? 二、它完成 CAA 三元组了吗——上下文传了、权限验了、问责记了?
如果两个答案都是肯定的,它就能在生产里活下来;如果不是,它就会成为责任链上下一个缺失的沉默环节——平时看不出来,出事时查不到。
最后一个提醒:不要被"A2A 很酷"带偏。 从我们的实践看,企业里最先产生价值、也最该做扎实的,是 A2P(Agent 回来找人) 和 P2A(人把活交给 Agent) 这一来一回。把人工闸门做严、把选择留痕做全、把执行过程记清楚,比让两个 Agent 互相发消息重要得多。
等这些做扎实了,A2A 才有意义——因为到那时,Agent 之间的每一次对话,才终于有一个说得清楚的责任归属。
下文截图全部取自 2026-09-10 的实测实例(OODER Studio ,web 端),不是示意图、不是设计稿。选它们的标准只有一条:每张截图对应前文一个"必须留下痕迹"的主张。

截图 1 ·
会话列表 = 记录面的入口。卡片上的「 2」协作徽标表示该会话已有第二个参与者(P2P 分享后),摘要行是"这件事进行到哪一步"的投影——分享不是把结果截图发出去,而是把整个工作现场纳入了对方可见范围。

截图 2 ·
人的决策写回会话(A2P 的问责记录)。这是一条role=system的决策留痕:动作、操作人、时间、活动 ID 一应俱全,重复提交也不会产生重复条目(按"父流程 + 活动 + 动作"幂等)。它回答的正是文章 §3.2 的那个问题——三个月后翻聊天记录,能不能还原"谁在何时批了什么、理由是什么"。

截图 3 ·
推理过程也要进记录面。会话里不只有结论:Agent 的思考过程以可折叠块呈现(默认收起、需要时展开),配合回复正文,构成"交互 + 执行 + 责任"三重记录中的执行侧证据。这也是 §1.1 那个失败模式("这些数字哪来的?答不上来")的对症解法。

截图 4 ·
"选场景 = 选 Agent"(P2A)。财务域有独立入口,每个场景就是一个领域 Agent(含它的提示词规则、工具集与业务口径)。员工不需要理解背后有几个 Agent,只需要点自己要做的那件事。

截图 5 ·
人工闸门(A2P 的红线)。Agent 干到关键处停下来推一张确认卡(此处为意图歧义消解:让用户明确选择下一步),确认前流程保持暂停。闸门的价值不在"弹了框",而在"不点就不往下走"——所以超时也只能升级人工,不能替你签字。
验证项 | 方法 | 结论 |
|---|---|---|
财务六场景全链路 SSE(含人工闸门暂停与恢复) | 脚本驱动 chat SSE + 事件 dump 断言(6 故事) | 6/6 PASS |
前端/后端事件对齐("用户看得到的 = 后端真推的") | 双端事件采集后求交集 | 后端推送 21 / 前端监听 64 / 交集 21 /仅后端 0(零丢失) |
A2P 决策写回会话(人批了什么、理由、时间) | 触发确认后回读/messages | PASS(命中role=system决策记录,幂等) |
H2A「收而不执」修复(本文 §3.2 的坑) | 起流程 → 推进到审批节点 → 提交 DELEGATE_H2A → 回读响应 / 待办 / 会话 / 日志 | PASS(dispatched=true;落 Agent 待办todo-…-713+ A2A 派发A2A-1c6575287dd04ae9+ 会话留痕) |
A2A 主题寻址不匹配(可能静默丢消息) | 订阅与发布前缀比对 + 运行期日志 | PASS(订阅与发布前缀已对齐) |
P2A 场景切换留痕 | 调用/switch-scene+ 审计文件回读 | PASS(审计记录写入logs/audit/audit-*.jsonl) |
概念 | 一句话 | 工程落点 |
|---|---|---|
协同四象限 | P2P / P2A / A2P / A2A 的责任梯度 | 业务语义分类,非代码字面量 |
CAA 三元组 | 上下文传递 + 权限校验 + 问责记录 | 每次跃迁的检查清单 |
权限行 | 责任在"行"上不在"字段"上 | 办理人表(谁办/以何身份/办到哪/回退锚点) |
HUMAN 五环 | 定义→展示→行为→判定→执行 | 每环必须有消费方 |
断链四形态 | 读而不发 / 写而不判 / 发而不收 / 收而不执 | 自查清单 |
记录面 | 聊天框 = 交互 + 执行 + 责任三重记录 | 消息模型含推理、工具调用、流程数据、产出物 |
责任契约 | A2A 委托 = 远程起流程,不是发消息 | 出处/内容/定位/存证四要素 |
业务红线 | 钱、合同、对外承诺 → 默认人工确认 | 自动通过必须显式声明 |
本文所述设计均以 OODER 平台已落地实现为工程证据;文中提到的"坑"与"断链"均为真实修复记录,而非假设场景。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。