Skip to content

A2A 过程透出协议

机器人互访(A2A)时,把被叫端 Agent 的执行过程(工具调用、思考、流式输出)结构化带回主叫侧, 供前端在「工具调用详情」区持续追加渲染——而不是让对端 Agent 成为一个黑盒。

!!! note "状态" 定稿(2026-09-09,随 TFRS-401 D4 落定)。 归属 TFRS-401 L1 实时过程,实施见 TFRS-420(服务端)+ TFRF-142(前端)。

权威规范

文档 范围
a2a-progress-envelope-spec.md ⭐ 被叫端出门:信封 Schema v1、载体选型(Part.text 回退 + metadata.tfrs)、kind 枚举、向后兼容与降级、生产端改造点
tool-detail-stream-spec.md ⭐ 主叫侧进门:tool_event_stream 事件、归属键 callId、生命周期、前端渲染语义(按 seq 排序、乱序容忍)

两份是同一条链路的两段,分开读、但必须一起实现:

被叫 Agent ──working 状态消息──▶ A2A SSE ──▶ 主叫 worker ──Socket.IO──▶ 前端详情区
             [信封文档:出门]                 [详情流文档:进门]

新读者从这两份开始。

不变式(跨两份文档)

  • 终值单源:最终回复只认 completed 终态(及 failed / canceled)。信封与过程流都是 best-effort 进度——可断、可丢、可被终态覆盖,前端不得据此推断结论。
  • 不新增 A2A 方法或事件类型:复用中间 working 更新;Socket.IO 侧新增 tool_event_stream 与现有 chat_event 快照并存,不合并、不改快照语义。
  • 文本回退恒定:每个 working Part 始终携带人类可读 text,信封挂在 metadata.tfrs。 未升级的主叫 / 第三方对端行为 = 现状(方案 A,见信封文档的取舍表)。

明确不覆盖

范围 原因
TFRS-401 L2(Task.history / ListTasks) L2 是持久化任务记录(跨进程跨会话可查);本协议是当次调用的实时过程流,不持久化
TFRS-401 L3(异步调用) 异步调用的工具节点在返回 handle 时即终态,过程流不在该节点展开
TFRS-339 / TFRF-116(Trajectory 链树) 链树是图谱(结构、可见性、LLM 形态字段);本协议是单工具节点内部的时间线追加流,是链树里一个节点「肚子里的内容」