Sviluppa assistenti avanzati basati sull'intelligenza artificiale generativa utilizzando RAG e suggerimenti ReAct - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Sviluppa assistenti avanzati basati sull'intelligenza artificiale generativa utilizzando RAG e suggerimenti ReAct

Creato da Praveen Kumar Jeyarajan (AWS), Jundong Qiao (AWS), Kara Yang (AWS), Kiowa Jackson (AWS), Noah Hamilton (AWS) e Shuai Cao (AWS)

Archivio di codici: genai-bedrock-chatbot

Ambiente: PoC o pilota

Tecnologie: apprendimento automatico e intelligenza artificiale; database DevOps; serverless

Servizi AWS: Amazon Bedrock; Amazon ECS; Amazon Kendra; AWS Lambda

Riepilogo

Un'azienda tipica ha il 70 percento dei propri dati intrappolati in sistemi isolati. Puoi utilizzare assistenti generativi basati su chat basati sull'intelligenza artificiale per sbloccare informazioni e relazioni tra questi silos di dati attraverso interazioni in linguaggio naturale. Per ottenere il massimo dall'intelligenza artificiale generativa, i risultati devono essere affidabili, accurati e includere i dati aziendali disponibili. Il successo degli assistenti basati sulla chat dipende da quanto segue:

Questo modello fornisce approcci per il recupero dei dati da fonti di dati come bucket Amazon Simple Storage Service (Amazon S3), AWS Glue e Amazon Relational Database Service (Amazon RDS). Si ottiene valore da tali dati combinando Retrieval Augmented Generation (RAG) con i metodi. chain-of-thought I risultati supportano complesse conversazioni con assistenti basate su chat che attingono alla totalità dei dati archiviati dall'azienda.

Questo modello utilizza i SageMaker manuali di Amazon e le tabelle dei dati dei prezzi come esempio per esplorare le funzionalità di un assistente generativo basato sull'intelligenza artificiale basato su chat. Creerai un assistente basato su chat che aiuterà i clienti a valutare il SageMaker servizio rispondendo a domande sui prezzi e sulle funzionalità del servizio. La soluzione utilizza una libreria Streamlit per la creazione dell'applicazione frontend e il LangChain framework per lo sviluppo del backend dell'applicazione basato su un modello di linguaggio di grandi dimensioni (LLM).

Le richieste all'assistente basato sulla chat vengono soddisfatte con una classificazione iniziale degli intenti per il routing verso uno dei tre possibili flussi di lavoro. Il flusso di lavoro più sofisticato combina una consulenza generale con un'analisi complessa dei prezzi. È possibile adattare il modello ai casi d'uso aziendali, aziendali e industriali.

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

  • LangChain non supporta tutti i LLM per lo streaming. I modelli Anthropic Claude sono supportati, ma i modelli di AI21 Labs no.

  • Questa soluzione viene distribuita su un singolo account AWS.

  • Questa soluzione può essere distribuita solo nelle regioni AWS in cui sono disponibili Amazon Bedrock e Amazon Kendra. Per informazioni sulla disponibilità, consulta la documentazione per Amazon Bedrock e Amazon Kendra.

Versioni del prodotto

  • Python versione 3.11 o successiva

  • Streamlit versione 1.30.0 o successiva

  • Streamlit-chat versione 0.1.1 o successiva

  • LangChain versione 0.1.12 o successiva

  • AWS CDK versione 2.132.1 o successiva

Architettura

Stack tecnologico Target

  • Amazon Athena

  • Amazon Bedrock

  • Amazon Elastic Container Service (Amazon ECS)

  • AWS Glue

  • AWS Lambda

  • Amazon S3

  • Amazon Kendra

  • Sistema di bilanciamento del carico elastico

Architettura di destinazione

Il codice CDK di AWS distribuirà tutte le risorse necessarie per configurare l'applicazione di assistenza basata su chat in un account AWS. L'applicazione di assistenza basata sulla chat mostrata nel diagramma seguente è progettata per rispondere alle domande correlate degli utenti. SageMaker Gli utenti si connettono tramite un Application Load Balancer a un VPC che contiene un cluster Amazon ECS che ospita l'applicazione Streamlit. Una funzione Lambda di orchestrazione si connette all'applicazione. Le sorgenti dati dei bucket S3 forniscono dati alla funzione Lambda tramite Amazon Kendra e AWS Glue. La funzione Lambda si connette ad Amazon Bedrock per rispondere alle domande (domande) degli utenti assistenti basati sulla chat.

Diagramma di architettura.
  1. La funzione di orchestrazione Lambda invia la richiesta di prompt LLM al modello Amazon Bedrock (Claude 2).

  2. Amazon Bedrock invia la risposta LLM alla funzione di orchestrazione Lambda.

Flusso logico all'interno della funzione Lambda di orchestrazione

Quando gli utenti fanno una domanda tramite l'applicazione Streamlit, richiama direttamente la funzione di orchestrazione Lambda. Il diagramma seguente mostra il flusso logico quando viene richiamata la funzione Lambda.

