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

是什麼 – 一個將大型語言模型(LLM)轉換為 AI 代理輸出驗證器的 Python 庫。它對候選代理軌跡(程式碼、指令、機器人動作等)進行細粒度、機率性獎勵評分,可選擇 best-of-N 候選者,逐步追蹤進度,或執行大規模基準測試評估。

核心概念

  • 細粒度獎勵 – 不是單一的二元判斷,而是對一組評分令牌(1–20 或 A–T)的完整對數機率分佈進行期望計算。這產生一個 [0,1] 區間內的連續獎勵,反映置信度。
  • 重複評估與標準分解 – 同一軌跡可在多個使用者提供的標準下(如正確性、根本原因分析)多次評估。結果取平均以降低變異。
  • 機率性樞軸錦標賽(PPT) – 一種 O(N k) 算法,僅將每個候選者與少量「樞軸」候選者比較,即可對 N 個候選軌跡排序,相比完整成對循環賽,大幅減少 LLM 呼叫次數。
  • 前綴快取優化 – 驗證提示被結構化,使得大而通用的前綴(任務描述 + 兩個軌跡)可由 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 Oracle
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. 使用 llm_verifier.select 並傳入 problemcandidatescriteria=your_criteria_file;或使用 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 論文。

寫過它的文章

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案