Новый RAG-ассистент (retrieval-augmented generation) на базе WhatsApp перестал галлюцинировать, потребовав, чтобы каждый ответ подкреплялся цитатой в формате JSON. Когда модель не могла указать на конкретный фрагмент (chunk), она выдавала: «У меня недостаточно информации для ответа», превращая «уверенного лжеца» в надежную систему, которая умеет говорить «я не знаю».
Почему в RAG важно доверие
Большинство руководств по RAG зациклены на поиске (retrieval) — выборе эмбеддингов, нарезке документов на фрагменты (chunks) и переранжировании результатов. Они упускают из виду то, что происходит после нахождения релевантного текста. Пользователи теряют доверие, когда ассистент дает категоричный ответ, который на самом деле не подтверждается найденным контекстом.
Разрыв в уверенности
В прототипе, построенном на PostgreSQL с расширением pgvector, конвейер поиска был простым. Настоящие трудности возникли в продакшене: языковая модель звучала уверенно, даже когда в найденном фрагменте не хватало нужной информации. Демо-версия могла скрывать проблему, но реальные пользователи выявили разрыв между уверенным тоном и фактической правильностью.
Принудительное использование цитат через JSON
Вместо того чтобы уговаривать модель промптами вроде «отвечай только если у тебя есть контекст», автор изменил формат вывода. Теперь система требует JSON-объект, где каждое утверждение включает ссылку на конкретный фрагмент, его подтверждающий. Если модель не может прикрепить цитату, ответ отклоняется, и пользователь видит четкое сообщение: «Я не знаю».
Контроль перешел от инструкций на естественном языке к валидации схемы. Модель по-прежнему генерирует текст, но окружающий код проверяет, соответствует ли JSON требуемой структуре, прежде чем он попадет к пользователю.
Что изменилось
- Чанкинг стал более консервативным. Нечеткие или слишком широкие фрагменты теперь порождают утверждения без цитат, что запускает сценарий ответа «я не знаю».
- Системный промпт сократился. Громоздкий промпт, пытавшийся контролировать поведение модели, был заменен коротким набором инструкций, переложив основную работу на схему данных.
- Ошибки стали заметными. Когда поиск возвращает нерелевантный материал, ассистент больше не маскирует ошибку уверенным, но неверным ответом; он открыто признает неуверенность.
Вывод: Для RAG-ассистентов гарантия того, что каждое утверждение можно проследить до найденного источника, выстраивает доверие пользователей гораздо надежнее, чем просто полировка этапа поиска. Превращая отсутствие цитат в видимое «я не знаю», разработчики позволяют системе признавать свои ограничения вместо того, чтобы выдумывать ответы.
