LLM as judge
LLM используется не для генерации, а для оценки — ранжирования кандидатов, выбора лучшего, проверки качества output'а другого агента.
Когда применять
- Ранжирование подмножества (топ-K из N) — например "выбери 10 самых интересных новостей из 50"
- Pairwise comparison — "A или B лучше для этого запроса"
- Quality check — "оцени этот output по критериям X/Y/Z"
- Self-consistency — несколько judges → majority vote
- Eval framework — "оцени совпадает ли answer с reference"
Паттерн
from pydantic import BaseModel, Field class JudgeVerdict(BaseModel): score: float = Field(ge=0, le=10, description="0-10 quality score") reasoning: str = Field(description="Short justification, 1-2 sentences") flags: list[str] = Field(default_factory=list, description="Issues found") # Через LiteLLM + structured output verdict = llm.with_structured_output(JudgeVerdict).invoke( judge_prompt.format(item=item, criteria=criteria) )
Несколько judges для robustness
verdicts = await asyncio.gather(*[ judge.invoke(item) for judge in [judge_v1, judge_v2, judge_v3] ]) final_score = median([v.score for v in verdicts])
Подводные камни
- Position bias: в pairwise сравнении A vs B — LLM немного предпочитает первый вариант. Лекарство: симметричный двойной прогон (A vs B + B vs A), усреднить
- Length bias: длинные ответы получают более высокие оценки. Лекарство: критерий "concision" в rubric
- Self-bias: LLM предпочитает свои собственные стилистики. Лекарство: judge ≠ generator (другая модель)
Связано
- ../concepts/deterministic-on-exceptions
- ../prompts/scorer-interestingness (пример judge prompt'а)
Metadata
- title
- LLM as judge — ранжирование и оценка
- tags
- ['algorithm', 'ranking', 'evaluation']
- created
- 2026-06-30