llm-as-a-verifier/llm-as-a-verifier

LLM-as-a-Verifier is a general-purpose framework that provides fine-grained feedback for any agent without requiring additional training. It achieves SOTA performance across coding, robotics, and medical agentic benchmarks.

llm-as-a-verifier

何であるか – AIエージェントの出力を検証するための大規模言語モデル(LLM)を変換するPythonライブラリ。候補となるエージェントの経路(コード、コマンド、ロボット動作など)に対して、細粒度かつ確率的な報酬をスコアリングし、N個の中から最良のものを選択、ステップバイステップで進捗を追跡、または大規模なベンチマーク評価を実行可能。

主なアイデア

  • 細粒度報酬 – 単一の二値判断ではなく、スコアトークン(1–20 または A–T)の全対数確率分布に対する期待値を計算。これにより、信頼度を反映する連続的な報酬([0,1])が得られる。
  • 繰り返し評価と基準の分解 – 同じ経路を複数のユーザー提供基準(例:正しさ、根本原因分析)に基づいて何度も評価可能。結果を平均することで分散を低減。
  • 確率的ピボットトーナメント(PPT) – O(N k) のアルゴリズム。N個の候補経路を、小さな「ピボット」候補とのみ比較することで順位付け。完全なペアワイズラウンドロビンと比べてLLM呼び出し回数を大幅に削減。
  • プレフィックスキャッシュ最適化 – 評価プロンプトを構造化し、大規模で共通するプレフィックス(タスク説明 + 2つの経路)をLLMバックエンドでキャッシュ可能に。未キャッシュ入力トークンを約3.4倍削減。
  • マルチモーダル対応 – 任意の検証呼び出しに画像入力を添付可能。視覚的ロボット実行や前後スクリーンショットの検証を可能にする。

インストール

pip install llm-verifier          # PyPIからの安定版
# または、最新コードをソースからインストール
pip install -e .

モデルが対数確率を返すAPIキーが必要(例:DeepSeek‑V4‑Flash、Gemini 2.5‑Flash、またはローカルのvLLMサーバ)。

クイックスタート例

import llm_verifier

problem = "Write a function that reverses a string."
candidates = [
    "def rev(s): return s[::-1]",
    "def rev(s): return s",
    "def rev(s): return ''.join(sorted(s))",
]

# 評価器を使って最良の候補を選択
result = llm_verifier.select(
    problem=problem,
    candidates=candidates,
    criteria={"Correctness": "Does the code actually reverse the string?"},
)
print(result.index)   # → 0 (正しい実装)
print(result.scores)  # 候補ごとのスコア

その他のエントリポイント:

  • llm_verifier.compare – ペアワイズ比較のための細粒度報酬を返す。
  • llm_verifier.track – 各ステップごとに完了した経路をスコアリングし、進捗曲線を生成。
  • ProgressTracker – 実行中にステップバイステップで入力可能なオンライン版。

ベンチマークと結果 このライブラリには、複数のエージェントベンチマーク(Terminal‑Bench、SWE‑Bench Verified、MedAgentBench、RoboRewardBench)用の再現可能なスクリプトが同梱。Gemini 2.5‑Flashを評価器として使用した場合、報告されたPass@1スコアは元のベースラインを上回る:

ベンチマーク ベースモデル LLM‑as‑Verifier オラクル
Terminal‑Bench V2 (best‑of‑5) GPT‑5.5 86.5 % 92.1 %
SWE‑Bench Verified (best‑-of‑3) Opus 4.5/4.6 78.2 % 84.4 %
MedAgentBench (best‑of‑5) Claude Opus 4.8 73.3 % 75.0 %

自己検証(同じモデルが生成と検証の両方を行う)も、Terminal‑Bench 2.1の元のPass@1を上回る。

内部の動作原理

  • fine_grained_reward.py – 対数確率の期待値を実装。
  • pivot_tournament.py – PPTアルゴリズムを含む。
  • progress.py – ステップごとのスコアリングユーティリティを提供。
  • benchmarks.py – 各ベンチマークを登録し、data/から対応するエージェント経路を読み込む。
  • キャッシュは cache/ に、結果は results/ に保存。

独自タスクへの拡張

  1. エージェントの経路を data/<task_name>_trajs/ に配置。
  2. criteria/TEMPLATE.md をコピーし、新しいファイル(例:criteria/mytask.md)を作成。評価基準を記述。
  3. problemcandidatescriteria=your_criteria_file を指定して llm_verifier.select を実行。または、Claude Codeプラグイン(TurboAgent)を使って、Claudeが基準を自動生成し、評価器を呼び出す。

Claude Codeプラグイン(TurboAgent) Claude Codeが評価器を自動的に呼び出せるドロップインプロキシ。複数の候補を並列で生成し、PPTで最良のものを選択。インストールは以下の通り:

pip install git+https://github.com/llm-as-a-verifier/TurboAgent

その後、プロキシ(turbo-agent)を起動し、Claude Codeを http://localhost:8888 に接続。

リソース

引用 研究でこのフレームワークを使用する場合、READMEに記載されたarXiv論文を引用してください。

これを取り上げた記事

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト