Agent Circuit Breaker(Agent熔断器)是一种从微服务架构借鉴而来的弹性设计模式,用于在AI Agent系统中检测故障、快速失败、防止级联崩溃,并在故障恢复后自动恢复正常调用。当一个Agent或工具连续失败时,熔断器会"跳闸",暂时切断调用链路,避免无意义的重试消耗Token和时间。
正常运行,所有请求正常通过。同时记录失败次数,当失败次数超过阈值时触发熔断。
熔断已触发,所有请求直接返回失败(快速失败),不再调用下游Agent/工具。节省Token、避免超时等待。
经过一段冷却时间后,允许少量请求通过进行"试探"。如果试探成功,恢复到关闭状态;如果失败,继续保持打开状态。
| 触发条件 | 说明 | 典型阈值 |
|---|---|---|
| 连续超时 | Agent响应时间超过阈值 | 连续3次 > 60秒 |
| 连续错误 | Agent返回错误或异常 | 连续5次失败 |
| Token过量 | 单次请求消耗Token过多 | 单次 > 50K tokens |
| 工具不可用 | 外部工具/API返回错误 | 连续3次 5xx |
| 模型过载 | 模型提供商返回429 | 连续2次 429 |
# 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: '服务暂时不可用,已熔断保护' };
}
}
| 策略 | 适用场景 | 效果 | Token影响 |
|---|---|---|---|
| 重试 | 偶发故障 | 自动重试,可能成功 | 增加消耗 |
| 熔断 | 持续故障 | 快速失败,保护系统 | 减少浪费 |
| 降级 | 能力不足 | 切换到备用方案 | 可能更省 |
最佳实践:三者结合 — 偶发故障用重试,持续故障触发熔断,能力不足时降级。在OpenClaw中,可以通过配置fallback模型链实现这三种策略的组合。
陷阱1:阈值太低 — 偶尔一次失败就熔断,会导致频繁跳闸。建议阈值设为3-5次连续失败。
陷阱2:冷却时间太短 — 熔断后马上恢复,如果故障还没修复,会导致"开开停停"的抖动。建议冷却时间至少30秒。
陷阱3:没有降级方案 — 熔断后直接返回错误给用户,体验很差。应该配置fallback模型或备用Agent。
场景:MCP服务器故障
你有一个连接外部数据库的MCP服务器,突然返回500错误: