Condividi tramite


Progettare e sviluppare una soluzione RAG

Il modello Retrieval-Augmented Generation (RAG) è un approccio standard del settore alla creazione di applicazioni che usano modelli linguistici per elaborare dati specifici o proprietari che il modello non conosce già. L'architettura è semplice, ma la progettazione, l'esperimento e la valutazione di soluzioni RAG che rientrano in questa architettura comportano molte considerazioni complesse che traggono vantaggio da un approccio rigoroso e scientifico.

Questo articolo è l'introduzione di una serie. Ogni articolo della serie illustra una fase specifica della progettazione di soluzioni RAG.

Gli altri articoli di questa serie illustrano le considerazioni seguenti:

  • Come determinare i documenti di test e le query da usare durante la valutazione
  • Come scegliere una strategia di suddivisione in blocchi
  • Come determinare quali segmenti dovresti arricchire e come arricchirli
  • Come scegliere il modello di incorporamento corretto
  • Come configurare l'indice di ricerca
  • Come determinare quali ricerche, come le ricerche vector, full-text, hybrid e le ricerche multiple manuali, è necessario eseguire
  • Come valutare ogni passaggio

Architettura RAG

Diagramma che mostra l'architettura generale di una soluzione RAG, tra cui il flusso di richiesta e la pipeline di dati.

Flusso dell'applicazione RAG

Il flusso di lavoro seguente descrive un flusso generale per un'applicazione RAG.

  1. L'utente invia una query in un'interfaccia utente dell'applicazione intelligente.
  2. L'applicazione intelligente effettua una chiamata API a un agente di orchestrazione. È possibile implementare l'agente di orchestrazione con strumenti o piattaforme come semantic kernel, servizio Agente di intelligenza artificiale di Azure o LangChain.
  3. L'orchestratore determina quale ricerca eseguire su Azure AI Search ed emette la query.
  4. L'orchestratore inserisce i primi N risultati della query. Inserisce i risultati principali e la query come contesto all'interno di una richiesta e invia la richiesta al modello linguistico. L'orchestratore restituisce la risposta all'applicazione intelligente affinché l'utente la legga.

Flusso del canale di dati RAG

Il flusso di lavoro seguente descrive un flusso generale per una pipeline di dati che fornisce dati di base per un'applicazione RAG.

  1. I documenti vengono inseriti o estratti in una pipeline di dati.
  2. La pipeline di dati elabora singolarmente ogni documento completando i passaggi seguenti:
    1. Blocco documento: suddivide il documento in parti semanticamente rilevanti che idealmente hanno una singola idea o concetto.
    2. Arricchire i blocchi: aggiunge campi di metadati creati dalla pipeline in base al contenuto nei blocchi. La pipeline di dati classifica i metadati in campi discreti, ad esempio titolo, riepilogo e parole chiave.
    3. Incorpora blocchi: usa un modello di incorporamento per vettorizzare il blocco e tutti gli altri campi di metadati usati per le ricerche vettoriali.
    4. Mantieni blocchi: archivia i blocchi nell'indice di ricerca.

Considerazioni sulla progettazione e valutazione RAG

È necessario prendere varie decisioni di implementazione durante la progettazione della soluzione RAG. Il diagramma seguente illustra alcune delle domande che è necessario porre quando si effettuano queste decisioni.

Diagramma che mostra l'architettura generale di una soluzione RAG, incluse le domande da porre durante la progettazione della soluzione.

