Creare sistemi di generazione avanzati per il recupero
Questo articolo esplora in maniera approfondita la generazione aumentata dal recupero (RAG). Vengono descritte le considerazioni e il lavoro necessari per gli sviluppatori per creare una soluzione RAG pronta per la produzione.
Per informazioni su due opzioni per la creazione di un'applicazione "chat over your data", uno dei casi d'uso principali per l'intelligenza artificiale generativa nelle aziende, vedere Potenziare i modelli linguistici con RAG o l'adattamento.
Il diagramma seguente illustra i passaggi o le fasi di RAG:
Questa rappresentazione viene chiamata rag ingenuo. È un modo utile per comprendere inizialmente i meccanismi, i ruoli e le responsabilità necessari per implementare un sistema di chat basato su RAG.
Tuttavia, un'implementazione reale include molti altri passaggi di pre-elaborazione e post-elaborazione per preparare gli articoli, le query e le risposte da usare. Il diagramma seguente è una rappresentazione più realistica di un RAG, talvolta chiamato il RAG avanzato:
Questo articolo fornisce un framework concettuale per comprendere le fasi di pre-elaborazione e post-elaborazione in un sistema di chat basato su RAG reale:
- Fase di inserimento
- Fase della pipeline di inferenza
- Fase di valutazione
Inserimento
L'inserimento riguarda principalmente l'archiviazione dei documenti dell'organizzazione in modo che possano essere facilmente recuperati per rispondere alla domanda di un utente. La sfida consiste nel garantire che le parti dei documenti che meglio corrispondano alla query dell'utente vengano posizionate e usate durante l'inferenza. La corrispondenza viene eseguita principalmente tramite incorporamenti vettoriali e una ricerca di somiglianza coseno. Tuttavia, la corrispondenza è facilitata dalla comprensione della natura del contenuto (ad esempio, modelli e forma) e dalla strategia di organizzazione dei dati (la struttura dei dati quando vengono archiviati nel database vettoriale).
Per l'inserimento, gli sviluppatori devono considerare i passaggi seguenti:
- Pre-elaborazione ed estrazione del contenuto
- Strategia di suddivisione in blocchi
- Organizzazione di suddivisione in blocchi
- Strategia di aggiornamento
Pre-elaborazione ed estrazione del contenuto
Il contenuto pulito e accurato è uno dei modi migliori per migliorare la qualità complessiva di un sistema di chat basato su RAG. Per ottenere contenuto pulito e accurato, iniziare analizzando la forma e la forma dei documenti da indicizzare. I documenti sono conformi ai modelli di contenuto specificati, ad esempio la documentazione? In caso contrario, quali tipi di domande potrebbero rispondere ai documenti?
Come minimo, crea i passaggi nella pipeline di acquisizione per:
- Standardizzare i formati di testo
- Gestire caratteri speciali
- Rimuovere contenuto non correlato e obsoleto
- Account per il contenuto con controllo delle versioni
- Account per l'esperienza di contenuto (schede, immagini, tabelle)
- Estrarre i metadati
Alcune di queste informazioni, ad esempio metadati, potrebbero essere utili se vengono mantenute con il documento nel database vettoriale da usare durante il processo di recupero e valutazione nella pipeline di inferenza. Può anche essere combinato con il blocco di testo per modificare l'embedding del vettore del blocco.
Strategia di suddivisione in blocchi
Gli sviluppatori devono decidere come suddividere un documento più grande in blocchi più piccoli. La suddivisione in blocchi può migliorare la pertinenza del contenuto supplementare inviato all'LLM per rispondere in modo accurato alle query dell'utente. Considerare anche come usare i blocchi dopo il recupero. I progettisti di sistemi devono cercare tecniche di settore comuni ed eseguire alcune sperimentazioni. È anche possibile testare la strategia in modo limitato nella vostra organizzazione.
Gli sviluppatori devono prendere in considerazione:
- Ottimizzazione delle dimensioni dei chunk: Determinare la dimensione ideale dei chunk e come designarli. Per sezione? Per paragrafo? Per frase?
- blocchi di finestra sovrapposti e scorrevoli: determinare se dividere il contenuto in blocchi discreti o sovrapporre i blocchi? È anche possibile eseguire entrambe le operazioni, in una finestra scorrevole.
- Small2Big: quando la suddivisione in blocchi viene eseguita a un livello dettagliato come quello di una singola frase, il contenuto è organizzato in modo che sia facile trovare le frasi adiacenti o il paragrafo che contiene la frase? Il recupero di queste informazioni e la loro fornitura all'LLM potrebbero fornire più contesto per rispondere alle query degli utenti. Per altre informazioni, vedere la sezione successiva.
Organizzazione di suddivisione in blocchi
In un sistema RAG, l'organizzazione strategica dei dati nel database vettoriale è una chiave per il recupero efficiente delle informazioni pertinenti per aumentare il processo di generazione. Ecco i tipi di strategie di indicizzazione e recupero che è possibile prendere in considerazione:
- indici gerarchici: questo approccio prevede la creazione di più livelli di indici. Un indice di primo livello (un indice di riepilogo) restringe rapidamente lo spazio di ricerca a un subset di blocchi potenzialmente rilevanti. Un indice di secondo livello (un indice di blocchi) fornisce puntatori più dettagliati ai dati effettivi. Questo metodo può velocizzare significativamente il processo di recupero perché riduce il numero di voci da analizzare nell'indice dettagliato filtrando prima l'indice di riepilogo.
-
indici specializzati: a seconda della natura dei dati e delle relazioni tra blocchi, è possibile usare indici specializzati come database basati su grafo o relazionali:
- Gli indici basati su grafo sono utili quando i blocchi hanno informazioni o relazioni interconnesse che possono migliorare il recupero, ad esempio reti di citazione o grafici delle conoscenze.
- I database relazionali possono essere efficaci se gli insiemi di dati sono strutturati in un formato tabulare. Usare query SQL per filtrare e recuperare i dati in base a attributi o relazioni specifici.
- gli indici ibridi: un approccio ibrido combina più metodi di indicizzazione per applicare i punti di forza alla strategia complessiva. Ad esempio, è possibile usare un indice gerarchico per il filtro iniziale e un indice basato su grafo per esplorare dinamicamente le relazioni tra blocchi durante il recupero.
Ottimizzazione dell'allineamento
Per migliorare la pertinenza e l'accuratezza dei blocchi recuperati, allinearli il più possibile alle tipologie di domande o query a cui rispondono. Una strategia consiste nel generare e inserire una domanda ipotetica per ogni blocco che rappresenta la domanda a cui il blocco è più adatto a rispondere. Ciò consente in diversi modi:
- Miglioramento della corrispondenza: durante il recupero, il sistema può confrontare la query in ingresso con queste ipotetiche domande per trovare la miglior corrispondenza e aumentare la rilevanza dei blocchi recuperati.
- Dati di training per i modelli di Machine Learning: queste associazioni di domande e blocchi possono essere dati di training per migliorare i modelli di Machine Learning che sono i componenti sottostanti del sistema RAG. Il sistema RAG apprende quali tipi di domande sono meglio risposte da ogni blocco.
- gestione diretta delle query: se una query utente reale corrisponde strettamente a una domanda ipotetica, il sistema può recuperare e utilizzare rapidamente il blocco corrispondente e ridurre il tempo di risposta.
Ogni domanda ipotetica di ciascun blocco agisce come un'etichetta che guida l'algoritmo di recupero, quindi è più concentrato e consapevole del contesto. Questo tipo di ottimizzazione è utile quando i blocchi coprono un'ampia gamma di argomenti o tipi di informazioni.
Strategie di aggiornamento
Se l'organizzazione indicizza i documenti che vengono aggiornati di frequente, è essenziale mantenere un corpus aggiornato per garantire che il componente retriever possa accedere alle informazioni più aggiornate. Il componente retriever è la logica del sistema che esegue la query sul database vettoriale e poi restituisce i risultati. Ecco alcune strategie per aggiornare il database vettoriale in questi tipi di sistemi:
aggiornamenti incrementali:
- intervalli regolari: pianificare gli aggiornamenti a intervalli regolari (ad esempio, giornalieri o settimanali) in base alla frequenza delle modifiche dei documenti. Questo metodo garantisce che il database venga aggiornato periodicamente in base a una pianificazione nota.
- aggiornamenti attivati da trigger: implementare un sistema in cui un aggiornamento attiva la reindicizzazione. Ad esempio, qualsiasi modifica o aggiunta di un documento avvia automaticamente la reindicizzazione nelle sezioni interessate.
Aggiornamenti parziali:
- reindicizzazione selettiva: invece di reindicizzare un intero database, aggiornare solo le parti del corpus modificate. Questo approccio può essere più efficiente rispetto alla reindicizzazione completa, soprattutto per set di dati di grandi dimensioni.
- Codifica differenziale: archiviare solo le differenze tra i documenti esistenti e le versioni aggiornate. Questo approccio riduce il carico di elaborazione dei dati evitando la necessità di elaborare dati non modificati.
Controllo delle versioni:
- Creazione di snapshot: mantenere le versioni del corpus dei documenti in momenti diversi. Questa tecnica fornisce un meccanismo di backup e consente al sistema di ripristinare o fare riferimento alle versioni precedenti.
- Controllo della versione del documento: usare un sistema di controllo della versione per tenere traccia sistematicamente delle modifiche dei documenti per mantenere la cronologia delle modifiche e semplificare il processo di aggiornamento.
aggiornamenti in tempo reale:
- Elaborazione dei flussi: quando la tempestività delle informazioni è fondamentale, usare le tecnologie di elaborazione dei flussi per aggiornare in tempo reale il database vettoriale quando vengono apportate modifiche al documento.
- query in tempo reale: invece di basarsi esclusivamente su vettori preindicizzare, usare un approccio di query sui dati in tempo reale per up-to-date risposte, possibilmente combinando i dati in tempo reale con risultati memorizzati nella cache per ottenere un'efficienza.
tecniche di ottimizzazione:
Elaborazione batch: L'elaborazione batch accumula le modifiche per applicarle meno frequentemente, ottimizzando così le risorse e riducendo il sovraccarico.
approcci ibridi: combinare diverse strategie:
- Usare gli aggiornamenti incrementali per le modifiche secondarie.
- Usare la reindicizzazione completa per gli aggiornamenti principali.
- Documentare le modifiche strutturali apportate al corpus.
La scelta della strategia di aggiornamento corretta o la combinazione corretta dipende da requisiti specifici, tra cui:
- Dimensioni del corpo del documento
- Frequenza di aggiornamento
- Esigenze dei dati in tempo reale
- Disponibilità delle risorse
Valutare questi fattori in base alle esigenze dell'applicazione specifica. Ogni approccio ha compromessi in termini di complessità, costi e latenza di aggiornamento.
Pipeline di inferenza
Gli articoli sono in blocchi, vettorializzati e archiviati in un database vettoriale. A questo punto, concentrarsi sulla risoluzione delle sfide da completare.
Per ottenere i completamenti più accurati ed efficienti, è necessario tenere conto di molti fattori:
- La query dell'utente viene scritta in modo da ottenere i risultati che l'utente sta cercando?
- La query dell'utente viola una delle politiche dell'organizzazione?
- Come si riscrive la query dell'utente per migliorare le probabilità di trovare le corrispondenze più vicine nel database vettoriale?
- Come si valutano i risultati della query per assicurarsi che i blocchi dell'articolo siano allineati alla query?
- Come si valutano e si modificano i risultati della query prima di passarli in LLM per assicurarsi che i dettagli più rilevanti siano inclusi nel completamento?
- Come si valuta la risposta dell'LLM per assicurarsi che il completamento dell'LLM risponda alla query originale dell'utente?
- Come assicurarsi che la risposta dell'LLM sia conforme ai criteri dell'organizzazione?
L'intera pipeline di inferenza viene eseguita in tempo reale. Non esiste un modo giusto per progettare i passaggi di pre-elaborazione e post-elaborazione. È probabile che si scelga una combinazione di logica di programmazione e altre chiamate LLM. Una delle considerazioni più importanti è il compromesso tra la compilazione della pipeline più accurata e conforme possibile e il costo e la latenza necessari per farlo accadere.
Andiamo a identificare strategie specifiche in ogni fase della pipeline di inferenza.
Eseguire query sui passaggi di pre-elaborazione
La pre-elaborazione delle query viene eseguita immediatamente dopo l'invio della query da parte dell'utente:
L'obiettivo di questi passaggi è assicurarsi che l'utente ponga domande che rientrano nell'ambito del sistema e preparare la query dell'utente per aumentare la probabilità di individuare i migliori blocchi di articolo possibili, utilizzando la somiglianza del coseno o la ricerca del "vicino più prossimo".
controllo delle politiche: questo passaggio implica la logica che identifica, rimuove, contrassegna e rifiuta determinati contenuti. Alcuni esempi includono la rimozione dei dati personali, la rimozione di espletive e l'identificazione di tentativi di "jailbreak". Jailbreaking si riferisce ai tentativi dell'utente di aggirare o manipolare le linee guida operative, etiche o di sicurezza predefinite del modello.
La riscrittura delle query: questo passaggio potrebbe includere qualsiasi elemento, dall'espansione degli acronimi alla rimozione di slang, fino alla riformulazione della domanda per affrontarla in modo più astratto, al fine di estrarre concetti e principi di alto livello (sollecitazione di retrocessione).
Una variante del prompt dei passaggi indietro è Ipotetico incorporamento di documenti (HyDE). HyDE usa LLM per rispondere alla domanda dell'utente, crea un incorporamento per tale risposta (l'ipotetico incorporamento del documento) e quindi usa l'incorporamento per eseguire una ricerca sul database vettoriale.
Subqueries (Sottoquery)
Il passaggio di elaborazione delle sottoquery si basa sulla query originale. Se la query originale è lunga e complessa, può essere utile suddividerla a livello di codice in diverse query più piccole e quindi combinare tutte le risposte.
Ad esempio, una domanda sulle scoperte scientifiche nella fisica potrebbe essere: "Chi ha dato contributi più significativi alla fisica moderna, Albert Einstein o Niels Bohr?"
Suddividendo le query complesse in sottoquery, è possibile renderle più gestibili:
- Subquery 1: "Quali sono i principali contributi di Albert Einstein alla fisica moderna?"
- Subquery 2: "Quali sono i principali contributi di Niels Bohr alla fisica moderna?"
I risultati di queste sottoquery descrivono in dettaglio le principali teorie e scoperte da ogni fisico. Ad esempio:
- Per Einstein, i contributi potrebbero includere la teoria della relatività, l'effetto fotoelettrico e E=mc^2.
- Per Bohr, i contributi potrebbero includere il modello di Bohr dell'atomo di idrogeno, il lavoro di Bohr sulla meccanica quantistica e il principio di complementarità di Bohr.
Quando questi contributi vengono delineati, possono essere valutati per determinare ulteriori sottoquery. Ad esempio:
- Subquery 3: "In che modo le teorie di Einstein hanno influenzato lo sviluppo della fisica moderna?"
- Subquery 4: "Come le teorie di Bohr hanno influenzato lo sviluppo della fisica moderna?"
Queste sottoquery esplorano l'influenza di ogni scienziato sulla fisica, ad esempio:
- Come le teorie di Einstein hanno portato a progressi nella astronomia e nella teoria quantistica
- Come il lavoro di Bohr ha contribuito a comprendere la struttura atomica e la meccanica quantistica
La combinazione dei risultati di queste sottoquery può aiutare il modello linguistico a formare una risposta più completa su chi ha dato contributi più significativi alla fisica moderna in base ai loro progressi teorici. Questo metodo semplifica la query complessa originale accedendo a componenti più specifici e rispondebili e quindi sintetizzando tali risultati in una risposta coerente.
Router di query
L'organizzazione potrebbe scegliere di dividere il proprio insieme di contenuti in più archivi vettoriali o in interi sistemi di recupero. In questo scenario è possibile usare un router di query. Un router di query seleziona il database o l'indice più appropriato per fornire le risposte migliori a una query specifica.
Un router di query funziona in genere in un punto dopo che l'utente formula la query, ma prima di inviare la query ai sistemi di recupero.
Ecco un flusso di lavoro semplificato per un router di query:
- l'analisi delle query: L'LLM o un altro componente analizza la query in ingresso per comprendere il contenuto, il contesto e il tipo di informazioni di cui probabilmente si ha bisogno.
- selezione dell'indice: in base all'analisi, il router di query seleziona uno o più indici da potenzialmente diversi indici disponibili. Ogni indice può essere ottimizzato per tipi diversi di dati o query. Ad esempio, alcuni indici potrebbero essere più adatti alle interrogazioni fattuali. Altri indici potrebbero eccellere nel fornire opinioni o contenuti soggettivi.
- query dispatch: la query viene inviata all'indice selezionato.
- l'aggregazione dei risultati: le risposte degli indici selezionati vengono recuperate ed eventualmente aggregate o ulteriormente elaborate per formare una risposta completa.
- generazione di risposte: il passaggio finale prevede la generazione di una risposta coerente in base alle informazioni recuperate, eventualmente integrando o sintetizzando il contenuto da più origini.
L'organizzazione potrebbe usare più motori di recupero o indici per i casi d'uso seguenti:
- Specializzazione del tipo di dati: alcuni indici potrebbero essere specializzati in articoli di notizie, altri in documenti accademici e altri ancora in contenuti Web generali o database specifici, ad esempio per informazioni mediche o legali.
- Ottimizzazione dei tipi di query: Gli alcuni indici potrebbero essere ottimizzati per ricerche rapide di fatti (ad esempio, date o eventi). Altri potrebbero essere preferibili da usare per attività di ragionamento complesse o per le query che richiedono una profonda conoscenza del settore.
- differenze algoritmiche: è possibile usare algoritmi di recupero diversi in motori diversi, ad esempio ricerche di somiglianza basate su vettori, ricerche tradizionali basate su parole chiave o modelli di comprensione semantica più avanzati.
Si supponga di usare un sistema basato su RAG in un contesto di consulenza medica. Il sistema ha accesso a più indici:
- Indice di un documento di ricerca medica ottimizzato per spiegazioni dettagliate e tecniche
- Indice di case study clinico che fornisce esempi reali di sintomi e trattamenti
- Indice generale delle informazioni sulla salute per query di base e informazioni sulla salute pubblica
Se un utente pone una domanda tecnica sugli effetti biochimici di un nuovo farmaco, il router di query potrebbe dare priorità all'indice della carta di ricerca medica a causa della sua profondità e della sua attenzione tecnica. Per una domanda sui sintomi tipici di una malattia comune, tuttavia, l'indice di salute generale potrebbe essere scelto per il suo contenuto ampio e facilmente comprensibile.
Passaggi di elaborazione post-recupero
L'elaborazione post-recupero viene eseguita dopo che il componente retriever recupera i blocchi di contenuto pertinenti dal database vettoriale:
Con i blocchi di contenuto candidati recuperati, il passaggio successivo consiste nel convalidare l'utilità del blocco dell'articolo quando aumentare prompt LLM prima di preparare la richiesta da presentare all'LLM.
Ecco alcuni aspetti della richiesta da considerare:
- L'inclusione di troppe informazioni supplementari potrebbe comportare l'ignorare le informazioni più importanti.
- L'inclusione di informazioni irrilevanti potrebbe influire negativamente sulla risposta.
Un'altra considerazione è il problema dell'ago nel pagliaio, un termine che si riferisce a una stranezza nota di alcuni LLM, in cui il contenuto all'inizio e alla fine di un input ha un peso maggiore rispetto al contenuto nel mezzo.
Infine, prendere in considerazione la lunghezza massima della finestra di contesto di LLM e il numero di token necessari per completare richieste straordinariemente lunghe (in particolare per le query su larga scala).
Per risolvere questi problemi, una pipeline di elaborazione post-recupero potrebbe includere i passaggi seguenti:
- Filtraggio dei risultati: In questo passaggio, assicurarsi che i blocchi dell'articolo restituiti dal database vettoriale siano rilevanti per la query. Se non lo sono, quando viene composto il prompt dell'LLM, il risultato viene ignorato.
- Re-ranking: classificare i blocchi dell'articolo recuperati dall'archivio di vettori per assicurarsi che i dettagli pertinenti siano vicini ai bordi (l'inizio e la fine) del prompt.
- Richiesta di compressione: usare un modello di piccole dimensioni e poco costoso per comprimere e riepilogare più blocchi di articolo in un'unica richiesta compressa prima di inviare la richiesta a LLM.
Passaggi di elaborazione post-completamento
L'elaborazione finale avviene dopo che la query dell'utente e tutti i blocchi di contenuto vengono inviati all'LLM.
La convalida dell'accuratezza avviene dopo il completamento del prompt del LLM. Una pipeline di elaborazione post-completamento potrebbe includere i passaggi seguenti:
- verifica dei fatti: lo scopo consiste nell'identificare attestazioni specifiche effettuate nell'articolo che vengono presentate come fatti e quindi per verificare la precisione di tali fatti. Se la fase di verifica dei fatti ha esito negativo, può essere opportuno interrogare nuovamente l'LLM sperando di ottenere una risposta migliore oppure di restituire un messaggio di errore all'utente.
- controllo dei criteri: ultima linea di difesa per garantire che le risposte non contengano contenuto dannoso, sia per l'utente che per l'organizzazione.
Valutazione
La valutazione dei risultati di un sistema non deterministico non è semplice come l'esecuzione degli unit test o dei test di integrazione con cui la maggior parte degli sviluppatori ha familiarità. È necessario considerare diversi fattori:
- Gli utenti sono soddisfatti dei risultati ottenuti?
- Gli utenti ricevono risposte accurate alle loro domande?
- Come si acquisisce il feedback degli utenti? Sono presenti criteri che limitano i dati che è possibile raccogliere sui dati utente?
- Per la diagnosi di risposte insoddisfacenti, si ha visibilità su tutto il lavoro che è andato a rispondere alla domanda? Si mantiene un log di ogni fase nella pipeline di inferenza di input e output in modo da poter eseguire l'analisi della causa radice?
- Come è possibile apportare modifiche al sistema senza regressione o riduzione dei risultati?
Acquisizione e azione di feedback da parte degli utenti
Come descritto in precedenza, potrebbe essere necessario collaborare con il team della privacy dell'organizzazione per progettare meccanismi di raccolta dei feedback, telemetria e registrazione dei dati per l'analisi forense e l'individuazione della causa principale di una sessione di query.
Il passaggio successivo consiste nello sviluppare una pipeline di valutazione. Una pipeline di valutazione aiuta a gestire la complessità e la natura dispendiosa in termini di tempo nell'analisi del feedback testuale e delle cause principali delle risposte fornite da un sistema di intelligenza artificiale. Questa analisi è fondamentale perché implica l'analisi di ogni risposta per comprendere come la query di intelligenza artificiale ha prodotto i risultati, verificando l'adeguatezza dei blocchi di contenuto usati dalla documentazione e le strategie usate per suddividere questi documenti.
Implica anche la possibilità di prendere in considerazione eventuali passaggi aggiuntivi di pre-elaborazione o post-elaborazione che potrebbero migliorare i risultati. Questo esame dettagliato spesso individua lacune nel contenuto, in particolare quando non esiste alcuna documentazione appropriata per la risposta alla query di un utente.
La creazione di una pipeline di valutazione diventa essenziale per gestire efficacemente la scalabilità di queste attività. Una pipeline efficiente usa strumenti personalizzati per valutare le metriche che approssimano la qualità delle risposte fornite dall'intelligenza artificiale. Questo sistema semplifica il processo di determinazione del motivo per cui è stata data una risposta specifica alla domanda di un utente, quali documenti sono stati usati per generare tale risposta e l'efficacia della pipeline di inferenza che elabora le query.
Set di dati golden
Una strategia per valutare i risultati di un sistema non deterministico come un sistema di chat RAG consiste nell'usare un set di dati golden. Un dataset golden è un insieme curato di domande e risposte approvate, metadati (come argomento e tipo di domanda), riferimenti ai documenti di origine che possono fungere da verità di base per le risposte e persino variazioni (diverse formulazioni che catturano la diversità di come gli utenti potrebbero porre le stesse domande).
Un set di dati golden rappresenta lo "scenario migliore". Gli sviluppatori possono valutare il sistema per verificare le prestazioni e quindi eseguire test di regressione quando implementano nuove funzionalità o aggiornamenti.
Valutazione del danno
La modellazione dei danni è una metodologia volta a prevedere potenziali danni, individuare le carenze in un prodotto che potrebbe rappresentare rischi per gli individui e sviluppare strategie proattive per attenuare tali rischi.
Uno strumento progettato per valutare l'impatto della tecnologia, in particolare i sistemi di intelligenza artificiale, include diversi componenti chiave basati sui principi della modellazione dei danni, come descritto nelle risorse fornite.
Le funzionalità principali di uno strumento di valutazione dei danni possono includere:
identificazione degli stakeholder: lo strumento può aiutare gli utenti a identificare e classificare vari stakeholder interessati dalla tecnologia, inclusi utenti diretti, parti interessate indirettamente e altre entità, come le generazioni future o fattori non umani, ad esempio problemi ambientali.
categorie di danni e descrizioni: lo strumento può includere un elenco completo di potenziali danni, ad esempio perdita di privacy, disagio emotivo o sfruttamento economico. Lo strumento potrebbe guidare l'utente attraverso vari scenari, illustrare come la tecnologia potrebbe causare questi danni e aiutare a valutare le conseguenze sia intenzionali che indesiderate.
valutazioni di gravità e probabilità: lo strumento potrebbe aiutare gli utenti a valutare la gravità e la probabilità di ogni danno identificato. L'utente può classificare in ordine di priorità i problemi da risolvere per primi. Gli esempi includono valutazioni qualitative supportate dai dati, se disponibili.
strategie di mitigazione: lo strumento può suggerire potenziali strategie di mitigazione dopo che identifica e valuta i danni. Alcuni esempi includono modifiche alla progettazione del sistema, l'aggiunta di misure di sicurezza e soluzioni tecnologiche alternative che riducono al minimo i rischi identificati.
meccanismi di feedback: lo strumento deve incorporare meccanismi per raccogliere feedback dagli stakeholder in modo che il processo di valutazione dei danni sia dinamico e reattivo alle nuove informazioni e prospettive.
documentazione e creazione di report: per trasparenza e responsabilità, lo strumento potrebbe facilitare report dettagliati che documentino il processo di valutazione dei danni, i risultati e le potenziali azioni di mitigazione dei rischi intraprese.
Queste funzionalità consentono di identificare e mitigare i rischi, ma consentono anche di progettare sistemi di IA più etici e responsabili considerando un'ampia gamma di impatti fin dall'inizio.
Per altre informazioni, vedere questi articoli:
Test e verifica delle misure di sicurezza
Questo articolo descrive diversi processi volti a ridurre la possibilità di sfruttare o compromettere un sistema di chat basato su RAG. Red-teaming svolge un ruolo cruciale nel garantire che le mitigazioni siano efficaci. Il red-teaming implica la simulazione delle azioni di un potenziale antagonista per individuare potenziali debolezze o vulnerabilità nell'applicazione. Questo approccio è particolarmente vitale per affrontare il rischio significativo di jailbreaking.
Gli sviluppatori devono valutare rigorosamente le misure di sicurezza del sistema di chat basate su RAG in diversi scenari di linee guida per testarli e verificarli in modo efficace. Questo approccio non solo garantisce affidabilità, ma consente anche di ottimizzare le risposte del sistema per rispettare rigorosamente gli standard etici definiti e le procedure operative.
Considerazioni finali per la progettazione di applicazioni
Ecco un breve elenco di aspetti da considerare e altre considerazioni di questo articolo che potrebbero influire sulle decisioni di progettazione dell'applicazione:
- Riconoscere la natura non deterministica dell'IA generativa nella progettazione. Pianificare la variabilità negli output e configurare meccanismi per garantire coerenza e pertinenza nelle risposte.
- Valutare i vantaggi della pre-elaborazione delle richieste degli utenti rispetto al potenziale aumento della latenza e dei costi. Semplificare o modificare le richieste prima dell'invio potrebbe migliorare la qualità della risposta, ma potrebbe aggiungere complessità e tempo al ciclo di risposta.
- Per migliorare le prestazioni, esaminare le strategie per parallelizzare le richieste LLM. Questo approccio potrebbe ridurre la latenza, ma richiede un'attenta gestione per evitare una maggiore complessità e potenziali implicazioni in termini di costi.
Per iniziare subito a sperimentare la creazione di una soluzione di intelligenza artificiale generativa, è consigliabile esaminare Introduzione alla chat usando il proprio esempio di dati per Python. L'esercitazione è disponibile anche per .NET, Javae JavaScript.