Perché scegliere i modelli Llama 3.2 Vision per RAG?
La famiglia Llama 3.2 introduce una potente serie di modelli che combinano comprensione visiva e linguistica. I due modelli più grandi, 11B e 90B, sono progettati specificamente per gestire compiti complessi in cui è necessario comprendere insieme informazioni visive e testuali.
Questi modelli eccellono nella lettura e nell'analisi di grafici, diagrammi e tabelle, risultando perfetti per estrarre insight che i modelli solo-testuali faticano a cogliere. Per esempio, un imprenditore potrebbe chiedere «Quale mese dell'anno scorso ha avuto il profitto più alto?» e Llama 3.2 guarderebbe il grafico della redditività per fornire la risposta corretta.
Inoltre, i modelli possono individuare oggetti nelle immagini in base a descrizioni. Che si tratti di riconoscere punti di riferimento su una mappa o identificare tendenze in un grafico, Llama 3.2 lo gestisce con facilità.
Llama 3.2 non solo è all'altezza dei principali concorrenti come Claude 3 Haiku e GPT4o-mini, ma offre prestazioni equivalenti in attività come il riconoscimento di immagini e la comprensione visiva, come dimostrato nei benchmark instruction-tuned per la visione. La sua capacità di lavorare con testo e immagini consente conversazioni più naturali e flessibili che mescolano informazioni visive e scritte, rendendolo ideale per un'ampia gamma di casi d'uso.

Fonte: Meta AI
Con queste funzionalità avanzate, i modelli Llama 3.2 Vision aprono nuove possibilità per le applicazioni RAG. Rendono molto più semplice ricavare insight da fonti di dati complesse come i PDF, combinando elementi visivi e testo per risultati più accurati e utili.
Come implementare RAG con Llama 3.2 Vision usando Ollama e ColPali
Per configurare un'applicazione RAG con Llama 3.2 Vision, dobbiamo scaricare il modello Llama 3.2 Vision, predisporre l'ambiente, installare le librerie necessarie e creare un sistema di retrieval. Di seguito trovi una guida semplice e passo dopo passo per implementare un'applicazione RAG usando Llama 3.2 Vision e ColPali.
Nota: i passaggi seguenti sono stati testati su un notebook Colab Pro con istanza A100.
Passaggio 1: Scarica le dipendenze
Per prima cosa, assicurati di avere installato le dipendenze richieste:
!pip install byaldi
!sudo apt-get install -y poppler-utils
!pip install -q git+https://github.com/huggingface/transformers.git qwen-vl-utils flash-attn optimum auto-gptq bitsandbytes
!pip install ollama
!pip install colab-xterm
La libreria byaldi è essenziale per indicizzare e cercare all'interno di documenti multimodali, mentre altri strumenti come poppler-utils sono necessari per la gestione dei PDF.
Passaggio 2: Carica il modello RAG ColPali
ColPali è un metodo che migliora il recupero dei documenti incorporando direttamente le immagini delle pagine, come i PDF scansionati, invece di basarsi esclusivamente sul testo estratto. Usando modelli avanzati visione-linguaggio come PaliGemma e un meccanismo di retrieval a interazione tardiva, ColPali gestisce in modo efficiente elementi visivi complessi (tabelle, immagini e grafici) per una ricerca nei documenti più accurata e veloce.
Useremo ColPali per codificare i nostri PDF in embedding. Puoi caricare il RAGMultiModalModel di ColPali come segue:
import os
import base64
from byaldi import RAGMultiModalModel
RAG = RAGMultiModalModel.from_pretrained("vidore/colpali-v1.2", verbose=1)
Passaggio 3: Indicizza un documento PDF di esempio
Scaricheremo il celebre paper Attention is All You Need e creeremo un indice con RAGMultiModalModel. Questo passaggio elabora il documento, estraendo dati visivi e testuali per un recupero rapido.
!wget <https://arxiv.org/pdf/1706.03762>
!mkdir docs
!mv 1706.03762 docs/attention.pdf
RAG.index(
input_path="./docs/attention.pdf",
index_name="attention",
store_collection_with_index=True, # Store base64 representation of images
overwrite=True
)
Added page 1 of document 0 to index.
Added page 2 of document 0 to index.
Added page 3 of document 0 to index.
Added page 4 of document 0 to index.
Added page 5 of document 0 to index.
Added page 6 of document 0 to index.
Added page 7 of document 0 to index.
Added page 8 of document 0 to index.
Added page 9 of document 0 to index.
Added page 10 of document 0 to index.
Added page 11 of document 0 to index.
Added page 12 of document 0 to index.
Added page 13 of document 0 to index.
Added page 14 of document 0 to index.
Added page 15 of document 0 to index.
Index exported to .byaldi/attention
Index exported to .byaldi/attention
{0: 'docs/attention.pdf'}
Passaggio 4: Cerca nel documento indicizzato
Una volta indicizzato il documento, puoi recuperare facilmente i contenuti pertinenti come segue:
query = "What's the BLEU score of the transformer architecture in EN-DE"
results = RAG.search(query, k=1)
results
[{'doc_id': 0, 'page_num': 8, 'score': 19.0, 'metadata': {}, 'base64': 'iVBORw0KGgoAAAANSUhEUgAABqQAAAiYCAIAAAA+NVHkAAEAAElEQVR4nOzdd1gUx/8H8KGDoC....'}]
Questo recupera la pagina o l'elemento visivo più rilevante dal PDF indicizzato.
Passaggio 5: Mostra l'immagine recuperata
Per visualizzare la pagina recuperata, possiamo salvare l'immagine su file e mostrarla come segue:
from IPython.display import Image
def see_image(image_base64):
image_bytes = base64.b64decode(image_base64)
filename = 'image.jpg'
with open(filename, 'wb') as f:
f.write(image_bytes)
display(Image(filename))
# For multiple retrieved pages
for res in results:
see_image(res['base64'])

