Auto-Company 为什么能 7×24 稳定运行?熔断器、限流退避与共识回滚机制源码级解析
【免费下载链接】Auto-CompanyAn auto-company works for 24/7 on your own PC - Windows/Linux/macOS.项目地址: https://gitcode.com/gh_mirrors/au/Auto-Company
Auto-Company 是一个能在个人电脑(Windows / Linux / macOS)上 7×24 小时自主工作的多智能体框架,AI 团队会持续调研、写代码并交付产品。连续运行一整天,必然会撞上 API 限流、模型报错、进程崩溃等故障。这篇文章从源码级解析它内置的三大容错机制——熔断器、限流退避与共识回滚,看看这套「自动公司」是如何做到长期不掉链子的 🛡️
三条防线协同工作:24 小时循环为什么不会崩
主循环 scripts/core/auto-loop.sh 的每一轮流程大致是:读取工作摘要 → 调用引擎执行任务 → 校验结果 → 失败处理 → 休眠等待下一轮。其中「失败处理」环节就是稳定性的核心,官方文档将其概括为「限额等待 / 熔断保护 / consensus 回滚」,见 README-ZH.md。
三条防线的分工如下:
| 防线 | 触发条件 | 动作 | 默认参数 |
|---|---|---|---|
| 🔴 熔断器 | 连续失败达到阈值 | 冷却休眠后重置计数继续 | 连续 5 次错误,冷却 300 秒 |
| 🟡 限流退避 | 输出中出现 429 / quota / rate limit 等特征 | 休眠 1 小时,且不计入熔断计数 | 等待 3600 秒 |
| 🟢 共识回滚 | 失败轮次改坏了工作摘要,或篡改了人类保护区 | 从备份恢复consensus.md,必要时暂停循环 | 每轮开始前强制备份 |
这套机制全部运行在本地,配套的 Dashboard 会实时展示每一轮的工作记录、用量与日志,让你随时确认容错机制是否真正介入过 👇
熔断器:连续错误自动冷却,防止疯狂重试
熔断器(Circuit Breaker)的逻辑在 auto-loop.sh 的主循环尾部,规则非常简单直接:
- 每轮失败,
error_count加 1;每轮成功,立即清零; - 当
error_count ≥ MAX_CONSECUTIVE_ERRORS(默认 5)时,日志写入BREAKER Circuit breaker tripped!,进入冷却休眠; - 冷却结束后计数清零,循环自动恢复,不会退出进程。
阈值与冷却时长都是可配置项,定义在 auto-loop.sh 顶部:
| 环境变量 | 默认值 | 作用 |
|---|---|---|
MAX_CONSECUTIVE_ERRORS | 5 | 连续失败多少次触发熔断 |
COOLDOWN_SECONDS | 300 | 熔断后的冷却时长(秒) |
这个设计的价值在于:当模型服务整体不可用时(例如服务商故障),系统不会以每 30 秒一次的频率疯狂重试刷爆日志,而是安静地冷却 5 分钟再试探一次——既给上游留出恢复时间,也保护了账户配额 💤
限流退避:429 配额错误自动休眠 1 小时
与熔断器不同,限流退避专门识别「额度类」失败。check_usage_limit() 会扫描引擎输出,匹配429、rate limit、quota、overloaded、insufficient credits等特征词:
- 一旦命中,循环休眠
LIMIT_WAIT_SECONDS(默认3600 秒,即 1 小时)再重试,并把error_count清零——因为限流不是系统故障,不应累计进熔断计数; - 如果限流和熔断同时满足,优先走限流等待(更长、更精准),见 auto-loop.sh。
这意味着:夜间额度耗尽时,Auto-Company 会自动进入 1 小时的「休眠」,等配额窗口刷新后继续干活,而不是一路报错直到触发熔断。配合 usage.py 的结构化用量账本与预算暂停机制(超硬限额会主动挂起等待人工恢复),成本也是可控的 💰
共识回滚:失败轮次改坏状态?自动恢复备份
这是 Auto-Company 最有特色的一道防线。跨轮次的记忆靠memories/consensus.md这个「接力棒」文件传递,而 consensus-guard.sh 就是它的「守卫」,每轮执行四个动作:
- 开始时备份:begin_cycle() 把当前共识完整复制为
.bak基线,并写入「进行中」标记; - 结束时校验:verify_cycle() 检查模型是否篡改了
Human Overrides(人类指令保护区)、是否删除/降级了 P1 问题、是否动过人工项目选择——任何一项违规,被拒的共识会被归档留证,然后从基线恢复并暂停循环等待人工确认; - 失败时回滚:普通轮次失败(引擎报错、超时等)时,restore_consensus() 直接把
.bak复制回去,下一轮从干净的基线继续; - 崩溃时恢复:如果进程被强杀留下「进行中」标记,下次启动时 recover_pending() 会自动恢复轮次开始前的共识基线,避免半截脏状态污染后续工作。
一个巧妙的细节是「软超时」判定(auto-loop.sh):单轮超过 30 分钟被强杀,但只要共识文件确实被更新了,就记为「带超时的成功」而非失败——进度不因超时而丢失,熔断计数也不会被误加。
Dashboard 的「工作日志」视图完整保留了这些容错痕迹:失败轮次明确标注、编号连续不跳号、检查结果如实呈现,这正是长时运行可审计的关键 👇
守护进程与预算熔断:最后两道保险
源码级解析的最后,还有两个容易被忽略但至关重要的机制:
- 崩溃自重启:macOS 的
launchd与 WSL 的systemd --user守护会在进程意外退出后自动拉起主循环;每轮引擎调用由 process-supervisor.sh 监管,超时先 TERM 优雅退出、再 KILL 强制清理整个进程组,确保不会留下「孤儿」子进程污染下一轮; - 预算熔断:usage.py 每轮结算用量,触及硬限额时写入暂停标记,循环挂起直到人工
make resume——花钱这件事永远握在人类手里 🔑
快速调参:按你的配额调整容错参数
所有容错参数都支持环境变量覆盖(在make start前设置即可),快速参考:
| 环境变量 | 默认值 | 调参建议 |
|---|---|---|
LOOP_INTERVAL | 30 | 轮次间隔秒数 |
CYCLE_TIMEOUT_SECONDS | 1800 | 单轮超时,任务偏长可适当调大 |
MAX_CONSECUTIVE_ERRORS | 5 | 配额紧张时可调小(如 3),更早进入冷却 |
COOLDOWN_SECONDS | 300 | 冷却时长 |
LIMIT_WAIT_SECONDS | 3600 | 限流等待时长,按你的配额刷新周期调整 |
USAGE_HARD_LIMIT_USD | 空 | 设置后超支自动暂停,强烈建议开启 |
总结
Auto-Company 的 7×24 稳定性不是玄学,而是层层叠加的工程决策:熔断器让连续错误自动冷却而非雪崩,限流退避让配额耗尽安静等待而非刷爆重试,共识回滚让任何失败轮次都无法污染工作记忆,再加上守护自重启与预算熔断兜底。它自主交付的产品(如下图的中文「范围确认单」工具)都能在看板上追溯到完整的运行事实与容错记录:
如果你想动手验证,可以阅读 INDEX.md 的脚本职责表定位各机制源码,或参考 docs/troubleshooting.md 中的排障指南,观察logs/auto-loop.log里BREAKER、LIMIT、GUARD标签的日志——每一次容错介入都有据可查 📋
【免费下载链接】Auto-CompanyAn auto-company works for 24/7 on your own PC - Windows/Linux/macOS.项目地址: https://gitcode.com/gh_mirrors/au/Auto-Company
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考