Neste tutorial, você usará o Docling da IBM e o IBM Granite Vision de código aberto, embeddings baseadas em texto e modelos de IA para criar um sistema RAG. Esses modelos estão disponíveis via vários frameworks de código aberto. Neste tutorial, usaremos Replicate para conectar aos modelos de visão do IBM Granite e IA generativa e HuggingFace para conectar ao embedding.
A geração aumentada de recuperação (RAG) é uma técnica usada com grandes modelos de linguagem (LLMs) para conectar o modelo a uma base de conhecimento de informações fora dos dados nos quais o LLM foi treinado sem precisar realizar ajuste fino. A RAG tradicional é limitada a casos de uso baseados em texto, como resumo de texto e chatbot.
A RAG multimodal pode usar LLMs multimodais (MLLM) para processar informações de vários tipos de dados a serem incluídos como parte da base de conhecimento externa usada na RAG. Dados multimodais podem incluir texto, imagens, áudio, vídeo ou outras formas. Os LLMs multimodais populares incluem o Gemini do Google, o Llama 3.2 da Meta e o GPT-4 e GPT-4o da OpenAI.
Para esta receita, você utilizará um modelo do IBM Granite capaz de processar diversas modalidades. Você criará um sistema de IA para responder a consultas de usuários em tempo real a partir de dados não estruturados em um PDF.
Boas-vindas a este tutorial do Granite. Neste tutorial, você aprenderá a aproveitar o poder de ferramentas avançadas para criar um pipeline RAG multimodal impulsionado por IA. Este tutorial guiará você pelos seguintes processos:
Este tutorial usa três tecnologias de ponta:
Até o final deste tutorial, você realizará o seguinte:
Este tutorial foi criado para desenvolvedores, pesquisadores e entusiastas da IA que buscam aprimorar seus conhecimentos sobre gerenciamento de documentos e técnicas avançadas de processamento de linguagem natural (NLP). O tutorial também pode ser encontrado no Granite Snack Cookbook GitHub da IBM Granite Community na forma de um 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 algumas informações de registro, podemos configurar o nível de log INFO.
OBSERVAÇÃO: não há problema em ignorar a execução dessa célula.
Especifique o modelo de embedding a ser usado para gerar vetores de embedding de texto. Aqui, usaremos um dos modelos Granite Embeddings
Para usar um modelo de embedding diferente, substitua esta célula de código por uma desta receita de Modelo de embedding.
Especifique o MLLM a ser usado para compreensão da imagem. Usaremos o modelo Granite Vision.
Especifique o modelo de linguagem a ser usado para a operação de geração de RAG. Aqui, usamos o cliente Replicate LangChain para se conectar a um modelo Granite a partir da organização ibm-granite no Replicate.
Para configurar o Replicate, consulte Introdução ao Replicate. Para conectar a um modelo em um provedor que não seja o Replicate, substitua esta célula de código por uma da receita do componente LLM.
Para conectar a um modelo em um provedor que não seja o Replicate, substitua esta célula de código por uma da receita do 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.
},
)
Neste exemplo, a partir de um conjunto de documentos de origem, usamos o Docling para converter os documentos em texto e imagens. O texto é, então, dividido em fragmentos. As imagens são processadas pelo MLLM para gerar resumos de imagens.
O Docling fará download dos documentos em PDF e os processará para que possamos obter o texto e as imagens contidos nos documentos. No PDF, existem vários tipos de dados, incluindo texto, tabelas, gráficos e imagens.
Com os documentos processados, processamos ainda mais os elementos de texto nos documentos. Nós os fragmentamos em tamanhos apropriados para o modelo de embeddings que estamos usando. Uma lista de documentos do LangChain é criada a partir dos fragmentos de texto.
Em seguida, processamos todas as tabelas dos documentos. Convertemos os dados da tabela em formato de remarcação para passar para o modelo de idioma. Uma lista de documentos do LangChain é criada a partir das renderizações de remarcação da tabela.
Por fim, processamos todas as imagens dos documentos. Aqui, usamos o modelo de linguagem da visão para entender o conteúdo de uma imagem. Neste exemplo, estamos interessados em qualquer informação textual na imagem. Talvez você queira experimentar textos de prompt diferentes para ver como isso pode melhorar os resultados.
OBSERVAÇÃO: o processamento das imagens pode demorar muito, dependendo do número de imagens e do serviço que executa o modelo de linguagem de visão.
Podemos, então, exibir os documentos do LangChain criados a partir dos documentos de entrada.
Usando o modelo de embedding, carregamos os documentos dos fragmentos de texto e legendas de imagens geradas para um banco de dados de vetores. A criação desse banco de dados de vetores nos permite realizar facilmente uma pesquisa de similaridade semântica entre nossos documentos.
OBSERVAÇÃO: o preenchimento do banco de dados de vetores pode levar algum tempo dependendo do modelo de embedding e do serviço.
Especifique o banco de dados a ser utilizado para armazenar e recuperar vetores de embedding.
Para conectar a um banco de dados de vetores diferente do Milvus, substitua esta célula de código por uma desta receita do armazenamento de vetores.
Agora adicionamos todos os documentos do LangChain para o texto, tabelas e descrições de imagem ao banco de dados de vetores.
Agora que convertemos e vetorizamos com sucesso nossos documentos, podemos configurar o pipeline RAG.
Aqui testamos o banco de dados de vetores procurando fragmentos com informações relevantes para nossa consulta no espaço vetorial. Exibimos os documentos associados à descrição da imagem recuperada.
Fique à vontade para testar diferentes consultas.
O documento devolvido deve responder à consulta. Vamos em frente construir nosso pipeline de RAG.
Primeiro, criamos os prompts para que o Granite realize a consulta de RAG. Usamos o modelo de bate-papo Granite e fornecemos os valores do espaço reservado que o pipeline de RAG LangChain substituirá.
Em seguida, construímos o pipeline de RAG utilizando os modelos de prompt do Granite criados 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,
)
O pipeline usa a consulta para localizar documentos do banco de dados de vetores e usá-los como contexto para a consulta.
from ibm_granite_community.notebook_utils import wrap_text
output = rag_chain.invoke({"input": query})
print(wrap_text(output['answer']))
Fantástico! Criamos uma aplicação de IA que pode aproveitar o conhecimento do texto e das imagens dos documentos de origem.
Treine, valide, ajuste e implemente recursos de IA generativa, modelos de base e recursos de aprendizado de máquina com o IBM watsonx.ai, um estúdio empresarial de última geração para construtores de IA. Crie aplicações de IA em uma fração do tempo com uma fração dos dados.
Use a IA a serviço de sua empresa com a experiência e o portfólio de soluções líder do setor da IBM à sua disposição.
Reinvente os fluxos de trabalho e operações críticos adicionando IA para maximizar experiências, tomadas de decisão em tempo real e valor de negócios.