In questo tutorial, utilizzeremo il framework Ragas per la valutazione di retrieval-augmented generation (RAG) in Python usando LangChain.
La RAG è una tecnica di elaborazione del linguaggio naturale (NLP) che combina il recupero delle informazioni e modelli generativi per produrre risposte più accurate, pertinenti e contestualizzate. Nelle attività tradizionali di generazione del linguaggio, vengono utilizzati modelli linguistici di grandi dimensioni (LLM) come GPT-4 (Generative Pre-trained Transformer) di OpenAI o IBM® Granite Models per costruire risposte in base al prompt di input. Un caso d'uso comune di questi grandi modelli linguistici nel mondo reale sono i chatbot. Tuttavia, questi modelli faticano a produrre risposte contestualmente rilevanti, veritiere o aggiornate.
La RAG risolve questa limitazione incorporando un passaggio di recupero prima della generazione della risposta. Durante il recupero, ulteriori frammenti di testo pertinenti al prompt vengono estratti da una knowledge base, ad esempio documenti pertinenti da un ampio corpus di testo, in genere memorizzati in un database vettoriale. Infine, viene utilizzato un un LLM per generare risposte basate sul prompt originale aumentato con il contesto recuperato.
Esistono molti framework di valutazione e molte metriche RAG diverse. Oltre a Ragas, altri framework includono Unitxt di IBM ed Evals di OpenAI. A differenza degli altri framework, Ragas utilizza un altro LLM-as-a-Judge per valutare le prestazioni di una pipeline RAG.
Sono disponibili diverse metriche di valutazione per misurare le prestazioni della nostra pipeline RAG. Le metriche che utilizzeremo nel framework open source Ragas possono essere suddivise in due parti:
Queste metriche sono intese come indicativi soggettivi della capacità di una pipeline RAG di recuperare le informazioni pertinenti dalla sua base di conoscenza per formulare una risposta. È importante notare che non esiste un ideale per dati, prompt o LLM: un contesto che ha un punteggio di context_relevance basso non è necessariamente un cattivo contesto. Potrebbe essere dovuto a una certa quantità di "rumore" o a informazioni meno rilevanti, o semplicemente perché l'attività stessa è aperta a molteplici interpretazioni. Anche il rumore non è necessariamente negativo. Noi, in quanto esseri umani, produciamo una certa quantità di rumore nelle nostre risposte ma siamo comprensibili quando rispondiamo alle domande.
Inoltre, ci sono bias che influiscono sulla valutazione di una pipeline RAG, come la preferenza per risposte più brevi o più lunghe, altrimenti note come distorsioni della lunghezza. Questo tipo di bias può portare a valutare una risposta più alta di un'altra a causa della sua lunghezza e non della sua sostanza.
Per questi motivi, eseguire valutazioni multiple è buona prassi. Questo esercizio può essere eseguito modificando il modello di prompt, le metriche, la sequenza di valutazione dell'LLM e altro ancora. Se stai creando un set di dati per la tua pipeline RAG, consigliamo inoltre di utilizzare modelli diversi per l'LLM che genera le risposte e l'LLM che critica le risposte. Se si utilizza lo stesso modello per entrambi, c'è un maggiore potenziale di distorsione nell'autovalutazione. Poiché queste metriche di valutazione sono soggettive, i risultati prodotti da questi framework devono essere controllati anche da giudici umani.
In questo tutorial, non creiamo un sistema RAG, ma usiamo Ragas per valutare l'output di un sistema RAG creato in precedenza. Per ulteriori informazioni su come creare il tuo sistema RAG utilizzando LangChain, consulta il nostro tutorial dettagliato su RAG.
Per creare un progetto watsonx.ai è necessario creare un progetto IBM® Cloud. Registrati qui per aprire un account gratuito.
Sebbene sia possibile scegliere tra diversi strumenti, questo tutorial illustra come configurare un account IBM per utilizzare un Jupyter Notebook.
Accedi a watsonx.ai usando il tuo account IBM Cloud.
Crea un progetto watsonx.ai.
Puoi ottenere l'ID del tuo progetto dall'interno del tuo progetto. Fai clic sulla scheda Gestisci. Quindi, copia l'ID del progetto dalla sezione Dettagli della pagina Generali. Per questo tutorial, ti servirà questo ID.
Crea un Jupyter Notebook.
Questo passaggio apre un ambiente notebook in cui puoi copiare il codice di questo tutorial per implementare una tua valutazione RAG. In alternativa, puoi scaricare questo notebook sul tuo sistema locale e caricarlo nel tuo progetto watsonx.ai come asset. Per visualizzare altri tutorial su Granite, visita la IBM Granite Community. Questo Jupyter Notebook è disponibile anche su GitHub.
Crea un'istanza del servizio watsonx.ai Runtime (seleziona la regione appropriata e scegli il piano Lite, che è un'istanza gratuita).
Genera una chiave API.
Associa l'istanza del servizio watsonx.ai Runtime al progetto che hai creato in watsonx.ai.
Abbiamo bisogno di alcune librerie e moduli per questo tutorial. Assicurati di importare quelli elencati. Se non sono installati, un'installazione rapida di pip risolve il problema. Questo tutorial è stato creato utilizzando Python 3.11.9.
Configura le tue credenziali. Inserisci la tua chiave API e l'ID del progetto come stringhe. A seconda della tua istanza del servizio fornito, utilizza una delle regioni elencate come URL watsonx:
La valutazione di Ragas richiede un set di dati contenente le esecuzioni della pipeline RAG di diversi prompt. Oltre alle domande stesse, il set di dati deve contenere le risposte attese note come "good truths", le risposte prodotte dall'LLM e l'elenco degli elementi di contesto recuperati dalla pipeline RAG rispondendo a ciascuna domanda. Puoi creare il tuo set di dati end-to-end ma, ai fini di questo tutorial, il set di dati che stiamo utilizzando in questo tutorial è disponibile su Hugging Face. Carichiamo il set di dati.
Output
I dati vengono caricati come DatasetDict e le caratteristiche che ci interessano rientrano nella suddivisione "eval".
Output
Ora, carica i dati in un dataframe Pandas. Per vedere un esempio di una voce in questo set di dati, consultare la documentazione di HuggingFace.
I set di dati per la valutazione dei RAG possono essere creati in vari modi. Un elemento chiave per la creazione di questo set di dati è stata la base di conoscenza esterna fornita a un LLM. Questa conoscenza può essere ottenuta da una pagina web ottenuta mediante scraping, un file di testo di base, un documento importato e altro ancora. In questo caso vengono utilizzate le segnalazioni raccolte da Amnesty International . Il contenuto del set di dati potrebbe essere stato creato end-to-end o utilizzando un approccio di generazione di dati sintetici, ad esempio TestsetGenerator di Ragas. L'uso di TestsetGenerator richiede i documenti caricati, un generatore LLM, un LLM critico e un modello di embedding.
A sua volta, l'approccio end-to-end prevede diversi passaggi. Supponiamo che sia stato adottato per la creazione di questo set di dati: le domande memorizzate nella colonna dedicata sono state generate da un LLM o da un utente umano. Per generare le verità di base per ogni domanda, l'utente potrebbe averle create manualmente o averle generate utilizzando un LLM con il modello di prompt appropriato. Queste risposte sono considerate le risposte ideali e vengono memorizzate nella colonna ground_truth. Infine, è stata utilizzata una pipeline RAG per generare le risposte visualizzate nella colonna delle risposte. Durante la creazione della pipeline RAG, la knowledge base esterna è stata vettorializzata. Quindi, interrogando il sistema RAG, i blocchi di testo pertinenti utilizzati dall'LLM per generare ogni risposta sono stati ottenuti dal database vettoriale utilizzando un algoritmo di somiglianza come l'algoritmo di recupero top-k. Questi set di dati sono stati archiviati nella colonna dei contesti.
In questo tutorial, utilizziamo un modello IBM® Granite come giudice.
Ragas utilizza di default modelli AI. WatsonXLLM è il wrapper per i foundation model IBM® watsonx.ai. Un wrapper WatsonXLLM compatibile con Ragas è in lavorazione e non è ancora disponibile. Per ora, per usare Ragas con i modelli Granite, dobbiamo modificare le proprietà dell'involucro.
Per questo tutorial, consigliamo di utilizzare il modello IBM® Granite-3.0-8B-Instruct come LLM per ottenere risultati simili. Puoi utilizzare liberamente qualsiasi modello AI tu scelga per confrontarlo con questo benchmark e scegliere quello più adatto alla tua applicazione. I foundation model disponibili tramite watsonx sono disponibili qui. Lo scopo di questi modelli nelle applicazioni LLM è quello di fungere da motore di ragionamento che decide quali azioni intraprendere e quali risposte produrre. Per utilizzare il wrapper WatsonxLLM con Ragas, dobbiamo usare un LangchainLLMWrapper.
Il modello Granite viene utilizzato come modello di valutazione. Non utilizzeremo un modello per generare alcuna risposta perché sono già memorizzate nella colonna delle risposte del dataset.
Il modello di embedding che stiamo utilizzando è un modello IBM® Slate tramite un watsonx.ai LangChain wrapper. Se non hai definito alcun modello di embedding, Ragas utilizza gli embedding OpenAI per impostazione predefinita. Il modello di embedding è essenziale per la valutazione, in quanto viene utilizzato per incorporare i dati delle colonne separate per misurare la distanza tra loro.
Infine, ora possiamo eseguire la valutazione Ragas sul set di dati. Qui, inseriamo il set di dati, le metriche per la valutazione, l'LLM e il modello di embedding come parametri.
Se vengono visualizzati messaggi di avviso, ignorali, attendi il completamento della valutazione e stampa il risultato come mostrato.
Output
Questo è tutto. È stata completata una valutazione della pipeline RAG. Come accennato, è possibile eseguire più valutazioni, provare diversi modelli e modificare i parametri. Più valutazioni vengono eseguite, più possiamo valutare in modo completo l'accuratezza e l'efficacia di un sistema LLM utilizzando la RAG.
In questo tutorial hai utilizzato Ragas per valutare la tua pipeline RAG. Il tuo output includeva le metriche context_precision, faithfulness, answer_relevancy e context_recall. L'LLM utilizzato per la valutazione era un modello IBM Granite e il modello di embedding era un modello IBM Slate accessibile tramite l'API di embedding watsonx.ai.
La valutazione effettuata è importante in quanto può essere applicata ai futuri workflow di AI generativa per valutare le prestazioni dei suoi sistemi RAG e migliorarle.
Ti invitiamo a consultare la pagina della documentazione di Ragas per maggiori informazioni sulle metriche e sul processo di valutazione.
Addestra, convalida, adatta e implementa le funzionalità di AI generativa, foundation model e machine learning con IBM watsonx.ai, uno studio aziendale di nuova generazione per builder AI. Crea applicazioni AI in tempi ridotti e con una minima quantità di dati.
Metti l'AI al servizio della tua azienda grazie all'esperienza leader di settore e alla gamma di soluzioni di IBM nel campo dell'AI.
Reinventa i flussi di lavoro e le operazioni critiche aggiungendo l'AI per massimizzare le esperienze, il processo decisionale in tempo reale e il valore di business.