Как посчитать hallucination rate в SQL

Проверь себя · 1/3разбор после ответа
Для сравнения метрик по неделям нужно получить начало предыдущей недели. Какое выражение вернёт начало предыдущей недели относительно current_date?

Что такое hallucination rate

Hallucination rate — доля ответов LLM, в которых модель выдумала факты: сослалась на несуществующий документ, привела неверную цифру, придумала функцию API. Это ключевая метрика доверия к AI-продукту: пользователь, поймавший ассистента на уверенной лжи один раз, перестаёт верить и правильным ответам тоже.

Метрику спрашивают на собеседованиях AI-аналитика и AI-продакта в связке с вопросом «как вы поймёте, что ваш ассистент можно выпускать в прод». В отличие от retention или конверсии, hallucination rate нельзя вытащить чистым запросом из сырых логов — сначала ответы нужно разметить на «достоверно / галлюцинация», и только потом агрегировать в SQL. Разберём весь путь: разметка, формула, запрос, разбивка по сегментам.

Формула и как размечать

Формула простая, вся сложность — в разметке числителя.

Hallucination rate = ответы с галлюцинацией / всего оценённых ответов × 100%

Разметить ответ как галлюцинацию можно тремя способами. Первый — ручная разметка асессорами: точно, но дорого и медленно, годится для небольшого эталонного набора. Второй — модель-судья (LLM-as-a-judge): отдельная модель проверяет, подтверждаются ли утверждения ответа предоставленным контекстом; масштабируется, но сама шумит, поэтому её калибруют по ручной разметке. Третий — автоматическая сверка с источником для RAG: проверяем, что каждое фактическое утверждение выводится из извлечённых документов (это и есть groundedness).

Результат разметки складывают в таблицу оценки — примерно такую:

llm_evals(response_id, user_id, model, prompt_type,
          is_hallucination BOOLEAN, judged_at, source)

Дальше метрика — обычная агрегация по этой таблице.

Как посчитать в SQL

Базовый расчёт — доля ответов с галлюцинацией за период. Важно не наступить на классические грабли SQL: целочисленное деление в PostgreSQL усекает результат, поэтому числитель приводим к NUMERIC.

-- Hallucination rate за июнь 2026
SELECT
    100.0 * COUNT(*) FILTER (WHERE is_hallucination)
        / NULLIF(COUNT(*), 0) AS hallucination_rate_pct,
    COUNT(*) AS evaluated
FROM llm_evals
WHERE judged_at >= '2026-06-01'
  AND judged_at <  '2026-07-01';

COUNT(*) FILTER (WHERE is_hallucination) считает только галлюцинации, NULLIF(..., 0) страхует от деления на ноль на пустой выборке. Поле evaluated выводим рядом намеренно: процент без размера выборки легко ввести в заблуждение — 20% на 10 ответах и на 10 000 это очень разная уверенность.

Чтобы отслеживать динамику после релизов промптов или смены модели, считают метрику по дням:

-- Динамика hallucination rate по дням
SELECT
    judged_at::DATE AS day,
    COUNT(*) AS evaluated,
    ROUND(100.0 * COUNT(*) FILTER (WHERE is_hallucination)
        / NULLIF(COUNT(*), 0), 2) AS hallucination_rate_pct
FROM llm_evals
WHERE judged_at >= CURRENT_DATE - 30
GROUP BY day
ORDER BY day;

Hallucination rate по сегментам

Средний hallucination rate маскирует проблемные зоны. Модель может врать редко на простых запросах и часто — на специфичных, и в среднем цифра выглядит терпимо. Поэтому метрику режут по типу запроса, модели и источнику знаний.

-- Где модель галлюцинирует чаще: разбивка по типу запроса
SELECT
    prompt_type,
    COUNT(*) AS evaluated,
    ROUND(100.0 * COUNT(*) FILTER (WHERE is_hallucination)
        / NULLIF(COUNT(*), 0), 2) AS hallucination_rate_pct
FROM llm_evals
WHERE judged_at >= '2026-06-01'
GROUP BY prompt_type
HAVING COUNT(*) >= 30            -- отсекаем шумные сегменты с малой выборкой
ORDER BY hallucination_rate_pct DESC;

HAVING COUNT(*) >= 30 здесь принципиален: без порога сегменты с двумя-тремя оценками дадут 0% или 100% и уведут внимание не туда. Разбивка почти всегда обнаруживает конкретный класс запросов, где модель врёт систематически, — это и есть рабочая точка для улучшения промпта или базы знаний. Как устроена оценка галлюцинаций глубже — в разборе LLM-evals.

Закрепи формулу hallucination rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать hallucination rate в Telegram

Онлайн- и офлайн-оценка

Hallucination rate считают в двух режимах, и их важно не смешивать. Офлайн — на фиксированном эталонном наборе вопросов с эталонной разметкой; его гоняют перед каждым релизом, он сравним между версиями. Онлайн — на реальном трафике проды, через модель-судью или выборочную ручную проверку; он ловит настоящее распределение запросов, которое эталон никогда не покроет полностью.

Здоровый процесс использует оба: офлайн для регрессионного контроля («новый промпт не стал галлюцинировать больше»), онлайн — для мониторинга реального качества. Собрать эту систему метрик AI-продукта целиком помогает разбор в хабе метрик AI-продукта, а потренировать вопросы с собеса — Карьерник.

Частые ошибки

Первая ошибка — считать процент без размера выборки. Hallucination rate 5% звучит одинаково на 20 и на 20 000 оценках, но доверие к этим цифрам несопоставимо. Всегда выводите evaluated рядом с процентом и ставьте порог на сегменты.

Вторая ошибка — доверять модели-судье без калибровки. LLM-as-a-judge сам ошибается и имеет свои смещения. Прежде чем масштабировать оценку на весь трафик, его сверяют с ручной разметкой на выборке и оценивают согласованность.

Третья ошибка — смотреть только средний rate. Именно разбивка по типу запроса и источнику вскрывает, где модель врёт систематически. Средняя цифра нужна для трекинга динамики, а решения принимают по сегментам.

Связанные темы

FAQ

Можно ли посчитать hallucination rate чистым SQL из логов?

Нет, сначала нужна разметка. Сырые логи содержат вопрос и ответ, но не признак «это галлюцинация» — его проставляют асессоры, модель-судья или автоматическая сверка с источником. SQL приходит на втором шаге: по таблице с уже проставленным флагом он агрегирует долю галлюцинаций.

Что такое хороший hallucination rate?

Универсального порога нет — он зависит от цены ошибки. Для развлекательного ассистента терпимы единицы процентов, для медицинского или юридического продукта требования на порядок жёстче. Важнее абсолютного значения динамика между релизами и разбивка: даже низкий средний rate может скрывать класс запросов, где модель врёт постоянно.

Чем hallucination rate отличается от groundedness?

Это две стороны одной монеты. Groundedness измеряет долю утверждений, подтверждённых контекстом, — чем она выше, тем лучше. Hallucination rate измеряет долю ответов с неподтверждёнными выдумками — чем ниже, тем лучше. В RAG-системах их часто считают вместе: низкая groundedness обычно означает высокий hallucination rate.

Как отслеживать hallucination rate после смены модели?

Через ежедневную разбивку и офлайн-регрессию на эталонном наборе. Перед выкаткой новой модели или промпта прогоняют фиксированный набор вопросов и сравнивают hallucination rate с предыдущей версией. После выкатки следят за онлайн-метрикой по дням, чтобы поймать рост галлюцинаций на реальном трафике.