Мультимодальный RAG локально с CLIP и Llama3
С недавним выходом GPT-4o и Gemini мультимодальность стала горячей темой в последнее время. Еще одна тема, которая была на вершине освещения, - Retrieval Augmented Generation (RAG) в течение последнего года, но она была в основном ориентирована на текст. В этом уроке вы узнаете, как создать мультимодальную систему RAG.
Используя мультимодальную RAG, вам не обязательно использовать только текст; вы можете использовать различные типы данных, такие как изображения, аудио, видео и, конечно же, текст. Также можно возвращать различные типы данных; если вы используете текст в качестве входных данных для вашей системы RAG, это не значит, что вы должны возвращать текст в качестве выходных данных. Мы продемонстрируем это в этом уроке.
Предварительные условия
Прежде чем приступить к настройке различных компонентов нашего учебника, убедитесь, что в вашей системе есть все необходимое:
Docker & Docker-Compose - Убедитесь, что Docker и Docker-Compose установлены в вашей системе.
Milvus Standalone-Для наших целей мы будем использовать эффективный Milvus Standalone, который легко управляется через Docker Compose; изучите нашу документацию по установке руководство.
OllamaУстановите Ollama в вашей системе. Это позволит нам использовать Llama3 на нашем ноутбуке. Посетите их веб-сайт для получения последнего руководства по установке.
OpenAI CLIP
Основная идея модели CLIP (Contrastive Language-Image Pretraining) заключается в том, чтобы понять связь между картинкой и текстом. Это фундаментальная модель ИИ, обученная на парах текст-изображение. Затем она учится создавать точку в векторном пространстве для текста и изображения. В этом пространстве похожие текстовые описания будут находиться рядом с соответствующими изображениями, и наоборот.
CLIP можно использовать в различных приложениях, в том числе:
Поиск изображений: Представьте себе поиск изображений по текстовому описанию или поиск идеальной подписи к изображению.
Мультимодальное обучение: сильные стороны CLIP в соединении текста и изображений делают его идеальным строительным блоком для таких систем, как мультимодальный RAG, которые работают с информацией в разных форматах.
Это позволяет нашей системе RAG понимать и отвечать на запросы, которые могут включать как текст, так и изображения.
Рис1: Архитектура OpenAI CLIP
Мультимодальные вкрапления
**Что такое вкрапления? ** Проще говоря, вкрапления - это сжатые представления данных. CLIP принимает на вход изображение или текст и преобразует его в числовой код, отражающий его ключевые особенности.
Прелесть CLIP в том, что он работает как с текстом, так и с изображениями. Вы можете предоставить ему изображение, и он сгенерирует вставку, передающую его визуальный контент. Однако вы также можете предоставить текст, и CLIP сгенерирует вставку, отражающую смысл текста.
Multimodal Embeddings
Если представить себе проекцию в векторном пространстве, то вкрапления с похожими значениями окажутся рядом друг с другом. Например, текст "Собака с улыбкой" и изображение собаки, которая, кажется, улыбается, находятся близко друг к другу.
Рис2. Представление в векторном пространстве
Построение мультимодальной RAG
Мы будем использовать данные из Википедии, загружать текстовые данные, связанные с тем, о чем мы хотим узнать больше, и делать то же самое с изображениями.
Мы будем генерировать вкрапления с помощью модели CLIP ViT-B/32 и использовать Llama3 в качестве LLM.
Мы храним эмбеддинги в Milvus, который предназначен для управления крупными эмбеддингами, чтобы мы могли осуществлять быстрый и эффективный поиск.
LlamaIndex используется в качестве механизма запросов в сочетании с Milvus в качестве хранилища векторов.
Весь код довольно длинный, так как нам нужно просмотреть Википедию, обработать текст и изображения, а затем создать RAG-приложение. Тем не менее, он полностью доступен на Github, так что вам обязательно стоит его посмотреть!
После того, как все заработает, вы сможете выполнять запросы, похожие на следующие:
# https://en.wikipedia.org/wiki/Helsinki
query2 = "Какие популярные туристические достопримечательности есть в Хельсинки?"
# генерировать результаты поиска изображений
image_query(query2)
# генерировать результаты текстового поиска
text_retrieval_results = text_query_engine.query(query2)
print("Результаты поиска текста: \n" + str(text_retrieval_results))
В результате должно получиться что-то похожее на
Среди популярных туристических достопримечательностей Хельсинки - Суоменлинна (Свеаборг), остров-крепость с богатой историей, и зоопарк Коркеасаари, расположенный на одном из главных островов Хельсинки. Кроме того, в городе много природных заповедников, в том числе Ванханкаупунгинселькя, который является самым большим заповедником в Хельсинки.
Таким образом, вы получите мультимодальное приложение RAG, которое может обрабатывать изображения или текст, а также возвращать изображения или текст.
Вы можете получить доступ к коду на Github, задавать вопросы в Discord и ставить нам звезды на Github.
Читать далее

How to Choose the Best Embedding Model for RAG in 2026: 10 Models Benchmarked
We benchmarked 10 embedding models on cross-modal, cross-lingual, long-document, and dimension compression tasks. See which one fits your RAG pipeline.

Will Amazon S3 Vectors Kill Vector Databases—or Save Them?
AWS S3 Vectors aims for 90% cost savings for vector storage. But will it kill vectordbs like Milvus? A deep dive into costs, limits, and the future of tiered storage.

Why I’m Against Claude Code’s Grep-Only Retrieval? It Just Burns Too Many Tokens
Learn how vector-based code retrieval cuts Claude Code token consumption by 40%. Open-source solution with easy MCP integration. Try claude-context today.



