Se vogliamo testare RAG o anche una sola sua componente, come retrieval o generazione, abbiamo bisogno di dataset che riflettano le difficoltà reali. Solo così tramite metriche precise otteniamo risultati che ci dicano non solo se una soluzione è migliore di un’altra, ma anche quando e perché lo è. In particolare, vogliamo mettere alla prova:
Abbiamo esplorato diversi dataset pubblici:
Tuttavia, spesso è capitato che nostre soluzioni che performavano bene su dataset pubblici tendessero ad avere risultati deludenti sui dataset dei nostri clienti.
Per questo, volevamo dataset che si allineassero meglio ai nostri obiettivi: spesso mancano casi di multi‑hop con molti step e reasoning intenso, funzionalità che invece si rivelano necessarie per affrontare gli use case dei clienti. Inoltre, la maggior parte adotta schemi chunk‑based o annotazioni poco granulari, o anche schemi flessibili ma diversi tra un dataset e l’altro, limitando la portabilità tra sistemi.
Abbiamo creato due dataset interni di evaluation, entrambi di domini che permettono di mettere in difficoltà modelli e strategie di frontiera (comprendendo quindi casi di multi‑hop, reasoning, copertura ampia del dominio), e un terzo dataset pubblico basato su DnD SRD 5.2.1. La chiave è una struttura char‑based standardizzata che rende il dataset agnostico al chunking.
start_char/end_char sui file markdown della KB.Ogni elemento del dataset ha:
iddomandarispostapassaggi: lista di evidenze testuali, ognuna condocumento_origine (file markdown della KB)start_char, end_char (intervalli nel testo sorgente)contenuto (lo span estratto)
Nel concreto, tutti i documenti del dataset sono in formato markdown, ognuno dei quali è stato estratto facendo parsing dei PDF originali”
Gli start_char/end_char sono riferimenti nei testi normalizzati, così da massimizzare riproducibilità e portabilità.
Per le domande easy automatizziamo: selezioniamo un documento markdown casuale dalla KB e chiediamo a un LLM di generare una domanda puntuale su quel documento. A ogni iterazione passiamo anche le domande già prodotte su quel file, per evitare duplicati.
Questo processo permette di produrre domande puntuali su un singolo documento, ma non cross-documento.
Per le medium serve fin da subito l’esperto di dominio. Vogliamo includere domande cross‑documento o con ragionamenti non banali: passare tutta la KB a un LLM può non essere realistico in alcuni casi e produce domande troppo facili o poco utili. Qui l’esperto scrive le domande da zero. Abbiamo scelto D\&D come flavour perché è un dominio dove abbiamo expertise; in aggiunta manteniamo anche due dataset interni coperti da NDA.
Dati la domanda e il documento di partenza, facciamo una chiamata LLM per produrre la risposta e identificare i passaggi necessari con relativi span. Ogni tripletta domanda‑risposta‑passaggi è input di un controllo di qualità da parte dell’esperto umano che può accettare, scartare o correggere.
A differenza delle domande "easy", in cui la risposta può essere trovata in un singolo documento e in porzioni di testo sostanzialmente contigue, per realizzare un dataset di difficoltà media abbiamo dovuto immaginare casi in cui le informazioni necessarie sono disseminate.
Abbiamo identificato due scenari principali che caratterizzano questa difficoltà media: le domande multi‑hop, dove la risposta richiede una catena di ragionamento che attraversa più documenti (ad esempio, trovare prima una regola generale in un documento, poi una specifica eccezione in un altro, e infine applicare entrambe a un caso particolare descritto in un terzo), e le domande wide, dove la risposta completa richiede di aggregare informazioni da molteplici documenti senza necessariamente seguire una catena di ragionamento complessa, ma piuttosto raccogliendo pezzi di informazione sparsi che contribuiscono tutti alla risposta finale.
Il loop generale per la generazione di domande è (solo per le domande medium):
Per generare le risposte alle domande di difficoltà medium le abbiamo divise in questi due gruppi, e per ognuna abbiamo identificato una strategia dedicata.
Per generare le risposte alle domande di difficoltà medium le abbiamo divise in questi due gruppi, e per ognuna abbiamo identificato una strategia dedicata.
L'obiettivo era creare una Claude Skill che mimasse il comportamento di una RAG parecchio evoluta, privilegiando la qualità di risposta rispetto a costi e latenza. Queste ultime due variabili, sebbene difficilmente accettabili in molte applicazioni, sono un problema di minore importanza nella creazione di un dataset.
La skill opera sulla nostra knowledge base completa in markdown (per il dataset D\&D, si tratta di 20 file markdown estratti dal SRD 5.2.1). L'esperto di dominio fornisce una domanda già creata ad hoc, e la skill esegue i seguenti passi:
Questo approccio è molto forte nei casi multi‑hop. Tuttavia i costi non sono trascurabili. Dopo aver utilizzato questo approccio per svariate domande, dai nostri esperimenti emerge che il costo medio è stato ~$2 per domanda, con picchi fino a $11.
Per ogni domanda, gli step sono:
Anche questo approccio tende ad essere costoso, in particolare:
Abbiamo escluso dal dataset domande eccessivamente generiche o ambigue, come "Quando posso utilizzare abilità X invece di Y?". Questo tipo di domande tende a generare risposte insoddisfacenti con entrambi gli approcci (Claude Skills e LLM Retriever), in quanto spesso richiede interpretazione contestuale o ammette risposte multiple valide, rendendole inadatte per una valutazione oggettiva.
Con questo framework abbiamo creato un dataset pubblico basato sul D\&D SRD 5.2.1, che raccoglie un sottoinsieme dei contenuti della quinta edizione di D\&D (Player’s Handbook, DM Guide, Monster Manual). Il System Reference Document (SRD) è rilasciato sotto la licenza Creative Commons, motivo per cui possiamo renderlo pubblico. Il dataset segue la struttura sopra, è chunk‑agnostic grazie alle annotazioni char‑based e include domande easy e medium.
Il controllo qualità viene effettuato dall’esperto di dominio e avviene in tre stadi:
start_char/end_char sono allineati e riproducibili sui file della KB?In caso di esito negativo, l’item viene scartato o nel caso di domande medium viene possibilmente revisionato con ulteriori hint.
Il dataset completo, insieme al codice per la generazione e validazione, è disponibile pubblicamente nella repository GitHub del progetto e su HuggingFace.
Abbiamo presentato una metodologia pratica per costruire dataset di evaluation per vari step di una RAG: struttura char‑based, livelli di difficoltà, generazione semi‑automatica con controllo umano, e strumenti specifici per multi‑hop e wide. Abbiamo rilasciato un dataset pubblico basato su DnD SRD 5.2.1 per favorire valutazioni trasparenti e riproducibili. Il dataset e il codice per la generazione e validazione è disponibile pubblicamente nella repository GitHub del progetto e su HuggingFace.
A breve condivideremo un post dedicato alla Contextual Retrieval di Anthropic, in cui verrà fatto uso di questi dataset per valutarne i miglioramenti rispetto ad una forma classica di retrieval.
***
*Raul Singh -* GitHub - LinkedIn - AI R\&D Engineer - Datapizza
*Ling Xuan “Emma” Chen -* GitHub - LinkedIn - AI R\&D Engineer - Datapizza
*Francesco Foresi -* GitHub - LinkedIn - GenAI R\&D Team Lead - Datapizza