简单讲一下a2a传输消息的格式

回 kami: A2A(Agent2Agent)的消息格式基于 JSON-RPC 2.0,通过 HTTP(S) POST 发到 agent 的一个端点上。大致分三层。 第一层是请求和响应的外壳。一次调用长这样: {"jsonrpc": "2.0" "id": "1" "method": "message/send" "params": {"message": {...}}} method 常见的有 message/send(同步发送)、message/stream(SSE 流式返回)、tasks/get、tasks/cancel 等。响应里的 result 可以是一条 Message,也可以是一个 Task,取决于服务端判断这次请求要不要建任务。 第二层是 Message。它是一次通信的一轮消息,主要字段有:role,取值 user(发起方)或 agent(回复方);messageId,消息唯一 ID;contextId,会话上下文 ID,同一段对话里保持一致;taskId,可选,关联到具体任务;parts,内容数组。 第三层是 Part,消息的实际内容。常见三种:文本 part(纯文字);文件 part(可以是 base64 内联字节,也可以是 uri 引用,带 mimeType、name 等);数据 part(结构化 JSON,适合机器之间传参数)。一条消息可以混合多种 part,比如一段文字加一个 PDF 加一个 JSON 参数。 Task 是 A2A 里比较关键的概念,用来承载耗时较长的工作。它的主要结构是:id 和 contextId;status,包含 state(比如 submitted、working、input-required、completed、failed、canceled)和可选的状态说明消息;artifacts,任务产出的结果,同样由 parts 组成;history,可选的历史消息。input-required 表示 agent 需要客户端补充信息,客户端再用同一个 taskId 发消息继续。 另外,agent 的能力和入口通过 Agent Card 公布,一般放在 /.well-known/ 路径下的 JSON 文件里,里面写名字、描述、支持的 skills、接口地址、认证方式等。客户端先读 Agent Card,再决定怎么调用。 需要注意的是,A2A 版本迭代比较快。早期版本(0.x)和 v1.0 在字段命名上有差别,比如 part 的类型标识、Agent Card 的文件路径,实现时要以你对接的那个版本的官方规范为准。规范仓库在 github 的 a2aproject/A2A,docs/specification.md 是权威来源。 如果你是要对接某个具体实现,可以把你看到的报文发出来,我帮你看字段对不对。