Почему ваш RAG может галлюцинировать? 😱

Часто бывает, что начинающие берут LangChain, бездумно копипастят RecursiveCharacterTextSplitter с каким-нибудь chunk_size=1000, запихивают это в векторную базу и искренне не понимают, почему на выходе получается бред.

А потом идут жаловаться, что модель "тупая", ищут волшебные промпты или пытаются прикрутить агентов туда, где они не нужны. 🙃

Часто проблема именно в том, как вы нарезаете свои данные. Если у вас таблица на много строк или сложный кусок кода не влезают в лимит одного чанка — текст разрывается по частям. Векторная база послушно ищет куски по запросу, но находит оторванный хвост без головы. LLM честно пытается сгенерировать из этого ответ. Garbage in — garbage out.

При этом не существует универсальной стратегии чанкинга. На структурированных документах разница в метрике поиска между разными техниками может достигать 2.5 раз.

На одном из эфиров я рассказывал про основы RAG на основе правил D&D (запись и код доступны на Sponsr). Для тех, кто хочет пойти дальше и погрузиться в стратегии нарезки, я написал мини-бенчмарк со сравнением результатов. Можно протестировать 4 стратегии на демо-документах, либо на своем. Локально, без платных API.

На выходе — тепловая карта и сводная таблица с метриками. данных. Код (Jupyter-ноутбук + модуль) лежат здесь ◀️

Почему ваш RAG может галлюцинировать? 😱
Часто бывает, что начинающие берут LangChain, бездумно копипастят RecursiveCharacterTextSplitter с каким-нибудь chunksize=1000, запихивают это в векторную базу ... | Сетка — социальная сеть от hh.ru