Векторные базы данных и их применение

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

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

RAG системы и большие языковые модели

В этом видео я хотел бы остановиться на довольно популярном сейчас применении векторных баз данных - это так называемые RAG системы (Retrieval Augmented Generation). На русский язык это можно перевести как генерация с дополнением информации из поиска.

Этот способ применения векторных баз данных стал достаточно популярным с развитием искусственного интеллекта и больших языковых моделей, таких как ChatGPT, Claude и другие. Большие языковые модели по-английски звучат как LLM (Large Language Model), и векторные базы данных успешно интегрируются в схему работы с ними.

Смысл в том, что большая языковая модель очень дорогая в обслуживании, запросы к ней достаточно дорогие. Соответственно, набор информации, который мы можем передать в большую языковую модель, достаточно ограничен. Контекст достаточно маленький, причём чем больше контекста мы будем передавать, тем более дорогим будет обслуживание наших запросов. Поэтому чем меньше контекста мы туда будем передавать, тем лучше наша языковая модель будет отвечать и стоить это будет дешевле.

Принцип работы RAG системы

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

Первое, что приходит на ум - взять и просто в качестве контекста скопировать весь текст из этих источников и вставить в большую языковую модель. Но, как вы понимаете, здесь мы упираемся в ограничения запросов, и всё это будет достаточно сложно.

Поэтому нам нужно не просто передавать большой языковой модели эти источники, а передавать только релевантные части из первоначального источника данных. Мы разбиваем источник данных на маленькие кусочки, и каждый из них преобразуем в векторный формат с помощью нейронной модели. Далее все эти кусочки сохраняются в векторной базе данных.

Когда появляется пользователь с запросом, мы берём его запрос, также прогоняем через ту же модель, через которую кодировали наши данные, и происходит поиск по векторной базе данных. Из большого количества сохранённых кусков выбираются наиболее релевантные пользовательскому запросу, в зависимости от параметра top-k. Этот параметр определяет количество релевантных кусков, которое будет выдано в результате поиска (обычно от 3 до 10).

К оригинальному запросу добавляется найденный в векторной базе данных контекст, и всё это передаётся LLM модели. Теперь модель может по контексту узнать информацию из нашего источника данных и выдать соответствующий ответ. Вот собственно и вся суть RAG системы, которая используется для обработки пользовательских данных большой языковой моделью.