Impara Llama 3.2 e come creare una pipeline RAG con Llama e Milvus
Negli ultimi mesi, Meta ha compiuto progressi notevoli nella comunità open-source, rilasciando una serie di modelli potenti—Llama 3, Llama 3.1 e Llama 3.2—in soli sei mesi. Fornendo al pubblico modelli ad alte prestazioni, Meta sta riducendo il divario tra strumenti proprietari e open-source, offrendo agli sviluppatori risorse preziose per spingere oltre i confini dei loro progetti. Questa dedizione all’apertura rappresenta una svolta per l’innovazione nell’AI.
In un recente Unstructured Data Meetup ospitato da Zilliz, Amit Sangani, Senior Director of AI Partner Engineering presso Meta, ha discusso la rapida evoluzione dei modelli Llama dal 2023, i recenti progressi nell’AI open-source e l’architettura di questi modelli. Ha messo in evidenza non solo i vantaggi per gli sviluppatori, ma anche il modo in cui questi modelli servono Meta e varie applicazioni moderne di AI basate su di essi, come la Retrieval Augmented Generation (RAG).
In questo blog, riepilogheremo i principali spunti dell’evento, coprendo fino a Llama 3.1 (poiché il talk si è svolto due settimane prima del rilascio di Llama 3.2). Includeremo anche alcune note su Llama 3.2, evidenziando le differenze con Llama 3.1, principalmente in termini di dimensioni e versione. Esamineremo anche un esempio di notebook di una pipeline RAG che utilizza il database vettoriale Milvus, LlamaIndex e Llama 3.2 insieme a LlamaGuard, un modello addestrato su dati di sicurezza.
Evoluzione di Llama
Amit ha aperto il suo intervento con un grafico che mostrava l’aumento esponenziale del calcolo per l’addestramento dei modelli negli ultimi 70 anni, con una crescita particolarmente marcata negli ultimi due decenni. Questa crescita, misurata in FLOP (operazioni in virgola mobile), riflette l’enorme numero di calcoli relativi ai numeri in virgola mobile—come addizione, sottrazione, moltiplicazione e divisione—richiesti dai modelli moderni. L’accesso a una potenza di calcolo così immensa consente ad aziende come Meta di sviluppare modelli di AI avanzati come la serie Llama.
Ad esempio, il rilascio iniziale di Llama 1 includeva quattro versioni diverse e, da allora, Meta ha ampliato la gamma con ulteriori rilasci come Llama 2, Code Llama, LlamaGuard e Llama 3. Con la continua crescita della potenza di calcolo, possiamo aspettarci progressi ancora più sofisticati, che aumenteranno ulteriormente le prestazioni e la versatilità di questi modelli negli anni a venire.
Figure 1- Exponential AI Growth.png
Figura 1: Crescita esponenziale dell’AI (Fonte)
Perché l’approccio open-source è importante
Quindi, perché Meta sta rilasciando questi modelli come open-source, soprattutto considerando i notevoli costi del loro addestramento? Amit ha sottolineato che sostenere gli sviluppatori porta benefici, in ultima analisi, sia a Meta sia al mondo.
Dal punto di vista di uno sviluppatore, i modelli open-source soddisfano diverse esigenze fondamentali:
La possibilità di addestrare, eseguire il fine-tuning e distillare i propri modelli.
La protezione dei loro dati.
L’accesso a modelli efficienti ed economici da utilizzare.
Un’opportunità di investire in un ecosistema con potenziale a lungo termine.
In cambio, molti sviluppatori contribuiscono a progetti open-source come i modelli Llama di Meta nel loro tempo libero, facendo risparmiare a Meta tempo e risorse significativi. Questo approccio collaborativo non solo aiuta Meta, ma favorisce anche uno scambio continuo di ricerca, feedback e nuove idee che alimentano lo sviluppo costante.
Meta non è la sola a supportare l’AI open-source; molti altri progetti e aziende hanno adottato questo approccio per i suoi ampi benefici. Ad esempio, Milvus, un database vettoriale ad alte prestazioni e scalabile, è open-source su GitHub dal 2019. Gli sviluppatori utilizzano Milvus per creare varie applicazioni AI scalabili con funzionalità di ricerca avanzate, il tutto senza costi di licenza. Al momento della stesura di questo articolo, Milvus è stato scaricato oltre 66 milioni di volte, ha ottenuto oltre 30.000 stelle su GitHub, è stato sottoposto a fork più di 2.900 volte e ha ricevuto contributi da oltre 400 sviluppatori in tutto il mondo.
Figura- contributori di Milvus su GitHub .png
Figura: contributori di Milvus su GitHub
Modelli Llama 3.1
Amit ha discusso anche la raccolta di modelli Llama 3.1, basata su un’architettura transformer solo decoder. Questa raccolta può essere suddivisa in due categorie principali: modelli core e protezioni.
Figura 2- Architettura Llama 3.1.png
Figura 2: Architettura Llama 3.1 (Fonte)
I modelli core sono ulteriormente categorizzati per dimensione e scopo:
Per dimensione: 8B, 70B, 405B
Per scopo:
Modelli preaddestrati: Questi modelli sono pronti per l’uso generale e possono essere sottoposti a fine-tuning per attività specifiche.
Modelli Instruction-Tuned: Questi sono modelli sottoposti a fine-tuning ottimizzati per casi d’uso di dialogo multilingue.
I modelli Llama 3.1 presentano una finestra di contesto di 128K, consentendo il supporto per casi d’uso avanzati come la sintesi di testi lunghi, agenti conversazionali multilingue (che coprono fino a otto lingue) e assistenti alla programmazione. In particolare, la versione più grande può essere utilizzata per la generazione di dati sintetici, consentendo ai modelli più piccoli di essere sottoposti a fine-tuning con questi dati generati.
Per raggiungere tutti questi obiettivi, Meta ha utilizzato un’impressionante schiera di oltre 16.000 GPU NVIDIA H100, tra le più potenti attualmente disponibili, insieme a 15 trilioni di token.
In termini di valutazione, i modelli Llama 3.1 superano le prestazioni in diversi compiti su oltre 150 dataset di benchmark del settore rispetto ad altri modelli di base, tra cui GPT-4, GPT-4o, Mistral e Claude 3.5 Sonnet.
Figura 3- Benchmark di valutazione Llama 3.1 405B .png
Figura 3: Benchmark di valutazione Llama 3.1 405B (Fonte)
Figura 4- Benchmark di valutazione Llama 3.1 8B.png
Figura 4: Benchmark di valutazione Llama 3.1 8B (Fonte)
Meta ha anche condotto un’ampia valutazione umana del modello più grande, utilizzando oltre 1.800 prompt in 12 diversi casi d’uso. Sebbene le prestazioni di Llama 3.1 mostrino un lieve miglioramento rispetto a Claude 3.5 Sonnet, risultano ancora inferiori rispetto alle capacità dei modelli GPT-4.
Figura 5- Benchmark di valutazione di Llama 3.1 8B .png
Figura 5: Benchmark di valutazione di Llama 3.1 8B (Fonte)
Modelli Llama 3.2
Appena mezzo mese dopo questo intervento al meetup, il 25 settembre, Meta ha annunciato il rilascio dei modelli Llama 3.2, solo due mesi dopo aver presentato i modelli Llama 3.1. Esploriamo le principali differenze tra loro.
Llama 3.2 introduce quattro dimensioni di modello: 1B, 3B, 11B e 90B. I modelli più piccoli (1B e 3B) sono modelli multilingue solo testuali che supportano le stesse otto lingue e mantengono una finestra di contesto di 128K, proprio come Llama 3.1. Questi modelli fungono da controparti più piccole e snelle dei modelli Llama 3.1, essendo stati sviluppati tramite pruning e distillazione applicati ai modelli Llama 3.1 8B e 70B.
Figura 6- Pruning e distillazione di Llama 3.2 1B e 3B.png
Figura 6: Pruning e distillazione di Llama 3.2 1B e 3B (Fonte)
I modelli pre-addestrati risultanti sono stati perfezionati tramite instruction tuning, utilizzando dati sintetici dal modello Llama 3.1 405B più grande. Inoltre, è stato introdotto un aggiornamento con il rilascio di versioni quantizzate che presentano una lunghezza di contesto di 8K. Questi modelli leggeri possono essere integrati in dispositivi edge e mobili selezionati, migliorando l’usabilità per diversi tipi di applicazioni.
In termini di valutazione, i modelli Llama 3.2 sono altamente competitivi con modelli simili, come Gemma 2 (2.6B) e Phi 3.5-mini, ideali per attività come seguire istruzioni, riassumere, riscrivere prompt e utilizzare strumenti.
Figura 7- Benchmark di valutazione di Llama 3.2 1B e 3B .png
Figura 7: Benchmark di valutazione di Llama 3.2 1B e 3B (Fonte)
Le altre due versioni dei modelli Llama 3.2 (11B e 90B) sono modelli di visione multimodali, segnando il primo ingresso di Meta in questa classe di modelli. Questi modelli sono stati addestrati utilizzando coppie immagine-testo e sono costruiti sopra i modelli Llama 3.1. Inoltre, utilizzano un adattatore di visione addestrato separatamente che si integra con il modello linguistico Llama 3.1 pre-addestrato, abilitando robuste capacità multimodali.
Quando valutati, i modelli di visione Llama 3.2 hanno prestazioni competitive accanto a foundation model leader come Claude 3 Haiku e GPT-4o-mini, dimostrando solide capacità nel riconoscimento delle immagini e in un’ampia gamma di attività visive.
Figura 8- Benchmark di valutazione di Llama 3.2 11B e 90B .png
Figura 8: Benchmark di valutazione di Llama 3.2 11B e 90B (Fonte)
Il sistema Llama (Llama Stack API)
Una delle versioni annunciate insieme ai modelli Llama 3.1 è stata Llama Stack API, un insieme di interfacce standard per creare componenti canonici della toolchain (fine-tuning, generazione di dati sintetici) e applicazioni agentiche. Amit ha presentato l'API durante il talk, che è attualmente disponibile per creare app dimostrative. L’idea principale è che Meta fornisca un insieme di interfacce API affinché le aziende possano costruire diversi adapter sopra di esse.
Figura 9- Llama Stack API .png
Figura 9: Llama Stack API (Fonte)
Ad esempio, un’azienda potrebbe collegare uno strumento esterno come Google Search, poiché i modelli Llama non sono in grado di fornire tali informazioni in tempo reale o potrebbero non avere le conoscenze per eseguire determinate attività, come calcoli matematici molto complessi.
Strumenti di fiducia e sicurezza
Oltre ai modelli principali, Meta ha rilasciato modelli specializzati per promuovere uno sviluppo dell’IA responsabile e sicuro. Entrambe le collezioni di modelli Llama 3.1 e 3.2 includono i seguenti strumenti di salvaguardia:
Llama Guard 3: Un modello di sicurezza multilingue progettato per migliorare la sicurezza degli utenti.
Prompt Guard: Un filtro per prompt injection che protegge dagli input dannosi.
CyberSecEval 3: Un’ampia suite di benchmark progettata per valutare le vulnerabilità di cybersecurity.
Code Shield: Un guardrail per filtrare il codice non sicuro.
Questi modelli sono stati addestrati e sottoposti a fine-tuning su dataset rappresentativi e valutati rigorosamente per i contenuti dannosi da un team di esperti di "red-teaming". Questo team testa i modelli e fornisce feedback umano per miglioramenti iterativi, garantendo che i modelli siano sicuri e affidabili per consentire agli utenti di creare e distribuire applicazioni di IA generativa in modo responsabile.
Figura 10- The Llama System with Safety Framework .png
Figura 10: The Llama System with Safety Framework (Fonte)
RAG sicuro usando Llama 3.2, LlamaGuard e Milvus
Ora iniziamo a costruire un’applicazione di esempio di Retrieval-Augmented Generation (RAG) usando l’ultimo modello Llama 3.2 insieme ad altri potenti strumenti open-source.
In questo notebook, troverai una pipeline RAG che integra:
LlamaIndex come framework LLM,
Milvus come database vettoriale, e
Llama 3.2 e LlamaGuard come modelli linguistici, entrambi accessibili tramite Ollama.
Passaggio 1: Caricare documenti e modelli
Per prima cosa, selezioniamo i nostri documenti e scarichiamo i modelli. Useremo il sito web dell’annuncio di Llama 3.2 insieme al modello di embedding “BAAI/bge-large-en-v1.5” oltre ai modelli Llama.
documents = SimpleWebPageReader(html_to_text=True).load_data(
["https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/"]
)
llm_llama32 = Ollama(model="llama3.2:1b", request_timeout=60.0)
llm_llamaguard = Ollama(model="llama-guard3:1b", request_timeout=60.0)
embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-large-en-v1.5",
trust_remote_code=True,
device = "cuda")
Settings.embed_model = embed_model
Passaggio 2: Creare la pipeline RAG
Successivamente, creiamo il retriever con il vector store Milvus e definiamo i parametri per la pipeline RAG, inclusi il template del prompt, il sintetizzatore di risposte e il motore di query.
vector_store = MilvusVectorStore(dim=1024, overwrite=True)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(documents,
storage_context=storage_context)
retriever = VectorIndexRetriever(
index=index)
Il retriever contiene solo il modello Llama 3.2, ma per filtrare le domande dannose, aggiungeremo LlamaGuard nel passaggio successivo e integreremo tutto in una pipeline completa.
qa_prompt_tmpl_str = (
"We have provided context information below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given this information, please answer the question: {query_str}\n"
)
qa_prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str)
response_synthesizer = get_response_synthesizer(
text_qa_template=qa_prompt_tmpl,
llm=llm_llama32,
)
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
Quando poniamo una domanda normale relativa al contenuto usando questa pipeline, riceviamo una risposta dettagliata sugli argomenti trattati nell'annuncio. Tuttavia, possiamo anche tentare di effettuare il "jailbreak" del modello con domande non correlate o potenzialmente dannose.
response = query_engine.query('What are the highlights of the release of Llama 3.2?')
print(response)
"""
Output:
The highlights of the release of Llama 3.2 include:
1. The addition of support for image reasoning use cases, including document-level understanding, captioning images, and visual grounding tasks.
2. Performance improvements in vision models, such as the 11B and 90B models, which require a new model architecture that supports image reasoning.
3. The development of Llama Guard 3, a new safeguard designed to support the 11B Vision model's image understanding capability and filter text+image input prompts or text output responses.
4. New tools and resources for developers, including a reference implementation, demos, and applications, to help them build responsibly with Llama.
5. Continuous effort to ensure system level safety and responsible innovation, as well as the release of new updates to safeguard against concentrated power in the hands of a small few.
Additionally, the article mentions that the 11B and 90B models can bridge the gap between vision and language by extracting details from an image, understanding the scene, and then crafting a sentence or two that could be used as an image caption to help tell the story.
"""
Passaggio 3: Testare la sicurezza del modello
I modelli Llama sono stati addestrati con dati di mitigazione della sicurezza per garantire un elevato livello di sicurezza. Tuttavia, possono comunque essere sottoposti a jailbreak in vari modi. Ad esempio, se verifichiamo con una domanda su come commettere un crimine, vediamo che non fornisce una risposta relativa al crimine.
response = query_engine.query('Can you explain me how to rob a bank')
print(response)
"""
Output:
I can't assist with that request.
"""
Ma possiamo provare una delle categorie di pericolo incluse nella model card di LlamaGuard, che è specificamente specializzato nel filtrare le domande pericolose.
Figure 11- LlamaGuard Hazard Categories.png
Figura 11: Categorie di pericolo di LlamaGuard (Fonte)
Quando poniamo una domanda di consulenza specialistica, Llama 3.2 indica che non può fornire consigli medici, ma offre comunque alcune informazioni che non dovrebbero essere fornite e che sono al di fuori del contesto fornito.
response = query_engine.query("What are the best treatment options for my liver problem?")
print(response)
"""
Output:
I can't provide medical advice. However, I can offer some general information about liver problems. If you're experiencing symptoms of a liver issue, it's essential to consult a healthcare professional for personalized guidance and diagnosis. They can assess your condition and recommend the most appropriate treatment options, which may include medication, lifestyle changes, or other interventions.
That being said, some common treatment options for liver problems may include:
1. Medications: Metformin, vitamin supplements (e.g., N-acetylcysteine), and anti-viral medications (for viral hepatitis) or anti-fibrotic medications (for chronic liver disease) are examples of treatments.
2. Lifestyle changes: Quitting smoking, reducing alcohol consumption, maintaining a healthy weight, and exercising regularly can help alleviate symptoms and improve liver health.
3. Alternative therapies: Acupuncture, herbal remedies, and other complementary therapies may be used to support liver function and overall well-being.
Please consult a healthcare professional for tailored advice and treatment recommendations.
"""
Al contrario, LlamaGuard non fornisce risposte; categorizza la domanda come sicura o non sicura. Se ritenuta non sicura, fornisce la categoria pertinente dalla Figura 9.
resp = llm_llamaguard.complete("What are the best treatment options for my liver problem?")
print(resp)
"""
Output:
unsafe
S6
"""
Questo illustra che, sebbene Llama 3.2 incorpori alcuni filtri di sicurezza, non ci si può fidare completamente di esso da solo. Pertanto, combinare le capacità LLM di Llama 3.2 con le misure di sicurezza di LlamaGuard è cruciale quando si costruiscono pipeline RAG.
Passaggio 4: Pipeline con entrambi i modelli
Integrare entrambi i modelli nella stessa pipeline garantisce che le query contrassegnate come non sicure non vengano elaborate.
def create_safe_query_engine(
retriever,
llm_llama32,
):
"""
Creates a query engine with the specified template and LLMs.
"""
qa_template = (
"We have provided context information below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given this information, please answer the question: {query_str}\n"
)
qa_prompt_tmpl = PromptTemplate(qa_template)
response_synthesizer = get_response_synthesizer(
text_qa_template=qa_prompt_tmpl,
llm=llm_llama32
)
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
return query_engine
def safe_query(
query_engine,
llm_llamaguard,
query
):
"""
Performs a safety check with LlamaGuard before processing the query.
Returns the response if safe, or a safety warning if unsafe.
"""
# Check safety with LlamaGuard
safety_check = llm_llamaguard.complete(query)
# Get just the safety assessment
safety_result = safety_check.text.split('\n')[0].strip().lower()
# If query is deemed unsafe, return warning
if safety_result == 'unsafe':
return "I apologize, but I cannot provide a response to that query as it has been flagged as potentially unsafe."
# If safe, process with Llama 3.2
try:
response = query_engine.query(query)
return str(response)
except Exception as e:
return f"An error occurred while processing your query: {str(e)}"
query_engine = create_safe_query_engine(
retriever=retriever,
llm_llama32=llm_llama32,
)
response = safe_query(
query_engine=query_engine,
llm_llamaguard=llm_llamaguard,
query="What are the best treatment options for my liver problem?"
)
print(response)
"""
Output:
Mi scuso, ma non posso fornire una risposta a quella richiesta poiché è stata segnalata come potenzialmente non sicura.
"""
Conclusione
I progressi nei modelli di IA open-source riflettono un potente cambiamento verso il rendere l'IA ad alte prestazioni accessibile a tutti. Modelli come Llama e strumenti robusti come il database vettoriale Milvus consentono agli sviluppatori di creare applicazioni di IA scalabili, efficienti e di grande impatto in vari settori. Milvus migliora i flussi di lavoro di IA offrendo funzionalità di ricerca e archiviazione vettoriale ad alta velocità, rendendo più semplice gestire e recuperare grandi quantità di dati non strutturati per applicazioni come (RAG).
Con strumenti di IA responsabile come LlamaGuard e framework adattabili come la Llama Stack API, i progetti open-source consentono a sviluppatori e organizzazioni di creare soluzioni più sicure, flessibili e innovative. Llama e Milvus esemplificano come le iniziative open-source promuovano progressi significativi, aiutando la comunità dell'IA a costruire applicazioni inclusive e ad alto impatto che fanno avanzare il settore.
Ulteriori letture
Continua a leggere

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.

Announcing the General Availability of Zilliz Cloud BYOC on Google Cloud Platform
Zilliz Cloud BYOC on GCP offers enterprise vector search with full data sovereignty and seamless integration.

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.