Diagramma dell'architettura.
  • Fase 1 — L'input query (domanda) è classificato in uno dei tre intenti:

    • Domande generali di SageMaker orientamento

    • Domande generali SageMaker sui prezzi (formazione/inferenza)

    • Domande complesse relative ai prezzi SageMaker

  • Fase 2 — L'input query avvia uno dei tre servizi:

    • RAG Retrieval service, che recupera il contesto pertinente dal database vettoriale Amazon Kendra e richiama l'LLM tramite Amazon Bedrock per riepilogare il contesto recuperato come risposta.

    • Database Query service, che utilizza il LLM, i metadati del database e le righe di esempio delle tabelle pertinenti per convertire l'input in una query SQL. query Il servizio Database Query esegue la query SQL sul database SageMaker dei prezzi tramite Amazon Athena e riassume i risultati della query come risposta.

    • In-context ReACT Agent service, che suddivide l'input query in più fasi prima di fornire una risposta. L'agente utilizza RAG Retrieval service e Database Query service come strumenti per recuperare le informazioni pertinenti durante il processo di ragionamento. Una volta completati i processi di ragionamento e azione, l'agente genera la risposta finale come risposta.

  • Fase 3 — La risposta della funzione Lambda di orchestrazione viene inviata all'applicazione Streamlit come output.

Strumenti

Servizi AWS

  • Amazon Athena è un servizio di query interattivo che ti aiuta ad analizzare i dati direttamente in Amazon Simple Storage Service (Amazon S3) utilizzando SQL standard.

  • Amazon Bedrock è un servizio completamente gestito che rende disponibili per l'uso modelli di base (FM) ad alte prestazioni delle principali startup di intelligenza artificiale e di Amazon tramite un'API unificata.

  • AWS Cloud Development Kit (AWS CDK) è un framework di sviluppo software che aiuta a definire e fornire l'infrastruttura cloud AWS in codice.

  • AWS Command Line Interface (AWS CLI) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

  • Amazon Elastic Container Service (Amazon ECS) è un servizio rapido e scalabile di gestione dei container che ti aiuta a eseguire, arrestare e gestire container in un cluster.

  • AWS Glue è un servizio di estrazione, trasformazione e caricamento (ETL) completamente gestito. Ti aiuta a classificare, pulire, arricchire e spostare i dati in modo affidabile tra archivi di dati e flussi di dati. Questo modello utilizza un crawler AWS Glue e una tabella AWS Glue Data Catalog.

  • Amazon Kendra è un servizio di ricerca intelligente che utilizza l'elaborazione del linguaggio naturale e algoritmi avanzati di apprendimento automatico per restituire risposte specifiche alle domande di ricerca dai tuoi dati.

  • AWS Lambda è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.

  • Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

  • Elastic Load Balancing (ELB) distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni. Ad esempio, puoi distribuire il traffico tra istanze Amazon Elastic Compute Cloud (Amazon EC2), contenitori e indirizzi IP in una o più zone di disponibilità.

Repository di codice

Il codice per questo pattern è disponibile nel GitHub genai-bedrock-chatbotrepository.

L'archivio del codice contiene i seguenti file e cartelle:

  • assetscartella: le risorse statiche, il diagramma dell'architettura e il set di dati pubblico

  • code/lambda-containerfolder — Il codice Python eseguito nella funzione Lambda

  • code/streamlit-appfolder — Il codice Python che viene eseguito come immagine del contenitore in Amazon ECS

  • testsfolder — I file Python che vengono eseguiti per testare unitariamente i costrutti CDK di AWS

  • code/code_stack.py— Il CDK AWS costruisce i file Python utilizzati per creare risorse AWS

  • app.py— I file Python dello stack CDK di AWS utilizzati per distribuire le risorse AWS nell'account AWS di destinazione

  • requirements.txt— L'elenco di tutte le dipendenze Python che devono essere installate per AWS CDK

  • requirements-dev.txt— L'elenco di tutte le dipendenze Python che devono essere installate affinché AWS CDK esegua la suite unit-test

  • cdk.json— Il file di input per fornire i valori necessari per avviare le risorse

Nota: il codice CDK di AWS utilizza costrutti L3 (livello 3) e policy AWS Identity and Access Management (IAM) gestite da AWS per distribuire la soluzione.

Best practice

Epiche

AttivitàDescrizioneCompetenze richieste

Esporta le variabili per l'account e la regione AWS in cui verrà distribuito lo stack.

Per fornire le credenziali AWS per AWS CDK utilizzando variabili di ambiente, esegui i seguenti comandi.

export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number> export CDK_DEFAULT_REGION=<region>
DevOps ingegnere, AWS DevOps

Configura il profilo AWS CLI.

Per configurare il profilo AWS CLI per l'account, segui le istruzioni nella documentazione AWS.

DevOps ingegnere, AWS DevOps
AttivitàDescrizioneCompetenze richieste

Clona il repository sul tuo computer locale.

Per clonare il repository, esegui il seguente comando nel tuo terminale.

git clone https://github.com/awslabs/genai-bedrock-chatbot.git
DevOps ingegnere, AWS DevOps

Configura l'ambiente virtuale Python e installa le dipendenze richieste.

