En el mundo actual basado en datos, la capacidad de recuperar información precisa incluso de cantidades modestas de datos es vital para los desarrolladores que buscan soluciones optimizadas y efectivas para implementaciones rápidas, creación de prototipos o experimentación.
Uno de los desafíos clave en la recuperación de información es administrar las diversas modalidades en conjuntos de datos no estructurados, incluidos texto, archivos PDF, imágenes, tablas, audio, video, etc.
Los modelos multimodales de IA abordan este desafío procesando simultáneamente múltiples modalidades de datos, generando una salida cohesiva y completa en diferentes formas. NIM NVIDIA los microservicios simplifican el despliegue seguro y confiable de la IA modelos de fundación para el lenguaje, visión por computadora, habla, biología y más.
Los microservicios NIM se pueden implementar en la infraestructura acelerada por NVIDIA en cualquier lugar y exponer las API estándar de la industria para una rápida integración con aplicaciones y marcos de desarrollo de IA populares, incluidos LangChain y LlamaIndex.
Esta publicación te ayuda a comenzar a construir un modelo de lenguaje de visión (VLM) basado, multimodal, sistema de recuperación de información capaz de responder a consultas complejas que involucran texto, imágenes y tablas. Lo guiamos a través de la implementación de una aplicación utilizando LangGraph, el estado del arte llama-3.2-90b-visión-instruct VLM, el optimizado mistral-pequeño-24B-instruct modelo de lenguaje grande (LLM) y NVIDIA NIM para implementación.

Este método de construcción de sistemas simples de recuperación de información ofrece varias ventajas sobre los tradicionales. El último microservicio VLM NIM permite una mejor comprensión contextual mediante el procesamiento de documentos visuales largos y complejos sin sacrificar la coherencia. La integración de Llamadas a herramientas de LangChaina permite al sistema crear herramientas, seleccionar y utilizar dinámicamente herramientas externas y mejorar la precisión de la extracción e interpretación de datos de diversas fuentes.
Este sistema es bueno para aplicaciones empresariales porque genera salidas estructuradas, asegurando consistencia y confiabilidad en las respuestas. Para obtener más información sobre los pasos de implementación de este sistema, consulte el /NVIDIA/GenerativeAIExamples Repo gitHub.
Una simple tubería de recuperación multimodal HTML
El sistema consta de las siguientes tuberías:
- Ingestión y preprocesamiento de documentos: Ejecuta un VLM en las imágenes y las traduce en texto.
- Pregunta-respuesta: Permite al usuario hacer preguntas sobre el sistema.
Ambas tuberías integran NVIDIA NIM y LangGraph para procesar y comprender texto, imágenes, visualizaciones complejas y tablas de manera efectiva.
Tubería de ingestión y preprocesamiento de datos
Esta etapa analiza documentos para procesar texto, imágenes y tablas por separado. Las tablas se convierten primero en imágenes, y las imágenes son procesadas por el punto final de la API de microservicio NIM alojado en NVIDIA para que el VLM llama-3.2-90b-vision-instruct genere texto descriptivo.
A continuación, en el paso de reconstrucción del documento, el texto descriptivo se fusiona con el texto original del documento, luego se resume en un LLM con modelado de contexto largo capacidad. En esta implementación, llama-3.2-90b-vision-instruct también se usa como LLM, aunque también se pueden implementar otros LLM como mistral-small-24b-instruct.
Finalmente, el texto completo, los resúmenes, las imágenes y sus descripciones se almacenan en una base de datos NoSQL, junto con identificadores de documentos únicos.

LLM con modelado de contexto largo puede procesar documentos completos sin fragmentación, mejorando la comprensión del documento en una sola pasada y capturando relaciones y matices en tramos más largos de texto, lo que lleva a una recuperación de información más precisa.
Por el contrario, los modelos tradicionales pueden manejar entradas de hasta unos pocos miles de tokens, lo que requiere que los documentos largos se dividan en trozos más pequeños para que quepan dentro de la ventana de contexto de las modelaciones. Este proceso de procesamiento puede alterar la coherencia y el contexto, lo que dificulta la recuperación precisa y la clasificación de la información relevante.
Sin embargo, el modelado de contexto largo presenta desafíos relacionados con la escalabilidad y el costo, que deben tenerse en cuenta al negociar con mayor precisión.
tubería QA
Todos los resúmenes de documentos y sus identificadores se compilan en un mensaje grande. Cuando se envía una consulta, a LLM con modelado de contexto largo (mistral-small-24b-instruct en este caso) procesa la pregunta, evalúa la relevancia de cada resumen para la consulta y devuelve los identificadores de los documentos más relevantes.