L'elenco seguente fornisce una breve descrizione delle operazioni da eseguire durante ogni fase dello sviluppo di soluzioni RAG.

  • Durante la fase di preparazione , è necessario:

    • Determinare il dominio della soluzione. Definire chiaramente i requisiti aziendali per la soluzione RAG.
    • Raccogliere documenti di test rappresentativi. Raccogli documenti di test per la tua soluzione RAG che siano rappresentativi della tua raccolta di documenti.
    • Raccogliere le query di test. Raccogliere informazioni, testare query e generare query sintetiche e query che i documenti non coprono.
  • Durante la fase di suddivisione in blocchi , è necessario:

    • Comprendere l'economia della suddivisione in blocchi. Comprendere quali fattori considerare quando si valuta il costo complessivo della soluzione di suddivisione in blocchi per la raccolta di testo.
    • Eseguire l'analisi dei documenti. Porre le domande seguenti per prendere decisioni quando si analizza un tipo di documento:
      • Quale contenuto del documento si vuole ignorare o escludere?
      • Quale contenuto si vuole acquisire in blocchi?
      • Come si vuole suddividere il contenuto?
    • Comprendere gli approcci di suddivisione in blocchi. Comprendere i diversi approcci alla suddivisione in blocchi, tra cui approcci basati su frasi, a dimensione fissa e personalizzati o usando l'aumento del modello linguistico, l'analisi del layout dei documenti e i modelli di Machine Learning.
    • Comprendere in che modo la struttura del documento influisce sulla suddivisione in blocchi. Scegliere un approccio di suddivisione in blocchi in base al grado di struttura del documento.
  • Durante la fase di arricchimento dei blocchi, è importante:

    • Pulisci blocchi. Implementare approcci di pulizia per eliminare le differenze che non influiscono sul significato del testo. Questo metodo supporta le corrispondenze approssimate.
    • Amplifica blocchi. Valuta di arricchire i dati dei segmenti con campi di metadati comuni e comprendi i loro potenziali usi nella ricerca. Informazioni sugli strumenti o le tecniche di uso comune per la generazione di contenuto di metadati.
  • Durante la fase di incorporamento , è necessario:

    • Comprendere l'importanza del modello di incorporamento. Un modello di incorporamento può influire significativamente sulla pertinenza dei risultati della ricerca vettoriale.
    • Scegliere il modello di incorporamento corretto per il caso d'uso.
    • Valutare i modelli di incorporamento. Valutare l'incorporamento dei modelli visualizzando incorporamenti e calcolando le distanze di incorporamento.
  • Durante la fase di recupero delle informazioni , è necessario:

    • Creare un indice di ricerca. Applicare le configurazioni di ricerca vettoriali appropriate ai campi vettoriali.
    • Informazioni sulle opzioni di ricerca. Considerare i diversi tipi di ricerche, tra cui vettoriali, full-text, ricerche ibride e ricerche manuali multiple. Scopri come dividere una query in sottoquery e filtrare le query.
    • Valutare le ricerche. Utilizzare i metodi di valutazione del recupero delle informazioni per valutare la tua soluzione di ricerca.
  • Durante la fase di valutazione end-to-end del modello linguistico, dovresti:

    • Informazioni sulle metriche di valutazione del modello linguistico. Esistono diverse metriche, tra cui aderenza, completezza, utilizzo e pertinenza, che è possibile usare per valutare la risposta del modello di linguaggio.
    • Comprendere la somiglianza e le metriche di valutazione. È possibile usare metriche di somiglianza e valutazione per valutare la soluzione RAG.
    • Comprendere l'importanza della documentazione, della creazione di report e dell'aggregazione. Documentare gli iperparametri e i risultati della valutazione. Aggregare i risultati da più query e visualizzare i risultati.
    • Usare l'acceleratore dell'esperimento RAG. Usare il repository GitHub dell'acceleratore di esperimenti RAG per aiutare il tuo team a trovare le strategie migliori per l'implementazione RAG eseguendo esperimenti multipli, archiviando e valutando i risultati.

Approccio strutturato

A causa del numero di passaggi e variabili, è importante seguire un processo di valutazione strutturato per la soluzione RAG. Valutare i risultati di ogni passaggio e apportare modifiche in base ai requisiti. È consigliabile valutare ogni passaggio in modo indipendente per l'ottimizzazione, ma tenere presente che il risultato finale è l'esperienza dei clienti. Assicurarsi di comprendere tutti i passaggi di questo processo prima di determinare i propri criteri di accettazione per ogni passaggio.

Contributori

Questo articolo viene gestito da Microsoft. Originariamente è stato scritto dai seguenti contributori.

Autori principali:

  • Raouf Aliouat | Ingegnere del software II
  • Rob Bagby | Principale sviluppatore di contenuti - Modelli e procedure di Azure
  • Prabal Deb | Ingegnere Software Principale
  • Chad Kittel | Principal Software Engineer - Modelli e procedure di Azure
  • Ritesh Modi | Ingegnere principale
  • Ryan Pfalz | Responsabile Senior del Programma Tecnico
  • Randy Thurman | Architetto Principale di Soluzioni Cloud AI

Per visualizzare i profili LinkedIn non pubblici, accedere a LinkedIn.

Passaggi successivi