En este tutorial, utilizará Docling de IBM e IBM Granite Vision de código abierto, modelos de incorporación basados en texto y modelos de IA generativa para crear un sistema RAG. Estos modelos están disponibles a través de diversos entornos de código abierto. En este tutorial, emplearemos Replicate para conectarnos a los modelos de visión e IA generativa de IBM Granite y HuggingFace para conectarnos al modelo de incorporación.
La generación aumentada por recuperación (RAG, por sus siglas en inglés) es una técnica utilizada con modelos de lenguaje grandes (LLM) para conectar el modelo con una base de conocimientos de información fuera de los datos con los que se ha entrenado el LLM sin tener que realizar ajustes finos. El RAG tradicional se limita a casos de uso basados en texto, como el resumen de texto y los chatbots.
RAG multimodal puede usar LLM multimodales (MLLM) para procesar información de múltiples tipos de datos que se incluirán como parte de la base de conocimientos externa utilizada en RAG. Los datos multimodales pueden incluir texto, imágenes, audio, video u otros formatos. 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.
Bienvenido a este tutorial de Granite. En este tutorial, aprenderá a aprovechar el poder de las herramientas avanzadas para crear un pipeline de RAG multimodal impulsado por IA. Este tutorial le guiará a través de los siguientes procesos:
Este tutorial utiliza tres tecnologías de punta:
Al final de este tutorial, logrará lo siguiente:
Este tutorial está diseñado para desarrolladores de IA, investigadores y entusiastas que buscan mejorar su conocimiento de la gestión de documentos y técnicas avanzadas de procesamiento de lenguaje natural. El tutorial también se puede encontrar en el Granite Snack Cookbook GitHub de la comunidad IBM Granite en forma de 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: Está bien omitir la ejecución de esta celda.
Especifique el modelo de incorporación que se utilizará para generar vectores de incorporación de texto. Aquí utilizaremos uno de los modelos de incorporación de Granite.
Para utilizar un modelo de incorporación diferente, sustituya esta celda de código por una de esta receta de modelo de incorporación.
Especifique el MLLM que se utilizará para la comprensión de imágenes. Usaremos el modelo de visión Granite.
Especifique el modelo de lenguaje que se utilizará para la operación de generación de RAG. Aquí utilizamos el cliente Replicate LangChain para conectarnos a un modelo Granite desde la organización ibm-granite en Replicate.
Para configurar Replicate, consulte Introducción a 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 originales, utilizamos Docling para convertir los documentos en texto e imágenes. Luego, el texto se divide en fragmentos. Las imágenes son procesadas por el MLLM para generar resúmenes de imágenes.
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, procedemos a procesar los elementos de texto que contienen. Los dividimos en tamaños apropiados para el modelo de incorporación que estamos usando. Se crea una lista de documentos LangChain a partir de los fragmentos de texto.
A continuación, procesamos todas las tablas de los documentos. Convertimos los datos de la tabla a formato markdown para pasar al modelo de lenguaje. Se crea una lista de documentos LangChain a partir de las representaciones de markdown de la tabla.
Finalmente, procesamos cualquier imagen en 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 llevar mucho tiempo dependiendo de la cantidad de imágenes y del servicio que ejecuta el modelo de lenguaje de visión.
Luego podemos mostrar los documentos LangChain creados a partir de los documentos de entrada.
Usando el modelo de incorporación, cargamos los documentos de los fragmentos de texto y generamos los subtítulos de imagen en una base de datos vectorial. La creación de esta base de datos vectorial nos permite realizar fácilmente una búsqueda de similitud semántica en nuestros documentos.
NOTA: La población de la base de datos vectorial puede llevar algún tiempo dependiendo de su modelo de incorporación y servicio.
Especifique la base de datos que se utilizará para almacenar y recuperar vectores de incorporación.
Para conectarse a una base de datos vectorial distinta a Milvus, sustituya esta celda de código por una de esta receta de almacén de vectores.
Ahora agregamos todos los documentos LangChain para el texto, las tablas y las descripciones de imágenes a la base de datos vectorial.
Ahora que hemos convertido correctamente nuestros documentos y los hemos vectorizado, podemos configurar el pipeline de 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 con la descripción de la imagen recuperada.
Siéntase libre de probar diferentes consultas.
El documento devuelto debe responder a la consulta. Avancemos y construyamos nuestro pipeline de 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 la tubería RAG de LangChain reemplazará.
A continuación, construimos el pipeline de RAG mediante las plantillas de instrucciones 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']))
¡Impresionante! Hemos creado una aplicación de IA que puede aprovechar con éxito el conocimiento del texto y las imágenes de los documentos de origen.
Entrene, valide, ajuste y despliegue IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de próxima generación para creadores de IA. Diseñe aplicaciones de IA en menos tiempo y con menos datos.
Ponga la IA a trabajar en su negocio con la experiencia en IA líder en la industria y la cartera de soluciones de IBM a su lado.
Reinvente los flujos de trabajo y las operaciones críticas añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.