A continuación, los documentos más relevantes se introducen en un LLM con un contexto largo (mistral-small-24b-instruct). El modelo genera una respuesta a la consulta basada en el contenido textual. Si el modelo identifica que una imagen puede contener información pertinente basada en su texto descriptivo, se activa un paso adicional: la imagen original y la pregunta de los usuarios se envían al VLM (llama-3.2-90b-vision-instruct), que puede proporcionar una respuesta basada en el contenido visual real.
Finalmente, el sistema combina ideas textuales y visuales para ofrecer una respuesta integral.
Las salidas estructuradas aseguran que los datos devueltos por el modelo se ajusten a un formato predefinido, lo que facilita la extracción de información específica y la realización de operaciones posteriores. Por el contrario, las salidas no estructuradas o variables pueden introducir ambigüedades y dificultades para analizar las respuestas de los modelos, lo que dificulta la automatización y la integración con otros sistemas.
La generación de datos estructurados a partir de modelos generalmente requiere instrucciones cuidadosamente diseñadas para guiar al modelo a responder en un formato particular, como JSON. Sin embargo, garantizar una adherencia constante a esta estructura puede ser un desafío debido a la tendencia natural de models’ a generar texto de forma libre.
NVIDIA NIM ahora es compatible de forma nativa capacidades para generar salidas estructuradas. Esto significa que puede confiar en las funcionalidades integradas para asegurarse de que las respuestas de las modelaciones estén formateadas de manera consistente, lo que reduce la necesidad de una ingeniería rápida compleja.
Integración de NVIDIA NIM con LangGraph
NVIDIA NIM ofrece una compatibilidad perfecta con marcos populares y los últimos modelos de IA para sus aplicaciones. La implementación de la tubería integra NVIDIA NIM con LangGraph, un marco para construir aplicaciones agentic para determinar el flujo de control, que ha sido ampliamente adoptado por la comunidad de desarrolladores. Para orquestar el flujo de trabajo de esta tubería, el gráfico consta principalmente de dos nodos:
- Nodo asistente: Sirve como agente responsable de gestionar la lógica y el proceso de toma de decisiones. Interactúa con las entradas de los usuarios e invoca las herramientas necesarias.
- Nodo de herramientas: Una colección de herramientas que realizan tareas específicas requeridas por el asistente.

Nodo asistente
El nodo asistente es un agente primario que opera de acuerdo con el flujo de trabajo descrito en la Figura 3. El código del agente principal se puede encontrar en el /NVIDIA/GenerativeAIExamples Repo gitHub.
Aquí están las entradas del agente:
Collection_name
: El conjunto de documentos en los que buscar.Question
: La pregunta de los usuarios.document_id
: (Opcional) Si se proporciona, el agente omite la fase de clasificación del documento.
Este es el proceso del agente:
- Selección de documentos: Si
document_id
no se proporciona, el agente invoca elfind_best_document_id
herramienta, que identifica el documento más relevante para la pregunta de los usuarios dentro de la colección especificada. - Pregunta respondiendo: Con
document_id
, el agente usa elquery_document
herramienta. Esta herramienta intenta responder a la pregunta utilizando el LLM (mistral-small-24b-instruct) basado en las descripciones de texto e imagen dentro del documento. - Análisis de imágenes (si es necesario): Si el
query_document
la herramienta indica que la respuesta podría estar en una imagen (devolviendo unimage_hash
valor), el agente invoca elquery_image
herramienta. Esta herramienta recupera la imagen real y utiliza un VLM para analizar la imagen y encontrar la respuesta.
Nodo de herramientas
Implementamos tres herramientas clave para que el agente realice sus tareas.
Find_best_document_id
: Identifique el documento más relevante para la pregunta de los usuarios cuandodocument_id
no se proporciona. Para obtener más información, consulte el /NVIDIA/GenerativeAIExamples Repo gitHub.query_document
: Busque una respuesta dentro del documento especificado. Si la respuesta puede estar en una imagen, proporciona detalles para consultar la imagen. Para obtener más información, consulte el /NVIDIA/GenerativeAIExamples Repo gitHub.query_image
: Analice la imagen real usando un VLM cuando la respuesta podría estar dentro del contenido de la imagen. Para obtener más información, consulte el /NVIDIA/GenerativeAIExamples.
Encuadernación de herramientas externas con modelos
Llamada de herramienta es una característica que permite a los modelos de lenguaje integrarse e interactuar con herramientas o funciones externas en función de las indicaciones que reciben. Este mecanismo permite a un modelo decidir qué herramientas usar y cómo usarlas para realizar tareas específicas.
Encuadernación de herramientas permite que los modelos amplíen sus capacidades dinámicamente, seleccionando las herramientas apropiadas durante la ejecución para proporcionar respuestas más precisas y conscientes del contexto.
Las herramientas externas vinculantes son particularmente cruciales en los marcos de agentes, donde los agentes deben elegir las herramientas apropiadas y proporcionar los argumentos necesarios para realizar tareas de manera efectiva. Los beneficios de las herramientas externas vinculantes incluyen lo siguiente:
- Capacidades extendidas: Los modelos pueden realizar operaciones complejas como cálculos, recuperación de datos o llamadas API, que van más allá de la mera generación de texto.
- Selección dinámica de herramientas: El modelo puede evaluar en tiempo real qué herramientas son las más adecuadas para la tarea, mejorando la eficiencia y la relevancia.
- Integración perfecta: NVIDIA NIM apoya la integración de herramientas externas, como LangChain y LangGraph, con modelos de comunidad abierta como Llama 3.3. Puede adoptar estas funciones avanzadas sin realizar cambios significativos en sus sistemas existentes.
En esta implementación, use LangChainainss @decorador de herramientas para crear tres herramientas, utilice el .bind_herramientas método para enlazar las herramientas con modelos.
Definición de salidas estructuradas con Pydantic
Definiendo el esquema de salida con Pidántico y guiando un microservicio LLM NIM como la instalación mistral-small-24b a través de indicaciones precisas, se asegura de que las respuestas sean consistentes, confiables y fácilmente consumibles por otros componentes dentro del sistema. Este enfoque es esencial cuando se integra el LLM en flujos de trabajo automatizados y marcos basados en agentes como LangGraph.
Definir la estructura
El proceso comienza definiendo la estructura de la salida que espera del LLM usando Pydantic. Esto garantiza que los datos devueltos por el modelo sean consistentes y se puedan analizar fácilmente procesamiento aguas abajo.
from typing import List , Optional from pydantic import BaseModel, Field class Document(BaseModel): """ Represents a document with an identifier and its summary. """ id : str = Field(..., description = "Hash identifier of the document" ) summary: str = Field(..., description = "The summary of the document as is" ) class BestDocuments(BaseModel): """ Contains a list of the best documents to answer the question and their summaries. """ documents: List [Document] = Field(..., description = "List of best documents" ) class Answer(BaseModel): """ Represents the answer to the user's question. """ answer: str = Field(..., description = "Answer to the question posed by the user" ) |
A continuación, indique al LLM que genere salidas que se alineen con las estructuras Pydantic definidas. Esto se logra incorporando instrucciones específicas dentro del mensaje y utilizando LangChainays with_structured_output
método.
Defina el mensaje
El prompt_document_expert
contiene instrucciones detalladas para el LLM, especificando el formato de entrada esperado (Markdown con resúmenes de documentos) y el formato de salida requerido (JSON que coincide con el LLM BestDocuments
esquema).
from langchain.chat_models import ChatNVIDIA from langchain.prompts import ChatPromptTemplate # Initialize the LLM with desired parameters llm = ChatNVIDIA(model = "mistralai / mistral - small - 24b - instruct ", temperature = 0 , max_tokens = 3000 ) # Define the prompt template for the document expert prompt_document_expert = ChatPromptTemplate.from_messages( [ ( "system" , f """ # Extract Best Document Identifier from list of summaries, based on a question coming from the user. You are an expert in getting insights of a document, based on its summaries and you are able to figure the best matches to the question in terms of the summary of the document. Provide no more than 3 of these documents. ## Format of the Input - The input is a markdown file containing second level headers (##) with the chapter index in the form ## Document <document_id> where document_id is an integer pointing to the index of the document. After the document heading there is the summary of the document which is relevant to understand the content of the document. ## Format of the output - The output is going to be the list of the best documents indices and a few of the corresponding summaries that help to answer the question coming from the user. ## Content - Here is the input you can work on: {{documents_context}} """ , ), ( "human" , "Can you tell me what are the most relevant document ids for this question: {question}" ), ( "human" , "Tip: Make sure to answer in the correct format" ), ] ) |
Preparar contexto
El get_context
la función prepara los datos de entrada recuperando resúmenes de documentos y formateándolos adecuadamente.
def get_context(input_data: dict ) - > dict : collection_name = input_data.get( "collection_name" ) question = input_data.get( "question" ) documents_context = get_document_summaries_markdown(collection_name) # print(context) return { "documents_context" : documents_context, "collection_name" : collection_name, "question" : question} |
Vincular la salida estructurada
El llm.with_structured_output(BestDocuments)
el método instruye al LLM para producir una salida conforme a la BestDocuments
Modelo pydantic. Este método maneja internamente el análisis y la validación de la respuesta LLMm, asegurando que la salida coincida con la estructura esperada.
LangChainin with_structured_output
el método simplifica el proceso de unión del modelo para producir salidas estructuradas. Abstrae la complejidad de analizar y validar las respuestas LLMm, lo que le permite centrarse en definir la estructura de salida deseada y las instrucciones rápidas.
Finalmente, cree una cadena para procesar la entrada y generar la salida estructurada:
chain_document_expert = ( RunnableLambda(get_context) | prompt_document_expert | llm.with_structured_output(BestDocuments) | ( lambda x: x. dict ()) ) |
Herramienta de extremo a extremo en acción
Para comenzar con el sistema de recuperación multimodal, clone el /NVIDIA/GenerativeAIExamples Repo de GitHub y siga la guía de Inicio rápido para configurar el servicio. Cuando esté en funcionamiento, abra su navegador web y navegue hasta http://localhost:7860 para acceder al sistema a través de la interfaz de usuario de Gradio.
Por ejemplo, explore cómo el sistema procesa las consultas en el Blog Técnico de NVIDIA. Haga una pregunta sobre un gráfico de barras que muestra el rendimiento de la GPU NVIDIA H100 de una de las publicaciones. El Seleccione Pregunta el campo es para fines de evaluación, con el Respuesta de la Verdad Fundamental valor de campo proporcionado por un ser humano.

