08|把资料任务交出去,再把结果接回来
读到能力卡以后,工作台还没有得到任何资料。这一节真正发送一次 A2A 消息,观察远程状态更新,最后把协议中的交付物转成本地写作能使用的 sources 和 text 。
如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。
读到能力卡以后,工作台还没有得到任何资料。这一节真正发送一次 A2A 消息,观察远程状态更新,最后把协议中的交付物转成本地写作能使用的 sources 和 text。
确保资料服务仍在 8767 端口运行。我们先在终端发一条小请求,再回到网页执行完整任务,避免一开始就把远程通信和整套调度混在一起排查。
先沿时序图走一遍
这一节的难点不是“把请求发出去”,而是分清一轮通信中的几种返回:任务刚建立时给你的编号、执行期间不断到来的事件,以及最后能够交给下一位角色的产物。
图中三条竖线代表三个参与者,时间从上往下走。只有跨越竖线的箭头才表示交接。资料助手内部怎样推理没有画进来,因为客户端不需要依赖那个细节。
注意第 3、6、8 步的区别。第 3 步告诉你“这件事有了编号”;第 6 步告诉你“现在做到哪里”;第 8 步才让你核对最终状态并取出成果。在快递查询里,揽件、运输中、签收不是同一件事,A2A 的这些信号也不能混在一起判断。
操作名、SDK 方法与请求类型各是哪一层
| 你想做什么 | A2A 1.0 操作 | 本课程 Python 写法 |
|---|---|---|
| 提交一轮消息 | SendMessage / SendStreamingMessage | client.send_message(request);客户端开启 streaming |
| 读取某项任务 | GetTask | client.get_task(GetTaskRequest(id=remote_id)) |
| 请求取消任务 | CancelTask | client.cancel_task(CancelTaskRequest(id=remote_id)) |
表里第一列是人的目的,第二列是协议操作,第三列是这个版本 SDK 给程序员的入口。不要把 Python 的小写方法名直接当作所有绑定上的网络操作名,也不要拿旧版 message/send 路径拼进当前请求。
流式不是“每来一个字就是一个独立任务”。同一条响应中可以先给出任务对象,再给状态更新与产物更新。客户端必须按事件类型读取内容,记录它们对应的 task_id。课程的 async for event in client.send_message(request) 就是在逐条消费这些事件。
协议对象的含义可对照官方 核心概念;这里的时序图另外画出了课程代码自己的最终 GetTask 核对步骤,方便你把规范与具体实现分开理解。
1. 单独委派一次资料查询
在项目根目录运行:
.\.venv\Scripts\python.exe labs.py 8
这个实验发送“产品 规范”。先看几条 A2A 事件,再看最后的结果:kind 应为 research,包含资料来源、文本和远程任务编号。编号每次会变化,来源内容则来自课程的虚构资料卡。

试读到这里 · 后续内容已封存
关注公众号,继续把这章学完
在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。