ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

A2A协议调研:JSON-RPC、SSE与Agent通信链路怎么配 TaoToken

A2A协议调研:JSON-RPC、SSE与Agent通信链路怎么配 TaoToken 1. 从一次多 Agent 协作的翻车说起你可能已经用单个 Agent 跑通了问答、写代码、查资料但当你想让「调研 Agent」把结果交给「写作 Agent」再让「审校 Agent」接手时问题就来了两个 Agent 之间怎么说话谁先开口长任务跑到一半断了怎么办这就是 A2A 协议要解决的事。A2A 全称 Agent2Agent核心目标是标准化不同 AI Agent 之间的通信方式让多个平等的智能体能够互相协作。它和 MCP 不是竞争关系MCP 管的是 Agent 怎么调用外部工具和资源类似给一个人配工具箱A2A 管的是 Agent 和 Agent 之间怎么对话协作类似不同部门的同事直接沟通。两者互补一个向内增强能力一个向外扩展协作。A2A 的通信底座其实很朴素传输层用 HTTP/HTTPS消息体用 JSON-RPC 2.0 封装异步和流式场景用 SSEServer-Sent Events做服务端到客户端的单向推送。这三个东西都是成熟技术任何语言都能快速实现轻量客户端或服务端这也是它可移植、可扩展的关键。这篇就围绕 JSON-RPC、HTTP、SSE 三种交互方式把 Agent 通信链路的配置要点梳理清楚并给出 TaoToken 统一 Key/API 通道下的 settings.json 与 config.toml 骨架最后演示一次 Agent 请求的验证动作。适合正在做 A2A 协议调研、想快速跑通多 Agent 协作场景的开发者。2. TaoToken 前置统一 Key 与 API 通道在配 A2A 链路之前先把模型调用这一层收口。多 Agent 协作时最烦的是每个 Agent 各配一套 Key、各写一份 base_url改起来到处漏。TaoToken 提供统一 Key 和 API 通道把模型访问收敛到一个入口Agent 侧只认一个地址和一个 Key。官网入口在这里https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个不加 UTM直接填进配置。你需要先拿到 Key。进控制台创建https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 然后在 API Keys 页面生成https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。生成后复制保存后面 settings.json 和 config.toml 都要用。注意Key 只显示一次建议生成后立刻写进本地配置或密钥管理工具别留在聊天记录里。如果你后面要跑长期编码或 Agent 任务可以看下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 它更适合持续性的编码和 Agent 工作流。接入细节和字段说明在文档里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。3. 可复制配置settings.json 与 config.toml 骨架A2A 链路里Agent 本身要调模型所以配置分两层一层是模型访问配置指向 TaoToken一层是 Agent 间通信配置JSON-RPC/HTTP/SSE。下面给两份骨架你可以直接抄。3.1 settings.json模型访问与 Agent 通信这份配置适合 Node/TypeScript 系的 Agent 框架把模型通道和 A2A 服务端地址放一起。{ model: { provider: taotoken, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, defaultModel: claude-sonnet-4-20250514 }, a2a: { agentCardUrl: https://your-agent.example.com/.well-known/agent.json, transport: http, rpcVersion: 2.0, streaming: { enabled: true, mode: sse, reconnect: true, resubscribeMethod: tasks/resubscribe }, timeoutMs: 60000, pushNotification: { enabled: false, callbackUrl: } } }几个字段说明baseUrl固定填 TaoToken 的 API 地址transport是 A2A 的传输层默认 httpstreaming.mode设成 sse 表示长任务走流式resubscribeMethod对应断线重连后恢复订阅的方法名。3.2 config.tomlPython 系 Agent 配置如果你用 Python 写 Agentconfig.toml 更顺手。[model] provider taotoken base_url https://taotoken.net/api api_key sk-你的TaoTokenKey default_model claude-sonnet-4-20250514 [a2a] agent_card_url https://your-agent.example.com/.well-known/agent.json transport http rpc_version 2.0 timeout_ms 60000 [a2a.streaming] enabled true mode sse reconnect true resubscribe_method tasks/resubscribe [a2a.push_notification] enabled false callback_url 3.3 JSON-RPC 请求结构对照A2A 的消息体是 JSON-RPC 2.0请求和响应字段固定配错了服务端直接报错。对照表如下类别字段/方法类型必选说明请求jsonrpcstring是固定值 2.0请求methodstring是方法名如 tasks/send请求idnumber/string是请求唯一标识请求paramsobject否方法参数响应resultobject条件必选成功时返回结果响应errorobject条件必选失败时返回错误含 code 和 message响应idnumber/string是必须与请求 id 一致常用方法也要记牢tasks/send提交新任务tasks/sendSubscribe提交任务并订阅 SSE 流式更新tasks/get查任务状态可用 historyLength 指定历史条数tasks/cancel终止运行中任务tasks/pushNotification/set配置推送回调地址tasks/pushNotification/get查当前推送配置tasks/resubscribe断线重连后恢复事件订阅。4. 验证请求跑通一次 Agent 调用配置写完别急着上多 Agent先用一次单请求验证链路通不通。下面用 curl 发一个tasks/send模拟客户端 Agent 向服务端 Agent 提交任务。4.1 先拉 Agent CardA2A 的服务发现靠 Agent Card通常托管在/.well-known/agent.json。先确认能拿到curl -s https://your-agent.example.com/.well-known/agent.json | jq .返回里应该有 name、description、skills、url、authentication 等字段。如果这里 404说明服务端没托管 Card后面所有调用都无从谈起。4.2 发一个 tasks/send 请求curl -s -X POST https://your-agent.example.com/a2a \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的TaoTokenKey \ -d { jsonrpc: 2.0, method: tasks/send, id: req-001, params: { sessionId: sess-abc, message: { role: user, parts: [ { type: text, text: 帮我调研 A2A 协议的通信方式 } ] } } } | jq .成功时返回结构里会有result包含 task 的 id、status、artifacts 等。id必须和请求的req-001一致这是 JSON-RPC 的硬要求。4.3 流式场景改用 sendSubscribe长任务用tasks/sendSubscribe服务端会通过 SSE 持续推事件curl -N -X POST https://your-agent.example.com/a2a \ -H Content-Type: application/json \ -H Accept: text/event-stream \ -d { jsonrpc: 2.0, method: tasks/sendSubscribe, id: req-002, params: { sessionId: sess-abc, message: { role: user, parts: [{ type: text, text: 分三步输出调研结果 }] } } }-N关掉 curl 缓冲你就能看到事件一条条打出来。每个事件里通常带 task 状态更新或 artifact 片段。如果中途断了用tasks/resubscribe带上原 task id 恢复订阅。4.4 验证模型通道是否走通Agent 内部调模型这一步单独验一下更稳。用模型对话页面快速确认 Key 有效https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果那边能正常出结果说明 Key 和 base_url 没问题问题就缩小到 A2A 通信层了。5. 本篇常见错排查配 A2A 链路时报错往往集中在几个固定位置。下面按现象给排查路径。JSON-RPC 报 -32600 Invalid Request八成是jsonrpc字段没写 2.0或者id缺失。JSON-RPC 2.0 对这两个字段是强校验少一个直接拒。检查请求体里jsonrpc、method、id三件套是否齐全。-32601 Method not found方法名拼错了。A2A 的方法名是tasks/send这种带斜杠的格式不是sendTask。对照第 3.3 节的方法表逐个核对注意大小写。SSE 连上但收不到事件先确认请求头带了Accept: text/event-stream再确认用的是tasks/sendSubscribe而不是tasks/send。普通 send 是同步返回不会推流。另外检查中间层有没有缓冲 SSE某些网关会攒够一批才发导致你看着像卡住。断线后事件丢失SSE 断线不会自动补发需要客户端主动调tasks/resubscribe带上原 task id。配置里reconnect和resubscribeMethod就是干这个的别关掉。Agent Card 拉不到确认路径是/.well-known/agent.json不是/agent.json。有些框架默认路径不同以服务端实际托管为准。Card 里的url字段要和实际请求地址一致否则客户端会往错的地方发。模型调用 401Key 错了或没带。检查Authorization: Bearer sk-xxx头以及 base_url 是不是https://taotoken.net/api。如果 Key 刚生成确认没有多余空格。任务一直 pending看服务端 Agent 有没有真正执行。tasks/get带上 task id 和historyLength查状态历史能看出卡在哪一步。如果是 push notification 模式确认 callback 地址可达。6. 把链路收口到统一通道A2A 的通信链路拆开看就是三件事HTTP 做传输、JSON-RPC 2.0 做消息封装、SSE 做流式推送。配的时候把模型访问层用 TaoToken 统一收口Agent 侧只认一个 base_url 和一个 Key改配置时不用满项目找散落的地址。实际跑的时候建议先用tasks/send验证同步链路再用tasks/sendSubscribe验证流式最后才上多 Agent 协作。断线重连和 push notification 属于进阶项等基础链路稳了再加。Agent Card 的托管路径和方法名拼写是两个高频坑配之前先对着文档核一遍。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。长期跑编码和 Agent 任务的话Coding Plan 那条通道更省心https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。
返回列表