超时策略是产品体验,也是正确性。 工具调用卡住时,Agent 若只会「再试一次」,可能把支付、发信等副作用打成双份。

分层设置

层建议
单次工具 HTTP明确 timeout + 可取消
Agent 步级单步墙钟上限
整任务全局预算,到点总结已得结果

处理剧本

  1. 可安全重试(只读查询):有限次退避,参见 重试退避清单。
  2. 有副作用:超时后先查幂等键/状态,勿盲重放;见 幂等工具调用。
  3. 对用户:说清「哪一步超时、已保留什么、可选改走手工」。

提示/策略片段

若工具在 {{N}}s 内未返回:
- 停止等待该调用
- 记录 tool_name、timeout、是否已知副作用
- 若只读:可按退避重试至多 {{K}} 次
- 若写操作:改为 status_check 工具,禁止重复 submit
- 向用户输出降级说明,不要假装成功

与结果截断

超时和「返回过长被截断」不同,后者见 工具结果截断。

相关阅读:重试退避、幂等调用。

可观测性

每次超时打点:工具名、耗时、是否重试、是否走了状态查询。仪表盘上看「超时后仍报告成功」的比例——这是严重事故信号。向用户的降级文案要预置,避免模型即兴道歉却暗示任务已完成。

取消语义:若底层支持 abort,就暴露给 Agent;不支持则至少不要叠加新的写调用。全局预算到点时,输出「已完成步骤摘要 + 未完成步骤」,便于人接盘。与截断、重试、幂等三篇文章一起,构成工具可靠性最小集。

用户可见文案原则

说明卡在哪一类工具(搜索 / 下单 / 发送),给出已确认的部分结果,提供「重试 / 转人工 / 稍后再说」。不要用幽默掩盖是否成功。内部则保留完整堆栈与工具链路 ID。

压测时注入故意超时,看 Agent 是否双写。超时预算应随工具类型配置,而不是全局一个魔法数。与重试、幂等、截断策略一起写进 Agent 运行手册。

配置表示意

只读搜索 8s、生成类 60s、支付类 15s 且禁用盲重试——具体数字按你们 SLA 压测得出,本文不给保证值。把配置放服务端,不放提示词里让模型改。超时演练纳入发布检查单。 超时不是边缘情况,而是默认会发生的情况。把它设计进主路径,Agent 才像可靠同事。重试、幂等、降级文案三件套齐备再上线。示意秒数必须经压测替换;支付与发送类工具禁止盲重试。把演练记录留下,便于事故复盘时对照当时配置。

对用户说「系统忙」不如说「正在等待××工具,已超过×秒,已为你保存草稿」。具体工具名可映射成产品语言。示意文案需产品审定。