🔧 Agent Error Handling(智能体错误处理)

AI也会犯错,关键是怎么优雅地摔跤——然后自己爬起来。

世界上有一种Agent,它遇到错误就直接崩溃,留下一脸懵逼的用户。然后又有一种Agent,它像武侠小说里的高手——中了一掌之后,不但没倒,还借力打力,把错误变成了有用的信息。

凌晨2点14分,HN上有个热帖:"AI agent deleted our production database"。一个Agent因为没有错误处理机制,直接把生产数据库给删了。这事发生在2026年4月,142个赞,185条评论。

这告诉我们:错误处理不是锦上添花,是生死存亡。

什么是Agent Error Handling?

Agent Error Handling(智能体错误处理)是Agent系统中检测、分类、恢复和记录错误的一整套机制。它不仅仅是try-catch,而是一个包含错误预防、检测、恢复、学习和告警的完整体系。

Agent错误分类体系

错误类型 严重级别 示例 处理策略
工具调用错误 API返回500、参数错误、认证失败 重试 → 降级 → 替代工具
模型推理错误 幻觉输出、格式错误、拒绝回答 重试 → prompt修正 → 模型降级
上下文溢出 token超限、上下文窗口不足 压缩 → 截断 → 分段处理
循环死锁 严重 Agent反复执行同一操作 循环检测 → 强制终止 → 状态重置
权限错误 无权访问资源、操作被拒绝 权限升级 → 交接 → 告警
数据错误 输入格式错误、数据缺失、类型不匹配 数据校验 → 默认值 → 人工确认
网络错误 连接超时、DNS解析失败 重试 → 备用连接 → 离线模式
安全错误 严重 注入攻击、越权操作、数据泄露 立即终止 → 审计 → 告警

OpenClaw 错误处理架构

// OpenClaw 分层错误处理 error_handling: # 第一层:工具级重试 tool_errors: retryable: - "rate_limit" - "timeout" - "connection_error" - "503_service_unavailable" non_retryable: - "401_unauthorized" - "403_forbidden" - "404_not_found" - "422_validation_error" retry_policy: max_attempts: 3 backoff: "exponential" # 第二层:模型级容错 llm_errors: on_hallucination: "verify_and_retry" on_refusal: "rephrase_and_retry" on_format_error: "reparse_with_fallback" model_fallback_chain: - "claude-3-opus" - "claude-3-sonnet" - "gpt-4o" # 第三层:流程级恢复 workflow_errors: on_loop_detected: max_iterations: 10 action: "checkpoint_and_replan" on_context_overflow: action: "compress_context" on_cascading_failure: action: "circuit_breaker"

关键错误处理模式

1. 断路器模式 (Circuit Breaker)

当错误率超过阈值时,暂时停止调用,给系统恢复时间。

// 断路器状态机 circuit_breaker: states: closed: # 正常运行,监控错误率 failure_threshold: 5 time_window: 60s open: # 断路,拒绝请求 recovery_timeout: 30s fallback: "cached_response" half_open: # 尝试恢复 test_requests: 3

2. 检查点恢复 (Checkpoint & Resume)

定期保存Agent状态,出错后从最近的检查点恢复。

// OpenClaw 检查点配置 checkpoint: enabled: true interval: "every_step" storage: "redis" ttl: "24h" on_error: action: "resume_from_last_checkpoint" max_resumes: 5

3. 输入验证层

在Agent执行前验证输入,拦截错误数据。

// 输入验证schema input_validation: required_fields: ["task", "context"] sanitization: - type: "remove_html_tags" - type: "max_length" value: 10000 - type: "detect_injection" on_invalid: "reject_with_explanation"

4. 安全护栏

防止Agent执行危险操作。

// 操作安全边界 safety_guardrails: forbidden_patterns: - regex: "DROP TABLE" action: "block_and_alert" - regex: "rm -rf /" action: "block_and_alert" dangerous_operations: - pattern: "DELETE" requires_approval: true - pattern: "WRITE" max_records: 1000

优雅降级的艺术

错误处理的最高境界不是"不犯错",而是犯错后用户感觉不到:

// 降级策略示例 graceful_degradation: scenario: "web_search_fails" chain: 1. 尝试备用搜索引擎 2. 使用缓存结果 3. 请求用户重新表述 4. 提供已知相关信息 user_message: "搜索暂时不可用,我将使用已缓存的信息来帮助您"

错误日志与学习

每次错误都是学习机会:
  • 结构化日志 - 记录错误类型、上下文、触发条件
  • 错误统计 - 识别高频错误,优化优先级
  • 自动修复建议 - AI分析错误根因,推荐修复方案
  • 回归测试 - 从错误中生成测试用例

HN事件教训:生产数据库被删

2026年4月HN热帖教训总结:
  • 🚫 Agent不应该有"直接删除"的权限
  • 🚫 危险操作必须经过人工审批(Human-in-the-Loop)
  • 🚫 没有安全护栏的Agent就像没有刹车的汽车
  • 🚫 错误处理不是"出错了再处理",而是"防止出错的错误"