In questo tutorial, utilizzerai Docling di IBM e IBM Granite vision open source, embedding basati su testo e modelli di IA generativa per creare un sistema RAG. Questi modelli sono disponibili tramite vari framework open source. In questo tutorial, useremo Replicate per connetterci ai modelli IBM Granite vision e ai modelli di AI generativa, e HuggingFace per connetterci al modello di embedding.
La retrieval-augmented generation (RAG) è una tecnica utilizzata con modelli linguistici di grandi dimensioni (LLM) per collegare il modello a una base di conoscenza di informazioni al di fuori dei dati su cui l'LLM è stato addestrato senza dover effettuare una messa a punto. La RAG tradizionale è limitata a casi d'uso basati su testo, come la sintesi e i chatbot.
La RAG multimodale può utilizzare LLM multimodali (MLLM) per elaborare informazioni provenienti da diversi tipi di dati da includere come parte della knowledge base esterna utilizzata nella RAG. I dati multimodali possono includere testo, immagini, audio, video o altre forme. Tra i più popolari LLM multimodali troviamo Gemini di Google, Llama 3.2 di Meta e GPT-4 e GPT-4o di OpenAI.
Per questa ricetta utilizzerai un modello IBM Granite in grado di elaborare diverse modalità. Creerai un sistema AI per rispondere alle domande degli utenti in tempo reale da dati non strutturati in un PDF.
Benvenuti a questo tutorial su Granite. In questo tutorial, impareremo come sfruttare la potenza di strumenti avanzati per costruire una pipeline RAG multimodale basata sull'AI. Questo tutorial ti guiderà attraverso i seguenti processi:
Questo tutorial utilizza tre tecnologie all'avanguardia:
Al termine di questo tutorial sarai in grado di:
Questo tutorial è pensato per sviluppatori, ricercatori ed appassionati di AI che desiderano approfondire le proprie conoscenze sulla gestione documentale e sulle tecniche avanzate di elaborazione del linguaggio naturale (NLP). Il tutorial è disponibile anche nel Granite Snack Cookbook GitHub della IBM Granite Community sotto forma di 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::"
Per visualizzare alcune informazioni di registrazione, possiamo configurare il livello di registro INFO.
NOTA: se vuoi, puoi saltare l'esecuzione di questa cella.
Specifica il modello di embedding da utilizzare per generare vettori di embedding di testo. Qui useremo uno dei modelli di Granite Embeddings
Per usare un modello di embedding diverso, sostituisci questa cella di codice con una di queste istruzioni del modello di Embedding.
Specifica l'MLLM da usare per la comprensione delle immagini. Useremo il modello Granite Vision.
Specifica il modello linguistico da utilizzare per l'operazione di generazione RAG. Qui usiamo il client Replicate LangChain per collegarci a un modello Granite dall'org ibm-granite su Replicate.
Per la configurazione con Replicate, vedi Guida introduttiva a Replicate. Per connettersi a un modello su un provider diverso da Replicate, sostituisci questa cella di codice con una delle istruzioni del componente LLM.
Per connettersi a un modello su un provider diverso da Replicate, sostituisci questa cella di codice con una delle istruzioni 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.
},
)
In questo esempio, a partire da un insieme di documenti sorgente, utilizziamo Docling per convertire i documenti in testo e immagini. Il testo viene poi suddiviso in parti. Le immagini vengono elaborate dall'MLLM per generare riepiloghi delle immagini.
Docling scaricherà i documenti PDF e li elaborerà così da poter ottenere il testo e le immagini contenuti nei documenti. Nel PDF sono presenti diversi tipi di dati, tra cui testo, tabelle, grafici e immagini.
Una volta elaborati i documenti, elaboriamo ulteriormente gli elementi di testo presenti nei documenti. Li suddividiamo in dimensioni appropriate per il modello di embedding che stiamo usando. Un elenco di documenti LangChain viene creato dai blocchi di testo.
Successivamente elaboriamo tutte le tabelle nei documenti. Convertiamo i dati della tabella in formato markdown per passarli nel modello linguistico. Un elenco di documenti LangChain viene creato a partire dai rendering markdown della tabella.
Infine elaboriamo tutte le immagini nei documenti. Qui utilizziamo il modello linguistico della visione per comprendere il contenuto di un'immagine. In questo esempio, ci interessa qualsiasi informazione testuale presente nell'immagine. Puoi provare a sperimentare prompt diversi per vedere come migliorare i risultati.
NOTA: L'elaborazione delle immagini può richiedere molto tempo a seconda del numero di immagini e del servizio che il modello linguistico visivo esegue.
Possiamo quindi visualizzare i documenti LangChain creati dai documenti di input.
Utilizzando il modello di embedding, carichiamo i documenti dai blocchi di testo e generiamo la didascalia delle immagini in un database vettoriale. Creare questo database vettoriale ci permette di condurre facilmente una ricerca di similarità semantica tra i nostri documenti.
NOTA: la popolazione del database vettoriale può richiedere un po' di tempo a seconda del modello di embedding e del servizio.
Specifica il database da utilizzare per memorizzare e recuperare i vettori di embedding.
Per collegarti a un database vettoriale diverso da Milvus, sostituisci questa cella di codice con una di queste istruzioni di Vector Store.
Ora aggiungiamo tutti i documenti LangChain per le descrizioni di testo, tabelle e immagini al database vettoriale.
Ora che abbiamo convertito e vettorializzato con successo i nostri documenti, possiamo impostare la nostra pipeline RAG.
Qui testiamo il database vettoriale cercando blocchi con informazioni rilevanti per la nostra query nello spazio vettoriale. Mostriamo i documenti associati alla descrizione dell'immagine recuperata.
Puoi provare query diverse.
Il documento restituito deve rispondere alla richiesta. Procediamo e costruiamo la nostra pipeline RAG.
Per prima cosa creiamo i prompt con cui Granite può eseguire la query RAG. Utilizziamo il modello di chat Granite e forniamo i valori segnaposto che la pipeline LangChain RAG sostituirà.
Successivamente, costruiamo la pipeline RAG utilizzando i modelli di prompt Granite creati in precedenza.
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,
)
La pipeline utilizza la query per individuare i documenti dal database vettoriale e utilizzarli come contesto per la query.
from ibm_granite_community.notebook_utils import wrap_text
output = rag_chain.invoke({"input": query})
print(wrap_text(output['answer']))
Fantastico! Abbiamo creato un'applicazione AI che può utilizzare con successo le conoscenze dal testo e dalle immagini dei documenti sorgenti.
Addestra, convalida, adatta e implementa le funzionalità di AI generativa, foundation model e machine learning con IBM watsonx.ai, uno studio aziendale di nuova generazione per builder AI. Crea applicazioni AI in tempi ridotti e con una minima quantità di dati.
Metti l'AI al servizio della tua azienda grazie all'esperienza leader di settore e alla gamma di soluzioni di IBM nel campo dell'AI.
Reinventa i flussi di lavoro e le operazioni critiche aggiungendo l'AI per massimizzare le esperienze, il processo decisionale in tempo reale e il valore di business.