Come puoi vedere, la pagina recuperata contiene le informazioni necessarie per rispondere alla domanda What's the BLEU score of the transformer architecture in EN-DE. Il passo successivo è fornire questa immagine al nostro modello Llama 3.2 Vision insieme alla domanda dell'utente.
Passaggio 6: Configura il modello Llama 3.2 Vision per il reasoning
Per installare e configurare il modello Llama 3.2 Vision, useremo Ollama all'interno di un notebook Colab Pro con istanza A100. Eseguirai Ollama nel notebook e scaricherai il modello Llama 3.2 Vision per l'uso.
%load_ext colabxterm
%xterm
%xterm creerà un terminale all'interno del notebook, dal quale potrai scaricare Ollama con questo comando curl -fsSL <https://ollama.com/install.sh> | sh e poi eseguire il seguente comando per scaricare ed eseguire il modello Llama 3.2 11B Vision.
ollama serve & ollama run llama3.2-vision
Passaggio 7: Esegui l'inferenza
Dopo aver scaricato ed eseguito correttamente il modello Llama 3.2 11B Vision, possiamo connetterci ad esso usando la libreria ollama come segue. Nota che qui abbiamo salvato la pagina recuperata in image.jpg, che forniamo insieme alla domanda dell'utente al modello Llama 3.2 11B Vision.
import ollama
response = ollama.chat(
model='llama3.2-vision',
messages=[{
'role': 'user',
'content': "What's the BLEU score of the transformer architecture in EN-DE",
'images': ['image.jpg']
}]
)
print(response['message']['content'])
The table shows that the BLEU score for the transformer (base model) on the EN-DE task is 27.3. The BLEU score for the transformer (big) on the same task is 28.4.
Therefore, the BLEU score of the transformer architecture in EN-DE is **28.4**.
Passaggio 8: Mettere tutto insieme
Possiamo combinare il retrieval di ColPali e il codice di inferenza di Ollama nella funzione inference qui sotto. Questa funzione recupera la pagina più pertinente dal documento, la passa al modello vision insieme alla query e restituisce una risposta.
def inference(question: str):
results = RAG.search(question, k=1) # Retrieve relevant data
see_image(results[0]['base64']) # Save and display image
response = ollama.chat(
model='llama3.2-vision',
messages=[{
'role': 'user',
'content': question,
'images': ['image.jpg']
}]
)
return response['message']['content']
# Example queries
inference_result = inference("Please explain figure 1")
print(inference_result)
The Transformer model is a type of neural network architecture that was introduced in the paper "Attention Is All You Need" by Vaswani et al. in 2017. It has since become one of the most widely used architectures for natural language processing tasks, such as machine translation, text summarization, and question answering.
**What is a Transformer?**
A Transformer is a type of neural network that uses self-attention mechanisms to process input sequences, such as sentences or paragraphs. Unlike traditional recurrent neural networks (RNNs), which rely on sequential processing of inputs, Transformers can process all input elements simultaneously using parallelized attention modules.
**How does the Transformer work?**
The Transformer consists of an encoder and a decoder. The encoder takes in a sequence of tokens (e.g., words or characters) as input and produces a continuous representation of the input sequence. This representation is then fed into the decoder, which generates output sequences one token at a time.
**Key Components:**
* **Self-Attention Mechanism:** This mechanism allows the model to attend to different parts of the input sequence simultaneously and weigh their importance.
* **Multi-Head Attention:** The Transformer uses multiple attention heads to process different aspects of the input sequence in parallel, improving the model's ability to capture complex relationships between tokens.
* **Positional Encoding:** To incorporate positional information into the input sequence, the Transformer uses a positional encoding scheme that adds a learned vector to each token based on its position in the sequence.
**Advantages:**
* **Parallelization:** The Transformer can process all input elements simultaneously, making it much faster than traditional RNNs.
* **Flexibility:** The Transformer can handle sequences of varying lengths and is particularly effective for tasks involving long-range dependencies.
**Applications:**
The Transformer has been widely adopted in various natural language processing applications, including:
* Machine Translation
* Text Summarization
* Question Answering
* Sentiment Analysis
In summary, the Transformer model is a powerful neural network architecture that uses self-attention mechanisms to process input sequences efficiently and effectively. Its ability to parallelize attention modules has made it a popular choice for many natural language processing tasks.

