L’intelligenza artificiale conversazionale ha fatto molta strada negli ultimi anni grazie ai rapidi sviluppi dell’intelligenza artificiale generativa, in particolare ai miglioramenti delle prestazioni dei modelli linguistici di grandi dimensioni (LLM) introdotti da tecniche di formazione come la messa a punto delle istruzioni e l’apprendimento per rinforzo dal feedback umano. Se sollecitati correttamente, questi modelli possono portare avanti conversazioni coerenti senza dati di addestramento specifici per l'attività. Tuttavia, non riescono a generalizzare adeguatamente alle domande specifiche dell'azienda perché, per generare una risposta, si affidano ai dati pubblici a cui sono stati esposti durante la fase preliminare della formazione. A tali dati spesso manca la conoscenza specializzata contenuta nei documenti interni disponibili nelle aziende moderne, che in genere è necessaria per ottenere risposte accurate in settori quali la ricerca farmaceutica, le indagini finanziarie e l'assistenza clienti.
Per creare assistenti AI in grado di sostenere discussioni basate sulla conoscenza aziendale specializzata, dobbiamo connettere questi LLM potenti ma generici alle basi di conoscenza interne dei documenti. Questo metodo per arricchire il contesto di generazione LLM con le informazioni recuperate dalle origini dati interne è chiamato Retrieval Augmented Generation (RAG) e produce assistenti specifici del dominio e più affidabili, come mostrato da Generazione aumentata di recupero per attività di PNL ad alta intensità di conoscenza. Un altro fattore alla base della popolarità di RAG è la sua facilità di implementazione e l'esistenza di soluzioni di ricerca vettoriale mature, come quelle offerte da Amazon Kendra (Vedi Amazon Kendra lancia l'API di recupero) e Servizio Amazon OpenSearch (Vedi Ricerca k-Nearest Neighbor (k-NN) in Amazon OpenSearch Service), tra gli altri.
Tuttavia, il popolare modello di progettazione RAG con ricerca semantica non è in grado di rispondere a tutti i tipi di domande possibili sui documenti. Ciò è particolarmente vero per le domande che richiedono un ragionamento analitico su più documenti. Ad esempio, immagina di pianificare la strategia di una società di investimento per il prossimo anno. Un passo essenziale sarebbe quello di analizzare e confrontare i risultati finanziari e i rischi potenziali delle aziende candidate. Questo compito prevede la risposta a domande di ragionamento analitico. Ad esempio, la query “Dammi le prime 5 aziende con il fatturato più elevato negli ultimi 2 anni e identifica i loro principali rischi” richiede più fasi di ragionamento, alcune delle quali possono utilizzare il recupero della ricerca semantica, mentre altre richiedono capacità analitiche.
In questo post mostriamo come progettare un assistente documentale intelligente in grado di rispondere a domande di ragionamento analitico e in più fasi in tre parti. Nella Parte 1, esaminiamo il modello di progettazione RAG e i suoi limiti sulle questioni analitiche. Quindi ti presentiamo un'architettura più versatile che supera queste limitazioni. La Parte 2 ti aiuta ad approfondire la pipeline di estrazione delle entità utilizzata per preparare i dati strutturati, che è un ingrediente chiave per la risposta analitica alle domande. La parte 3 spiega come utilizzare Roccia Amazzonica LLM per interrogare tali dati e creare un agente LLM che migliora RAG con capacità analitiche, consentendo così di creare assistenti documentali intelligenti in grado di rispondere a domande complesse specifiche del dominio su più documenti.
Parte 1: Limitazioni RAG e panoramica della soluzione
In questa sezione esamineremo il modello di progettazione RAG e ne discuteremo i limiti su questioni analitiche. Presentiamo anche un'architettura più versatile che supera queste limitazioni.
Panoramica di RAG
Le soluzioni RAG si ispirano apprendimento della rappresentazione ed ricerca semantica idee che sono state gradualmente adottate nel classificare i problemi (ad esempio, raccomandazione e ricerca) e nei compiti di elaborazione del linguaggio naturale (PNL) dal 2010.
L’approccio popolare utilizzato oggi è formato da tre fasi:
- Un processo di elaborazione batch offline inserisce documenti da una knowledge base di input, li suddivide in blocchi, crea un incorporamento per ogni blocco per rappresentarne la semantica utilizzando un modello di incorporamento pre-addestrato, ad esempio Titano Amazzonico modelli di incorporamento, quindi utilizza questi incorporamenti come input per creare un indice di ricerca semantica.
- Quando si risponde a una nuova domanda in tempo reale, la domanda di input viene convertita in un incorporamento, che viene utilizzato per cercare ed estrarre i blocchi di documenti più simili utilizzando una metrica di somiglianza, come la somiglianza del coseno, e un algoritmo approssimato dei vicini più vicini. La precisione della ricerca può anche essere migliorata con il filtraggio dei metadati.
- Un prompt viene costruito dalla concatenazione di un messaggio di sistema con un contesto formato dai blocchi rilevanti di documenti estratti nel passaggio 2 e dalla domanda di input stessa. Questo suggerimento viene quindi presentato a un modello LLM per generare la risposta finale alla domanda dal contesto.
Con il giusto modello di incorporamento sottostante, in grado di produrre rappresentazioni semantiche accurate dei blocchi del documento di input e delle domande di input, e un efficiente modulo di ricerca semantica, questa soluzione è in grado di rispondere a domande che richiedono il recupero di informazioni esistenti in un database di documenti. Ad esempio, se hai un servizio o un prodotto, potresti iniziare indicizzandone la sezione FAQ o la documentazione e disponendo di un'intelligenza artificiale conversazionale iniziale su misura per la tua offerta specifica.
Limitazioni di RAG basate sulla ricerca semantica
Sebbene RAG sia un componente essenziale nei moderni assistenti AI specifici del dominio e un punto di partenza sensato per costruire un'intelligenza artificiale conversazionale attorno a una base di conoscenza specializzata, non può rispondere a domande che richiedono scansione, confronto e ragionamento su tutti i documenti nella tua base di conoscenza. contemporaneamente, soprattutto quando l'aumento si basa esclusivamente sulla ricerca semantica.
Per comprendere queste limitazioni, consideriamo nuovamente l'esempio di decidere dove investire in base ai resoconti finanziari. Se dovessimo utilizzare RAG per conversare con questi rapporti, potremmo porre domande come “Quali sono i rischi che ha dovuto affrontare l’azienda X nel 2022” o “Quali sono le entrate nette dell’azienda Y nel 2022?” Per ciascuna di queste domande, il corrispondente vettore di incorporamento, che codifica il significato semantico della domanda, viene utilizzato per recuperare i pezzi di documenti top-K semanticamente simili disponibili nell'indice di ricerca. Ciò viene in genere ottenuto impiegando una soluzione approssimativa dei vicini più vicini come FAISS, NMSLIB, pgvettor o altri, che si sforzano di trovare un equilibrio tra velocità di recupero e richiamo per ottenere prestazioni in tempo reale mantenendo una precisione soddisfacente.
Tuttavia, l'approccio precedente non può rispondere con precisione a domande analitiche su tutti i documenti, come "Quali sono le prime 5 aziende con i ricavi netti più elevati nel 2022?"
Questo perché il recupero della ricerca semantica tenta di trovare i K pezzi di documenti più simili alla domanda di input. Ma poiché nessuno dei documenti contiene un riepilogo completo dei ricavi, verranno restituiti blocchi di documenti che contengono semplicemente menzioni di “entrate nette” e possibilmente “2022”, senza soddisfare la condizione essenziale di concentrarsi sulle aziende con le entrate più elevate. Se presentiamo questi risultati del recupero a un LLM come contesto per rispondere alla domanda di input, potrebbe formulare una risposta fuorviante o rifiutarsi di rispondere, perché mancano le informazioni corrette richieste.
Queste limitazioni derivano dalla progettazione perché la ricerca semantica non esegue una scansione approfondita di tutti i vettori di incorporamento per trovare documenti rilevanti. Utilizza invece metodi approssimati del vicino più vicino per mantenere una velocità di recupero ragionevole. Una strategia chiave per l'efficienza in questi metodi è segmentare lo spazio di incorporamento in gruppi durante l'indicizzazione. Ciò consente di identificare rapidamente quali gruppi possono contenere incorporamenti rilevanti durante il recupero, senza la necessità di confronti a coppie. Inoltre, anche le tradizionali tecniche dei vicini più vicini come KNN, che scansionano tutti i documenti, calcolano solo le metriche di distanza di base e non sono adatte per i confronti complessi necessari per il ragionamento analitico. Pertanto, RAG con ricerca semantica non è adattato per rispondere a domande che implicano un ragionamento analitico su tutti i documenti.
Per superare queste limitazioni, proponiamo una soluzione che combina RAG con metadati ed estrazione di entità, query SQL e agenti LLM, come descritto nelle sezioni seguenti.
Superare le limitazioni RAG con metadati, SQL e agenti LLM
Esaminiamo più approfonditamente una questione su cui la RAG fallisce, in modo da poter risalire al ragionamento necessario per rispondere in modo efficace. Questa analisi dovrebbe indicarci il giusto approccio che potrebbe integrare RAG nella soluzione complessiva.
Considera la domanda: “Quali sono le prime 5 aziende con i ricavi più elevati nel 2022?”
Per poter rispondere a questa domanda avremmo bisogno di:
- Identificare le entrate per ciascuna azienda.
- Filtra per mantenere i ricavi del 2022 per ciascuno di essi.
- Ordinare i ricavi in ordine decrescente.
- Suddividi i primi 5 ricavi accanto ai nomi delle società.
In genere, queste operazioni analitiche vengono eseguite su dati strutturati, utilizzando strumenti come panda o motori SQL. Se avessimo accesso a una tabella SQL contenente le colonne company
, revenue
e year
, potremmo facilmente rispondere alla nostra domanda eseguendo una query SQL, simile al seguente esempio:
SELECT company, revenue FROM table_name WHERE year = 2022 ORDER BY revenue DESC LIMIT 5;
La memorizzazione di metadati strutturati in una tabella SQL che contiene informazioni sulle entità rilevanti consente di rispondere a molti tipi di domande analitiche scrivendo la query SQL corretta. Questo è il motivo per cui integriamo RAG nella nostra soluzione con un modulo di interrogazione SQL in tempo reale su una tabella SQL, popolata da metadati estratti in un processo offline.
Ma come possiamo implementare e integrare questo approccio in un'intelligenza artificiale conversazionale basata su LLM?
Ci sono tre passaggi per poter aggiungere il ragionamento analitico SQL:
- Estrazione di metadati – Estrai metadati da documenti non strutturati in una tabella SQL
- Testo in SQL – Formulare query SQL da domande di input in modo accurato utilizzando un LLM
- Selezione degli strumenti – Identificare se è necessario rispondere a una domanda utilizzando RAG o una query SQL
Per implementare questi passaggi, riconosciamo innanzitutto che l'estrazione di informazioni da documenti non strutturati è un compito tradizionale della PNL per il quale gli LLM si dimostrano promettenti nel raggiungere un'elevata precisione attraverso l'apprendimento zero-shot o pochi-shot. In secondo luogo, la capacità di questi modelli di generare query SQL dal linguaggio naturale è stata dimostrata per anni, come visto nel file Rilascio 2020 of Amazon QuickSight D. Infine, la selezione automatica dello strumento giusto per una domanda specifica migliora l'esperienza dell'utente e consente di rispondere a domande complesse attraverso un ragionamento in più fasi. Per implementare questa funzionalità, approfondiremo gli agenti LLM in una sezione successiva.
Riassumendo, la soluzione che proponiamo è composta dai seguenti componenti principali:
- Recupero della ricerca semantica per aumentare il contesto di generazione
- Estrazione di metadati strutturati ed interrogazione con SQL
- Un agente capace di utilizzare gli strumenti giusti per rispondere a una domanda
Panoramica della soluzione
Il diagramma seguente illustra un'architettura semplificata della soluzione. Ti aiuta a identificare e comprendere il ruolo dei componenti principali e il modo in cui interagiscono per implementare il comportamento completo dell'assistente LLM. La numerazione si allinea con l'ordine delle operazioni durante l'implementazione di questa soluzione.
In pratica, abbiamo implementato questa soluzione come delineato nella seguente architettura dettagliata.
Per questa architettura, proponiamo un'implementazione su GitHub, con componenti liberamente accoppiati in cui il backend (5), le pipeline di dati (1, 2, 3) e il front-end (4) possono evolversi separatamente. Questo per semplificare la collaborazione tra le competenze durante la personalizzazione e il miglioramento della soluzione per la produzione.
Distribuisci la soluzione
Per installare questa soluzione nel tuo account AWS, completa i seguenti passaggi:
- Clona il file repository su GitHub.
- Installa il back-end Kit di sviluppo cloud AWS (AWSCDK) App:
- Aprire il
backend
cartella. - Correre
npm install
per installare le dipendenze. - Se non hai mai utilizzato AWS CDK nell'account corrente e nella regione, esegui bootstrapping con
npx cdk bootstrap
. - Correre
npx cdk deploy
per distribuire lo stack.
- Aprire il
- Facoltativamente, eseguire il file
streamlit-ui
come segue:- Ti consigliamo di clonare questo repository in un file Amazon Sage Maker Studio ambiente. Per ulteriori informazioni, fare riferimento a Onboarding nel dominio Amazon SageMaker utilizzando la configurazione rapida.
- All'interno del
frontend/streamlit-ui
cartella, eseguibash run-streamlit-ui.sh
. - Scegli il collegamento con il seguente formato per aprire la demo:
https://{domain_id}.studio.{region}.sagemaker.aws/jupyter/default/proxy/{port_number}/
.
- Infine, puoi eseguire il file Amazon Sage Maker pipeline definita nel
data-pipelines/04-sagemaker-pipeline-for-documents-processing.ipynb
notebook per elaborare i documenti PDF in input e preparare la tabella SQL e l'indice di ricerca semantica utilizzati dall'assistente LLM.
Nel resto di questo post, ci concentreremo sulla spiegazione dei componenti più importanti e delle scelte di progettazione, si spera per ispirarti quando progetti il tuo assistente AI su una base di conoscenza interna. Partiamo dal presupposto che i componenti 1 e 4 siano semplici da comprendere e ci concentriamo sui componenti principali 2, 3 e 5.
Parte 2: pipeline di estrazione delle entità
In questa sezione, approfondiamo la pipeline di estrazione delle entità utilizzata per preparare i dati strutturati, che è un ingrediente chiave per la risposta analitica alle domande.
Estrazione del testo
I documenti vengono generalmente archiviati in formato PDF o come immagini scansionate. Possono essere formati da semplici layout di paragrafo o tabelle complesse e contenere testo digitale o scritto a mano. Per estrarre correttamente le informazioni, dobbiamo trasformare questi documenti grezzi in testo semplice, preservandone la struttura originale. Per fare questo, puoi usare Testo Amazon, che è un servizio di machine learning (ML) che fornisce API mature per l'estrazione di testo, tabelle e moduli da input digitali e scritti a mano.
Nel componente 2, estraiamo testo e tabelle come segue:
- Per ogni documento, chiamiamo Amazon Textract per estrarre il testo e le tabelle.
- Usiamo quanto segue Script Python per ricreare tabelle come DataFrames panda.
- Consolidiamo i risultati in un unico documento e inseriamo tabelle come markdown.
Questo processo è delineato dal seguente diagramma di flusso e concretamente dimostrato in notebooks/03-pdf-document-processing.ipynb
.
Estrazione e interrogazione di entità utilizzando LLM
Per rispondere in modo efficace alle domande analitiche, è necessario estrarre metadati ed entità rilevanti dalla knowledge base del documento in un formato di dati strutturati accessibile. Suggeriamo di utilizzare SQL per archiviare queste informazioni e recuperare risposte grazie alla sua popolarità, facilità d'uso e scalabilità. Questa scelta beneficia anche della comprovata capacità dei modelli linguistici di generare query SQL dal linguaggio naturale.
In questa sezione, approfondiamo i seguenti componenti che consentono domande analitiche:
- Un processo batch che estrae dati strutturati da dati non strutturati utilizzando LLM
- Un modulo in tempo reale che converte le domande in linguaggio naturale in query SQL e recupera i risultati da un database SQL
È possibile estrarre i metadati rilevanti per supportare le domande analitiche come segue:
- Definisci uno schema JSON per le informazioni che devi estrarre, che contenga una descrizione di ciascun campo e il relativo tipo di dati e includa esempi dei valori previsti.
- Per ciascun documento, richiedi un LLM con lo schema JSON e chiedigli di estrarre i dati rilevanti in modo accurato.
- Quando la lunghezza del documento supera la lunghezza del contesto e per ridurre i costi di estrazione con LLM, è possibile utilizzare la ricerca semantica per recuperare e presentare i blocchi di documenti rilevanti al LLM durante l'estrazione.
- Analizza l'output JSON e convalida l'estrazione LLM.
- Facoltativamente, esegui il backup dei risultati su Amazon S3 come file CSV.
- Caricare nel database SQL per interrogazioni successive.
Questo processo è gestito dalla seguente architettura, dove i documenti in formato testo vengono caricati con uno script Python che viene eseguito in un file Elaborazione di Amazon SageMaker lavoro per eseguire l'estrazione.
Per ciascun gruppo di entità, costruiamo dinamicamente un prompt che include una chiara descrizione dell'attività di estrazione delle informazioni e include uno schema JSON che definisce l'output atteso e include i blocchi di documento rilevanti come contesto. Aggiungiamo anche alcuni esempi di input e output corretto per migliorare le prestazioni di estrazione con l'apprendimento a pochi colpi. Ciò è dimostrato in notebooks/05-entities-extraction-to-structured-metadata.ipynb
.
Parte 3: crea un assistente documenti agente con Amazon Bedrock
In questa sezione, dimostriamo come utilizzare Amazon Bedrock LLM per eseguire query sui dati e creare un agente LLM che migliora RAG con funzionalità analitiche, consentendoti così di creare assistenti documentali intelligenti in grado di rispondere a domande complesse specifiche del dominio su più documenti. Puoi fare riferimento a Funzione Lambda su GitHub per l'implementazione concreta dell'agente e degli strumenti descritti in questa parte.
Formulare query SQL e rispondere a domande analitiche
Ora che disponiamo di un archivio di metadati strutturato con le entità rilevanti estratte e caricate in un database SQL su cui possiamo eseguire query, la domanda che rimane è: come generare la query SQL corretta dalle domande in linguaggio naturale di input?
I moderni LLM sono bravi a generare SQL. Ad esempio, se richiedi all'Anthropic Claude LLM tramite Roccia Amazzonica per generare una query SQL, vedrai risposte plausibili. Tuttavia, dobbiamo rispettare alcune regole quando scriviamo il prompt per ottenere query SQL più precise. Queste regole sono particolarmente importanti per le query complesse per ridurre allucinazioni ed errori di sintassi:
- Descrivi accuratamente l'attività all'interno del prompt
- Includere lo schema delle tabelle SQL all'interno del prompt, descrivendo ciascuna colonna della tabella e specificandone il tipo di dati
- Indica esplicitamente a LLM di utilizzare solo i nomi di colonna e i tipi di dati esistenti
- Aggiungi alcune righe delle tabelle SQL
Potresti anche postelaborare la query SQL generata utilizzando un file linter ad esempio sqlfluff per correggere la formattazione o un parser come sqlglot per rilevare errori di sintassi e ottimizzare la query. Inoltre, quando le prestazioni non soddisfano i requisiti, è possibile fornire alcuni esempi all'interno del prompt per indirizzare il modello con l'apprendimento in pochi passaggi verso la generazione di query SQL più accurate.
Dal punto di vista dell'implementazione, utilizziamo an AWS Lambda funzione per orchestrare il seguente processo:
- Chiama un modello Anthropic Claude in Amazon Bedrock con la domanda di input per ottenere la query SQL corrispondente. Qui usiamo il Database SQL classe da LangChain per aggiungere descrizioni dello schema delle tabelle SQL pertinenti e utilizzare un prompt personalizzato.
- Analizza, convalida ed esegui la query SQL rispetto a Edizione compatibile con Amazon Aurora PostgreSQL Banca dati.
L'architettura per questa parte della soluzione è evidenziata nel diagramma seguente.
Considerazioni sulla sicurezza per prevenire attacchi SQL injection
Poiché consentiamo all'assistente AI di interrogare un database SQL, dobbiamo assicurarci che ciò non introduca vulnerabilità di sicurezza. Per raggiungere questo obiettivo, proponiamo le seguenti misure di sicurezza per prevenire attacchi SQL injection:
- Applica le autorizzazioni IAM con privilegi minimi – Limita l'autorizzazione della funzione Lambda che esegue le query SQL utilizzando un Gestione dell'identità e dell'accesso di AWS (IAM) politica e ruolo che seguono il principio del privilegio minimo. In questo caso, concediamo l'accesso in sola lettura.
- Limitare l'accesso ai dati – Fornire accesso solo al minimo indispensabile di tabelle e colonne per prevenire attacchi di divulgazione di informazioni.
- Aggiungi un livello di moderazione – Introdurre un livello di moderazione che rilevi tempestivamente i tentativi di iniezione tempestiva e impedisca loro di propagarsi al resto del sistema. Può assumere la forma di filtri basati su regole, corrispondenza di somiglianza con un database di esempi di prompt injection noti o un classificatore ML.
Recupero della ricerca semantica per aumentare il contesto di generazione
La soluzione che proponiamo utilizza RAG con ricerca semantica nel componente 3. Puoi implementare questo modulo utilizzando basi di conoscenza per Amazon Bedrock. Inoltre, ci sono molte altre opzioni per implementare RAG, come API di recupero di Amazon Kendra, Database vettoriale Amazon OpenSearche Amazon Aurora PostgreSQL con pgvettoriale, tra gli altri. Il pacchetto open source aws-genai-llm-chatbot dimostra come utilizzare molte di queste opzioni di ricerca vettoriale per implementare un chatbot basato su LLM.
In questa soluzione, poiché abbiamo bisogno sia di query SQL che di ricerca vettoriale, abbiamo deciso di utilizzare Amazon Aurora PostgreSQL con il file pgvettore estensione, che supporta entrambe le funzionalità. Pertanto, implementiamo il componente RAG di ricerca semantica con la seguente architettura.
Il processo di risposta alle domande utilizzando l'architettura precedente viene eseguito in due fasi principali.
Innanzitutto, un processo batch offline, eseguito come processo di elaborazione SageMaker, crea l'indice di ricerca semantica come segue:
- Periodicamente o alla ricezione di nuovi documenti, viene eseguito un lavoro SageMaker.
- Carica i documenti di testo da Amazon S3 e li divide in blocchi sovrapposti.
- Per ogni blocco, utilizza un modello di incorporamento Amazon Titan per generare un vettore di incorporamento.
- Usa il PGVector classe da LangChain per acquisire gli incorporamenti, con i relativi blocchi di documenti e metadati, in Amazon Aurora PostgreSQL e creare un indice di ricerca semantica su tutti i vettori di incorporamento.
In secondo luogo, in tempo reale e per ogni nuova domanda, costruiamo una risposta come segue:
- La domanda viene ricevuta dall'orchestratore che viene eseguito su una funzione Lambda.
- L'orchestratore incorpora la domanda con lo stesso modello di incorporamento.
- Recupera i primi K blocchi di documenti più rilevanti dall'indice di ricerca semantica PostgreSQL. Facoltativamente utilizza il filtraggio dei metadati per migliorare la precisione.
- Questi blocchi vengono inseriti dinamicamente in un prompt LLM insieme alla domanda di input.
- Il prompt viene presentato ad Anthropic Claude su Amazon Bedrock, per istruirlo a rispondere alla domanda di input in base al contesto disponibile.
- Infine, la risposta generata viene rinviata all'orchestratore.
Un agente capace di utilizzare strumenti per ragionare e agire
Finora in questo post abbiamo discusso del trattamento separato delle domande che richiedono il RAG o il ragionamento analitico. Tuttavia, molte domande del mondo reale richiedono entrambe le capacità, a volte attraverso più fasi di ragionamento, per raggiungere una risposta finale. Per supportare queste domande più complesse, dobbiamo introdurre la nozione di agente.
Agenti LLM, come il agenti per Amazon Bedrock, sono emerse recentemente come una soluzione promettente in grado di utilizzare gli LLM per ragionare e adattarsi al contesto attuale e per scegliere azioni appropriate da un elenco di opzioni, che presenta un quadro generale per la risoluzione dei problemi. Come discusso in Agenti autonomi alimentati da LLM, esistono molteplici strategie di prompt e modelli di progettazione per gli agenti LLM che supportano ragionamenti complessi.
Uno di questi modelli di progettazione è Reason and Act (ReAct), introdotto in ReAct: sinergia tra ragionamento e azione nei modelli linguistici. In ReAct, l'agente prende come input un obiettivo che può essere una domanda, identifica le informazioni mancanti per rispondere e propone iterativamente lo strumento giusto per raccogliere informazioni in base alle descrizioni degli strumenti disponibili. Dopo aver ricevuto la risposta da un determinato strumento, il LLM rivaluta se dispone di tutte le informazioni necessarie per rispondere completamente alla domanda. In caso contrario, esegue un’altra fase di ragionamento e utilizza lo stesso o un altro strumento per raccogliere più informazioni, finché non è pronta una risposta finale o non viene raggiunto un limite.
Il seguente diagramma di sequenza spiega come funziona un agente ReAct per rispondere alla domanda "Dammi le prime 5 aziende con le entrate più elevate negli ultimi 2 anni e identifica i rischi associati a quella principale".
I dettagli sull'implementazione di questo approccio in Python sono descritti in Agente LLM personalizzato. Nella nostra soluzione, l'agente e gli strumenti sono implementati con la seguente architettura parziale evidenziata.
Per rispondere a una domanda di input, utilizziamo i servizi AWS come segue:
- Un utente inserisce la domanda tramite un'interfaccia utente, che richiama un'API Gateway API Amazon.
- API Gateway invia la domanda a una funzione Lambda che implementa l'esecutore dell'agente.
- L'agente chiama LLM con un prompt che contiene una descrizione degli strumenti disponibili, il formato dell'istruzione ReAct e la domanda di input, quindi analizza l'azione successiva da completare.
- L'azione contiene quale strumento chiamare e qual è l'input dell'azione.
- Se lo strumento da utilizzare è SQL, l'esecutore dell'agente chiama SQLQA per convertire la domanda in SQL ed eseguirla. Quindi aggiunge il risultato al prompt e richiama nuovamente LLM per verificare se è in grado di rispondere alla domanda originale o se sono necessarie ulteriori azioni.
- Allo stesso modo, se lo strumento da utilizzare è la ricerca semantica, l'input dell'azione viene analizzato e utilizzato per recuperare dall'indice di ricerca semantica PostgreSQL. Aggiunge i risultati al prompt e controlla se LLM è in grado di rispondere o necessita di un'altra azione.
- Dopo che tutte le informazioni per rispondere a una domanda sono disponibili, l'agente LLM formula una risposta finale e la invia all'utente.
È possibile estendere l'agente con ulteriori strumenti. Nell'implementazione disponibile su GitHub, dimostreremo come aggiungere un motore di ricerca e una calcolatrice come strumenti aggiuntivi al già citato motore SQL e agli strumenti di ricerca semantica. Per memorizzare la cronologia delle conversazioni in corso, utilizziamo un file Amazon DynamoDB tabella.
Dalla nostra esperienza finora, abbiamo visto che le seguenti sono le chiavi per un agente di successo:
- Un LLM sottostante in grado di ragionare con il formato ReAct
- Una descrizione chiara degli strumenti disponibili, quando utilizzarli e una descrizione dei relativi argomenti di input con, potenzialmente, un esempio dell'input e dell'output previsto
- Uno schema chiaro del formato ReAct che il LLM deve seguire
- Gli strumenti giusti per risolvere la questione aziendale messi a disposizione dell'agente LLM
- Analisi corretta degli output dalle risposte dell'agente LLM man mano che ragiona
Per ottimizzare i costi, consigliamo di memorizzare nella cache le domande più comuni con le relative risposte e di aggiornare periodicamente questa cache per ridurre le chiamate al LLM sottostante. Ad esempio, puoi creare un indice di ricerca semantica con le domande più comuni come spiegato in precedenza e abbinare la domanda del nuovo utente all'indice prima di chiamare LLM. Per esplorare altre opzioni di memorizzazione nella cache, fare riferimento a Integrazioni di memorizzazione nella cache LLM.
Supporta altri formati come video, immagini, audio e file 3D
Puoi applicare la stessa soluzione a vari tipi di informazioni, come immagini, video, audio e file di progettazione 3D come file CAD o mesh. Ciò implica l'utilizzo di tecniche ML consolidate per descrivere il contenuto del file in testo, che può quindi essere inserito nella soluzione esplorata in precedenza. Questo approccio consente di condurre conversazioni di QA su questi diversi tipi di dati. Ad esempio, puoi espandere il database dei tuoi documenti creando descrizioni testuali di immagini, video o contenuti audio. Puoi anche migliorare la tabella dei metadati identificando le proprietà tramite la classificazione o il rilevamento di oggetti sugli elementi all'interno di questi formati. Dopo che questi dati estratti sono stati indicizzati nell'archivio dei metadati o nell'indice di ricerca semantica dei documenti, l'architettura complessiva del sistema proposto rimane ampiamente coerente.
Conclusione
In questo post, abbiamo mostrato come l'utilizzo degli LLM con il modello di progettazione RAG sia necessario per creare un assistente AI specifico per il dominio, ma non sia sufficiente per raggiungere il livello di affidabilità richiesto per generare valore aziendale. Per questo motivo, abbiamo proposto di estendere il popolare modello di progettazione RAG con i concetti di agenti e strumenti, in cui la flessibilità degli strumenti ci consente di utilizzare sia le tradizionali tecniche di PNL che le moderne funzionalità LLM per consentire a un assistente AI con più opzioni di cercare informazioni e assistere utenti nella risoluzione efficiente dei problemi aziendali.
La soluzione dimostra il processo di progettazione verso un assistente LLM in grado di rispondere a vari tipi di domande di recupero, ragionamento analitico e ragionamento in più fasi su tutta la base di conoscenza. Abbiamo anche evidenziato l'importanza di pensare a ritroso rispetto ai tipi di domande e attività con cui il tuo assistente LLM dovrebbe aiutare gli utenti. In questo caso, il percorso di progettazione ci ha portato a un'architettura con tre componenti: ricerca semantica, estrazione di metadati e query SQL, agente e strumenti LLM, che riteniamo sia sufficientemente generica e flessibile per molteplici casi d'uso. Riteniamo inoltre che, traendo ispirazione da questa soluzione e approfondendo le esigenze dei tuoi utenti, sarai in grado di estendere ulteriormente questa soluzione verso ciò che funziona meglio per te.
Circa gli autori
Mohamed Ali Jamaoui è un Senior ML Prototyping Architect con 10 anni di esperienza nell'apprendimento automatico della produzione. Gli piace risolvere problemi aziendali con l'apprendimento automatico e l'ingegneria del software e aiutare i clienti a ottenere valore aziendale con il machine learning. Nell'ambito di AWS EMEA Prototyping and Cloud Engineering, aiuta i clienti a creare soluzioni aziendali che sfruttano le innovazioni in MLOP, NLP, CV e LLM.
Giuseppe Hannen è un consulente associato di ProServe. Giuseppe applica le sue capacità analitiche in combinazione con AI&ML per sviluppare soluzioni chiare ed efficaci per i suoi clienti. Ama trovare soluzioni semplici a problemi complicati, soprattutto quelli che coinvolgono gli ultimi sviluppi tecnologici e la ricerca.
Laurens ten Cate è uno scienziato dei dati senior. Laurens lavora con clienti aziendali nell'area EMEA aiutandoli ad accelerare i risultati aziendali utilizzando le tecnologie AI/ML di AWS. È specializzato in soluzioni NLP e si concentra sul settore della catena di fornitura e della logistica. Nel tempo libero si dedica alla lettura e all'arte.
Irina Radù è un Prototyping Engagement Manager, parte di AWS EMEA Prototyping and Cloud Engineering. Aiuta i clienti a ottenere il meglio dalle tecnologie più recenti, a innovare più rapidamente e a pensare in grande.
- Distribuzione di contenuti basati su SEO e PR. Ricevi amplificazione oggi.
- PlatoData.Network Generativo verticale Ai. Potenzia te stesso. Accedi qui.
- PlatoAiStream. Intelligenza Web3. Conoscenza amplificata. Accedi qui.
- PlatoneESG. Carbonio, Tecnologia pulita, Energia, Ambiente, Solare, Gestione dei rifiuti. Accedi qui.
- Platone Salute. Intelligence sulle biotecnologie e sulle sperimentazioni cliniche. Accedi qui.
- Fonte: https://aws.amazon.com/blogs/machine-learning/boosting-rag-based-intelligent-document-assistants-using-entity-extraction-sql-querying-and-agents-with-amazon-bedrock/
- :ha
- :È
- :non
- :Dove
- $ SU
- 1
- 10
- 100
- 2022
- 3d
- 7
- a
- capacità
- capace
- WRI
- accelerare
- accesso
- accessibile
- compiuto
- Il mio account
- precisione
- preciso
- con precisione
- Raggiungere
- il raggiungimento
- operanti in
- Legge
- recitazione
- Action
- azioni
- adattare
- aggiungere
- Inoltre
- Aggiunge
- adottato
- Dopo shavasana, sedersi in silenzio; saluti;
- ancora
- contro
- Agente
- agenti
- AI
- Assistente AI
- AI / ML
- algoritmo
- Allinea
- Tutti
- consente
- a fianco di
- anche
- Amazon
- Amazon Sage Maker
- Testo Amazon
- Amazon Web Services
- tra
- an
- .
- Analitico
- analizzare
- ed
- Un altro
- rispondere
- risposte
- Antropico
- in qualsiasi
- api
- API
- si applica
- APPLICA
- approccio
- opportuno
- approssimativo
- architettura
- SONO
- argomenti
- in giro
- Arte
- AS
- chiedere
- assistere
- Assistant
- assistenti
- Associate
- associato
- assumere
- At
- attacchi
- Tentativi
- Audio
- aumentare
- aumentata
- Aurora
- automaticamente
- autonomo
- disponibile
- AWS
- precedente
- BACKEND
- Equilibrio
- base
- basato
- basic
- BE
- perché
- stato
- prima
- comportamento
- dietro
- CREDIAMO
- vantaggi
- MIGLIORE
- fra
- Al di là di
- maggiore
- potenziamento
- entrambi
- costruire
- Costruzione
- affari
- aziende
- ma
- by
- Cache
- CAD
- chiamata
- detto
- chiamata
- Bandi
- Materiale
- candidato
- funzionalità
- capace
- trasportare
- Custodie
- casi
- catena
- chatbot
- Controlli
- scegliere
- scelte
- Scegli
- classe
- classificazione
- pulire campo
- Cloud
- COERENTE
- collaborazione
- Colonna
- colonne
- combinazione
- combina
- Venire
- Uncommon
- Aziende
- azienda
- confrontare
- confronto
- confronto
- Complemento
- completamento di una
- complesso
- complicato
- componente
- componenti
- composto
- globale
- Calcolare
- concetti
- calcestruzzo
- condizione
- Segui il codice di Condotta
- Connettiti
- Prendere in considerazione
- Considerazioni
- coerente
- consolidare
- costruire
- consulente
- contenere
- contenute
- contiene
- contenuto
- contesto
- Conversazione
- discorsivo
- AI conversazionale
- Conversazioni
- convertire
- convertito
- Nucleo
- correggere
- correttamente
- Corrispondente
- Costo
- Costi
- potuto
- accoppiato
- creare
- crea
- Creazione
- Corrente
- costume
- cliente
- Assistenza clienti
- Clienti
- dati
- l'accesso ai dati
- scienziato di dati
- Banca Dati
- deciso
- Decidere
- deep
- più profondo
- definito
- definisce
- scavare
- Richiesta
- dimostrazione
- dimostrare
- dimostrato
- dimostra
- dipendenze
- schierare
- descrivere
- descritta
- descrivendo
- descrizione
- Design
- modelli di progettazione
- processo di progettazione
- progettazione
- dettagliati
- dettagli
- individuare
- rivelazione
- sviluppare
- Mercato
- sviluppi
- digitale
- Rivelazione
- discutere
- discusso
- discussioni
- distanza
- immersione
- paesaggio differenziato
- immersione
- do
- documento
- documentazione
- documenti
- effettua
- non
- dominio
- domini
- fatto
- giù
- autista
- dovuto
- durante
- dinamicamente
- ogni
- In precedenza
- Presto
- alleviare
- facilità d'uso
- facilmente
- Efficace
- in maniera efficace
- efficienza
- efficiente
- in modo efficiente
- o
- elementi
- incorporamento
- emerse
- impiegando
- enable
- Abilita
- consentendo
- fine
- Fidanzamento
- motore
- Ingegneria
- Motori
- accrescere
- Migliora
- abbastanza
- arricchendo
- Impresa
- entità
- entità
- Ambiente
- errori
- particolarmente
- essential
- sviluppate
- Anche
- evolvere
- esaminare
- esempio
- Esempi
- esistenza
- esistente
- Espandere
- previsto
- esperienza
- ha spiegato
- spiegando
- Spiega
- esplora
- Esplorazione
- esposto
- estendere
- estendendo
- estensione
- extra
- estratto
- estrazione
- estratti
- di fronte
- fallisce
- FAQ
- lontano
- più veloce
- caratteristica
- Caratteristiche
- feedback
- pochi
- campo
- Compila il
- File
- filtraggio
- filtri
- finale
- Infine
- finanziario
- Trovate
- Nome
- Flessibilità
- flessibile
- flusso
- Focus
- messa a fuoco
- i seguenti
- segue
- Nel
- modulo
- formato
- formato
- forme
- Contesto
- Gratis
- da
- anteriore
- Fine frontale
- realizzazione
- pieno
- completamente
- function
- ulteriormente
- porta
- raccogliere
- Generale
- generare
- generato
- la generazione di
- ELETTRICA
- generativo
- AI generativa
- ottenere
- ottenere
- GitHub
- dato
- scopo
- buono
- gradualmente
- concedere
- Gruppo
- Gruppo
- ha avuto
- Avere
- avendo
- he
- Aiuto
- aiutare
- aiuta
- qui
- Alta
- massimo
- Evidenziato
- il suo
- storia
- Fiduciosamente
- Come
- Tutorial
- Tuttavia
- HTML
- HTTPS
- umano
- idee
- identifica
- identificare
- identificazione
- Identità
- if
- Immagine
- immagini
- immagine
- realizzare
- implementazione
- implementato
- Implementazione
- importanza
- importante
- competenze
- migliorata
- miglioramenti
- miglioramento
- in
- inclusi
- Index
- indicizzati
- industria
- informazioni
- estrazione di informazioni
- inizialmente
- innovare
- innovazioni
- ingresso
- Ingressi
- Ispirazione
- ispirare
- fonte di ispirazione
- install
- esempio
- invece
- integrare
- Intelligente
- interagire
- interno
- ai miglioramenti
- introdurre
- introdotto
- Investire
- indagine
- investimento
- coinvolgere
- IT
- SUO
- stessa
- Lavoro
- viaggio
- jpg
- json
- mantenere
- Le
- Tasti
- conoscenze
- conosciuto
- Lingua
- grandi
- maggiormente
- Cognome
- dopo
- con i più recenti
- lancia
- strato
- apprendimento
- meno
- Guidato
- Lunghezza
- Livello
- Leva
- piace
- LIMITE
- limiti
- LINK
- Lista
- LLM
- carichi
- logistica
- settore della logistica
- Lunghi
- ama
- macchina
- machine learning
- fatto
- Principale
- mantenere
- Mantenere
- make
- gestito
- direttore
- molti
- partita
- corrispondenza
- alunni
- Maggio..
- me
- significato
- analisi
- Soddisfare
- menziona
- semplicemente
- maglia
- messaggio
- Metadati
- metodo
- metodi
- metrico
- Metrica
- ordine
- ingannevole
- mancante
- ML
- MLOp
- modello
- modelli
- moderazione
- moderno
- Moduli
- Scopri di più
- Inoltre
- maggior parte
- multiplo
- devono obbligatoriamente:
- nomi
- Naturale
- Elaborazione del linguaggio naturale
- necessaria
- Bisogno
- di applicazione
- esigenze
- vicinato
- rete
- guadagno netto
- mai
- New
- GENERAZIONE
- nlp
- Nessuna
- taccuino
- Nozione
- oggetto
- Rilevazione dell'oggetto
- of
- offerto
- offerta
- offline
- di frequente
- on
- ONE
- in corso
- esclusivamente
- aprire
- open source
- Operazioni
- OTTIMIZZA
- Opzioni
- or
- minimo
- i
- Altro
- Altri
- nostro
- su
- risultati
- contorno
- delineato
- produzione
- uscite
- ancora
- complessivo
- Superare
- proprio
- pacchetto
- panda
- parte
- Ricambi
- Cartamodello
- modelli
- Eseguire
- performance
- autorizzazione
- prospettiva
- Pharmaceutical
- pezzi
- conduttura
- pianura
- pianificazione
- Platone
- Platone Data Intelligence
- PlatoneDati
- plausibile
- punto
- politica
- Popolare
- popolarità
- popolata
- possibile
- forse
- Post
- Postgresql
- potenziale
- potenzialmente
- alimentato
- potente
- pratica
- Precisione
- Preparare
- presenti
- presentata
- presents
- preservare
- prevenire
- impedisce
- in precedenza
- privilegio
- problem-solving
- problemi
- processi
- lavorazione
- produce
- produzione
- Prodotto
- Produzione
- PROMETTIAMO
- promettente
- proprietà
- offre
- proposto
- propone
- prototipazione
- comprovata
- fornire
- fornisce
- la percezione
- Python
- Domande e risposte
- query
- domanda
- Domande
- Presto
- rapidamente
- Posizione
- veloce
- Crudo
- raggiungere
- a raggiunto
- Reagire
- Lettura
- pronto
- di rose
- mondo reale
- tempo reale
- ragione
- ragionevole
- ricevuto
- ricevente
- recente
- recentemente
- riconoscere
- raccomandare
- Consigli
- ridurre
- riferimento
- regione
- pertinente
- problemi di
- fare affidamento
- resti
- Report
- deposito
- rappresentare
- richiesta
- richiedere
- necessario
- requisito
- richiede
- riparazioni
- risposta
- risposte
- REST
- colpevole
- Risultati
- ritorno
- Le vendite
- ricavi
- recensioni
- destra
- rischi
- Ruolo
- norme
- Correre
- running
- corre
- sagemaker
- stesso
- Scalabilità
- scansione
- scansione
- Scienziato
- copione
- Cerca
- motore di ricerca
- Secondo
- Sezione
- sezioni
- problemi di
- Misure di sicurezza
- vedere
- Cercare
- visto
- Selezione
- prodotti
- semantica
- invia
- anziano
- inviato
- Sequenza
- servizio
- Servizi
- lei
- dovrebbero
- mostrare attraverso le sue creazioni
- ha mostrato
- mostrato
- simile
- Un'espansione
- semplificata
- semplificare
- contemporaneamente
- da
- singolo
- abilità
- So
- finora
- Software
- Ingegneria del software
- unicamente
- soluzione
- Soluzioni
- Soluzione
- alcuni
- a volte
- Fonte
- fonti
- lo spazio
- specializzata
- specializzata
- specifico
- velocità
- Si divide
- pila
- tappe
- inizia a
- Di partenza
- guidare
- step
- Passi
- Tornare al suo account
- memorizzati
- lineare
- strategie
- Strategia
- sciopero
- lottare
- La struttura
- strutturato
- studio
- di successo
- tale
- suggerire
- adatto
- riassumere
- fornire
- supply chain
- supporto
- supporti
- sicuro
- sintassi
- sistema
- tavolo
- su misura
- Fai
- prende
- Task
- task
- Tech
- tecniche
- tecnologico
- Tecnologie
- dire
- carnagione
- testo
- testuale
- Grazie
- che
- Il
- le informazioni
- loro
- Li
- poi
- Là.
- in tal modo
- perciò
- Strumenti Bowman per analizzare le seguenti finiture:
- di
- think
- Pensiero
- questo
- quelli
- tre
- Attraverso
- tempo
- titano
- a
- oggi
- strumenti
- top
- top 5
- verso
- verso
- Traccia
- tradizionale
- Training
- Trasformare
- trattare
- vero
- affidabili sul mercato
- seconda
- Digitare
- Tipi di
- tipicamente
- ui
- sottostante
- capire
- fino a quando
- aggiornamento
- su
- us
- uso
- utilizzato
- Utente
- Esperienza da Utente
- utenti
- usa
- utilizzando
- CONVALIDARE
- APPREZZIAMO
- Valori
- varietà
- vario
- versatile
- Video
- Video
- vulnerabilità
- passeggiate
- Modo..
- we
- sito web
- servizi web
- WELL
- sono stati
- Che
- quando
- mentre
- se
- quale
- while
- perché
- wikipedia
- volere
- con
- entro
- senza
- lavori
- sarebbe
- scrittura
- X
- anno
- anni
- Tu
- Trasferimento da aeroporto a Sharm
- zefiro