Агент может успешно вызвать нужный инструмент, получить правильные данные из базы, но выдать пользователю некорректный или неполный ответ. Детерминированные тесты (unit-тесты) проверяют факт вызова функции, но не оценивают смысловую точность, тон или полноту ответа. Здесь на сцену выходит метод LLM-as-a-Judge (LLM в роли судьи): вторая модель оценивает вывод первого агента по заданным критериям.
01Суть метода и архитектура
В этой схеме участвуют две разные модели. Кандидат (Candidate) — это ваш основной агент, решающий задачу. Судья (Judge) — отдельная модель, которая не решает задачу, а только оценивает ответ кандидата по рубрике (rubric).
Ключевая рекомендация: никогда не используйте одну и ту же модель для обеих ролей. Исследование MT-Bench (Zheng et al., 2023) выявляет три типа смещения: self-enhancement (модель хвалит себя), position bias (предпочтение первому варианту) и verbosity bias (предпочтение длинным ответам). Разделение моделей исключает эти искажения.
02Режимы оценки
Выбор режима зависит от цели тестирования:
- Pointwise (Точечная): Один ответ + рубрика. Идеально для CI/CD: ответ либо проходит порог, либо нет.
- Pairwise (Парная): Два ответа + сравнительная рубрика. Используется для сравнения разных моделей или промптов. Совет: меняйте порядок ответов, чтобы исключить bias позиции.
- Reference-based (С эталоном): Ответ + эталонный текст. Проверяет фактическое покрытие информации, а не совпадение формулировок.
03Практика: Оценка с помощью Ori Eval
Инструмент Ori Eval позволяет писать тесты и запускать их через среду выполнения. Он автоматически настраивает среду, логинится и управляет вызовами API.
1. Установка и вход
Установите CLI и авторизуйтесь. Ori использует среду выполнения для запуска тестов.
curl -fsSL https://openrouter.ai/labs/ori/install.sh | bash
ori login2. Настройка критериев (Rubric)
Вместо абстрактного «будь полезен» пишите конкретные правила. Например: «Упомяни 14-дневное окно возврата, ответь прямо, не выдумывай исключений».
3. Код теста
Создайте файл с тестом. Здесь мы разделяем проверку инструментов (детерминированную) и смысловую оценку (LLM-судья).
import { test } from 'bun:test'
import { setupAgent, setupJudge } from 'ori/eval'
const agent = setupAgent();
// Судья с настроенным порогом
const judge = setupJudge();
test('explains the refund policy accurately', async () => {
const run = await agent.run(
'Can I refund a digital order that I placed 10 days ago?'
);
// Детерминированная проверка: инструмент вызван?
run.tool('lookup_refund_policy').toBeCalled();
run.toComplete();
// LLM-судья: оценка смысла ответа
await judge.autoEvals({
criteria: 'States the 14-day refund window, answers the question directly, and does not invent exceptions.',
run,
});
});4. Запуск
Запуск тестов возвращает код ошибки при провале, что удобно для CI.
ori eval --report eval-report.md04Когда LLM-судья не подходит
Не используйте LLM для проверки того, что можно проверить кодом:
- Структура JSON (используйте валидаторы схем).
- Арифметика (используйте калькуляторы).
- Аргументы инструментов и побочные эффекты (unit-тесты).
- Критические политики безопасности (должны быть детерминированными).
05Кому подойдёт / что запустится
- Разработчикам AI-агентов: Для автоматизации оценки качества ответов (groundedness, tone, completeness).
- Командам QA: Для замены ручного ревью на масштабируемый пайплайн.
- Железо: Локально запускать судью можно на GPU с достаточным объемом VRAM, но для стабильности и скорости лучше использовать API (OpenRouter, локальные инстансы через Ollama/VLLM).
- Стек: TypeScript, Bun, OpenRouter API.
Источник: OpenRouter ↗
