Ir al contenido principal

Unifica los datos de tu paciente con RAG multimodal

Comprende cómo usar AI Search de Databricks con incrustaciones multimodales para mejorar tus aplicaciones RAG con capacidades multimodales

por Austin Choi y Jordan Soldo

  • Superpoderes Transversales: Los modelos de incrustación multimodales te permiten buscar entre diferentes modalidades usando consultas de texto sin etiquetas ni metadatos, al colocar diferentes tipos de datos en un espacio semántico compartido.
  • Crea, Busca, Despliega: Aprende a crear un sistema RAG multimodal completo en Databricks convirtiendo imágenes en incrustaciones, almacenándolas en tablas Delta y habilitando búsquedas de similitud potentes con AI Search.
  • Conexiones de Contenido Fluidas: Mejora tus aplicaciones RAG cerrando la brecha entre modalidades, haciendo que incluso documentos complejos como PDFs con tipos de contenido mixtos sean completamente buscables y contextualmente relevantes.

Introducción: Datos Diversos Impulsan la IA

La recuperación multimodal representa un desafío significativo en los sistemas modernos de IA. Los sistemas de recuperación tradicionales luchan por buscar eficazmente entre diferentes tipos de datos sin metadatos o etiquetas extensas. Esto es particularmente problemático para las empresas de atención médica que manejan grandes volúmenes de contenido diverso, incluyendo texto, imágenes, audio y más, lo que a menudo resulta en fuentes de datos no estructuradas.

Una imagen que compara datos no estructurados y estructurados.
Figura 1: Estas fuentes no se comunican bien entre sí, especialmente si provienen de diferentes sistemas

Cualquiera que trabaje en atención médica entiende la dificultad de fusionar datos no estructurados con datos estructurados. Un ejemplo común de esto es la documentación clínica, donde las notas clínicas escritas a mano o los resúmenes de alta de los pacientes a menudo se envían en PDF, imágenes y formatos similares. Esto debe convertirse manualmente o procesarse utilizando Reconocimiento Óptico de Caracteres (OCR) para encontrar la información necesaria. Incluso después de este paso, debe mapear los datos a sus datos estructurados existentes para utilizarlos de manera efectiva.

Para este blog, revisaremos lo siguiente:

  1. Cómo cargar modelos multimodales de código abierto en Databricks
  2. Usar el modelo de código abierto para generar incrustaciones en datos no estructurados
  3. Almacenar estas incrustaciones en un Índice de Búsqueda Vectorial (AWS | Azure | GCP)
  4. Usar Genie Spaces (AWS | Azure | GCP) para consultar nuestros datos estructurados
  5. Usar DSPy para crear un agente de llamada a múltiples herramientas que utiliza Genie Space y el Índice de Búsqueda Vectorial para responder a la entrada

Al final de este blog, verá cómo las incrustaciones multimodales permiten lo siguiente para la atención médica:

  1. Datos más diversos al usar todo en un PDF, no solo el texto
  2. La flexibilidad de usar cualquier dato juntos. En atención médica, esto es especialmente valioso ya que es posible que no sepa con qué tipo de datos necesitará trabajar
  3. Unificación de datos a través de un Agente, lo que permite una respuesta más completa
Una idea conceptual de cómo sus datos pueden unificarse a través de Agentes e Incrustaciones Multimodales
Figura 2: Una idea conceptual de cómo sus datos pueden unificarse a través de Agentes e Incrustaciones Multimodales

¿Qué es una Incrustación?

Un espacio de incrustación (AWS | Azure | GCP) es una representación matemática n-dimensional de registros que permite que una o más modalidades de datos se almacenen como vectores de números de punto flotante. Lo que hace que eso sea útil es que, en un espacio de incrustación bien construido, los registros de significado similar ocupan un espacio similar. Por ejemplo, imaginemos que teníamos la imagen de un caballo, la palabra “camión” y una grabación de audio de un perro ladrando. Pasamos estos tres puntos de datos completamente diferentes a nuestro modelo de incrustación multimodal y obtenemos lo siguiente:

  • Imagen de caballo: [0.92, 0.59, 0.17]
  • “Camión”: [0.19, 0.93, 0.81]
  • Perro ladrando: [0.94, 0.11, 0.86]

