Q:Agent 调用启动较慢的外部工具时,如何设计异步任务和结果回调?
来源:途游 Agent 二面(2026-08-18)
新手答:“开一个异步线程等待工具完成,完成后通知 Agent。”
高手答:
先把工具调用建模为持久任务,而不是占住模型请求或 Web 线程等待。提交阶段生成 task_id 和幂等键,记录租户、调用参数摘要、deadline、回调地址与状态版本;工具服务异步启动并执行,状态通过消息队列、Webhook 或事件流回传。编排器收到事件后用 task_id + event_id 去重,校验任务版本和剩余预算,再恢复对应 checkpoint。
客户端可以先收到“已受理 + 进度事件”,不必保持原始请求。超时后应取消或隔离迟到结果;工具不支持取消时,至少用 fencing token 防止旧任务回写覆盖新状态。重试只用于幂等、可恢复错误,并设置退避、上限和死信队列。模型负责根据结构化结果决定下一步,任务可靠性由编排器保证。
差距在哪:新手把异步等同于线程,高手给出了任务账本、事件协议、幂等、超时和恢复边界。面试官考的是能否把慢工具接入可恢复的分布式工作流。