Construye mejores pipelines RAG multimodales con FiftyOne, LlamaIndex y Milvus
Introducción
En el reciente Unstructured Data Meetup organizado por Zilliz, Jacob Marks, ingeniero de aprendizaje automático y evangelista de desarrolladores en Voxel51, analizó las complejidades de construir pipelines RAG multimodales robustos usando FiftyOne, LlamaIndex y Milvus.
Mira la repetición de la charla de Jacob en el meetup
Esta charla se centró en cómo podemos usar nuestros datos para construir un mejor pipeline RAG multimodal. Enfatizó el uso de herramientas gratuitas y de código abierto, específicamente aprovechando FiftyOne para la gestión y visualización de datos, Milvus como almacén vectorial y LlamaIndex para orquestar modelos de lenguaje grandes (LLMs).
Antes de ver RAG multimodal, veamos una descripción general de RAG en general.
Descripción general de RAG en un contexto basado en texto
Jacob comienza explicando la Generación Aumentada por Recuperación basada en texto (RAG) y cómo funciona. Mantendremos esto breve, ya que ya hemos cubierto en detalle los sistemas RAG basados en texto en este manual de RAG de cuatro partes.
RAG mejora las capacidades de los modelos de lenguaje grandes (LLMs) al ampliar su conocimiento con datos externos relevantes. Los LLMs, a pesar de estar entrenados en conjuntos de datos vastos, a menudo tienen limitaciones como cortes de conocimiento y alucinaciones. RAG mitiga estos problemas recuperando e incorporando documentos relevantes de una base de datos vectorial externa como Milvus o Zilliz Cloud para proporcionar a los usuarios respuestas más precisas y contextualmente relevantes.
La arquitectura de un sistema RAG basado en texto es sencilla. Echemos un vistazo al proceso de RAG.
Generación Aumentada por Recuperación (RAG)
Fig. 1: Proceso de RAG de integración de LLMs con bases de datos vectoriales
En el diagrama anterior, los documentos se dividen en fragmentos de texto más pequeños y luego se transforman en representaciones numéricas conocidas como embeddings vectoriales. Estos embeddings se almacenan en una base de datos vectorial como Milvus.
Cuando un usuario proporciona un prompt, este también se convierte en un embedding vectorial y se utiliza para consultar la base de datos vectorial en busca de los pasajes de texto más relevantes. Combinados con el prompt original, estos pasajes relevantes forman una entrada rica en contexto para el LLM. Finalmente, el LLM procesa esta entrada para generar una respuesta más precisa y contextualmente relevante.
Este enfoque es muy eficaz para sistemas que dependen únicamente del texto. Sin embargo, un sistema RAG basado en texto es insuficiente para sistemas que necesitan múltiples tipos de datos para tomar decisiones informadas. Tomemos una tienda de comercio electrónico, por ejemplo. No podemos depender solo del texto para presentar el producto más relevante a un usuario; necesitamos imágenes de productos, descripciones y más. Aquí es donde RAG multimodal resulta invaluable, aprovechando los LLMs multimodales modernos para integrar varias modalidades de datos.
Qué son los LLMs multimodales y sus aplicaciones
Los LLMs multimodales como GPT-4o y Qwen-VL son sistemas de inteligencia artificial capaces de procesar y comprender múltiples tipos de datos, como texto, imágenes, audio y video. Integran e interpretan información de diversas modalidades, lo que les permite generar subtítulos descriptivos para imágenes, responder preguntas sobre videos y crear contenido que combina texto con elementos visuales. Esta capacidad les permite comprender mejor y generar respuestas enriquecidas contextualmente mediante los diversos tipos de datos de entrada.
Se aplican en varios dominios, incluidos los servicios médicos, el comercio minorista y más.
En las industrias de servicios médicos, existen imágenes médicas visuales, notas clínicas basadas en texto e informes médicos en el ámbito médico. Los LLM multimodales sintetizan esta información multimodal y ayudan a los médicos en su trabajo. Un ejemplo es Med-PaLM LLM, que aprovecha tanto los datos textuales como visuales para mejorar la toma de decisiones médicas y mejorar los resultados de la atención al paciente.
En el comercio minorista, los LLM multimodales crean anuncios personalizados y mejoran las capacidades de búsqueda de productos. Procesan e integran varios tipos de datos, como descripciones de texto, imágenes de productos y datos de interacción con clientes (p. ej., reseñas y consultas de búsqueda). Al analizar esta información multimodal, estos LLM pueden generar anuncios personalizados adaptados a las preferencias individuales y al historial de navegación.
Incluso con estas funciones avanzadas, los LLM multimodales tienen las mismas limitaciones que los basados en texto. Sufren de cortes de conocimiento y alucinaciones. Para mitigar estos problemas, necesitaremos un RAG multimodal.
Comprender el RAG multimodal
El RAG multimodal es una técnica avanzada de IA que combina la recuperación de información y el modelado generativo para mejorar las capacidades de los LLM multimodales. Para entender cómo funciona el RAG multimodal, echemos un vistazo al siguiente flujo de recuperación de RAG multimodal.
Fig 2- Flujo de recuperación de RAG multimodal
Fig. 2: Flujo de recuperación de RAG multimodal
Cuando los usuarios hacen una pregunta, un modelo de embeddings primero convierte la consulta en un embedding. Este embedding se utiliza luego para consultar una base de datos vectorial multimodal como Milvus, que almacena embeddings de documentos relacionados, incluidos texto e imágenes. La base de datos vectorial recupera los vecinos más cercanos a la pregunta, esencialmente los documentos más relevantes. Los documentos recuperados se combinan con la pregunta original para formar un prompt multimodal, incorporando tanto contexto textual como visual. Luego, un LLM multimodal procesa este prompt enriquecido, integrando los diversos tipos de datos para generar una respuesta más precisa y contextualmente relevante.
En la siguiente sección, pongámonos manos a la obra y veamos cómo implementar un flujo de RAG multimodal usando FiftyOne, LLamaIndex y Milvus.
Implementar un flujo de RAG multimodal usando FiftyOne, LLamaIndex y Milvus
Hay dos formas de implementar un flujo de RAG multimodal usando FiftyOne, LLamaIndex y Milvus. Una es escribir tu propio código, lo que te da más control pero lleva más tiempo, y la otra es usar plugins que te permiten añadir funcionalidad a la FiftyOne App.
Esta sección explorará la implementación del flujo de RAG multimodal usando el fiftyone-multimodal-rag-plugin impulsado por la base de datos vectorial Milvus. Si quieres programar desde cero, aquí tienes una guía para principiantes sobre la generación de embeddings vectoriales multimodales con Milvus y FiftyOne.
Configuración de tu entorno
Jacob se sumerge en una demostración con el plugin multimodal instalado en la charla. Vamos a ir más despacio, ya que un paso crucial de instalación no se menciona explícitamente ni en la demo ni en la guía de instalación del plugin en GitHub. Es el paso de instalación de Milvus.
Para usar el plugin, ya debes tener una instancia de Milvus ejecutándose en tu computadora. El plugin de Fiftyone depende de Milvus para almacenar y recuperar embeddings multimodales. El plugin asume que Milvus se está ejecutando en http://localhost:19530. Si no tienes Milvus instalado, sigue la documentación de Milvus para instalarlo y ejecutarlo.
Después de instalar y ejecutar Milvus, sigue estas pautas de instalación para instalar y configurar el fiftyone-multimodal-rag-plugin. Una vez completada la configuración, inicia la aplicación FiftyOne y explora las operaciones disponibles para ver las funcionalidades proporcionadas por el plugin.
Fig 3- Página de selección de operaciones disponibles de FiftyOne
Fig 3: Página de selección de operaciones disponibles de FiftyOne
Ahora creemos el pipeline RAG.
Paso 1: Crear un Dataset a partir de documentos de LLamaIndex
Este paso implica seleccionar una carpeta que contenga tus imágenes y archivos de texto desde tu computadora. Incrustarás estos datos multimodales y almacenarás los embeddings multimodales en Milvus. Para cargar la carpeta de tu dataset, selecciona la operación Create a Dataset from the LLamaIndex Documents. Luego, nombra tu dataset y elige su directorio.
Fig 4- Creación de un dataset a partir de documentos de LLamaIndex
Fig 4: Creación de un dataset a partir de documentos de LLamaIndex
Haz clic en Execute para cargar y visualizar tu dataset.
Fig 5- Visualización de un dataset multimodal en FiftyOne
Fig 5: Visualización de un dataset multimodal en FiftyOne
En la visualización, puedes ver que el dataset está compuesto por imágenes y texto, lo que lo hace multimodal. El siguiente paso es crear un índice RAG multimodal del dataset anterior.
Paso 2: Integrar LlamaIndex con Milvus para crear un índice RAG multimodal
Para crear un índice RAG multimodal usando LlamaIndex y Milvus, debes integrar las dos bibliotecas para gestionar y recuperar datos multimodales de manera eficiente. LlamaIndex gestiona la ingesta y el embedding de datos multimodales en representaciones vectoriales. Estos embeddings se almacenan luego en Milvus para su recuperación posterior durante las consultas.
En la página de selección de operaciones de FiftyOne, selecciona la operación Create Multimodal RAG Index. Luego, nombra tu índice y haz clic en ejecutar.
Fig 6- Creación de un índice RAG multimodal usando LLamaIndex y Milvus
Fig 6: Creación de un índice RAG multimodal usando LLamaIndex y Milvus
La ejecución tomará algo de tiempo, dependiendo del tamaño de tu dataset, así que ten paciencia. Durante este proceso, tu dataset se convertirá en embeddings vectoriales y se almacenará en Milvus. Cuanto más grande sea tu dataset, más tiempo tardará en crear el índice. Después de crear el índice RAG, puedes proceder a consultarlo.
Paso 3: Consultar el índice RAG multimodal
Este paso de consulta es el que más tiempo tarda en ejecutarse en el pipeline RAG. Como todos sabemos, a nadie le gusta una aplicación lenta. Por eso, la base de datos vectorial que se va a consultar debe ser rápida durante el proceso de recuperación y, al mismo tiempo, precisa. Aquí es donde Milvus, la base de datos vectorial de código abierto más ampliamente adoptada, gana.
Jacobs habla sobre Milvus en la charla, pero dado que el plugin abstrae la mayor parte de lo que ocurre bajo el capó, puede que no veamos por completo los beneficios de Milvus en los pipelines RAG multimodales. Pero veamos por qué la mayoría de los desarrolladores de RAG multimodal, incluido el desarrollador del fiftyone-multimodal-rag-plugin, eligieron usar Milvus:
Almacenamiento y recuperación de vectores a escala de miles de millones: Milvus gestiona de manera eficiente datos vectoriales a escala de miles de millones, garantizando un acceso rápido con latencia a nivel de milisegundos.
Escalabilidad horizontal: Milvus es altamente escalable y se adapta para satisfacer tus necesidades cambiantes a medida que tu negocio crece.
Ideal para RAG: Milvus es una infraestructura indispensable para crear diversas aplicaciones GenAI, en particular generación aumentada por recuperación (RAG).
Recuperación de alta velocidad: Con algoritmos de búsqueda optimizados, Milvus permite una recuperación rápida y precisa de vectores relevantes, lo cual es esencial para aplicaciones en tiempo real como sistemas de IA interactivos y motores de recomendación.
Manejo de datos multimodales: Milvus admite varios tipos de datos y puede realizar búsquedas híbridas. Esta capacidad permite combinar búsqueda multimodal, búsqueda híbrida dispersa y densa, y búsqueda híbrida densa y de texto completo, ofreciendo una funcionalidad de búsqueda versátil y flexible.
Para consultar tu índice RAG multimodal, ve a la página de selección de Operations y selecciona la operación Query Multimodal RAG Index. Luego, ingresa tu consulta, selecciona el índice que deseas usar, el LLM para generar una respuesta, el número de resultados de texto, y finalmente, el número de resultados de imagen que deseas incluir.
Fig 7- Consulta de un índice RAG multimodal impulsado por Milvus
Fig 7: Consulta de un índice RAG multimodal impulsado por Milvus
Luego, el plugin utiliza Milvus para realizar una búsqueda de similitud vectorial con el fin de recuperar los embeddings más relevantes según tu consulta. Los embeddings recuperados proporcionan el contexto para generar una respuesta utilizando el modelo de lenguaje grande seleccionado. Estos son los resultados de la consulta anterior:
Fig 8- Resultados de consultar un índice RAG multimodal
Fig 8: Resultados de consultar un índice RAG multimodal
Los resultados muestran el índice y el modelo que usaste al ejecutar la consulta y la respuesta generada por el modelo de lenguaje grande.
Hasta ahora, has completado todos los pasos para crear una canalización RAG multimodal usando FiftyOne, LLamaIndex y Milvus.
Conclusión
La presentación de Jacob destacó el potencial de integrar FiftyOne, LlamaIndex y Milvus para crear potentes canalizaciones RAG multimodales. Estas herramientas mejoran las capacidades de los sistemas multimodales al aprovechar eficientemente datos de texto y visuales para mejorar la recuperación de datos y generar respuestas ricas en contexto. Siguiendo los pasos descritos, puedes aprovechar las fortalezas de estas herramientas de código abierto, con Milvus proporcionando almacenamiento vectorial robusto y recuperación de alta velocidad, elevando tus proyectos a nuevos niveles.
Recursos adicionales
Sigue leyendo

Zilliz Cloud Just Landed in Claude Code
The Zilliz Cloud Plugin brings the full power of Zilliz Cloud directly into your Claude Code terminal as natural-language conversations.

How Zilliz Saw the Future of Vector Databases—and Built for Production
An inside look at how Zilliz built vector databases for real-world use, focusing on scalability, stability, and running them reliably at scale.

Demystifying the Milvus Sizing Tool
Explore how to use the Sizing Tool to select the optimal configuration for your Milvus deployment.