Aquí hay una representación visual de dónde existirían los números en un espacio de incrustación:

Una representación 2D de datos de alta dimensionalidad en un espacio de incrustación.

En la práctica, las dimensiones del espacio de incrustación estarán en los cientos o miles, pero para ilustrar, usemos un espacio de 3. Podemos imaginar que la primera posición en estos vectores representa “animalidad”, la segunda “transportación” y la tercera “ruidosidad”. Eso tendría sentido dados los vectores, pero típicamente, no sabemos qué representa cada dimensión. Lo importante es que representan el significado semántico de los registros.

Hay varias formas de crear un espacio de incrustación multimodal, incluyendo el entrenamiento de múltiples codificadores simultáneamente (como CLIP), el uso de mecanismos de atención cruzada (como DALL-E), o el uso de varios métodos de alineación post-entrenamiento. Estos métodos permiten que el significado del registro trascienda la modalidad original y ocupe un espacio compartido con otros registros o formatos dispares.

Este espacio semántico compartido es lo que permite potentes capacidades de búsqueda intermodal. Cuando una consulta de texto y una imagen comparten representaciones vectoriales similares, es probable que compartan significados semánticos similares, lo que nos permite encontrar imágenes relevantes basadas en descripciones textuales sin etiquetas o metadatos explícitos.

Modelos de Incrustación Multimodal: Compartiendo Espacios de Incrustación

Para implementar eficazmente la búsqueda multimodal, necesitamos modelos que puedan generar incrustaciones para diferentes tipos de datos dentro de un espacio vectorial compartido. Estos modelos están diseñados específicamente para comprender las relaciones entre diferentes modalidades y representarlas en un espacio matemático unificado.

Varios modelos potentes de incrustación multimodal están disponibles a partir de junio de 2025:

  • Multimodal Embed 4 de Cohere: Un modelo versátil que se destaca en la incrustación de datos de texto e imagen con alta precisión y rendimiento.
  • Nomic-Embed: Ofrece sólidas capacidades para incrustar varios tipos de datos en un espacio unificado. Es uno de los pocos modelos completamente de código abierto.
  • Meta ImageBind: Un modelo impresionante que puede manejar seis modalidades diferentes, incluyendo imágenes, texto, audio, profundidad, térmico y datos IMU.
  • CLIP (Preentrenamiento contrastivo de lenguaje e imagen): Desarrollado por OpenAI, CLIP se entrena con una amplia gama de pares de imágenes y texto y puede cerrar eficazmente la brecha entre los datos visuales y textuales.

Consideraciones Clave de Arquitectura

En Databricks, proporcionamos la infraestructura y las herramientas para alojar, evaluar y desarrollar una solución de extremo a extremo, personalizable a su caso de uso. Considere los siguientes escenarios al comenzar a implementar este caso de uso:

Escalabilidad y Rendimiento

  • Las opciones de procesamiento deben seleccionarse en función del tamaño del conjunto de datos: procesamiento en memoria para conjuntos de datos más pequeños o trabajo de desarrollo, frente a Model Serving (AWS | Azure | GCP) para cargas de trabajo de producción que requieren alto rendimiento
    • Databricks Vector Storage Optimized endpoints vs. Standard endpoints (AWS | Azure | GCP). Si tienes muchos vectores, considera los optimizados para almacenamiento para guardar más vectores (alrededor de 250M+)

    Consideraciones de Costo

    • Para implementaciones a gran escala, servir modelos de incrustación y usar AI Query (AWS | Azure | GCP) para inferencia por lotes es más eficiente que el procesamiento en memoria.
    • Determina si necesitas una actualización activada o continua para tu AI Search Index (AWS | Azure | GCP)
    • Nuevamente, considera los endpoints optimizados para almacenamiento frente a los endpoints estándar.
    • Puedes rastrear estos costos con el SKU de Inferencia en Tiempo Real Serverless
    • Considera usar Políticas de Presupuesto (AWS | Azure | GCP) para asegurarte de que estás rastreando con precisión tu consumo

    Excelencia Operacional

    • Usa pipelines y flujos de trabajo (AWS | Azure | GCP) y Databricks Asset Bundles (AWS | Azure | GCP) en Databricks para detectar cambios en los datos de origen y actualizar las incrustaciones en consecuencia
    • Usa AI Search Delta Sync (AWS | Azure | GCP) para automatizar completamente la sincronización con tu índice, sin necesidad de gestionar pipelines
    • AI Search maneja fallos, reintentos y optimizaciones automáticamente para garantizar la fiabilidad.

    Consideraciones de Red y Seguridad

    • Usa Databricks Compliance Profiles (AWS | Azure | GCP) para el cumplimiento de HIPAA en tu espacio de trabajo
    • Usa Databricks Secret Manager o Key Management Systems para gestionar tus secretos
    • Por favor, revisa la explicación de confianza y seguridad (AWS | Azure | GCP) en nuestra documentación para saber cómo Databricks maneja tus datos para servicios gestionados de IA.

    Desglose de la Solución Técnica

    Para la implementación completa de esta solución, visita este repositorio aquí: Enlace de Github

    Este ejemplo utilizará información sintética de pacientes como nuestros datos estructurados y explicaciones de beneficios de muestra en formato PDF como nuestros datos no estructurados. Primero, se generan datos sintéticos para usar con un Genie Space. Luego, se carga un modelo de incrustación multimodal Nomic, un modelo de incrustación multimodal de código abierto de última generación, en Databricks Model Serving para generar incrustaciones en explicaciones de beneficios de muestra encontradas en línea.

    Este proceso suena complicado, pero Databricks proporciona herramientas integradas que permiten una solución completa de extremo a extremo. A nivel general, el proceso se ve así:

    1. Ingesta a través de Autoloader (AWS | Azure | GCP)
    2. ETL con Lakeflow Declarative Pipelines (AWS | Azure | GCP)
    3. Creación de Embeddings con modelos de incrustación multimodales alojados en Databricks
    4. Alojamiento de las incrustaciones en un índice de AI Search (AWS | Azure | GCP)
    5. Servicio con Model Serving (AWS | Azure | GCP)
    6. Framework de Agente para asegurar, desplegar y gobernar el Agente

    Creación de Genie Space

    Este Genie Space se utilizará como una herramienta para convertir lenguaje natural en una consulta SQL para consultar nuestros datos estructurados.

    Paso 1: Generar Datos Sintéticos de Pacientes

    En este ejemplo, se utilizará la librería Faker para generar información aleatoria de pacientes. Crearemos dos tablas para diversificar nuestros datos: Visitas de Pacientes y Ubicaciones de Práctica, con columnas como razones de visita, proveedores de seguros y tipos de seguros.

    Paso 2: Crear un Espacio Genie de Información del Paciente

    Para consultar datos usando lenguaje natural, podemos utilizar un Databricks Genie Space (AWS | Azure | GCP) para convertir nuestra consulta en lenguaje natural y recuperar datos relevantes del paciente. En la interfaz de usuario de Databricks, simplemente haga clic en la pestaña Genie en la barra izquierda → Nuevo → seleccione las tablas patient_visits y practice_locations.

    Usuarios de negocios interactuando con datos usando lenguaje natural en un espacio Genie.

    Necesitamos el ID del Espacio Genie para capturar el número que sigue a rooms. Puede ver un ejemplo a continuación:

    Paso 3: Crear la función que representará la Herramienta Genie que usará nuestro Agente.

    Dado que estamos usando DSPy, todo lo que necesitamos hacer es definir una función de Python.

    ¡Eso es todo! Ahora configuremos el flujo de trabajo de Generación Multi-Modal.

    Generación de Embeddings Multi-Modales

    Para este paso, utilizaremos el modelo totalmente abierto colNomic-embed-multimodal-7b en HuggingFace para generar embeddings para nuestros datos no estructurados, en este caso, PDFs. Seleccionamos el modelo de Nomic debido a su licencia Apache 2.0 y su alto rendimiento en benchmarks.

    El método para generar sus embeddings variará según su caso de uso y modalidad. Revise las Mejores Prácticas de Búsqueda Vectorial de Databricks (AWS | Azure | GCP) para comprender qué es lo mejor para su caso de uso.

    Paso 1: Cargar, Registrar y Servir el modelo en Databricks

    Necesitamos que este modelo esté disponible dentro de Unity Catalog (UC) de Databricks, por lo que usaremos MLflow para cargarlo desde Huggingface y registrarlo. Luego, podemos implementar el modelo en un punto final de servicio de modelos.

    El modelo de Python incluye lógica adicional para manejar entradas de imágenes, que se puede encontrar en el repositorio completo.

    UC Volumes están diseñados como sistemas de archivos para alojar cualquier archivo y es donde almacenamos nuestros datos no estructurados. Puede usarlos en el futuro para almacenar otros archivos, como imágenes, y repetir el proceso según sea necesario. Esto incluye el modelo anterior. En el repositorio, verá que la caché se refiere a un volumen.

    Paso 2: Cargar nuestros PDFs en una lista

    Tendrá una carpeta llamada sample_pdf_sbc que contiene algunos resúmenes de beneficios y cobertura de ejemplo. Necesitamos preparar estos PDFs para incrustarlos.

    Paso 3: Convertir sus PDFs a Imágenes para ser incrustadas por el modelo colNomic.

    El modelo colNomic-embed-multimodal-7b está entrenado específicamente para reconocer texto e imágenes dentro de una imagen, una entrada común de los PDFs. Esto permite que el modelo funcione excepcionalmente bien al recuperar estas páginas.

    Este método le permite utilizar todo el contenido dentro de un PDF sin necesidad de una estrategia de fragmentación de texto para garantizar que la recuperación funcione de manera efectiva. El modelo en sí puede incrustar estas imágenes bien en su propio espacio de embedding.

    Usaremos pdf2image para convertir cada página del PDF en una imagen, preparándola para el embedding.

    Paso 4: Generar los Embeddings

    Ahora que tenemos las imágenes de los PDF, podemos generar los embeddings. Al mismo tiempo, podemos guardar los embeddings en una tabla Delta con columnas adicionales que recuperaremos junto con nuestra Búsqueda Vectorial, como la ruta del archivo a la ubicación del Volumen.

    Paso 5: Crear un índice y un punto final de búsqueda vectorial

    La creación de un índice de búsqueda vectorial se puede realizar a través de la interfaz de usuario o de la API. A continuación se muestra el método de la API.

    Ahora solo necesitamos unirlo todo con un Agente.

    Uniendo los datos con DSPy

    Usamos DSPy para esto debido a su diseño declarativo y de Python puro. Nos permite iterar y desarrollar rápidamente, probando varios modelos para ver cuáles funcionarán mejor para nuestro caso de uso. Lo más importante es que la naturaleza declarativa nos permite modularizar nuestro Agente para que podamos aislar la lógica del Agente de las herramientas y centrarnos en definir CÓMO el agente debe completar su tarea.

    ¿Y la mejor parte? ¡Nada de ingeniería de prompts manual!

    Paso 1: Define tus dspy.Signatures

    Esta firma especifica y aplica las entradas y salidas, y también explica cómo debe funcionar la firma.

    Paso 2: Añade tu firma a un dspy.module

    El módulo tomará las instrucciones de la firma y creará un prompt óptimo para enviar al LLM. Para este caso de uso en particular, construiremos un módulo personalizado llamado `MultiModalPatientInsuranceAnalyzer()`.

    Este módulo personalizado dividirá las firmas en pasos, casi como si se encadenaran llamadas, en el método forward. Seguimos este proceso:

    1. Toma las firmas definidas anteriormente e inicialízalas en la clase
    2. Define tus herramientas. Solo necesitan ser una función de Python
      1. Para esta publicación, crearás una herramienta de Búsqueda Vectorial y una herramienta de Genie Space. Ambas herramientas utilizarán el SDK de Databricks para realizar una llamada a la API a estos servicios.
      2. Define tu lógica en el método forward. En nuestro caso, sabemos que necesitamos extraer palabras clave, acceder al índice de Búsqueda Vectorial y luego pasar todo a la llamada final del LLM para obtener una respuesta.

    Paso 3: ¡Todo listo! ¡Ahora ejecútalo!

    Revisa qué herramientas utilizó el Agente y el razonamiento que siguió el Agente para responder la pregunta.

    Próximos pasos

    Una vez que tengas un Agente funcionando, recomendamos lo siguiente:

    1. Utiliza los Agentes Personalizados de Agent Bricks para implementar tus agentes en puntos de conexión de agentes y gestionarlos/versionarlos usando Unity Catalog
    2. Utiliza el Marco de Evaluación de Agentes de Databricks (AWS | Azure | GCP) para realizar evaluaciones y asegurarte de que tus agentes cumplen tus expectativas

    El marco de evaluación será crucial para comprender la eficacia con la que el índice de Búsqueda Vectorial recupera información relevante para tu agente RAG. Siguiendo estas métricas, sabrás dónde realizar ajustes, desde cambiar el modelo de incrustación hasta ajustar los prompts que interactúan con el LLM.

    También deberías monitorizar si la API de Modelos Fundacionales (AWS | Azure | GCP) es suficiente para tu caso de uso. En cierto punto, alcanzarás los límites de la API para las APIs de Modelos Fundacionales, por lo que necesitarás pasar a Throughput Provisionado (AWS | Azure | GCP) para tener un punto de conexión más fiable para tu LLM.

    Además, vigila de cerca tus costes frente al servicio de modelos sin servidor (AWS | Azure | GCP). La mayoría de estos costes se originarán en el servicio de modelos sin servidor de la SKU de Databricks y pueden aumentar a medida que escales.

    Consulta estos blogs para entender cómo hacer esto en Databricks.

    Además, los Arquitectos de Soluciones de Entrega de Databricks (DSAs) (Delivery Solutions Architects) ayudan a acelerar las iniciativas de Datos e IA en las organizaciones. Los DSAs proporcionan liderazgo arquitectónico, optimizan las plataformas en cuanto a coste y rendimiento, mejoran la experiencia del desarrollador e impulsan la ejecución exitosa de proyectos. Sirven de puente entre la implementación inicial y las soluciones de nivel de producción, trabajando en estrecha colaboración con varios equipos, incluyendo ingeniería de datos, líderes técnicos, ejecutivos y otras partes interesadas para garantizar soluciones personalizadas y un valor más rápido. Ponte en contacto con tu equipo de cuenta de Databricks para obtener más información.


    ¡Empieza creando tu propia App GenAI! Consulta la documentación para empezar.

    En Databricks, tienes todas las herramientas que necesitas para desarrollar esta solución de extremo a extremo. Consulta los blogs a continuación para obtener información sobre cómo gestionar y trabajar con tu nuevo Agente con los Agentes Personalizados de Agent Bricks.

    (Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original

Recibe las últimas publicaciones en tu bandeja de entrada

Suscríbete a nuestro blog y recibe las últimas publicaciones directamente en tu bandeja de entrada.