Retrieval-Augmented Generation (RAG)
Il RAG fa rispondere un modello a domande sui tuoi dati — documenti, una base di conoscenza, un codebase — su cui non è mai stato addestrato. L'idea è semplice: recupera i pezzi rilevanti, arricchisci il prompt con essi, poi genera una risposta ancorata a quei pezzi.
Il ciclo
- Indicizza i tuoi dati: suddividili in chunk, crea i loro embedding, memorizzali in un indice vettoriale (e/o per parole chiave).
- Recupera i chunk più rilevanti per la domanda.
- Arricchisci: inserisci quei chunk nel prompt con un'istruzione come "Rispondi solo dal contesto qui sotto; se non c'è, dillo".
- Genera — e idealmente cita da quale chunk proviene ciascuna affermazione.
Perché il RAG invece del fine-tuning?
Il RAG mantiene la conoscenza fresca (aggiorni i dati, non il modello), fornisce citazioni ed è molto più economico del riaddestramento. Per la maggior parte delle esigenze "rispondi sui miei documenti", è il primo strumento giusto — vedi Fine-tuning vs Prompting vs RAG.
Le modalità di fallimento (dove muore la qualità del RAG)
- Recupero scadente = risposta scadente. Se il chunk giusto non viene recuperato, il modello non può usarlo. La maggior parte dei problemi "il RAG sbaglia" sono problemi di recupero.
- Chunking troppo grossolano/fine — rovina la rilevanza (embedding).
- Nessuna istruzione di ancoraggio — il modello mescola i fatti recuperati con le proprie ipotesi. Digli di rispondere solo dal contesto e di ammettere le lacune.
- Inserire troppo — i chunk irrilevanti diluiscono il segnale e costano token. Recupera pochi chunk di alta qualità.
- Nessuna citazione — non puoi verificare, quindi non puoi fidarti.
:::tip Valuta il recupero separatamente Misura "abbiamo recuperato il chunk giusto?" separatamente da "il modello ha risposto bene?". Localizza il problema in fretta. Vedi Evals. :::