智能体在执行任务时出错是常态,关键不在于不犯错,而在于能否自己发现错误并恢复。
智能体在工作过程中会遇到各种各样的错误:工具调用返回异常、API超时、参数格式不对、模型输出不符合预期。如果没有纠错机制,一个小的错误就会导致整个任务失败。好的智能体应该像有经验的工程师一样,遇到报错先分析原因,再尝试修复,而不是直接把错误甩给用户。
| 错误类型 | 典型表现 | 原因 |
|---|---|---|
| 工具执行错误 | API返回404/500 | 服务不可用、参数错误 |
| 参数格式错误 | JSON解析失败 | 模型生成的参数不符合Schema |
| 逻辑错误 | 输出合理但事实错误 | 模型推理偏差或信息不足 |
| 格式错误 | 要求JSON但返回了散文 | 模型未遵循输出格式约束 |
| 超时错误 | 请求超时无响应 | 网络问题或服务过载 |
不同类型的错误需要不同的处理策略,不能一刀切。
纠错的第一步是检测。以下是几种实用的检测方法:
在工具执行代码中加入校验逻辑,捕获异常后返回结构化的错误信息:
try:
result = call_external_api(params)
return {"status": "success", "data": result}
except TimeoutError:
return {"status": "error", "error_type": "timeout", "message": "请求超时,建议重试"}
except ValidationError as e:
return {"status": "error", "error_type": "validation", "message": str(e)}
关键点:错误信息要说清楚"哪里错了"和"怎么改",而不是只报一个错误码。
智能体生成最终输出后,用一段校验逻辑检查格式和内容:
在系统提示词中加入自我审查步骤,要求智能体在输出前检查自己的回答:
在给出最终回答前,请自行检查:
1. 是否回答了用户的问题?
2. 是否包含了未经证实的信息?
3. 格式是否符合要求?
如果发现问题,修正后再输出。
这种方法利用模型自身的判断能力做一层过滤,虽然不能100%可靠,但能捕获大部分明显错误。
当检测到错误后,重试是最直接的处理方式。但盲目重试往往无效,需要配合策略:
对于超时类错误,使用指数退避策略:第一次立即重试,第二次等2秒,第三次等4秒,以此类推。适合外部服务临时不可用的情况。
对于参数格式错误,把错误信息回传给模型,让模型修正参数后重新调用:
工具调用返回错误:参数city期望字符串类型,但收到了数字123
→ 模型修正:city="123" → 重新调用
大多数现代模型在收到明确的错误信息后,能在一两轮内修正参数。
重试若干次仍然失败时,执行降级方案:
降级策略的核心是"宁可给次优结果,也不给空白结果"。
智能体出错时,如何向用户报告也很讲究:
好的错误呈现:
抱歉,实时天气数据暂时获取不到(天气服务响应超时)。以下是基于历史数据的参考信息:北京8月中旬气温通常在25-32°C之间。如需最新数据,请稍后重试。
差的错误呈现:
系统出错了,请重试。
每次错误都应该记录日志,包含:
定期分析错误日志,能发现高频错误模式,进而优化系统提示词或工具定义,从源头减少错误发生率。
自我纠错能力是区分"玩具级智能体"和"生产级智能体"的重要标志。通过系统化的错误检测、分层重试和优雅降级,能让智能体在面对不可避免的错误时依然保持可用性。