TL;DR
LLM-as-a-Verifier는 에이전트가 생성한 후보 궤적을 추가 학습 없이 반복 평가하고, LLM의 점수 토큰 확률 분포를 이용해 세분화된 보상값을 계산하는 검증 프레임워크입니다. 여러 평가 기준과 반복 검증을 평균내며, 후보가 많을 때는 Probabilistic Pivot Tournament로 비교 횟수를 O(N²)에서 O(Nk)로 줄여 Test-Time Scaling을 수행합니다. Terminal-Bench 2.1의 self-verification에서 Best-of-3은 Pass@1 79.4%를 86.5%로, Best-of-5는 78.7%를 88.0%로 높였고, SWE-Bench Verified와 MedAgentBench에서도 기본 성능보다 높은 점수가 기록됐습니다. 긴 궤적을 반복 채점하는 비용은 Prefix Cache로 줄였으며, 캐시 적중률 78.8%와 검증 토큰 사용량을 라이브러리에서 직접 확인할 수 있습니다.
섹션별 상세
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) # index of the best candidate: 0
print(result.scores) # candidate scores: [0.73104, 0.38446, 0.38449]문자열 뒤집기 문제에 대한 여러 코드 후보를 Correctness 기준으로 평가해 가장 높은 후보의 인덱스와 점수를 반환합니다.
reward_a, reward_b = llm_verifier.compare(
problem, candidates[0], candidates[1],
criteria={"Overall": "Does the code solve the problem?"},
)
print(reward_a, reward_b) # fine-grained rewards in [0, 1]: 0.99994 0두 후보 궤적을 직접 비교해 각 후보의 세분화된 보상값을 계산합니다.

steps = [
'Read the problem statement',
'Wrote def rev(s): return s ',
'Tested: rev("abc") returned "abc"',
'Changed to def rev(s): return s[::-1]',
'Tested: rev("abc") returned "cba"',
]
result = llm_verifier.track(problem=problem, steps=steps, checkpoint_steps=[1, 2, 3, 4, 5], n_evaluations=4)
print(result.scores) # progress after each step: [0.00106, 0.02417, 0.03143, 0.62004, 0.99978]에이전트가 수행한 각 단계까지의 상태를 반복 평가해 작업 진행률 곡선을 계산합니다.


python scripts/run.py swe_bench --pivots 2 --n-evaluations 8 --seed 0 --max-workers 50SWE-Bench 평가를 두 개의 pivot과 여덟 번의 반복 평가로 실행하며 시드와 동시 작업 수를 지정합니다.
import llm_verifier
llm_verifier.USAGE.reset()
result = llm_verifier.select(problem, trajectories, criteria="terminal_bench")
print(llm_verifier.token_usage()) # {'calls': 24, 'input_tokens': 1512480, 'cached_input_tokens': 1190208, # 'uncached_input_tokens': 322272, 'output_tokens': 180224, # 'reasoning_tokens': 145408, 'cache_hit_rate': 0.787}검증 호출 전 토큰 사용량을 초기화한 뒤 선택 작업을 수행하고 입력·출력·캐시 토큰과 캐시 적중률을 집계합니다.
용어 해설
- 세분화 보상(Fine-Grained Reward)
- — 에이전트의 결과를 단일한 정답·오답이나 이산 점수로 줄이지 않고, 여러 평가 기준과 점수 토큰의 확률 분포를 이용해 연속적인 보상값으로 바꾸는 방식입니다. 작업 진행률 측정과 후보 궤적 선택의 정밀도를 높이는 데 쓰입니다.
- 로그 확률(Logprob)
- — 언어 모델이 특정 토큰을 출력할 확률의 로그값입니다. 이 프레임워크는 점수 토큰 하나만 선택한 결과가 아니라 여러 점수 토큰에 대한 확률을 읽어 평가자의 불확실성과 세분화된 보상값을 계산합니다.
- 추론 시점 확장(Test-Time Scaling)
- — 모델을 추가 학습하지 않고 추론 단계에서 여러 후보 생성, 반복 평가, 검색 또는 선택을 수행해 최종 결과의 품질을 높이는 방법입니다. LLM-as-a-Verifier는 에이전트 궤적을 반복 채점하고 가장 높은 후보를 고르는 방식으로 이를 구현합니다.
- Bradley-Terry 모델(Bradley-Terry Model)
- — 후보 간 승패나 선호 비교를 바탕으로 각 후보의 상대적인 강도를 추정하는 확률 모델입니다. Probabilistic Pivot Tournament는 쌍별 비교 결과를 승리 질량과 비교 횟수로 집계해 후보 순위를 정합니다.
- 프리픽스 캐시(Prefix Cache)
- — 반복 요청에서 앞부분의 동일한 입력 토큰을 다시 계산하지 않도록 모델의 처리 결과를 저장하고 재사용하는 방식입니다. 이 프레임워크는 긴 에이전트 궤적과 평가 척도를 공유 접두사로 구성해 Terminal-Bench 2.1에서 캐시 적중률을 5.2%에서 78.4%로 높였습니다.
기술
- Python
- llm-verifier
- deepseek-v4-flash
- Gemini 2.5 Flash
- vLLM
- Qwen/Qwen3.5-9B
- PyTorch
- Terminal-Bench 2.1
- SWE-Bench Verified
- MedAgentBench
활용 사례
- 여러 에이전트 궤적 중 최선의 결과 선택
- 에이전트 작업 단계별 진행률 추적
- Terminal-Bench, SWE-Bench Verified, MedAgentBench 평가 확장
- 에이전트 결과에 대한 Test-Time Scaling
- 세분화된 보상값을 활용한 Reinforcement Learning
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.
