09|远程助手需要补充信息,或者需要停止
真实任务经常不能一口气完成:资料范围不清楚,要先问用户;用户改主意了,要尽快停止。这一节分别操作“等待输入后继续”和“执行中取消”,理解远程任务为什么不能只用成功、失败两个状态表示。
如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。
真实任务经常不能一口气完成:资料范围不清楚,要先问用户;用户改主意了,要尽快停止。这一节分别操作“等待输入后继续”和“执行中取消”,理解远程任务为什么不能只用成功、失败两个状态表示。
保持工作台与 A2A 资料服务都在运行。首先用课程预设的“请先澄清”触发词制造等待状态,避免依赖模型是否恰好提出追问。
先把“还没结束”分成几种情况
“没有结果”可能表示还在运行,也可能是在等你补材料,还可能是已经失败。网页如果把这三种情况都显示成一个转圈,用户就不知道该等、该填,还是该重试。
图的上半部分看状态,下半部分看编号。先记两个判断:INPUT_REQUIRED 和 AUTH_REQUIRED 属于等待,不能直接当失败处理;COMPLETED、FAILED、CANCELED、REJECTED 是终态,后续新工作不能靠把原任务“改回运行中”来继续。
用办一张申请单理解三个编号
你先提交“调研活动场地”,这是一条消息 m-001;资料助手为这项工作建立任务 t-001。它问活动人数,你回复“约 30 人”,这是新消息 m-002,但仍然属于任务 t-001。两轮交互可以共享 context_id c-001,表示它们处于同一组相关上下文中。
稍后你又提出“根据资料起草邀请函”。如果前一任务已经完成,这可以是同一上下文中的新任务 t-002。**同一个 context_id 不等于同一个任务,更不等于已经验证了用户身份。**权限检查仍要在服务端执行。
为什么取消也要核对结果
工作台发出 CancelTask 时,对方可能仍在工作,也可能刚好已经完成。请求到达的时间与执行进度会产生竞态。因此客户端应显示服务端确认的状态,而不是点击按钮后立即宣称“已取消”。网络断了也一样:连接停止只说明你暂时收不到事件,不能证明远程工作已停止。
本课程的资料服务使用内存任务存储。浏览器断线而服务仍在运行,与资料服务进程被重启,是两种不同故障:前者有机会通过原 task_id 查询;后者不能假设旧任务还在。第 12 节讨论的工作台持久化,也不会自动替另一台服务保存其内部任务。
状态规则可对照官方 任务生命周期。图中只画出理解本课所需的主要路线,未穷举所有转换条件。
1. 先观察同一个任务暂停再继续
运行:
.\.venv\Scripts\python.exe labs.py 9
实验先发“请先澄清”,拿到“请选择资料范围:产品、受众或规范”;然后携带刚收到的远程 task_id 和 context_id,回复“受众”。最后应返回资料结果。
试读到这里 · 后续内容已封存
关注公众号,继续把这章学完
在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。