Introduzione all’ingegneria contestuale per RAG
L’“ingegneria contestuale” ’ un concetto moderno che si applica alla creazione di sistemi avanzati per la comprensione e la gestione del testo in contesti aziendali. Questo articolo, parte di una serie, mostra come l’implementazione di sistemi RAG (Retriever-Augmented Generation) si basi su quattro componenti principali: il parsing del documento, il parsing della domanda, il recupero e la generazione.
Architettura a quattro blocchi fondamentali
Il parsing del documento trasforma il testo in tabelle relazionali. Il sistema di parsing della domanda genera un oggetto ParsedQuestion tipizzato, che include una breve lista di parole chiave, un’etichetta letterale per l’intent, suggerimenti strutturali e l’aspettativa sulla forma della risposta. Il recupero genera un subset filtrato delle righe del documento, accompagnato da un’audizione che spiega il criterio di selezione.
La fase di generazione utilizza tutti gli output precedenti per formulare una risposta strutturata, con evidenza citata.
In sintesi, i quattro elementi principali del RAG per un singolo documento convergono in un’unica chiamata al modello linguistico avanzato (LLM), che si basa su un prompt sistema fisso e su un contenuto utente assemblato dagli elementi upstream.
I quattro blocchi del pipeline RAG
Ognuno dei quattro blocchi (parser, interrogatore, recuperatore, generatore) produce tipi definiti di dati che convergono alla chiamata LLM.
- Il parser emette tabelle relazionali e uno sintesi dict.
- L’interrogatore emette una ParsedQuestion con diversi campi definiti.
- Il recuperatore emette un DataFrame filtrato e un audit dictionary.
- Il generatore emette una risposta strutturata con evidenze.
I blocchi vengono combinati in una classe PromptContext che raccoglie informazioni da ogni componente, come contesto documentale, contesto corpus (che verrà introdotto in articoli futuri) e contesto progettuale.
La tipizzazione del contesto
Un’importante parte dell’ingegneria contestuale ’ la tipizzazione di ogni componente del sistema.
Ogni blocco fornisce un’output strutturato:
1. Il parser di domande genera un’oggetto ParsedQuestion con etichette precise per l’intent, suggerimenti strutturali, parole chiave, e informazioni sul formato richiesto.
2. Il recuperatore fornisce righe specifiche e un registro del criterio di selezione per il modello.
3. Il generatore utilizza le informazioni provenienti dagli altri blocchi per formare una risposta ben strutturata, con citazioni.
Tipizzazione del contesto per singolo documento
In un sistema RAG basato su un’unico documento, ogni elemento del pipeline convergente ha la propria tipizzazione:
- Il sistema prompt ’ fisso per caching.
- I documenti o le righe recuperate sono organizzati in DataFrame filtrato.
- La storia delle conversazioni, in caso di conversatore persistente.
- I definizioni strumentali e i loro output.
- I dati di memoria, scratchpad, stato agente.
- Metadati strutturati sul documento, corpus, progetto.
- L’input utente reale.
Il contesto complessivo include informazioni che sono state assemblate upstream da un recupero, uno strumento, una memoria, un’informazione utente o un’output intermedio.
Il ruolo del PromptContext
Il PromptContext ’ una classe principale nel sistema, che raccoglie i vari componenti del contesto:
- doc_context
- project_context
- corpus_context
I contenuti del PromptContext vengono combinati per formare lo schema utente che accompagna ogni chiamata.
Implementazione del sistema
Il modulo PromptContext combina informazioni strutturate provenienti da tutti i blocchi. Il sistema prompt ’ fisso per ogni modulo che chiama un LLM. Il modulo UserTemplate ’ una stringa con segnaposto che viene compilata con i valori corrispondenti.
Conclusione
Questo articolo spiega in dettaglio il concetto di ingegneria contestuale per sistemi RAG avanzati. L’approccio si basa su una struttura chiara e ben definita, dove ognuno dei blocchi (parser, interrogatore, recuperatore e generatore) contribuisce un insieme di informazioni di alta qualità al chiamata LLM.
Con un’architettura ben organizzata, l’ingegneria contestuale garantisce un’alta qualità delle risposte, mantenendo la trasparenza e controllando con precisione il contesto del chiamate al modello linguistico avanzato.