Детекция галлюцинаций в ответах языковых моделей
LLM уверенно пишет «Препарат X одобрен FDA в 2021 году» — а препарата не существует. Или RAG-система цитирует документ с точной страницей, которой нет в источнике. Галлюцинации — не редкий баг, а системное свойство авторегрессионных моделей: следующий токен предсказывается по распределению вероятностей, а не по базе фактов. При работе с бизнес-критичными задачами это недопустимо.
Откуда берутся галлюцинации и почему их сложно поймать
Проблема не в «незнании» модели — она в том, что GPT-4, Claude, Llama и их аналоги не имеют внутреннего механизма верификации. Модель не знает, что она не знает. Уверенность в ответе (confidence score из logprobs) слабо коррелирует с фактической точностью: можно получить logprob близкий к 0 для галлюцинированного факта.
Три основных источника галлюцинаций в продакшене:
Несоответствие между retrieval и generation. В RAG-пайплайне ретривер возвращает топ-5 чанков по cosine similarity, но они не содержат ответа. Модель всё равно генерирует — заполняет пробел паттернами из pretraining. Типичная ситуация: chunk_size=512 без overlap, FAISS с L2-метрикой вместо cosine, слабая embedding-модель (all-MiniLM-L6-v2 вместо text-embedding-3-large или E5-mistral-7b).
Temporal drift. Модель обучена на данных до определённой даты. Запросы о текущих событиях, изменившихся регуляциях или новых продуктах гарантированно порождают галлюцинации без актуального контекста.
Instruction-following vs factuality trade-off. При RLHF-дообучении модели обучаются быть «полезными» — давать ответ, даже если данных недостаточно. Это напрямую стимулирует галлюцинации при неопределённости.
Как строится система детекции
Детекцию галлюцинаций нельзя решить одним методом. На практике применяем многоуровневую архитектуру:
Уровень 1 — Self-consistency проверка
Генерируем N ответов на один вопрос с temperature > 0 (обычно N=5–10, temperature=0.7). Сравниваем ответы семантически через sentence-transformers (paraphrase-multilingual-mpnet-base-v2). Если вариативность высокая — факт ненадёжный. Метрика: средняя попарная cosine similarity < 0.75 сигнализирует о нестабильности.
Уровень 2 — Grounding score
Для RAG-систем: проверяем, поддерживается ли каждое утверждение в ответе извлечёнными чанками. Используем NLI-модель (cross-encoder/nli-deberta-v3-base) для оценки entailment между ответом и контекстом. Утверждение с entailment score < 0.6 помечается как непроверенное.
Уровень 3 — Retrieval faithfulness
Метрики RAGAS: faithfulness, answer_relevancy, context_precision. Faithfulness < 0.7 при context_precision > 0.8 означает, что контекст был, но модель его проигнорировала — классическая генеративная галлюцинация.
Уровень 4 — External fact-checking
Для критичных доменов (медицина, право, финансы): верификация через поиск (Tavily, Bing Search API) или специализированные knowledge base (Wikidata SPARQL, PubMed API). Утверждения с именованными сущностями прогоняем через NER (spaCy + кастомная модель) и верифицируем каждую сущность отдельно.
Практический кейс
Клиент — юридическая компания, внутренний ассистент по прецедентному праву. Модель: GPT-4-turbo с RAG на 50k документах (pgvector + LangChain). Проблема: 18% ответов содержали ссылки на несуществующие дела или неверные даты решений (выявлено ручным аудитом 200 запросов).
Решение: добавили двухуровневую проверку. На уровне retrieval — reranker cross-encoder/ms-marco-MiniLM-L-6-v2 поднял context_precision с 0.61 до 0.84. На уровне generation — NLI-верификация каждого юридического утверждения + regex-извлечение номеров дел с последующей проверкой по базе арбитражных решений через API. Доля галлюцинаций упала до 3.2% за 2 недели итераций.
Метрики для оценки качества детекции
| Метрика | Инструмент | Целевое значение |
|---|---|---|
| Hallucination rate | Ручной аудит + NLI | < 5% для продакшена |
| Faithfulness (RAGAS) | ragas library | > 0.80 |
| Grounding score | NLI deberta | > 0.65 per claim |
| Self-consistency | sentence-transformers | cosine sim > 0.75 |
| Latency overhead | — | < 500ms на детекцию |
Процесс внедрения
Аудит текущего состояния — анализируем существующий пайплайн: качество ретривера, chunk strategy, embedding-модель, промпты. Собираем датасет из 100–200 реальных запросов с ground truth.
Baseline-измерение — получаем цифры: hallucination rate, faithfulness, latency. Без baseline непонятно, что улучшать.
Многоуровневая детекция — выбираем методы под специфику домена. Медицина требует внешней верификации; внутренние знания компании — достаточно grounding score.
Интеграция в пайплайн — детектор встраивается как middleware. Ответы с низким grounding помечаются предупреждением или отправляются на human review.
Мониторинг в продакшене — логируем все оценки, строим дашборд в Grafana. Drift в метриках — сигнал к переиндексации или смене промпт-стратегии.
Сроки: от 2 недель для добавления детекции в существующий RAG-пайплайн до 2 месяцев для полноценной системы верификации с внешними источниками в сложном домене.







