Il modello Retrieval-Augmented Generation (RAG) è un approccio standard del settore alla creazione di applicazioni che usano modelli linguistici di grandi dimensioni per ragionare su dati specifici o proprietari che non sono già noti al modello linguistico di grandi dimensioni. Anche se l'architettura è semplice, progettando, sperimentando e valutando soluzioni RAG che rientrano in questa architettura comporta molte considerazioni complesse che traggono vantaggio da un approccio rigoroso e scientifico.
Questa guida viene presentata come una serie. Ogni articolo della serie illustra una fase specifica nella progettazione di soluzioni RAG.
Di seguito sono riportate le considerazioni riportate negli articoli descritti in questa guida:
- Determinazione dei documenti di test e delle query da usare durante la valutazione
- Scelta di una strategia di suddivisione in blocchi
- Determinare cosa e come arricchire i blocchi
- Scelta del modello di incorporamento corretto
- Determinazione di come configurare l'indice di ricerca
- Determinazione delle ricerche da eseguire: vettore, full-text, ibrido, multiplo manuale
- Valutazione di ogni passaggio
Gli articoli di questa guida illustrano tutte queste considerazioni.
Architettura RAG
Figura 1. Architettura RAG di alto livello
Flusso dell'applicazione RAG
Di seguito è riportato un flusso generale per un'applicazione RAG.
- L'utente invia una query in un'interfaccia utente dell'applicazione intelligente.
- L'applicazione intelligente effettua una chiamata API a un agente di orchestrazione. L'agente di orchestrazione può essere implementato con strumenti o piattaforme come il kernel semantico, il flusso dei prompt di Azure Machine Learning o LangChain.
- L'agente di orchestrazione determina la ricerca da eseguire in Ricerca di intelligenza artificiale di Azure ed esegue la query.
- L'agente di orchestrazione crea un pacchetto dei primi N risultati dalla query, li inserisce come contesto all'interno di un prompt, insieme alla query e invia la richiesta al modello linguistico di grandi dimensioni. L'agente di orchestrazione restituisce la risposta all'applicazione intelligente per consentire all'utente di leggere.
Flusso della pipeline di dati RAG
Di seguito è riportato un flusso generale per una pipeline di dati che fornisce dati di base per un'applicazione RAG.
I documenti vengono inseriti o estratti in una pipeline di dati.
La pipeline di dati elabora ogni documento singolarmente con la procedura seguente:
- Blocco del documento: suddividere il documento in parti semanticamente rilevanti che idealmente hanno una singola idea o concetto.
- Arricchire i blocchi: aggiunge i campi di metadati creati dal contenuto nei blocchi a campi discreti, ad esempio titolo, riepilogo e parole chiave.
- Incorpora blocchi: usa un modello di incorporamento per vettorizzare il blocco e tutti gli altri campi di metadati usati per le ricerche vettoriali.
- Rende persistenti i blocchi: archivia i blocchi nell'indice di ricerca.
Considerazioni sulla progettazione e la valutazione rag
Durante la progettazione della soluzione RAG è necessario prendere diverse decisioni di implementazione. La figura seguente illustra alcune di queste decisioni.
Figura 2. Domande che si verificano durante la progettazione di una soluzione RAG
La serie di articoli di questa guida illustra queste considerazioni e altro ancora.
- Determinare il dominio della soluzione : illustra l'importanza di definire chiaramente i requisiti aziendali per la soluzione RAG
- Raccogliere documenti di test rappresentativi: illustra considerazioni e indicazioni sulla raccolta di documenti di test per la soluzione RAG rappresentativa del corpus.
- Raccogliere query di test: illustra le informazioni da raccogliere insieme alle query di test, fornisce indicazioni sulla generazione di query e query sintetiche che i documenti non coprono.
Fase di suddivisione in blocchi
- Comprendere l'economia della suddivisione in blocchi : illustra i fattori da considerare quando si esamina il costo complessivo della soluzione di suddivisione in blocchi per il corpus di testo
- Eseguire l'analisi dei documenti: fornisce un elenco di domande che è possibile porre durante l'analisi di un tipo di documento che consente di determinare cosa nel documento si vuole ignorare o escludere, cosa si vuole acquisire in blocchi e come si vuole suddividere in blocchi
- Informazioni sugli approcci di suddivisione in blocchi: descrive i diversi approcci per la suddivisione in blocchi, ad esempio basato su frasi, dimensioni fisse, aumento di modelli linguistici personalizzati, di grandi dimensioni, analisi del layout dei documenti, uso di modelli di Machine Learning
- Comprendere in che modo la struttura del documento influisce sulla suddivisione in blocchi : viene illustrato in che modo il grado di struttura di un documento influisce sulla scelta per un approccio di suddivisione in blocchi
Fase di arricchimento dei blocchi
- Blocchi puliti: illustra diversi approcci di pulizia che è possibile implementare per supportare le corrispondenze di prossimità eliminando le potenziali differenze che non sono materiali per la semantica del testo
- Aumentare i blocchi : illustra alcuni campi di metadati comuni che è consigliabile aumentare i dati dei blocchi insieme ad alcune indicazioni sugli usi potenziali nella ricerca e sugli strumenti o le tecniche comunemente usati per generare il contenuto dei metadati
- Comprendere l'importanza del modello di incorporamento: illustra come un modello di incorporamento può avere un effetto significativo sulla pertinenza dei risultati della ricerca vettoriale
- Scelta di un modello di incorporamento : fornisce indicazioni sulla scelta di un modello di incorporamento
- Valutare i modelli di incorporamento : illustra due mezzi per valutare un modello di incorporamento: visualizzazione degli incorporamenti e calcolo delle distanze di incorporamento
Fase di recupero delle informazioni
- Creare l'indice di ricerca: vengono illustrate alcune decisioni chiave da prendere per la configurazione di ricerca vettoriale applicabile ai campi vettoriali
- Informazioni sulle opzioni di ricerca: offre una panoramica dei tipi di ricerca che è possibile prendere in considerazione, ad esempio vector, full-text, hybrid e manual multiple. Fornisce indicazioni sulla suddivisione di una query in sottoquery, filtro delle query
- Valutare le ricerche - Fornisce indicazioni sulla valutazione della soluzione di ricerca
Fase di valutazione end-to-end del modello linguistico di grandi dimensioni
- Informazioni sulle metriche di valutazione del modello linguistico di grandi dimensioni: offre una panoramica di diverse metriche che è possibile usare per valutare la risposta dei modelli linguistici di grandi dimensioni, tra cui terra, completezza, utilizzo e pertinenza
- Comprendere la somiglianza e le metriche di valutazione: fornisce un piccolo elenco di metriche di somiglianza e valutazione che è possibile usare durante la valutazione della soluzione RAG
- Comprendere l'importanza della documentazione, della creazione di report e dell'aggregazione : illustra l'importanza di documentare gli iperparametri insieme ai risultati della valutazione, aggregare i risultati di più query e visualizzare i risultati
- L'acceleratore dell'esperimento RAG : illustra come usare il repository GitHub dell'acceleratore di esperimenti RAG per aiutare i team a trovare le strategie migliori per l'implementazione rag eseguendo più esperimenti, salvando in modo permanente e valutando i risultati
Approccio strutturato
A causa del numero di passaggi e variabili, è importante progettare la soluzione RAG tramite un processo di valutazione strutturato. Valutare i risultati di ogni passaggio e adattarsi, in base alle esigenze. Anche se è consigliabile valutare ogni passaggio in modo indipendente per l'ottimizzazione, il risultato finale è quello che verrà sperimentato dagli utenti. Assicurarsi di comprendere tutti i passaggi di questo processo prima di determinare i propri criteri di accettazione per ogni singolo passaggio.