Agent Circuit Breaker(Agent熔断器)

弹性设计 | 更新于 2026-06-19 | 妙趣AI术语百科

📖 定义

Agent Circuit Breaker(Agent熔断器)是一种从微服务架构借鉴而来的弹性设计模式,用于在AI Agent系统中检测故障、快速失败、防止级联崩溃,并在故障恢复后自动恢复正常调用。当一个Agent或工具连续失败时,熔断器会"跳闸",暂时切断调用链路,避免无意义的重试消耗Token和时间。

🧠 三种状态

关闭(正常) → 失败阈值达到 → 打开(熔断) → 超时后 → 半开(试探) → 成功 → 关闭(恢复)

关闭状态(Closed)

正常运行,所有请求正常通过。同时记录失败次数,当失败次数超过阈值时触发熔断。

打开状态(Open)

熔断已触发,所有请求直接返回失败(快速失败),不再调用下游Agent/工具。节省Token、避免超时等待。

半开状态(Half-Open)

经过一段冷却时间后,允许少量请求通过进行"试探"。如果试探成功,恢复到关闭状态;如果失败,继续保持打开状态。

🔧 Agent场景下的熔断触发条件

触发条件说明典型阈值
连续超时Agent响应时间超过阈值连续3次 > 60秒
连续错误Agent返回错误或异常连续5次失败
Token过量单次请求消耗Token过多单次 > 50K tokens
工具不可用外部工具/API返回错误连续3次 5xx
模型过载模型提供商返回429连续2次 429

🏗️ OpenClaw 实战配置

方案一:基于子Agent的熔断

# OpenClaw 子Agent熔断配置
# 通过fallback模型实现熔断效果
subagents:
  maxConcurrent: 5
  defaultTimeout: 120  # 超时即熔断
  fallbacks:
    - "claude-haiku-4"      # 主模型失败时降级
    - "gpt-4o-mini"         # 二级降级
    - null                  # 最终放弃

方案二:工具级熔断

# ~/.openclaw/config.yaml - 工具熔断
tools:
  web_search:
    timeout: 30
    retries: 2
    circuitBreaker:
      failureThreshold: 5      # 连续5次失败触发
      resetTimeout: 300000     # 5分钟后尝试恢复
      halfOpenRequests: 1      # 半开状态允许1个请求
  browser:
    timeout: 60
    circuitBreaker:
      failureThreshold: 3
      resetTimeout: 600000     # 浏览器故障冷却更长

方案三:自定义熔断逻辑

// 在Agent的SKILL.md中定义熔断规则
// 当外部API连续失败时自动切换策略

class AgentCircuitBreaker {
  constructor(options) {
    this.failureThreshold = options.failureThreshold || 5;
    this.resetTimeout = options.resetTimeout || 300000;
    this.state = 'CLOSED';
    this.failureCount = 0;
    this.lastFailureTime = null;
  }

  async execute(fn, fallback) {
    if (this.state === 'OPEN') {
      if (Date.now() - this.lastFailureTime > this.resetTimeout) {
        this.state = 'HALF_OPEN';
      } else {
        return fallback ? fallback() : this.fastFail();
      }
    }

    try {
      const result = await fn();
      this.onSuccess();
      return result;
    } catch (error) {
      this.onFailure();
      if (fallback) return fallback();
      throw error;
    }
  }

  onSuccess() {
    this.failureCount = 0;
    this.state = 'CLOSED';
  }

  onFailure() {
    this.failureCount++;
    this.lastFailureTime = Date.now();
    if (this.failureCount >= this.failureThreshold) {
      this.state = 'OPEN';
      console.log(`⚡ 熔断器跳闸!连续${this.failureCount}次失败`);
    }
  }

  fastFail() {
    return { error: 'CIRCUIT_OPEN', message: '服务暂时不可用,已熔断保护' };
  }
}

📊 熔断 vs 重试 vs 降级

策略适用场景效果Token影响
重试偶发故障自动重试,可能成功增加消耗
熔断持续故障快速失败,保护系统减少浪费
降级能力不足切换到备用方案可能更省

最佳实践:三者结合 — 偶发故障用重试,持续故障触发熔断,能力不足时降级。在OpenClaw中,可以通过配置fallback模型链实现这三种策略的组合。

⚠️ 常见陷阱

陷阱1:阈值太低 — 偶尔一次失败就熔断,会导致频繁跳闸。建议阈值设为3-5次连续失败。

陷阱2:冷却时间太短 — 熔断后马上恢复,如果故障还没修复,会导致"开开停停"的抖动。建议冷却时间至少30秒。

陷阱3:没有降级方案 — 熔断后直接返回错误给用户,体验很差。应该配置fallback模型或备用Agent。

💡 实际案例

场景:MCP服务器故障

你有一个连接外部数据库的MCP服务器,突然返回500错误:

  1. 第1-2次失败:正常重试
  2. 第3次失败:熔断器跳闸,后续请求直接返回"数据库暂时不可用"
  3. 5分钟后:进入半开状态,允许1个试探请求
  4. 试探成功:恢复正常
  5. 试探失败:继续保持熔断,再等5分钟
← 返回术语百科