Создавайте более эффективные мультимодальные RAG-конвейеры с FiftyOne, LlamaIndex и Milvus
Введение
На недавнем Unstructured Data Meetup, организованном Zilliz, Jacob Marks, инженер по машинному обучению и developer evangelist в Voxel51, рассказал о тонкостях построения надежных мультимодальных RAG-пайплайнов с использованием FiftyOne, LlamaIndex и Milvus.
Посмотрите запись выступления Jacob на meetup
Это выступление было посвящено тому, как мы можем использовать наши данные для построения более качественного мультимодального RAG-пайплайна. В нем подчеркивалось использование бесплатных инструментов с открытым исходным кодом, в частности FiftyOne для управления данными и их визуализации, Milvus в качестве векторного хранилища и LlamaIndex для оркестрации больших языковых моделей (LLMs).
Прежде чем мы рассмотрим мультимодальный RAG, давайте в целом разберем обзор RAG.
Обзор RAG в текстовом контексте
Jacob начинает с объяснения текстовой Retrieval Augmented Generation (RAG) и того, как она работает. Мы изложим это кратко, поскольку уже подробно рассматривали текстовые RAG-системы в этом руководстве по RAG из четырех частей.
RAG расширяет возможности больших языковых моделей (LLMs), дополняя их знания релевантными внешними данными. LLMs, несмотря на обучение на огромных наборах данных, часто имеют ограничения, такие как отсечки по знаниям и галлюцинации. RAG смягчает эти проблемы, извлекая и включая релевантные документы из внешней векторной базы данных, такой как Milvus или Zilliz Cloud, чтобы предоставлять пользователям более точные и контекстуально релевантные ответы.
Архитектура текстовой RAG-системы проста. Давайте рассмотрим процесс RAG.
Retrieval Augmented Generation (RAG)
Рис. 1: Процесс RAG, интегрирующий LLMs с векторными базами данных
На приведенной выше схеме документы разбиваются на более мелкие текстовые сегменты, а затем преобразуются в числовые представления, известные как векторные эмбеддинги. Эти эмбеддинги хранятся в векторной базе данных, такой как Milvus.
Когда пользователь вводит запрос, он также преобразуется в векторный эмбеддинг и используется для запроса к векторной базе данных с целью найти наиболее релевантные текстовые фрагменты. В сочетании с исходным запросом эти релевантные фрагменты формируют насыщенный контекстом ввод для LLM. Наконец, LLM обрабатывает этот ввод, чтобы сгенерировать более точный и контекстуально релевантный ответ.
Этот подход очень эффективен для систем, которые зависят исключительно от текста. Однако текстовая RAG-система недостаточна для систем, которым требуется несколько типов данных для принятия обоснованных решений. Возьмем, к примеру, интернет-магазин. Мы не можем полагаться только на текст, чтобы представить пользователю наиболее релевантный товар; нам нужны изображения товаров, описания и многое другое. Именно здесь Multimodal RAG оказывается бесценным, используя современные мультимодальные LLMs для интеграции различных модальностей данных.
Что такое мультимодальные LLMs и их приложения
Мультимодальные LLMs, такие как GPT-4o и Qwen-VL, — это системы искусственного интеллекта, способные обрабатывать и понимать несколько типов данных, таких как текст, изображения, аудио и видео. Они интегрируют и интерпретируют информацию из различных модальностей, позволяя им генерировать описательные подписи для изображений, отвечать на вопросы о видео и создавать контент, объединяющий текст с визуальными элементами. Эта способность позволяет им лучше понимать и генерировать контекстуально обогащенные ответы благодаря разнообразным типам входных данных.
Они применяются в различных областях, включая медицинские услуги, розничную торговлю и многое другое.
В отраслях медицинских услуг в медицинской сфере существуют визуальные медицинские изображения, текстовые клинические заметки и медицинские отчеты. Мультимодальные LLM синтезируют эту мультимодальную информацию и помогают врачам в их работе. Примером является Med-PaLM LLM, которая использует как текстовые, так и визуальные данные для улучшения принятия медицинских решений и повышения качества лечения пациентов.
В розничной торговле мультимодальные LLM создают персонализированную рекламу и расширяют возможности поиска товаров. Они обрабатывают и интегрируют различные типы данных, такие как текстовые описания, изображения товаров и данные о взаимодействии с клиентами (например, отзывы и поисковые запросы). Анализируя эту мультимодальную информацию, эти LLM могут генерировать персонализированную рекламу, адаптированную к индивидуальным предпочтениям и истории просмотра.
Даже при наличии этих продвинутых возможностей мультимодальные LLM имеют те же ограничения, что и текстовые. Они страдают от ограничений по дате актуальности знаний и галлюцинаций. Чтобы смягчить эти проблемы, нам понадобится мультимодальный RAG.
Понимание мультимодального RAG
Мультимодальный RAG — это продвинутый метод ИИ, который сочетает поиск информации и генеративное моделирование для расширения возможностей мультимодальных LLM. Чтобы понять, как работает мультимодальный RAG, давайте рассмотрим следующий конвейер извлечения мультимодального RAG.
Рис. 2 — Конвейер извлечения мультимодального RAG
Рис. 2: Конвейер извлечения мультимодального RAG
Когда пользователи задают вопрос, модель эмбеддингов сначала преобразует запрос в эмбеддинг. Затем этот эмбеддинг используется для запроса к мультимодальной векторной базе данных, такой как Milvus, которая хранит эмбеддинги связанных документов, включая текст и изображения. Векторная база данных извлекает ближайших соседей для вопроса, по сути, наиболее релевантные документы. Извлеченные документы объединяются с исходным вопросом, формируя мультимодальный промпт, включающий как текстовый, так и визуальный контекст. Затем мультимодальная LLM обрабатывает этот обогащенный промпт, интегрируя разнообразные типы данных, чтобы сгенерировать более точный и контекстуально релевантный ответ.
В следующем разделе давайте перейдем к практике и посмотрим, как реализовать конвейер мультимодального RAG с использованием FiftyOne, LLamaIndex и Milvus.
Реализация конвейера мультимодального RAG с использованием FiftyOne, LLamaIndex и Milvus
Существует два способа реализовать конвейер мультимодального RAG с использованием FiftyOne, LLamaIndex и Milvus. Один — написать собственный код, что дает больше контроля, но занимает больше времени, а другой — использовать плагины, которые позволяют добавлять функциональность в приложение FiftyOne App.
В этом разделе мы рассмотрим реализацию конвейера мультимодального RAG с использованием fiftyone-multimodal-rag-plugin на базе векторной базы данных Milvus. Если вы хотите писать код с нуля, вот руководство для начинающих по генерации мультимодальных векторных эмбеддингов с Milvus и FiftyOne.
Настройка вашей среды
В докладе Jacob переходит к демо с установленным мультимодальным плагином. Давайте разберем это медленнее, поскольку важный шаг установки явно не упоминается ни в демо, ни в руководстве по установке плагина на GitHub. Это шаг установки Milvus.
Чтобы использовать плагин, у вас уже должен быть запущен экземпляр Milvus на вашем компьютере. Плагин Fiftyone полагается на Milvus для хранения и извлечения мультимодальных эмбеддингов. Плагин предполагает, что Milvus запущен на http://localhost:19530. Если у вас не установлен Milvus, следуйте документации Milvus, чтобы установить и запустить его.
После установки и запуска Milvus следуйте этим инструкциям по установке, чтобы установить и настроить fiftyone-multimodal-rag-plugin. После завершения настройки запустите приложение FiftyOne и просмотрите доступные операции, чтобы увидеть функциональные возможности, предоставляемые плагином.
Fig 3- Страница выбора доступных операций FiftyOne
Рис. 3: Страница выбора доступных операций FiftyOne
Теперь создадим конвейер RAG.
Шаг 1: Создайте набор данных из документов LLamaIndex
Этот шаг включает выбор папки на вашем компьютере, содержащей ваши изображения и текстовые файлы. Вы встроите эти мультимодальные данные и сохраните мультимодальные эмбеддинги в Milvus. Чтобы загрузить папку вашего набора данных, выберите операцию Create a Dataset from the LLamaIndex Documents. Затем назовите свой набор данных и выберите его каталог.
Fig 4- Создание набора данных из документов LLamaIndex
Рис. 4: Создание набора данных из документов LLamaIndex
Нажмите Execute, чтобы загрузить и визуализировать ваш набор данных.
Fig 5- Визуализация мультимодального набора данных в FiftyOne
Рис. 5: Визуализация мультимодального набора данных в FiftyOne
В визуализации вы можете увидеть, что набор данных состоит из изображений и текста, что делает его мультимодальным. Следующий шаг — создать мультимодальный RAG-индекс приведенного выше набора данных.
Шаг 2: Интеграция LlamaIndex с Milvus для создания мультимодального RAG-индекса
Чтобы создать мультимодальный RAG-индекс с использованием LlamaIndex и Milvus, необходимо интегрировать две библиотеки для эффективного управления мультимодальными данными и их извлечения. LlamaIndex обрабатывает загрузку и создание эмбеддингов мультимодальных данных в векторные представления. Затем эти эмбеддинги сохраняются в Milvus для последующего извлечения во время запросов.
На странице выбора операций FiftyOne выберите операцию Create Multimodal RAG Index. Затем назовите свой индекс и нажмите Execute.
Fig 6- Создание мультимодального RAG-индекса с использованием LLamaIndex и Milvus
Рис. 6: Создание мультимодального RAG-индекса с использованием LLamaIndex и Milvus
Выполнение займет некоторое время в зависимости от размера вашего набора данных, поэтому наберитесь терпения. Во время этого процесса ваш набор данных будет преобразован в векторные эмбеддинги и сохранен в Milvus. Чем больше ваш набор данных, тем больше времени потребуется для создания индекса. После создания RAG-индекса вы можете перейти к его запросам.
Шаг 3: Запросы к мультимодальному RAG-индексу
Этот этап запросов занимает больше всего времени для выполнения в конвейере RAG. Как мы все знаем, никто не любит медленные приложения. Именно поэтому векторная база данных, к которой выполняются запросы, должна быть быстрой в процессе извлечения и при этом точной. Именно здесь выигрывает Milvus — самая широко используемая векторная база данных с открытым исходным кодом.
Джейкобс рассказывает о Milvus в докладе, но поскольку плагин абстрагирует большую часть того, что происходит под капотом, мы можем не полностью увидеть преимущества Milvus в мультимодальных RAG-конвейерах. Но давайте посмотрим, почему большинство разработчиков мультимодальных RAG, включая разработчика fiftyone-multimodal-rag-plugin, выбрали Milvus:
Хранение и извлечение векторов миллиардного масштаба: Milvus эффективно управляет векторными данными миллиардного масштаба, обеспечивая быстрый доступ с задержкой на уровне миллисекунд.
Горизонтальная масштабируемость: Milvus обладает высокой масштабируемостью и адаптируется к вашим меняющимся потребностям по мере роста вашего бизнеса.
Идеально подходит для RAG: Milvus является незаменимой инфраструктурой для создания различных GenAI-приложений, особенно retrieval augmented generation (RAG).
Высокоскоростное извлечение: Благодаря оптимизированным алгоритмам поиска Milvus обеспечивает быстрое и точное извлечение релевантных векторов, что необходимо для приложений реального времени, таких как интерактивные AI-системы и рекомендательные системы.
Обработка мультимодальных данных: Milvus поддерживает различные типы данных и может выполнять гибридный поиск. Эта возможность позволяет сочетать мультимодальный поиск, гибридный разреженный и плотный поиск, а также гибридный плотный и полнотекстовый поиск, предлагая универсальную и гибкую функциональность поиска.
Чтобы выполнить запрос к вашему мультимодальному индексу RAG, перейдите на страницу выбора Operations и выберите операцию Query Multimodal RAG Index. Затем введите свой запрос, выберите индекс для использования, LLM для генерации ответа, количество текстовых результатов и, наконец, количество результатов изображений для включения.
Рис. 7- Запрос к мультимодальному индексу RAG на базе Milvus
Рис. 7: Запрос к мультимодальному индексу RAG на базе Milvus
Затем плагин использует Milvus для выполнения поиска по векторному сходству, чтобы извлечь наиболее релевантные эмбеддинги на основе вашего запроса. Извлеченные эмбеддинги предоставляют контекст для генерации ответа с использованием выбранной большой языковой модели. Вот результаты для приведенного выше запроса:
Рис. 8- Результаты запроса к мультимодальному индексу RAG
Рис. 8: Результаты запроса к мультимодальному индексу RAG
Результаты показывают индекс и модель, которые вы использовали при выполнении запроса, а также ответ, сгенерированный большой языковой моделью.
На данный момент вы выполнили все шаги по созданию мультимодального RAG-конвейера с использованием FiftyOne, LLamaIndex и Milvus.
Заключение
Презентация Джейкоба подчеркнула потенциал интеграции FiftyOne, LlamaIndex и Milvus для создания мощных мультимодальных RAG-конвейеров. Эти инструменты расширяют возможности мультимодальных систем, эффективно используя текстовые и визуальные данные для улучшенного извлечения данных и ответов с богатым контекстом. Следуя описанным шагам, вы можете использовать преимущества этих open-source инструментов, при этом Milvus обеспечивает надежное векторное хранилище и высокоскоростное извлечение, выводя ваши проекты на новый уровень.
Дополнительные ресурсы
Читать далее

Zilliz Cloud BYOC Now Available Across AWS, GCP, and Azure
Zilliz Cloud BYOC is now generally available on all three major clouds. Deploy fully managed vector search in your own AWS, GCP, or Azure account — your data never leaves your VPC.

Announcing the General Availability of Single Sign-On (SSO) on Zilliz Cloud
SSO is GA on Zilliz Cloud, delivering the enterprise-grade identity management capabilities your teams need to deploy vectorDB with confidence.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.


