AI・機械学習
Show HN: LoopGain – max_iterationsではなく制御理論でエージェントループを停止
Show HN: LoopGain – Stop agent loops with control theory, not max_iterations (github.com)
要約
LoopGainは、AIエージェントのループが収束した時点でリアルタイムに検出し、停止させるオープンソースのコストコントローラーです。固定の最大反復回数ではなく、収束を基準にすることで、APIコストを大幅に削減し、処理速度を向上させながら品質を維持します。LangGraph、CrewAI、AutoGenなどの主要なフレームワークに対応しています。
全文翻訳
LoopGain AIエージェントループ用のオープンソースコストコントローラー。AIエージェントループは、停止すべき時を知らないと時間とお金を無駄にします。LoopGainはループをリアルタイムで測定し、収束した瞬間に停止させ、劣化する前にロールバックします。固定のmax_iterationsキャップまで実行するのではなく。
ベンチマーク — 10個のワークロードセルで2,000回のペアトライアル(自分で実行してください):API支出がmax_iter=20より92.8%削減 — 総ベンチマーク支出は27.05ドルから1.94ドルに。約15倍高速 — トライアルあたりの中央値壁時計時間は30.9秒から2.1秒に。品質は維持され、速度とトレードオフされない — 自然分布ワークロード(W1–W4、ほとんどのセルでCIはnullを除く)で0.50–0.63、エンジニアリングされた失敗ワークロード(W5)で0.92–0.95のジャッジ勝率。1,800回のジャッジ比較で0.678の加重選好。6つのキル基準のうちゼロが発火(すべて実行前に閾値で事前登録済み)。
正直な制限、 upfront:LoopGainは収束を検出しますが、正しさは検出しません — それは、それ以上反復しても役に立たない時を知っていますが、答えが正しいかどうかは知りません。そして、それはあなたのエラー信号の後ろにある検証器と同じくらい優れているだけです。できないことの完全なリスト → ホーム:loopgain.ai
測定可能なエラー信号を持つあらゆる反復AIワークフローで動作します — 検証・修正ループ、改良パス、ツール使用リトライチェーン、自己修正RAG、コード生成とリンターフィードバック、マルチステップ推論ループ。LangGraph、CrewAI、AutoGen、LangChain、OpenAI Agents SDK、Claude Agent SDK用の事前構築済みアダプター。生のAPI経由でカスタムスタックにドロップインできます。純粋なPython、ランタイム依存関係なし。
なぜプロダクションエージェントループは普遍的にmax_iterations=Nを終了ポリシーとして使用するのか。それはエージェントAIの恥ずかしいデフォルトです。計算を無駄にする(ループが遅すぎる場合に停止する)か、悪い出力を出荷する(ループが早すぎる場合に停止する)かのどちらかです。LoopGainはそれを、Barkhausen基準 — 電気工学のフィードバック発振器解析(1921年)の基礎的な結果 — に基づいた制御理論的な停止・ロールバックポリシーに置き換えます。
インストール
pip install loopgain
純粋なPython、依存関係なし、Python 3.10+をサポート。
Claude Codeを使用していますか?
loopgain-pluginは、ラップ可能なループ(リテラル、再帰、グラフサイクル、セマンティック)をリポジトリ全体でスキャンし、レビュー済みの差分を一度に1つのファイルずつ提案します(自動適用なし):
/plugin marketplace add loopgain-ai/loopgain-plugin
/plugin install loopgain
使用法
測定可能なエラー信号を持つあらゆる反復ループを3行のコードでラップします。
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" | "max_iterations"
print(result.best_output) # 最低エラー反復の出力
print(result.iterations_used)
print(result.savings_vs_fixed_cap)
observe()は、数値エラーの大きさ、または任意のシーケンス(その長さが大きさになる)を受け入れます。best-so-farバッファを有効にするためにoutput=...を渡します。
エラー信号の定義
あなたが提供する唯一のものはエラー信号です。各反復で、現在の出力がどれだけ間違っているかを示す単一の非負の数値です。小さいほど良いです。ゼロは完了を意味します。LoopGainはループが何をしているかを知りません — それはその数値の軌跡を監視し、継続するか、停止するか、ロールバックするかを決定します。あなたのループは、出力がまだ良くないことを知る方法をすでに持っています(そうでなければ、修正を続けないでしょう)。それを数値に変換してください。
エラー信号 = エージェント型コーディング(コードを書いてテストを実行) ->失敗したテストの数(10 -> 3 -> 0)
JSON /構造化抽出 ->スキーマ違反の数
自己修正RAG ->まだ欠けている必須事実の数
LLMジャッジによる自己改良 ->ジャッジの目標からのギャップ(例:10 - quality_score)
Lint /フォーマットループ ->Lintエラー数
唯一のルール:非負であり、出力が改善するにつれて小さくなること。問題の生のリストを返すことで直接機能します — observe()はその長さを大きさとして使用します(例:失敗したテストのリストを渡します)。
品質が曖昧で自然な「ゼロ」がない場合は、target_error=Noneで実行してください。LoopGainは、数値が改善しなくなったときに、正確なターゲットを待つのではなく、そのプラトーがどこであっても停止します。
停止/継続の各決定は、この1つの数値から行われるため、LoopGainはあなたが提供するエラー信号と同じくらいしか良くありません — 出力品質を真に追跡するものを選択してください。
仕組み
LoopGainは、各反復で経験的なループゲイン(Aβ = E(n) / E(n-1))を測定し、それを可視化のために平滑化された時系列として公開します。しかし、決定エンジンは、4つの特徴を使用して完全なエラー軌跡を分類します。
E_ratio = E_current / E_first # 累積減少
slope_log = log10(E) のOLS傾斜 # 幾何学的トレンド方向
slope_p = 傾斜のt検定p値 # 統計的有意性
osc_std = detrended log10(E) の標準偏差 # 発振の大きさ
軌跡を5つの名前付き状態のいずれかにルーティングします。
状態 条件 アクション
FAST_CONVERGE E_firstの≤10%への累積減少 継続
CONVERGING 0.05未満のp値を持つ負の傾斜、または累積≤50% 継続、上向きのドリフトに注意
STALLING 有意な傾斜なし、検出可能な振動なし 2連続読み取り後に停止 — 現在までの最良値を返す
OSCILLATING 平坦なトレンドを持つ高い残差分散 停止 — 現在までの最良値を返す
DIVERGING 0.05未満のp値を持つ正の傾斜、かつ累積>110% 中止 — 現在までの最良値にロールバック
さらにショートサーキットがあります。観測されたエラーがtarget_error以下に低下した場合、ループは状態TARGET_METで即座に停止します。デフォルトのtarget_error=0.0は、検証駆動型ループの自然な完了シグナルである正確なゼロエラーでショートサーキットします。安定性検出のみに依存するには、target_error=Noneを渡してショートサーキットを無効にします。
決定は意図的に保守的です。統計的有意性と意味のある累積的な動きの両方を終了前に要求することで、ノイズの多い実際のLLMエラー系列での誤検出の中止を防ぎます。
N=1000の決定論的モック軌跡(RESULTS_v2_classifier.mdを参照)の5つのレジーム全体で、98.8%のマクロ平均精度で検証されました。STALLINGの上限約94%は、t検定の不変の5%タイプIエラー率であり、分類器の弱点ではありません。
推奨最小値:信頼性の高いトレンドの有意性には6回の反復が必要です。n≤4ではt検定は著しく検出力が低下します(df=2はp<0.05で|t|>4.3が必要) — 証拠が薄い場合、分類器は保守的にSTALLINGにフォールバックします。
閾値は分析的に導出され(制御理論+統計的慣習)、適合されていません。本番トレースがある場合は、TrajectoryThresholds引数を使用してドメインごとに調整してください。
レガシー単一特徴分類器:元のv0.1単一-Aβバンド分類器(閾値0.3 / 0.85 / 0.95 / 1.05)は、バンドが特定のワークロードに経験的に調整されている呼び出し元のために、LoopGain(classifier='legacy_bands')経由で引き続き利用可能です。
ベスト・オブ・ザ・モーメント・ロールバック
LoopGainは、観測されたすべての出力とそのエラースコアのバッファを保持します。終了時に、最後の反復ではなく、argmin(error)を返します。
終了状態 戻される出力
TARGET_MET 現在の出力(定義により、最良)
OSCILLATING バッファ内の最低エラー反復
DIVERGING 最低エラー反復(最後の反復ではない)
これにより、発散検出は「ゴミで中止」から「これまでに見た中で最良のもので中止」に変換されます — 無料の品質フロア。
フリート全体で確認する(オプションのダッシュボード)
ライブラリはローカル全体が製品です — テレメトリはオプトインであり、セルフホスト可能です。チーム全体で、すべてのループの安定性、コスト、ロールバックのフリートビューが必要な場合は、テレメトリ受信機から供給されるホスト型ダッシュボードがあります。
ライブデモを開く → — サインアップなし、実際のベンチマークデータ。
受信機とダッシュボードはどちらもオープンソースです — テレメトリを完全に管理下に置くためにセルフホストしてください。
リポジトリ
リポジトリ 何か
loopgain このライブラリ — Apache-2.0制御ループ(あなたがここにいる)
telemetry-receiver Cloudflare Workerが匿名化されたループテレメトリを取り込む
dashboard フリートダッシュボード — セルフホスト可能
loopgain-bench 数字の背後にある再現可能な2,000トライアルベンチマーク
ab