AI 编码 Agent 陷入无限循环时,每次重试都在烧钱——LoopGain 用控制论让它在收敛时自动刹停
场景
你写了一个 AI 编码 Agent,让它自动修改代码、运行测试、修复失败、再运行测试……直到所有测试通过。这是一个标准的 verify-revise 循环。你设了 max_iterations=20,觉得够慷慨了。
结果某次运行时,测试一直剩 2 个失败,Agent 反复重试了 20 次才停下来。20 次 × 平均 5K token/次 ≈ 100K token,按 Claude Sonnet 的价格折合约 $3。一次循环 $3 不算多,但如果你的系统每天跑 1000 次这样的循环——那就是 $3,000/天。而且最气人的是:最后 10 次迭代根本没有改善——2 个失败测试在第 10 次就达到了瓶颈,剩下的 10 次纯属浪费。
这就是 AI Agent 反馈循环的典型困境:max_iterations 是一颗定时炸弹——设少了输出质量差,设多了 API 账单爆炸。
痛点对比
| 维度 | 传统 max_iterations 方案 | LoopGain |
|---|---|---|
| 终止策略 | 硬上限,到数就停 | 基于实测收敛曲线动态刹停 |
| 输出质量 | 设低了可能截断最佳结果 | 终身保留历史最佳输出 |
| 振荡/发散时 | 跑满全部迭代,输出可能已劣化 | 检测到发散立即回滚到最佳版本 |
| API 账单 | 每次循环必须跑满 N 次 | 平均提前 92.8% 停止 |
| 框架支持 | 需手动集成各框架 | LangGraph/CrewAI/AutoGen 等 6 个适配器 |
快速上手
安装只需一行:
pip install loopgain
核心代码只需三行:
from loopgain import LoopGain
lg = LoopGain(target_error=0.1)
while lg.should_continue():
errors = verifier.verify(output)
lg.observe(errors, output=output)
output = reviser.revise(output, errors)
result = lg.result
print(result.outcome) # converged / oscillating / diverged / stalled
print(result.best_output) # 历史最佳输出,按错误数排序
print(result.savings_vs_fixed_cap) # 相比固定迭代的预估节约量
你唯一需要提供的,是误差信号(error signal)——一个非负的数值,每轮迭代表明当前输出的质量。比如失败的测试数、Schema 违规数、lint 错误数。数值越小越好,0 表示完美。
核心原理:从 max_iterations 到 Barkhausen 判据
LoopGain 的核心创新在于它将电气工程中的 Barkhausen 稳定性判据(1921 年,用于分析反馈放大器是否自激振荡)搬到了 AI Agent 反馈循环上。
每轮迭代它计算经验环路增益 Aβ = E(n) / E(n-1),然后从四个特征维度分析误差轨迹:
- 累积下降率(
E_ratio):当前误差与初始误差的比率 - 趋势方向(
slope_log):对数误差的 OLS 斜率,指示几何趋势方向 - 趋势显著性(
slope_p):t 检验 p 值,判断趋势是否统计显著 - 振荡幅度(
osc_std):去趋势后误差序列的标准差
根据分析结果,它将循环状态归为五类:
| 状态 | 含义 | LoopGain 的反应 |
|---|---|---|
FAST_CONVERGE | 误差已降至初始的 10% 以下 | 继续 |
CONVERGING | 显著下降趋势 | 继续,监测向上漂移 |
STALLING | 既无下降也无振荡 | 连续两次读数后停止,返回最佳结果 |
OSCILLATING | 不下降但来回波动 | 停止,返回历史最低误差时的输出 |
DIVERGING | 误差显著上升 | 立即中止,回滚到历史最佳状态 |
这正是与 max_iterations 最本质的区别:传统方案只看跑了多少轮,LoopGain 看输出是否真的在变好。
框架适配器:一行代码集成主流框架
LoopGain 为 6 个主流 Agent 框架提供了专用适配器,无需修改已有的 Agent 逻辑:
from loopgain.integrations import LangGraphAdapter
adapter = LangGraphAdapter(lg=lg,
error_fn=lambda update: len(update.get("verifier", {}).get("errors", [])))
final_state = adapter.run(graph, {"draft": initial})
from loopgain.integrations import CrewAIAdapter
adapter = CrewAIAdapter(lg=lg,
task_error_fn=lambda output: count_failed_checks(output.raw))
adapter.install(crew)
result = crew.kickoff()
其他适配器覆盖 AutoGen v0.4+(RoundRobinGroupChat)、LangChain(AgentExecutor)、OpenAI Agents SDK(Runner.run_streamed)、和 Claude Agent SDK(query(prompt, ...))。安装自己需要的:
pip install 'loopgain[langgraph]' pip install 'loopgain[crewai]'
Claude Code 的一键集成
如果你使用 Claude Code,可以直接安装 LoopGain 插件来扫描仓库中所有可包装的循环:
/plugin marketplace add loopgain-ai/loopgain-plugin /plugin install loopgain
插件会自动探测字面递归、Graph 循环和语义上的迭代模式,逐一提出审校 Diff(不自动应用,安全可控)。
实战:给代码生成循环装上限速器
假设你在构建一个代码生成 → 代码审查 → 自动修复的流水线。没有 LoopGain 时,要么设高 max_iterations(每次跑满多花 10× 钱),要么设低值(经常没做完就停了)。
用 LoopGain 后的完整体验:
from loopgain import LoopGain
lg = LoopGain(target_error=0.0, max_iterations=20)
while lg.should_continue():
output = llm.revise(code, feedback)
code = output.text
failures = run_lint_and_tests(code)
lg.observe(len(failures), output=code)
code = llm.regenerate(code, failures)
result = lg.result
if result.outcome == "converged" and result.best_error == 0:
print(f"全部通过!仅用 {result.iterations_used} 次迭代")
elif result.outcome == "stalled":
print(f"卡在 {result.best_error} 个失败的瓶颈,使用历史最佳输出")
elif result.outcome == "oscillating":
print(f"检测到振荡,回滚到第 {result.best_index} 轮的输出")
observe() 接受数值或序列(自动取其长度为错误数)。传入 output= 后,result.best_output 会在终止时返回历史错误最低的输出——这正是 max_iterations 方案无法提供的:即使发散也能拿到最佳快照。
性能数据
根据项目公开的基准测试——2,000 组对照试验,覆盖 10 种工作负载:
- API 开支降低 92.8%:
max_iter=20方案总开支 $27.05 → LoopGain $1.94 - 速度提升约 15 倍:中位壁钟时间 30.9s → 2.1s
- 输出质量保持或略优:自然分布工作负载胜率 0.50–0.63;工程故障工作负载 0.92–0.95
- 零次误杀:6 条预注册 Kill Criterion 在全部测试中零触发
注意事项
- LoopGain 检测的是收敛,不是正确性。它只知道”再多迭代也没用了”,不知道”答案对不对”。检查
result.best_error判断是否达到质量门槛。 - 误差信号的质量决定一切。如果 verifier 有盲区(报告零错误但实际有问题),LoopGain 会自信地停在错误结果上。搭配最强的 verifier。
- 最低 6 次迭代才能获得可靠的统计显著性。n ≤ 4 时 t 检验自由度不足,分类器保守回退为 STALLING。
- 节约比例取决于你的工作负载。快速收敛的循环节约最大(~96%),对抗性故障循环节约较少(~78–84%)。跑你自己的基准测试再引用具体数字。
总结
LoopGain 用一个简洁的数学洞察替代了 Agent 循环中「碰运气」的 max_iterations 策略:用经验环路增益和统计检验追踪误差轨迹,在收敛时及时刹停、在发散时回滚到最佳版本。如果你的 Agent 流水线包含任何形式的 verify-revise 循环——无论是代码生成、RAG 自纠错、还是结构化抽取——pip install loopgain 可能是今天性价比最高的一行命令。
相关链接:
- GitHub: loopgain-ai/loopgain (Apache-2.0, Python)
- PyPI: loopgain
- LoopGain 基准测试
- 在线 Dashboard 演示