Новый RAG-ассистент (retrieval-augmented generation) на базе WhatsApp перестал галлюцинировать, потребовав, чтобы каждый ответ подкреплялся цитатой в формате JSON. Когда модель не могла указать на конкретный фрагмент (chunk), она выдавала: «У меня недостаточно информации для ответа», превращая «уверенного лжеца» в надежную систему, которая умеет говорить «я не знаю».

Почему в RAG важно доверие

Большинство руководств по RAG зациклены на поиске (retrieval) — выборе эмбеддингов, нарезке документов на фрагменты (chunks) и переранжировании результатов. Они упускают из виду то, что происходит после нахождения релевантного текста. Пользователи теряют доверие, когда ассистент дает категоричный ответ, который на самом деле не подтверждается найденным контекстом.

Разрыв в уверенности

В прототипе, построенном на PostgreSQL с расширением pgvector, конвейер поиска был простым. Настоящие трудности возникли в продакшене: языковая модель звучала уверенно, даже когда в найденном фрагменте не хватало нужной информации. Демо-версия могла скрывать проблему, но реальные пользователи выявили разрыв между уверенным тоном и фактической правильностью.

Принудительное использование цитат через JSON

Вместо того чтобы уговаривать модель промптами вроде «отвечай только если у тебя есть контекст», автор изменил формат вывода. Теперь система требует JSON-объект, где каждое утверждение включает ссылку на конкретный фрагмент, его подтверждающий. Если модель не может прикрепить цитату, ответ отклоняется, и пользователь видит четкое сообщение: «Я не знаю».

Контроль перешел от инструкций на естественном языке к валидации схемы. Модель по-прежнему генерирует текст, но окружающий код проверяет, соответствует ли JSON требуемой структуре, прежде чем он попадет к пользователю.

Что изменилось

  • Чанкинг стал более консервативным. Нечеткие или слишком широкие фрагменты теперь порождают утверждения без цитат, что запускает сценарий ответа «я не знаю».
  • Системный промпт сократился. Громоздкий промпт, пытавшийся контролировать поведение модели, был заменен коротким набором инструкций, переложив основную работу на схему данных.
  • Ошибки стали заметными. Когда поиск возвращает нерелевантный материал, ассистент больше не маскирует ошибку уверенным, но неверным ответом; он открыто признает неуверенность.

Вывод: Для RAG-ассистентов гарантия того, что каждое утверждение можно проследить до найденного источника, выстраивает доверие пользователей гораздо надежнее, чем просто полировка этапа поиска. Превращая отсутствие цитат в видимое «я не знаю», разработчики позволяют системе признавать свои ограничения вместо того, чтобы выдумывать ответы.