RAG-архитектура на пальцах: как языковая модель достает информацию из вашей базы знаний
Есть распространенное заблуждение, будто языковая модель «знает» только то, что видела при обучении. На самом деле, она работает с тем, что лежит в ее контекстном окне: с документами, присланными в чат, результатами поиска, выдержками из базы. Но контекстное окно не резиновое, и вы физически не можете загрузить в него всю корпоративную базу знаний.
Тут и появляется RAG (Retrieval-Augmented Generation). Идея простая: не передавать в модель все подряд, а перед каждым ответом находить в базе именно те фрагменты, которые относятся к вопросу, и подкладывать в контекст только их.
Сначала базу нужно подготовить
Документы режутся на фрагменты — чанки. Именно здесь чаще всего закладывается будущее качество: если порежете слишком крупно, то в одном фрагменте смешается несколько тем, а поиск будет промахиваться; слишком мелко — фрагмент потеряет смысл.
Каждый чанк прогоняется через модель-эмбеддер и превращается в вектор — длинный набор чисел, кодирующий смысл текста. Важный момент: близкие по смыслу тексты получают близкие векторы, даже если написаны разными словами, и это принципиально отличает подход от обычного поиска по ключевым словам.
Векторы складываются в векторную базу данных — хранилище, заточенное под одну задачу: быстро находить ближайшие векторы среди миллионов.
Что происходит, когда пользователь задает вопрос
Вопрос проходит через тот же эмбеддер и тоже становится вектором, а система ищет в базе фрагменты, чьи векторы ближе всего к вектору запроса. Это шаг retrieval.
Часто сюда добавляют еще один шаг — переранжирование. Первичный поиск по векторам быстрый, но недостаточно релевантный, он может выдасть более 20 кандидатов. Их прогоняют через более тяжелую и точную модель, которая пересортировывает результаты и оставляет действительно лучшие.
Отобранные фрагменты вставляются в промпт рядом с исходным вопросом, модель генерирует ответ, опираясь на эти куски, а не на свои общие представления о запросе. Грамотно собранная система еще и возвращает ссылки на исходные документы, чтобы ответ можно было проверить.
Почему RAG, а не дообучение
Может возникнуть логичный вопрос: если нужно, чтобы модель работала с нашими данными, почему просто не дообучить ее на них? Ответ простой: для большинства задач RAG практичнее, ведь для того, чтобы обновить знания, надо всего лишь добавить документ в базу. Источник ответа будет виден, и его можно проверить, чего не дает дообученная модель. К тому же модель можно ограничить рамками контекста, снижая риск галлюцинаций.
Особенности работы с RAG и точность ответа
Главное, что надо знать и понимать про RAG: система отвечает настолько хорошо, насколько точен поиск. Если retrieval вытащил не те фрагменты, модель сгенерирует уверенный и складный ответ, но неверный. Поэтому большая часть работы над RAG-системами уходит не на модель, а на поиск: подбор размера чанков, выбор эмбеддера, настройку переранжирования и чистоту базы.
Обсуждение 1
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram