En este tutorial, utilizará Docling de IBM y la visión de código abierto IBM Granite, embeddings basados en texto y modelos de IA generativa para crear un sistema RAG. Estos modelos están disponibles a través de varios marcos de código abierto. En este tutorial, utilizaremos Replicate para conectarnos a los modelos de visión y IA generativa de IBM Granite y HuggingFace para conectarnos al modelo de embeddings.
La generación aumentada por recuperación (RAG) es una técnica utilizada con modelos de lenguaje de gran tamaño (LLM) para conectar el modelo con una base de conocimiento de información fuera de los datos con los que se ha entrenado el LLM sin tener que realizar un ajustes precisos. La RAG tradicional se limita a casos de uso basados en texto, como el resumen de texto y los chatbots.
La RAG multimodal puede utilizar LLM multimodales (MLLM) para procesar información de múltiples tipos de datos que se incluirán como parte de la base de conocimiento externa utilizada en RAG. Los datos multimodales pueden incluir texto, imágenes, audio, vídeo u otras formas. Los LLM multimodales populares incluyen Gemini de Google, Llama 3.2 de Meta y GPT-4 y GPT-4o de OpenAI.
Para esta receta, utilizará un modelo IBM Granite capaz de procesar diferentes modalidades. Creará un sistema de IA para responder en tiempo real a las consultas de los usuarios a partir de datos no estructurados en un PDF.
Le damos la bienvenida a este tutorial de Granite. En este tutorial, aprenderá a aprovechar el poder de las herramientas avanzadas para construir un oleoducto RAG multimodal con IA. Este tutorial le guiará a través de los siguientes procesos:
Este tutorial utiliza tres tecnologías punta:
Al final de este tutorial, habrá logrado lo siguiente:
Este tutorial está diseñado para desarrolladores, investigadores y entusiastas de la IA que buscan ampliar sus conocimientos sobre gestión documental y técnicas avanzadas de procesamiento del lenguaje natural (PLN). El tutorial también se puede encontrar en el repositorio de GitHub "Granite Snack Cookbook" de la comunidad de IBM Granite, en formato Jupyter Notebook.
! echo "::group::Install Dependencies"
%pip install uv
! uv pip install git+https://github.com/ibm-granite-community/utils.git \
transformers \
pillow \
langchain_classic \
langchain_core \
langchain_huggingface sentence_transformers \
langchain_milvus 'pymilvus[milvus_lite]' \
docling \
'langchain_replicate @ git+https://github.com/ibm-granite-community/langchain-replicate.git'
! echo "::endgroup::"
Para ver información de registro, podemos configurar el nivel de registro INFO.
NOTA: Puede omitir la ejecución de esta celda.
Especifique el modelo de embedding que se utilizará para generar los vectores de embedding de texto. Aquí utilizaremos uno de los modelos de embedding de Granite
Para utilizar un modelo de embeddings diferente, sustituya esta celda de código por la correspondiente a la receta del modelo de embeddings.
Especifique el MLLM que se utilizará para la comprensión de imágenes. Utilizaremos el modelo de visión de Granite.
Especifique el modelo de lenguaje que se utilizará para la operación de generación de RAG. En este caso, utilizamos el cliente Replicate LangChain para conectarnos a un modelo Granite de la organización ibm-granite en Replicate.
Para configurarse con Replicate, consulte Getting Started with Replicate. Para conectarse a un modelo en un proveedor distinto de Replicate, sustituya esta celda de código por una de la receta del componente LLM.
Para conectarse a un modelo en un proveedor distinto de Replicate, sustituya esta celda de código por una de la receta del componente LLM.
from langchain_replicate import ChatReplicate
model_path = "ibm-granite/granite-4.0-h-small"
model = ChatReplicate(
model=model_path,
replicate_api_token=get_env_var("REPLICATE_API_TOKEN"),
model_kwargs={
"max_tokens": 1000, # Set the maximum number of tokens to generate as output.
"min_tokens": 100, # Set the minimum number of tokens to generate as output.
},
)
En este ejemplo, a partir de un conjunto de documentos fuente, utilizamos Docling para convertir los documentos en texto e imágenes. A continuación, el texto se divide en fragmentos. El MLLM procesa las imágenes para generar resúmenes.
Docling descargará los documentos PDF y los procesará para que podamos obtener el texto y las imágenes que contienen. En el PDF, hay varios tipos de datos, incluidos texto, tablas, gráficos e imágenes.
Una vez procesados los documentos, seguimos procesando los elementos de texto que contienen. Los dividimos en tamaños apropiados para el modelo de embeddings que estamos usando. A partir de los fragmentos de texto se crea una lista de documentos LangChain.
A continuación, procesamos las tablas de los documentos. Convertimos los datos de la tabla al formato Markdown para pasarlos al modelo de lenguaje. Se crea una lista de documentos de LangChain a partir de las renderizaciones de Markdown de la tabla.
Por último, procesamos las imágenes de los documentos. Aquí utilizamos el modelo de lenguaje de visión para comprender el contenido de una imagen. En este ejemplo, nos interesa cualquier información textual de la imagen. Es posible que desee experimentar con diferentes textos de instrucciones para ver cómo podrían mejorar los resultados.
NOTA: el procesamiento de las imágenes puede tardar mucho tiempo, en función del número de imágenes y del servicio que ejecute el modelo de lenguaje visual.
A continuación, podemos mostrar los documentos LangChain creados a partir de los documentos de entrada.
Mediante el modelo de embedding, cargamos los documentos, los fragmentos de texto y los subtítulos de imágenes generados en una base de datos vectorial. La creación de esta base de datos vectorial nos permite realizar fácilmente búsquedas de similitud semántica en todos nuestros documentos.
NOTA: la población de la base de datos vectorial puede tardar algún tiempo, en función del modelo de embedding y del servicio.
Especifique la base de datos que se utilizará para almacenar y recuperar vectores de embedding.
Para conectarse a una base de datos vectorial distinta de Milvus, sustituya esta celda de código por la que encontrará en la receta de este almacén de vectores.
Ahora añadimos todos los documentos LangChain para las descripciones de texto, tablas e imágenes a la base de datos vectorial.
Ahora que hemos convertido y vectorizado correctamente nuestros documentos, podemos configurar nuestro pipeline RAG.
Aquí probamos la base de datos vectorial buscando fragmentos con información relevante para nuestra consulta en el espacio vectorial. Mostramos los documentos asociados a la descripción de la imagen recuperada.
No dude en probar diferentes consultas.
El documento devuelto debe responder a la consulta. Vamos a construir nuestro pipeline RAG.
Primero creamos las instrucciones para que Granite realice la consulta RAG. Usamos la plantilla de chat de Granite y proporcionamos los valores provisionales que el pipeline RAG de LangChain reemplazará.
A continuación, construimos el pipeline RAG utilizando las plantillas de instrucción de Granite creadas anteriormente.
from ibm_granite_community.langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_classic.chains.retrieval import create_retrieval_chain
from langchain_core.prompts import ChatPromptTemplate
# Create a Granite prompt for question-answering with the retrieved context
prompt_template = ChatPromptTemplate.from_template("{input}")
# Assemble the retrieval-augmented generation chain
combine_docs_chain = create_stuff_documents_chain(
llm=model,
prompt=prompt_template,
)
rag_chain = create_retrieval_chain(
retriever=vector_db.as_retriever(),
combine_docs_chain=combine_docs_chain,
)
El pipeline utiliza la consulta para localizar documentos de la base de datos vectorial y utilizarlos como contexto para la consulta.
from ibm_granite_community.notebook_utils import wrap_text
output = rag_chain.invoke({"input": query})
print(wrap_text(output['answer']))
¡Genial! Hemos creado una aplicación de IA capaz de aprovechar con éxito los conocimientos del texto y las imágenes de los documentos fuente.
Entrene, valide, ajuste e implemente IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de nueva generación para desarrolladores de IA. Cree aplicaciones de IA en menos tiempo y con menos datos.
Ponga la IA a trabajar en su negocio con la experiencia líder en IA del sector de IBM y junto a su cartera de soluciones.
Reinvente las operaciones y flujos de trabajo críticos añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.