智能体出错时的自我纠错与重试

智能体在执行任务时出错是常态,关键不在于不犯错,而在于能否自己发现错误并恢复。

智能体在工作过程中会遇到各种各样的错误:工具调用返回异常、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之间。如需最新数据,请稍后重试。

差的错误呈现:

系统出错了,请重试。

建立错误日志

每次错误都应该记录日志,包含:

定期分析错误日志,能发现高频错误模式,进而优化系统提示词或工具定义,从源头减少错误发生率。

自我纠错能力是区分"玩具级智能体"和"生产级智能体"的重要标志。通过系统化的错误检测、分层重试和优雅降级,能让智能体在面对不可避免的错误时依然保持可用性。