2026年7月15日 2 分钟阅读

AI 编码 Agent 陷入无限循环时,每次重试都在烧钱——LoopGain 用控制论让它在收敛时自动刹停

tinyash 0 条评论

场景

你写了一个 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 在全部测试中零触发

注意事项

  1. LoopGain 检测的是收敛,不是正确性。它只知道”再多迭代也没用了”,不知道”答案对不对”。检查 result.best_error 判断是否达到质量门槛。
  2. 误差信号的质量决定一切。如果 verifier 有盲区(报告零错误但实际有问题),LoopGain 会自信地停在错误结果上。搭配最强的 verifier。
  3. 最低 6 次迭代才能获得可靠的统计显著性。n ≤ 4 时 t 检验自由度不足,分类器保守回退为 STALLING。
  4. 节约比例取决于你的工作负载。快速收敛的循环节约最大(~96%),对抗性故障循环节约较少(~78–84%)。跑你自己的基准测试再引用具体数字。

总结

LoopGain 用一个简洁的数学洞察替代了 Agent 循环中「碰运气」的 max_iterations 策略:用经验环路增益和统计检验追踪误差轨迹,在收敛时及时刹停、在发散时回滚到最佳版本。如果你的 Agent 流水线包含任何形式的 verify-revise 循环——无论是代码生成、RAG 自纠错、还是结构化抽取——pip install loopgain 可能是今天性价比最高的一行命令。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。