Agent 不可能完全避免报错,关键在于:
让错误可恢复(Recoverable)、可观测(Observable)、可控制(Controllable)。
标准处理流程:
text报错发生 ↓ 识别错误类型 ↓ 判断是否可重试 ↓ 自动修复或降级 ↓ 记录日志 ↓ 必要时转人工
示例:
处理方式:
示例:
json{
"date": "tomorrow"
}
工具要求:
json{
"date": "2026-06-03"
}
处理方式:
示例:
处理方式:
示例:
处理方式:
示例:
处理方式:
示例:
text搜索 ↓ 搜索 ↓ 搜索 ↓ 搜索
处理方式:
不要让 Agent 直接调用工具。
推荐增加 Safe Wrapper:
pythondef safe_call(tool, args):
try:
result = tool(**args)
return {
"ok": True,
"result": result
}
except TimeoutError:
return {
"ok": False,
"error_type": "timeout"
}
except ValueError as e:
return {
"ok": False,
"error_type": "invalid_args",
"message": str(e)
}
except Exception as e:
return {
"ok": False,
"error_type": "unknown",
"message": str(e)
}
优点:
示例:
pythonfor i in range(3):
try:
call_tool()
break
except TimeoutError:
sleep(2 ** i)
例如:
text用户不存在
继续重试没有意义。
工具返回:
json{
"ok": false,
"error_type": "invalid_args",
"message": "date must be YYYY-MM-DD"
}
Agent 应执行:
text读取错误信息 ↓ 修正参数 ↓ 重新调用工具
而不是直接失败。
text实时搜索 ↓失败 知识库搜索 ↓失败 缓存结果 ↓失败 人工处理
textGPT-5 ↓失败 GPT-4.1 ↓失败 规则系统
防止系统持续调用故障服务。
示例:
text连续失败 5 次 ↓ 熔断 ↓ 暂停调用 60 秒 ↓ 恢复检测
作用:
推荐配置:
yamlmax_steps: 20
max_tool_calls: 30
max_retries: 3
max_runtime_seconds: 60
达到限制:
text停止执行 总结当前结果 返回失败原因
至少记录:
json{
"goal": "生成市场分析报告",
"step": 4,
"tool": "web_search",
"input": "...",
"output": "...",
"error": "timeout",
"retry_count": 2
}
日志应包含:
错误发生时不要只返回:
text任务失败
推荐:
text任务执行失败 失败步骤: 查询订单状态 失败原因: 订单接口超时 已尝试: 重试 3 次 当前影响: 无法确认订单状态 建议: 稍后重试或转人工处理
textUser Goal │ ▼ Planner │ ▼ Tool Router │ ▼ Safe Tool Wrapper │ ▼ Retry / Fallback Layer │ ▼ Observation │ ▼ Agent 决策 │ └────► 下一步执行
不要直接抛异常:
pythonraise Exception(...)
推荐:
json{
"ok": false,
"stage": "tool_call",
"error_type": "timeout",
"retryable": true,
"suggested_action": "retry"
}
必须设置:
避免无限循环。
Agent 收到错误后优先考虑:
而不是直接终止任务。
优秀的 Agent 系统并不是:
text不出错
而是:
text出错 ↓ 发现 ↓ 理解 ↓ 修复 ↓ 继续执行
核心设计理念:
错误是正常状态(Error is Normal State),Agent 的能力体现在如何从错误中恢复。
本文作者:曹子昂
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!