Содержание
1. Общий смысл и назначение RAG систем
2. Классика применения RAG с использованием векторных баз данных.
4. Возможны ли RAG системы без векторных баз данных
Если вы интересуетесь большими языковыми моделями, то наверняка уже встречали термин RAG. Его часто упоминают, когда говорят о чат-ботах, поиске по документации, корпоративных ИИ-ассистентах и работе с собственными данными.
В этом материале мы с вами попробуем разобраться подробнее, что же такое RAG, когда он используется, когда его стоит применять, когда не стоит, и для чего это все нужно.
Общий смысл и назначение RAG систем
RAG системы (Retrieval Augmented Generation) - на русский язык это можно перевести как генерация с дополнением информации из поиска.
Этот способ применения векторных баз данных стал достаточно популярным с развитием искусственного интеллекта и больших языковых моделей, таких как ChatGPT, Claude и другие. Большие языковые модели по-английски звучат как LLM (Large Language Model).
Есть несколько причин, почему были придуманы эти системы.
1) Большая языковая модель очень дорогая в обслуживании, запросы к ней достаточно дорогие. Соответственно, набор информации, который мы можем передать в большую языковую модель, достаточно ограничен. Контекст достаточно маленький, причём чем больше контекста мы будем передавать, тем более дорогим будет обслуживание наших запросов. Поэтому чем меньше контекста мы туда будем передавать, тем лучше наша языковая модель будет отвечать и стоить это будет дешевле.
2) LLM модель обучалась на тех данных, которые предоставили ее разработчики. Она не знает тех данных, которые есть у вас. Поэтому она не сможет ответить на какие-то специфичные запросы, относящиеся к вашей узкой области знаний.
Для решения этой задачи как раз и были придуманы RAG-системы, которые позволяют искать релевантные контексты информации и выдавать эти контексты в необходимом объеме для качественного ответа LLM модели.
Классика применения RAG с использованием векторных баз данных.
Векторные базы данных - это классика в архитектуре построения RAG-систем.
Кроме того что векторные базы данных могут применяться для одиночных задач рекомендательных систем, у вас есть некий набор данных, который вы загрузили в вашу векторную базу данных, и она может по запросам возвращать релевантные данные. Это может использоваться для систем рекомендации на информационных ресурсах.
Например, для поиска похожих товаров в интернет-магазинах. Другой пример - новостной сайт, где ищем похожие статьи. Рекомендательная система может использовать векторные базы данных просто для поиска схожей информации по разным источникам. Сфера применения векторных баз данных достаточно обширная.
Принцип работы RAG системы
Предположим, у нас есть некий источник данных - это может быть база продаж, база клиентов либо внутренняя документация, по которой мы хотели бы получать ответы с помощью большой языковой модели. Большая языковая модель об этом источнике данных ничего не знает, поэтому нам нужно каким-то образом передать ей эти данные.
Первое, что приходит на ум - взять и просто в качестве контекста скопировать весь текст из этих источников и вставить в большую языковую модель. Но, как вы понимаете, здесь мы упираемся в ограничения запросов, и всё это будет достаточно сложно.
Поэтому нам нужно не просто передавать большой языковой модели эти источники, а передавать только релевантные части из первоначального источника данных. Мы разбиваем источник данных на маленькие кусочки, и каждый из них преобразуем в векторный формат с помощью нейронной модели. Далее все эти кусочки сохраняются в векторной базе данных.
Когда появляется пользователь с запросом, мы берём его запрос, также прогоняем через ту же модель, через которую кодировали наши данные, и происходит поиск по векторной базе данных. Из большого количества сохранённых кусков выбираются наиболее релевантные пользовательскому запросу, в зависимости от параметра top-k. Этот параметр определяет количество релевантных кусков, которое будет выдано в результате поиска (обычно от 3 до 10).
К оригинальному запросу добавляется найденный в векторной базе данных контекст, и всё это передаётся LLM модели. Теперь модель может по контексту узнать информацию из нашего источника данных и выдать соответствующий ответ. Вот собственно и вся суть RAG системы, которая используется для обработки пользовательских данных большой языковой моделью.
Возможны ли RAG системы без векторных баз данных
RAG-системы без векторных баз данных
Когда мы говорим о RAG-системах, чаще всего мы имеем в виду такую архитектуру, где у нас есть некая LLM-модель, которая обращается к векторной базе данных, получает необходимый семантический контекст в виде чанков и использует их в своём контексте для ответа пользователю. Но возникает вопрос, нужно ли всегда использовать векторные базы данных в архитектуре RAG-систем? Существует ли RAG-система без векторных? На самом деле, ответ — да.
В этом видео я в общих чертах расскажу, как это возможно. Существует более одного способа, как вы можете построить RAG-системы без использования векторных баз данных. Мы рассмотрим самые основные варианты, которые могут использоваться. Начнём, пожалуй, с полнотекстового поиска.
Это такие технологии, как BM25 и обычные SQL-запросы, Lexical Search. Здесь смысл достаточно простой: когда пользователь делает какой-то запрос по ключевому слову, допустим, «яблоко», «Apple», происходит простой поиск по этому ключевому слову. Ищутся все вхождения этого ключевого слова в той базе данных, которая у вас есть.
Ключевое — это база данных. Не обязательно векторная, чаще всего это может быть реляционная база данных, может быть какая-то NoSQL-база данных, могут быть даже обычные файлы, которые лежат на вашем диске. Здесь не важна сама реализация, важен смысл — поиск происходит именно по вхождению ключевых слов.
Далее, когда эти ключевые слова найдены, выделяются чанки, которые окружают найденные вхождения. И точно так же они передаются LLM-модели. Такой вариант работы RAG-систем может иметь место, но главный его недостаток в том, что мы не сможем обеспечить семантический поиск. Будет слабая работа с синонимами, со смыслом.
Если мы ищем «яблоко», то не будет найден «яблочный сок» либо что-то ещё. Такие вхождения, которые не совсем подходят под ключевые слова, будут упущены. Но тем не менее такая RAG-система тоже может иметь место, например, в тех системах, где не столь важен семантический поиск.
Альтернативные подходы к хранению контекста
Вы можете вообще даже не осуществлять поиск по векторной базе данных, а просто взять всю вашу базу данных и приложить к системному промпту, чтобы она находилась там. Но такой вариант, как вы понимаете, не совсем подходит для большинства случаев. В большинстве случаев база данных достаточно большая, и она просто не уместится в контекстное окно LLM-модели.
Если у вас маленькая база данных, то вы можете таким образом обойтись без векторной базы данных и размещать свой контекст прямо в контекстном окне запроса. Это будет не совсем уже RAG-система, потому что назначение RAG-системы — это нахождение релевантных кусков для ответа модели.
Есть возможность использовать вместо векторной базы данных графовую базу данных. Существуют технологии, которые позволяют это делать, но это достаточно сложно для внедрения и поддержки. Общий механизм такой, что данные хранятся в виде сущностей и связей, а запросы превращаются в обход графа.
Это идеально для каких-то строго формализованных предметных областей и поиска сложных логических цепочек. Для таких случаев лучше использовать графовые базы данных как альтернативу векторной базе данных.
Также вы можете просто взять и хранить куски вашей базы данных в обычной базе данных PostgreSQL, MySQL и делать запросы именно к ней. В том же PostgreSQL вы можете хранить и векторы. Это будет реляционная база данных, но в ней будут храниться векторы. Такой вариант тоже может иметь место. Но здесь у вас могут возникнуть в дальнейшем проблемы с масштабируемостью и скоростью выдачи данных. Тем не менее вы можете просто искать вхождения чанков обычными SQL-запросами.
Итого: для малых данных векторная база данных вообще не обязательна. Для сложного смысла и масштаба векторная база данных желательна, но она не обязательна, это опциональный вариант. Основное преимущество векторных баз данных — это возможность поиска по смыслу. Но если вам эта возможность не столь необходима, вы можете вполне обойтись и без векторной базы данных в архитектуре построения RAG-систем.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Email - зарегистрироваться / войти