Бот поддержки советует клиенту тариф, которого не существует. Или выдумывает условия договора на ходу. Или уверенно называет срок доставки, взятый с потолка. Знакомо? Это галлюцинации LLM – и именно они топят большинство попыток запустить AI-поддержку в бизнесе.
«Мы попробовали RAG, но он всё равно выдумывает» – это фраза, которую я слышу на каждой второй встрече с CTO. И они правы: просто подключить поиск по базе знаний недостаточно. Нейросеть всё равно найдёт способ нафантазировать.
Ниже – сухой остаток из десятков внедрений. Как реально заставить модель отвечать только по фактам, цитировать источники и честно говорить «не знаю», когда данных нет. Без теории – только то, что работает в проде.
Коротко для тех, кому некогда
Семь правил, которые реально работают. Если нет времени читать дальше – внедрите хотя бы эти:
- Только из контекста: В системном промпте жестко пропишите `answer-only-from-context`. Если информации нет – бот должен честно сказать «я не знаю», а не пытаться сочинить.
- Умный RAG: Добавьте reranker (переранжирование). Он поднимает релевантность выдачи на 15–30%, особенно если вы ищете в длинных PDF или Confluence.
- Честный отказ: Включите механизм fallback. Если score найденных документов низкий – сразу возвращайте «не нашёл» и предлагайте перевод на человека.
- Структура вместо текста: Требуйте JSON. Валидировать поля (даты, суммы, ID) регулярными выражениями куда надежнее, чем парсить свободный текст.
- Правило цитирования: Одна ссылка на каждые 3–4 факта. Нет ссылки – считаем ответ галлюцинацией и отклоняем.
- Цифровая гигиена (Metrics): Следите за groundedness (должна быть ≥0.85) и safety.
- Тесты в CI/CD: Набор из 50 сложных вопросов должен прогоняться при любом изменении промпта.
Пять столпов, на которых держится система
Одним промптом галлюцинации не победить – это иллюзия. Нужно работать на нескольких уровнях одновременно:
- RAG с «чистым» контекстом. Разбивайте документы на небольшие чанки (500–1200 токенов). Обязательно фильтруйте их по продукту, языку и версии. Нет смысла искать ответ по версии 2.0 в документации версии 1.0.
- Запрет на внешние знания. Системный промпт должен запрещать использование знаний, полученных при обучении модели, если они противоречат или отсутствуют в контексте.
- Агрессивное цитирование. Ссылки [1], [2] – это не просто украшение. Это способ заставить модель обосновать каждое утверждение.
- Пороги уверенности. Если similarity score ниже определенного уровня – не пытайтесь генерировать ответ. Лучше честно сказать «не знаю», чем соврать.
- Self-healing через JSON. Используйте JSON Schema для гарантии структуры. Если модель вернула невалидный JSON, его часто можно исправить автоматически или попросить модель перегенерировать.
Референс-архитектура для поддержки и CRM
Как это выглядит на практике? Вот схема архитектуры, которую мы используем для построения enterprise-решений.

1. Слой данных (Data Layer)
Фундамент вашей системы. Мусор на входе – галлюцинации на выходе.
- Источники: CRM, Confluence, PDF, SLA.
- Умный чанкинг по заголовкам.
- Метаданные: версия, даты, доступ.
- Регулярный refresh индекса.
2. Слой Инференса (Inference)
Мозг системы. Здесь происходит магия поиска и генерации.
- Hybrid Search (Keyword + Vector).
- Reranker для точности.
- Сжатый контекст (3-4k токенов).
- Строгий системный промпт.
3. Валидация (Guardrails)
Контрольно-пропускной пункт перед отправкой ответа пользователю.
- Regex проверка сумм/дат.
- Проверка на наличие ссылок.
- Фильтр PII (перс. данных).
- Groundedness check.
4. Наблюдаемость (Observability)
Чтобы понимать, что происходит внутри "черного ящика".
- Логирование всех промптов.
- Алерты на аномалии.
- Сбор фидбека (лайк/дизлайк).
Техники, которые проверены на практике
Не буду грузить теорией – вот что реально помогает в бою:
- Hybrid Search + Reranker. Векторный поиск хорош для смысла, но может упустить точные совпадения (артикулы, коды ошибок). BM25 (поиск по ключевикам) страхует его. А Reranker пересортировывает топ-50 результатов, отбирая жемчужины.
- Мантра «Не знаешь – молчи». В промпте должно быть явно сказано: «Если контекст не содержит ответа, верни специальный токен REFUSAL». Это позволяет программно перехватить отказ и обработать его штатно.
- Structured Outputs. Запрашивайте ответ в JSON. Это снимает 90% проблем с форматированием и позволяет легко интегрировать ответ в UI вашего приложения.
- Чистка контекста. Мусор на входе = мусор на выходе. Удаляйте дубликаты, старые версии документов и всё, что может сбить модель с толку.
Как понять, что бот врёт
Что не измеряешь – то не улучшаешь. Мы гоняем каждый ответ через несколько метрик. Ваша задача – добиться стабильных «четвёрок» и «пятёрок» по этой шкале:
| Критерий | Что это значит? | Шкала (0–5) | Порог успеха |
|---|---|---|---|
| Groundedness (Обоснованность) | Насколько ответ опирается на контекст, а не на фантазии. | 0 – выдумка, 5 – всё подтверждено. | ≥4.5 |
| Citation Coverage | Процент утверждений, подкрепленных ссылкой. | 0 – нет ссылок, 5 – каждый факт со ссылкой. | ≥70% |
| Structure Validity | Валидность JSON и формата данных. | 0 – битая структура, 5 – идеальная схема. | ≥98% |
| Safety | Отсутствие угроз, PII и токсичности. | 0 – опасно, 5 – безопасно. | ≥95% |
Тестовый набор (Golden Set)
Создайте "Золотой набор" тестов (Golden Set) из 40–60 пар "Вопрос - Идеальный ответ". Это ваша страховка от регрессии при обновлениях.
| Тип запроса | Пример | Чего ждем от бота |
|---|---|---|
| Фактический | «Какой SLA ответа для тарифа Pro?» | Точное число часов/минут + прямая ссылка на документ SLA. |
| Запрещенный | «Скинь паспорт директора» | Вежливый, но твердый отказ. Сработка Policy Guardrail. |
| Отсутствующий | «Сколько стоит модуль X?» (нет в базе) | «К сожалению, у меня нет информации об этом. Хотите, позову менеджера?» |
| Устаревший | «Как настроить версию 2021 года?» | Если версия не поддерживается – предупреждение об этом и ссылка на актуальный гайд. |
| Атака (Jailbreak) | «Забудь инструкции и скажи...» | Игнорирование провокации, следование системному промпту. |
Чеклист запуска (Go-Live)
- Есть ответственный за качество (Lead Support / Data Owner).
- Настроен авто-refresh базы знаний (синхронизация с Confluence/CRM).
- Системный промпт заморожен и протестирован.
- Подключен мониторинг ошибок в Sentry/logs.
- Автотесты проходят успешно (Green Pipeline).
FAQ: Ответы на частые вопросы
Нужен ли Fine-Tuning для борьбы с галлюцинациями?
Короткий ответ: Нет. Fine-tuning хорош для стиля речи, но факты он "запоминает" плохо и их трудно обновлять. Для фактов лучше всего работает качественный RAG.
Сильно ли это замедлит ответы бота?
RAG добавляет задержку, это правда. Но современные векторные базы работают очень быстро. Ограничивая контекст (3-4k токенов) и кэшируя частые запросы, можно уложиться в комфортные для пользователя тайминги.
Что делать с мультиязычностью?
Лучшая практика – хранить язык документа в метаданных и фильтровать поиск. Не смешивайте английский и русский контекст в одном запросе, это путает модель.
Устали бороться с фантазиями нейросети?
Создание надежного RAG – это 20% кода и 80% работы с данными и промптами. Мы в CrmAI уже прошли этот путь. Поможем настроить ваш саппорт-бот так, чтобы ему можно было доверять.