Avviare l'installazione del RAG locale: Guida per principianti all'uso di Llama 3 LangChain con Ollama e Milvus
Con l'affermarsi di LLM open source come Llama 3, Mistral, Gemma e altri, è diventato evidente che i Large Language Models (LLM) possono essere utili anche se eseguiti a livello locale. Questo approccio non è solo pratico, ma diventa anche essenziale, dato che i costi possono salire alle stelle quando si utilizzano LLM commerciali come GPT-3 o GPT-4.
In questa guida pratica, vedremo come implementare una Retrieval Augmented Generation (RAG) per creare un chatbot in grado di rispondere a domande e risposte (Q&A) su informazioni specifiche. Un'implementazione tipica prevede l'impostazione di una pipeline di generazione del testo per Llama 3.
I diversi strumenti per costruire questo setup di generazione aumentata del reperimento (rag) includono:
Ollama: Ollama è uno strumento open-source che permette di gestire Llama 3 su macchine locali. Porta la potenza di LLM sul vostro portatile, semplificando le operazioni locali.
LangChain](https://github.com/langchain-ai/langchain) LangChain è un framework che semplifica lo sviluppo di applicazioni basate su LLM. È quello che usiamo per creare un agente e interagire con i nostri dati.
È il database vettoriale che utilizziamo per memorizzare e recuperare i dati rilevanti in modo efficiente.
Llama 3 è un Large Language Model open-source sviluppato da Meta ed è l'ultima iterazione di una serie di LLM. Fornisce un formato di prompt complesso per le interazioni con gli utenti e supporta diversi ruoli utente, tra cui "sistema", "utente" e "assistente".
Domande e risposte con RAG
Costruiremo un chatbot sofisticato per rispondere alle domande (Q&A) utilizzando RAG (Retrieval Augmented Generation). Questo ci permetterà di rispondere a domande su informazioni specifiche.
Che cos'è esattamente la retrieval augmented generation?
La RAG, o Retrieval Augmented Generation, è una tecnica che migliora i LLM integrando fonti di dati aggiuntive. Una tipica applicazione RAG prevede:
Indexing - una pipeline per l'acquisizione di dati da una fonte e la loro indicizzazione, che di solito consiste nel caricare, dividere e memorizzare i dati in Milvus. I dati memorizzati in Milvus sono la rappresentazione dei dati sotto forma di [embeddings vettoriali] (https://zilliz.com/glossary/vector-embeddings). Gli embeddings catturano l'essenza del contenuto, consentendo di ottenere risultati di ricerca più pertinenti rispetto alle ricerche per parole chiave.
- Recupero e generazione - I sistemi di generazione aumentata del recupero migliorano la qualità delle risposte recuperando il contesto rilevante da un database vettoriale e passandolo a un LLM prima di generare le risposte. Quando gli viene fornito il contesto, l'LLM evita di generare allucinazioni. Più precisamente, in fase di esecuzione, RAG elabora la domanda dell'utente, recupera i dati rilevanti dall'indice memorizzato in Milvus e il LLM genera una risposta basata su questo contesto arricchito.
Questa guida è stata concepita per essere pratica e pratica, mostrando come si possono usare gli LLM locali per configurare un'applicazione RAG. Non è solo per gli esperti: anche i principianti possono immergersi e iniziare a costruire il proprio chatbot Q&A. Iniziamo!
Prerequisiti
Prima di iniziare a configurare i diversi componenti del nostro tutorial, assicuratevi che il vostro sistema abbia i seguenti requisiti:
Docker e Docker-Compose - Assicurarsi che Docker e Docker-Compose siano installati sul sistema. Milvus Standalone - Per i nostri scopi, useremo Milvus Standalone, che è facile da gestire tramite Docker Compose; controllate come installarlo nella nostra documentazione.
- Ollama - Installate Ollama sul vostro sistema; visitate il loro sito web per la guida all'installazione più recente.
##Impostazione della catena linguistica
Una volta installati tutti i prerequisiti, si è pronti a configurare l'applicazione RAG:
- Avviare un'istanza Milvus Standalone con:
docker-compose up -d. - Questo comando avvia l'istanza Milvus in modalità distaccata, in esecuzione silenziosa in background.
- Recuperare un modello LLM con:
ollama pull <nome_del_modello>- Visualizzare l'elenco dei modelli disponibili tramite la loro libreria
- ad esempio
ollama pull llama3
- Questo comando scarica la versione predefinita (di solito la più recente e la più piccola) del modello.
- Per chattare direttamente con un modello dalla riga di comando, usare
ollama run <nome del modello>
Installare le dipendenze per il negozio di vettori
Per eseguire questa applicazione, è necessario installare le librerie Python. Si può usare Poetry se si usa direttamente il codice su Github o installarle con pip, se si preferisce.
pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental
Applicazione RAG per applicazioni alimentate da llm
Come detto in precedenza, uno dei componenti principali di RAG è l'indicizzazione dei dati.
- Iniziare con l'ingestione dei dati dal PDF utilizzando PyPDFLoader
da langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
dati = loader.load()
- Suddivisione dei dati
Suddividere i dati caricati in parti gestibili utilizzando il metodo RecursiveCharacterTextSplitter.
da langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
- Ottenere le incorporazioni e memorizzare i dati in Milvus
Successivamente, si convertono i dati di testo in embeddings vettoriali utilizzando [Small English embeddings di Jina AI] (https://huggingface.co/jinaai/jina-embeddings-v2-small-en) e li si memorizza in Milvus.
da langchain_community.embeddings.jina import JinaEmbeddings
da langchain.vectorstores.milvus importare Milvus
embeddings = JinaEmbeddings(
jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-en"
)
vector_store = Milvus.from_documents(documents=all_splits, embedding=embeddings)
- Caricare l'LLM
Ollama semplifica il caricamento e l'utilizzo di un LLM in locale. Nel nostro esempio, utilizzeremo Llama 3 by Meta; ecco come caricarlo:
da langchain_community.llms import Ollama
da langchain.callbacks.manager import CallbackManager
da langchain.callbacks.streaming_stdout importare StreamingStdOutCallbackHandler
llm = Ollama(
model="llama3",
callback_manager=CallbackManager(
[StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)
- Costruire la catena QA con Langchain
Infine, costruire la catena QA per elaborare e rispondere alle richieste degli utenti:
da langchain import hub
da langchain.chains importare RetrievalQA
query = input("\nQuery: ")
prompt = hub.pull("rlm/rag-prompt")
qa_chain = RetrievalQA.from_chain_type(
llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt": prompt}
)
risultato = qa_chain({"query": query})
print(risultato)
Eseguire l'applicazione
Eseguire l'applicazione RAG dall'ultima cella con la variabile risultato.
Eseguire l'applicazione RAG eseguendo:
python rag_ollama.py
Esempio di interazione QA:
Interrogazione: Di cosa parla questo documento?
Il documento sembra essere un file di dati interattivo di 104 copertine per un deposito SEC. Contiene informazioni sui bilanci e sulle certificazioni della società. {'query': 'Di cosa tratta questo documento?', 'result': "Il documento sembra essere un file di dati interattivo con 104 copertine per un deposito SEC. Contiene informazioni sui bilanci e sulle certificazioni dell'azienda."}
Ed ecco fatto! Avete appena creato un sofisticato LLM locale utilizzando Ollama con Llama 3, Langchain e Milvus. Questa configurazione non solo permette di gestire in modo efficiente grandi insiemi di dati, ma consente anche un sistema locale di risposta alle domande altamente reattivo.
Sentitevi liberi di dare un'occhiata a Milvus, al codice su Github e di condividere le vostre esperienze con la comunità unendovi al nostro Discord.
Riepilogo del contesto recuperato
Questa guida ha fornito una guida per l'impostazione di un'applicazione di Retrieval Augmented Generation (RAG) che utilizza modelli linguistici locali di grandi dimensioni (LLM). Sfruttando strumenti come Ollama, Llama 3, LangChain e Milvus, abbiamo dimostrato come creare un potente chatbot in grado di rispondere a domande e risposte (Q&A) con un contesto recuperato da un archivio vettoriale.
I punti chiave da cui partire sono:
** Panoramica di RAG**: RAG migliora le capacità di LLM integrando fonti di dati esterne. Comporta l'indicizzazione dei dati in embeddings vettoriali utilizzando Milvus e recuperando il contesto rilevante durante l'elaborazione delle query per generare risposte accurate e informate.
Significativi strumenti:
- Ollama semplifica la gestione e l'esecuzione dei modelli Llama 3 a livello locale.
LangChain fornisce un quadro intuitivo per lo sviluppo di applicazioni basate su LLM.
- Milvus, come archivio vettoriale, memorizza e recupera in modo efficiente i [dati vettoriali] (https://zilliz.com/learn/an-ultimate-guide-to-vectorizing-structured-data), consentendo una gestione precisa delle query.
Lama 3, sviluppato da Meta, supporta funzionalità avanzate con caratteristiche come le interazioni multiruolo e le richieste di sistema personalizzabili.
Il processo di configurazione prevedeva passaggi essenziali:
Prequisiti: Installazione di Docker, Milvus Standalone, Ollama e delle librerie Python necessarie.
Individuazione dei dati: Utilizzo di strumenti come PyPDFLoader e RecursiveCharacterTextSplitter per caricare, dividere e vettorializzare i dati.
Memorizzazione di embedding: Conversione di [testo in embeddings] (https://zilliz.com/ai-models/text-embedding-3-small) con il modello Jina AI e memorizzazione nell'archivio vettoriale Milvus.
Costruzione di una catena QA: Integrazione dell'archivio vettoriale con Llama 3 attraverso LangChain, configurazione di un prompt di sistema su misura per elaborare e rispondere alle domande degli utenti.
Eseguendo l'applicazione, gli utenti possono interagire con il loro chatbot locale per recuperare risposte accurate e contestualmente rilevanti da set di dati specifici. Una volta recuperati i documenti pertinenti, questi vengono passati al LLM per la generazione delle risposte, un metodo di provata efficacia. La guida ha posto l'accento sulla praticità, garantendo l'accessibilità sia ai principianti che agli esperti. Si tenga presente che, per un recupero ottimale, potrebbe essere necessario regolare con precisione i parametri in base alle specificità dell'applicazione.
Con la crescente importanza dei LLM open-source, questa configurazione evidenzia come le implementazioni localizzate riducano i costi, migliorino la sicurezza e offrano soluzioni scalabili per il information retrieval e la generazione. Esplorate il repository GitHub e unitevi alla nostra comunità Discord per condividere la vostra esperienza e le vostre intuizioni!
Continua a leggere

Storage Cost Isn’t the Whole Story: Why We Disagree with Turbopuffer’s Trade-offs
A real-world benchmark comparing Turbopuffer and Zilliz Cloud on cost, latency, recall, and consistency for production-scale vector search workloads.

Creating Collections in Zilliz Cloud Just Got Way Easier
We've enhanced the entire collection creation experience to bring advanced capabilities directly into the interface, making it faster and easier to build production-ready schemas without switching tools.

Why Deepseek is Waking up AI Giants Like OpenAI And Why You Should Care
Discover how DeepSeek R1's open-source AI model with superior reasoning capabilities and lower costs is disrupting the AI landscape and challenging tech giants like OpenAI.
