
Come funziona un moderno bot RAG
Una buona pipeline RAG è qualcosa di più di “mettere i documenti in un database vettoriale”. Il flusso di base appare così:
Il passo di re-ranking è l’upgrade che rende questo approccio molto più utile di una demo RAG di base. La vector search è veloce e brava a trovare chunk semanticamente simili, ma può comunque restituire passaggi adiacenti all’argomento piuttosto che direttamente utili. Un cross-encoder legge insieme la domanda e ciascun chunk candidato, poi assegna un punteggio a quanto quel chunk risponde realmente alla domanda.
Installazione delle dipendenze
Useremo l’SDK Python di OpenAI perché Venice espone un’API compatibile con OpenAI. Useremo anche il client Python di Qdrant con il supporto FastEmbed:requirements.txt con gli stessi pacchetti:
Scelta dei modelli
Crea un file chiamatorag_bot.py, poi inizia aggiungendo gli import, le strutture dati, l’URL dell’API e i nomi dei modelli:
base_url e l’API key.
Puoi elencare i modelli Venice disponibili con:
Creazione dei client Venice e Qdrant
Crea un singolo client Venice compatibile con OpenAI sia per gli embedding sia per le chat completions:
Per un bot privato locale, inizia con un percorso Qdrant locale su disco:
Caricamento e chunking dei documenti
Per questo tutorial, lasceremo che il bot ingerisca file o cartelle locali. Inizia con file.md, .rst e .txt:
1000 caratteri con 150 caratteri di overlap è un buon default per documenti misti Markdown e testo. Chunk più piccoli possono migliorare la precisione. Chunk più grandi possono preservare più contesto. L’impostazione giusta dipenderà spesso dai tipi di documenti che stai archiviando.
Embedding dei documenti con Venice
Una volta che abbiamo i chunk, li embeddiamo in batch:Memorizzazione dei vettori in Qdrant
Prima di inserire i point, crea una collection Qdrant con la dimensione del vettore giusta. Il modo più semplice per conoscere la dimensione del vettore è embeddare il primo batch, poi usarelen(embeddings[0]).
source, chunk_index e contenuto. Questo rende l’ingestion ripetuta idempotente per i chunk non modificati.
Recupero dei chunk candidati
Al momento della domanda, il bot embedda la domanda dell’utente e chiede a Qdrant i top match vettoriali:limit qui è il conteggio dei candidati. Dovrebbe di solito essere più alto del numero di chunk che pianifichi di inviare al modello perché il passo successivo li ri-classificherà. Un buon default è recuperare 8 candidati e inviare i 4 migliori al modello di chat.
Re-ranking con FastEmbed
Ora aggiungiamo la parte che fa sembrare il retrieval molto più intelligente.- Recupera un insieme di candidati più ampio con la vector search.
- Ri-classifica solo quei candidati localmente.
- Invia i primi pochi chunk al language model.
candidate_k=8 e top_k=4. Aumenta candidate_k se la sorgente giusta è spesso vicina ma non riesce ad arrivare nel contesto finale.
Rispondere con Venice Chat Completions
Una volta selezionato il contesto, formattalo con numeri di sorgente:Eseguire il bot
Una volta assemblati i pezzi in uno script, salvalo comerag_bot.py. Una prima esecuzione semplice può usare alcuni documenti di esempio integrati in modo da verificare la pipeline prima di ingerire i tuoi file:
Opzioni CLI utili
Esponi le principali leve di retrieval come opzioni CLI in modo da poter regolare il bot senza modificare il codice:
Per lo sviluppo locale ripetuto, un flusso comune è:
Note sulla privacy
Per un setup RAG privato, pensa a ciascun layer separatamente:
Il default più privato per questo tutorial è Venice per l’inferenza, Qdrant locale su disco e re-ranking FastEmbed locale. Questo ti dà un bot RAG pratico senza inviare i payload del tuo database vettoriale a un vector store di terze parti.
Errori comuni da gestire fin da subito
Se cambi modello di embedding, ricrea la collection Qdrant. Modelli di embedding diversi possono produrre vettori con dimensioni diverse, e le collection Qdrant si aspettano una dimensione vettoriale fissa.
Dove andare dopo
Una volta che hai la baseline funzionante, i miglioramenti di maggior impatto sono solitamente:- Aggiungi loader specifici per i documenti per PDF, HTML, ticket o pagine wiki interne.
- Archivia metadati più ricchi come titoli, intestazioni, date, owner e URL.
- Regola
candidate_k,top_k, dimensione del chunk e overlap su domande reali. - Aggiungi domande di valutazione per misurare la qualità del retrieval prima e dopo le modifiche.
- Effettua lo streaming della chat completion finale di Venice per una migliore esperienza di chat interattiva.