Este sistema genera una respuesta precisa basada en el gráfico de barras y también muestra la imagen relevante como referencia, como el gráfico que muestra RetinaNet alcanzando el 54%. Esto garantiza respuestas precisas al tiempo que permite a los usuarios verificar visualmente los datos referenciados.

https://www.youtube-nocookie.com/embed/z4g-juAaxRY?feature=oembed&iv_load_policy=3&modestbranding=1&rel=0&autohide=1&playsinline=0&autoplay=0Vídeo 1. Cómo Insertar Documentos HTML en una Colección Multimodal de Retriever Usando NVIDIA NIM
https://www.youtube-nocookie.com/embed/3tZVGJX9GMw?feature=oembed&iv_load_policy=3&modestbranding=1&rel=0&autohide=1&playsinline=0&autoplay=0Vídeo 2. Cómo Buscar Texto e Imágenes Dentro de una Colección Multimodal de Retriever Usando NVIDIA NIM
Desafíos y soluciones
A medida que aumentan los volúmenes de datos, también lo hace la complejidad de procesar y recuperar información relevante. Manejar grandes conjuntos de datos de manera eficiente es esencial para mantener el rendimiento y garantizar la satisfacción del usuario. En este sistema de recuperación de información, la gran cantidad de resúmenes de documentos puede exceder la ventana de contexto de incluso los modelos de contexto largo, lo que dificulta el procesamiento de todos los resúmenes en un solo mensaje.
El procesamiento de grandes volúmenes de datos también exige recursos computacionales considerables, lo que puede resultar en mayores costos y una mayor latencia. Optimizar la utilización de los recursos es crucial para ofrecer respuestas rápidas y precisas al tiempo que se minimizan los gastos innecesarios.
Solución de reordenamiento de documentos jerárquicos
Para abordar los desafíos de escalabilidad, implementamos un enfoque jerárquico en la fase inicial de clasificación del documento. En lugar de procesar todos los resúmenes de documentos simultáneamente, los dividimos en lotes manejables que se ajustan a la ventana de contexto de modelaciones. El proceso implica múltiples etapas:
- Procesamiento por lotes: Los resúmenes se agrupan en lotes que el modelo puede manejar sin exceder las limitaciones de tamaño rápido.
- Reclasificación intermedia: El modelo evalúa cada lote por separado, clasificando los documentos dentro de cada grupo.
- Selección de los mejores candidatos: Los documentos más relevantes de cada lote se seleccionan para pasar a la siguiente etapa.
- Reclasificación final: Los principales candidatos de todos los lotes se combinan y reevaluan para identificar el documento más relevante.
Teniendo en cuenta tanto la escalabilidad como las preocupaciones de costos, este enfoque jerárquico garantiza que todos los documentos se consideren sin exceder la capacidad de los modelos. No solo mejora la escalabilidad, sino que también aumenta la eficiencia al reducir sistemáticamente los documentos candidatos hasta que se identifique el más relevante.
Perspectivas futuras con modelos más pequeños
El uso de modelos de lenguaje, especialmente aquellos con capacidades de contexto largo, implica el procesamiento de una gran cantidad de tokens, lo que puede incurrir en costos significativos. Cada token procesado se suma al gasto general, lo que hace que la administración de costos sea una consideración crítica al implementar estos sistemas a escala.
La preocupación por el costo es realmente válida. Sin embargo, el panorama de los modelos de lenguaje está evolucionando rápidamente, con modelos más pequeños cada vez más capaces y eficientes. A medida que estos avances continúan, estos modelos más pequeños pueden ofrecer un rendimiento similar a una fracción del costo.
Conclusión
Esta publicación discutió la implementación de una tubería simple de recuperación de información multimodal que utiliza NVIDIA NIM y LangGraph. La tubería ofrece varias ventajas sobre los métodos de recuperación de información existentes:
- Comprensión mejorada de los documentos
- Un modelo multimodal para extraer información de imágenes, tablas y texto
- Integración perfecta de herramientas externas
- Generación de resultados consistentes y estructurados
Usando NVIDIA NIM y LangGraph, puede construir sobre este trabajo y personalizarlo para satisfacer necesidades específicas. Para comenzar, puede encontrar el código fuente en el /NVIDIA/GenerativeAIExamples Repo gitHub.
NIM NVIDIA también ofrece acceso a más modelos optimizados para GPU NVIDIA. Puedes explorar NeMo NVIDIA, un escalable IA generativa marco diseñado para investigadores y desarrolladores de PyTorch que trabajan en LLM, modelos multimodales y más.
Si está trabajando con grandes cuerpos de datos empresariales y está buscando desarrollar datos en tiempo real listos para la empresa sistemas de recuperación de información multilingüe e interlingüística para generar respuestas conscientes del contexto, aprenda más sobre NeMo Retriever NVIDIA.
Recursos relacionados
- sesión de GTC: Planos para el Éxito: Navegar por los Flujos de Trabajo de los Agentes NIM para la Recuperación Multimodal del Mundo Real
- sesión de GTC: Cómo Construir Sistemas de Recuperación de IA Agéntica Multimodal
- sesión de GTC: Modelos de Lenguaje de Visión en NVIDIA
- Contenedores NGC: Servicio de Inferencia VLM (Jetson)
- Contenedores NGC: Llama-3.2-90B-Instructo-Visión
- Contenedores NGC: NVIDIA Recuperación QA Mistral 7B Incrustación v2
NVIDIA Blog. F. C., Z. M., D. G. e I. S. Traducido al español