标准回答
先分类错误(独占一行)
工具失败不能一律重试。先区分:瞬时错误(网络超时、限流 429、服务端 5xx)、输入错误(参数缺失/类型不对/校验不过)、持久错误(鉴权失败、资源不存在、权限不足)。不同类别处理方式不同。
重试
仅对瞬时且幂等的调用重试:采用指数退避加随机抖动,设最大重试次数与整体超时上限,避免雪崩与无限等待。非幂等写操作需配合幂等键,否则不能盲目重试。
让模型自我修复
参数/校验类错误应把结构化错误信息作为「观察」回灌给模型,在 ReAct 循环里让它修正参数或改用别的工具,而不是程序硬重试。
回退
持久失败或重试耗尽时走回退:切换备用工具、读缓存、返回安全默认值,或把「该工具不可用」明确告知模型让它换思路,必要时降级为人工兜底。
每次工具调用记录入参、结果、错误码、耗时与重试次数,便于定位与改进(见 Function Calling 实战)。
常见误区
⚠️ 常见踩坑
别对所有错误统一「重试 N 次」——对参数错误重试只会原样失败,对非幂等写操作重试可能重复下单/扣款;必须先分类错误、再决定重试还是回灌模型修复。
追问
追问 1:如何保证非幂等工具的安全重试?
为写操作引入幂等键(idempotency key),服务端按键去重,使同一逻辑请求重试只生效一次;无法幂等时改为「先查状态再决定是否重试」,避免重复副作用。
追问 2:工具反复失败导致 Agent 卡在循环里怎么办?
设置全局工具调用次数与总时长上限、对同一工具的连续失败做熔断、检测重复动作提前终止,并在耗尽预算时返回部分结果或转人工,而非无限循环。
追问 3:错误信息怎么返回给模型最有效?
返回结构化、可操作的错误(错误类型、具体字段、修复提示),而非原始堆栈;明确告诉模型「哪里错、可以怎么改」,能显著提升其自我修复成功率。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
🛠️ AI 工具