关于 loop-circuit-breaker
面向 OpenClaw 的自动重试循环检测 Skill,监测每个会话中的工具调用失败。相同调用签名重复失败达到阈值时,它会停止重试、记录问题并提示用户选择后续处理方式。
主要功能
- 01按会话跟踪工具调用历史
- 02检测相同调用签名的重复失败
- 03区分暂时性与确定性错误
- 04触发后停止重试并记录状态
- 05提供调整失败阈值的命令
适用场景
- 01阻止因参数错误而重复调用工具
- 02限制超时或限流错误的重试次数
- 03在反复失败耗尽上下文前中止循环
- 04向用户说明错误并选择修复、跳过或终止
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ archieindian/ openclaw-superpowers --skill loop-circuit-breaker安装后在 Claude Code 中输入/loop-circuit-breaker确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
check.pyexample-state.yamlSTATE_SCHEMA.yaml详细介绍
loop-circuit-breaker
OpenClaw 对所有错误一视同仁地重试,无论错误是暂时性的(速率限制、超时)还是确定性的(缺少参数、类型错误、路径无效)。此技能会跟踪每个会话中的工具调用历史,识别重复出现的相同故障,并在上下文窗口和 API 预算耗尽前停止循环。
与 agent-self-recovery 的区别
agent-self-recovery 是一种手动、被动的恢复协议——用户或 Agent 在发现 Agent 陷入停滞后调用它。
loop-circuit-breaker 则是自动、主动的——它会在第 2 次出现相同故障时触发,甚至早于用户察觉。
检测算法
每次工具调用返回结果时,Agent 都应检查:
- 此次工具调用是否失败(错误、异常或结果为空)?
- 规范化调用签名:
(tool_name, sorted_args_hash, error_type) - 在状态中的会话调用历史里查找此签名
- 如果相同签名已失败 N 次(默认:2),则触发断路器
N=2 的理由: 对于暂时性错误,重试一次是合理的。相同参数下连续两次出现相同故障,强烈表明这是无法通过重试解决的确定性错误。
错误分类
| 错误类型 | 分类 | 最大重试次数 |
|---|---|---|
| 速率限制(429) | 暂时性 | 3 |
| 超时 / 网络错误 | 暂时性 | 3 |
| 缺少必需参数 | 确定性 | 1 |
| 类型错误 / 验证错误 | 确定性 | 1 |
| 找不到文件 | 确定性 | 1 |
| 权限被拒绝 | 确定性 | 1 |
| 未知错误 | 未知 | 2 |
断路器触发时
- 立即停止重试——不要再次发出相同的调用
- 诊断根本原因——仔细阅读错误消息
- 将
LOOP_DETECTED写入状态,包含:工具名称、参数、错误、失败次数、首次 / 最后时间戳 - 向用户说明:“我检测到
<tool>(<args>)出现重试循环。错误为:<error>。我已停止重试。您希望我接下来怎么做?” - 提供选项:修正参数、跳过此步骤或中止任务
会话范围
循环检测按会话进行。每个新会话开始时,状态都会重置。状态中超过 2 小时的调用历史会自动清除。
调整
如需调整确定性错误的重试阈值:
python3 check.py --set-threshold 3 # Allow 3 failures before tripping
评论
支持 Markdown