Per configurare l'ambiente virtuale Python, esegui i seguenti comandi.

cd genai-bedrock-chatbot python3 -m venv .venv source .venv/bin/activate

Per configurare le dipendenze richieste, esegui il comando seguente.

pip3 install -r requirements.txt
DevOps ingegnere, AWS DevOps

Configura l'ambiente AWS CDK e sintetizza il codice CDK AWS.

  1. Per configurare l'ambiente AWS CDK nel tuo account AWS, esegui il comando seguente.

    cdk bootstrap aws://ACCOUNT-NUMBER/REGION
  2. Per convertire il codice in una configurazione CloudFormation dello stack AWS, esegui il comandocdk synth.

DevOps ingegnere, AWS DevOps
AttivitàDescrizioneCompetenze richieste

Fornire l'accesso al modello Claude.

Per abilitare l'accesso al modello Anthropic Claude per il tuo account AWS, segui le istruzioni nella documentazione di Amazon Bedrock.

AWS DevOps

Distribuisci risorse nell'account.

Per distribuire risorse nell'account AWS utilizzando il CDK AWS, procedi come segue:

  1. Nella radice del repository clonato, nel cdk.json file, fornisci gli input per i parametri. logging I valori di esempio sonoINFO,, eDEBUG. WARN ERROR

    Questi valori definiscono i messaggi a livello di registro per la funzione Lambda e l'applicazione Streamlit.

  2. Il app.py file nella radice del repository clonato contiene il nome dello CloudFormation stack AWS utilizzato per la distribuzione. Il nome dello stack predefinito è. chatbot-stack

  3. Per distribuire risorse, esegui il comando. cdk deploy

    Il cdk deploy comando utilizza costrutti L3 per creare più funzioni Lambda per copiare documenti e file di set di dati CSV nei bucket S3.

  4. Una volta completato il comando, accedi alla Console di gestione AWS, apri la CloudFormation console e verifica che lo stack sia stato distribuito correttamente.

Una volta completata la distribuzione, puoi accedere all'applicazione di assistenza basata sulla chat utilizzando l'URL fornito nella sezione Output. CloudFormation

AWS DevOps, DevOps ingegnere

Esegui il crawler AWS Glue e crea la tabella Data Catalog.

Un crawler AWS Glue viene utilizzato per mantenere dinamico lo schema dei dati. La soluzione crea e aggiorna le partizioni nella tabella del catalogo dati di AWS Glue eseguendo il crawler su richiesta. Dopo aver copiato i file del set di dati CSV nel bucket S3, esegui il crawler AWS Glue e crea lo schema della tabella Data Catalog per i test:

  1. Accedi alla console AWS Glue.

  2. Nel pannello di navigazione, in Data Catalog, scegli Crawlers.

  3. Seleziona il crawler con il suffisso. sagemaker-pricing-crawler

  4. Esegui il crawler.

  5. Una volta eseguito correttamente, il crawler crea una tabella AWS Glue Data Catalog.

Nota: il codice CDK AWS configura il crawler AWS Glue per l'esecuzione su richiesta, ma puoi anche pianificarne l'esecuzione periodica.

DevOps ingegnere, AWS DevOps

Avvia l'indicizzazione dei documenti.

Dopo aver copiato i file nel bucket S3, usa Amazon Kendra per scansionarli e indicizzarli:

  1. Accedi alla console Amazon Kendra.

  2. Seleziona l'indice con il suffisso. chatbot-index

  3. Nel riquadro di navigazione, scegli Origini dati e seleziona il connettore di origine dati con il suffissochatbot-index.

  4. Scegli Sincronizza ora per avviare il processo di indicizzazione.

Nota: il codice AWS CDK configura la sincronizzazione dell'indice Amazon Kendra per l'esecuzione su richiesta, ma puoi anche eseguirla periodicamente utilizzando il parametro Schedule.

AWS DevOps, DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Rimuovi le risorse AWS.

Dopo aver testato la soluzione, pulisci le risorse:

  1. Per rimuovere le risorse AWS distribuite dalla soluzione, esegui il comandocdk destroy.

  2. Elimina tutti gli oggetti dai due bucket S3, quindi rimuovi i bucket.

    Per ulteriori informazioni, consulta Eliminazione di un bucket.

DevOps ingegnere, AWS DevOps

Risoluzione dei problemi

ProblemaSoluzione

AWS CDK restituisce errori.

Per assistenza con i problemi di AWS CDK, consulta Risoluzione dei problemi comuni di AWS CDK.

Risorse correlate

Informazioni aggiuntive

Comandi AWS CDK

Quando lavori con AWS CDK, tieni presente i seguenti comandi utili:

  • Elenca tutti gli stack presenti nell'app

    cdk ls
  • Emette il modello AWS sintetizzato CloudFormation

    cdk synth
  • Distribuisce lo stack nell'account e nella regione AWS predefiniti

    cdk deploy
  • Confronta lo stack distribuito con lo stato attuale

    cdk diff
  • Apre la documentazione di AWS CDK

    cdk docs
  • Elimina lo CloudFormation stack e rimuove le risorse distribuite da AWS

    cdk destroy