Proviamo un'altra query:
inference_result = inference("What's the maximum path length of recurrent layer type")
print(inference_result)
The table provided in the image shows that for a Recurrent Layer, the Maximum Path Length is O(n). This means that as the number of nodes (n) in the network increases, the maximum path length also increases linearly with it.
Therefore, the maximum path length of a recurrent layer type is O(n).
*Answer*: O(n)

Llama 3.2 Vision: applicazioni nel mondo reale
La capacità di Llama 3.2 Vision di combinare comprensione visiva e testuale lo rende ideale per una varietà di applicazioni reali.
In sanità, Llama 3.2 Vision può migliorare l'accuratezza diagnostica analizzando immagini mediche, come radiografie e risonanze, insieme alle cartelle cliniche. Questa combinazione di dati visivi e testuali supporta i medici nel prendere decisioni più informate e velocizza la ricerca clinica, con benefici concreti per l'assistenza ai pazienti.
Llama 3.2 Vision può anche migliorare l'esperienza d'acquisto combinando immagini dei prodotti, recensioni testuali e richieste dei clienti. Questo permette consigli più personalizzati e un percorso d'acquisto su misura, aumentando coinvolgimento e soddisfazione.
Nel settore legale, Llama 3.2 Vision aiuta i professionisti a recuperare e riassumere rapidamente informazioni da contratti, giurisprudenza e documenti scansionati. Può persino interpretare elementi visivi complessi come diagrammi processuali o annotazioni sui documenti, fornendo insight preziosi per l'analisi giuridica e il decision-making.
Infine, Llama 3.2 Vision può supportare gli ambienti di apprendimento interpretando ausili visivi come diagrammi e grafici e collegandoli a spiegazioni testuali chiare e in tempo reale. Questo rende i contenuti didattici più interattivi, aiutando studenti e professionisti a imparare in modo più efficace.
Conclusioni
Con ColPali e i modelli Llama 3.2 Vision puoi costruire un potente sistema RAG in grado di comprendere e ragionare su PDF che contengono dati visivi e testuali complessi. Questa combinazione apre possibilità per applicazioni che vanno dall'analisi di documenti alla generazione automatica di report, risultando molto utile nei workflow di AI multimodale.
Ryan è un lead data scientist specializzato nello sviluppo di applicazioni di IA con LLM. È dottorando in Elaborazione del Linguaggio Naturale e Knowledge Graph all’Imperial College London, dove ha anche conseguito la laurea magistrale in Informatica. Oltre alla data science, scrive una newsletter settimanale su Substack, The Limitless Playbook, in cui condivide un’idea pratica dei migliori pensatori al mondo e, di tanto in tanto, scrive sui concetti fondamentali dell’IA.



Gli approcci RAG tradizionali faticano con documenti ricchi di elementi visivi come i PDF. Spesso non riescono a interpretare elementi visivi complessi come immagini, tabelle e grafici, rendendo più difficile estrarre informazioni utili da questi formati.
Qui entrano in gioco i modelli vision Llama 3.2. Questi avanzati modelli multimodali aggiungono potenti capacità di ragionamento sulle immagini, consentendo ai sistemi di AI di elaborare sia testo che dati visivi. Con Llama 3.2 Vision, RAG può ora gestire la complessità dei PDF: dall'analisi di tabelle dettagliate all'interpretazione di grafici, offrendo risposte più accurate e significative.
In questo articolo ti spiegherò perché Llama 3.2 Vision è la soluzione ideale a queste sfide e ti guiderò nell'implementazione con ColPali usando il modello Llama 3.2 11B Vision.