

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
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting"></a>

*Praveen Kumar Jeyarajan, Shuai Cao, Noah Hamilton, Kiowa Jackson, Jundong Qiao e Kara Yang, Amazon Web Services*

## Riepilogo
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-summary"></a>

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:
+ Modelli di intelligenza artificiale generativa (come Anthropic Claude 2)
+ Vettorizzazione delle fonti di dati
+ Tecniche di ragionamento avanzate, come il [ReAct framework, per suggerire il modello](https://www.promptingguide.ai/techniques/react)

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.](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) 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
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-prereqs"></a>

**Prerequisiti**
+ [AWS Command Line Interface (AWS CLI) installata](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e configurata
+ [AWS Cloud Development Kit (AWS CDK) Toolkit 2.114.1 o versione successiva installato](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) e configurato
+ Familiarità di base con Python e AWS CDK
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) installato
+ [Docker installato](https://docs.docker.com/get-docker/)
+ [Python 3.11 o successivo](https://www.python.org/downloads/) [installato e configurato (per maggiori informazioni, consulta la sezione Strumenti)](#develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-tools)
+ [Un [account AWS attivo](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html) avviato utilizzando AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)
+ [Accesso ai modelli](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access) Amazon Titan e Anthropic Claude abilitato nel servizio Amazon Bedrock
+ [Credenziali di sicurezza AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)`AWS_ACCESS_KEY_ID`, incluse quelle configurate correttamente nell'ambiente terminale

**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](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html#bedrock-regions) e [Amazon Kendra](https://docs.aws.amazon.com/general/latest/gr/kendra.html).

**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

## Architecture
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-architecture"></a>

**Stack tecnologico Target**
+ Amazon Athena
+ Amazon Bedrock
+ Amazon Elastic Container Service (Amazon ECS)
+ AWS Glue
+ AWS Lambda
+ Simple Storage Service (Amazon S3)
+ Amazon Kendra
+ Elastic Load Balancing

**Architettura di destinazione**

Il codice CDK 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 architetturale.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/4e5856cf-9489-41f8-a411-e3b8d8a50748.png)


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

1. 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 architetturale.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/70ae4736-06a6-4d3a-903a-edc5c10d78a0.png)

+ Fase 1 — L'input `query` (domanda) viene 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](https://aws.amazon.com/kendra/) e richiama l'LLM [tramite Amazon](https://aws.amazon.com/bedrock/) 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](https://aws.amazon.com/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.

## Tools (Strumenti)
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-tools"></a>

**Servizi AWS**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) è 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](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) è un servizio completamente gestito che rende disponibili per l'uso modelli di base ad alte prestazioni (FMs) delle principali startup di intelligenza artificiale e di Amazon tramite un'API unificata.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) è un framework di sviluppo software che aiuta a definire e fornire l'infrastruttura cloud AWS in codice.
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è 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)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) è un servizio rapido e scalabile di gestione dei container che ti aiuta a eseguire, arrestare e gestire container in un cluster.
+ [AWS Glue](https://docs.aws.amazon.com/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](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html) è 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) 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-chatbot](https://github.com/awslabs/genai-bedrock-chatbot)repository.

L'archivio del codice contiene i seguenti file e cartelle:
+ `assets`cartella: le risorse statiche, il diagramma dell'architettura e il set di dati pubblico
+ `code/lambda-container`folder — Il codice Python eseguito nella funzione Lambda
+ `code/streamlit-app`folder — Il codice Python che viene eseguito come immagine del contenitore in Amazon ECS
+ `tests`folder — 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](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) [Identity and Access Management (IAM) gestite da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) per distribuire la soluzione. | 
| --- |

## Best practice
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-best-practices"></a>
+ L'esempio di codice fornito qui è solo per una demo proof-of-concept (PoC) o pilota. Se vuoi portare il codice in Production, assicurati di utilizzare le seguenti best practice:
  + La [registrazione degli accessi di Amazon S3 è abilitata.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)
  + I [log di flusso VPC sono abilitati.](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)
  + L'indice [Amazon Kendra Enterprise Edition](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/amazon-kendra.html) è abilitato.
+ Imposta il monitoraggio e gli avvisi per la funzione Lambda. Per ulteriori informazioni, consulta [Monitoraggio e risoluzione dei problemi delle funzioni Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Per le best practice generali relative all'utilizzo delle funzioni Lambda, consulta la documentazione [AWS](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Epiche
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-epics"></a>

### Configura le credenziali AWS sul tuo computer locale
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| Operazione | Description | Competenze 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.<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | DevOps ingegnere, AWS DevOps | 
| Configura il profilo AWS CLI. | Per configurare il profilo AWS CLI per l'account, segui le istruzioni nella documentazione [AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html). | DevOps ingegnere, AWS DevOps | 

### Configurare l'ambiente
<a name="set-up-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository sul tuo computer locale. | Per clonare il repository, esegui il seguente comando nel tuo terminale.<pre>git clone https://github.com/awslabs/genai-bedrock-chatbot.git</pre> | DevOps ingegnere, AWS DevOps | 
| Configura l'ambiente virtuale Python e installa le dipendenze richieste. | Per configurare l'ambiente virtuale Python, esegui i seguenti comandi.<pre>cd genai-bedrock-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Per configurare le dipendenze richieste, esegui il comando seguente.<pre>pip3 install -r requirements.txt</pre> | DevOps ingegnere, AWS DevOps | 
| Configura l'ambiente AWS CDK e sintetizza il codice CDK AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html) | DevOps ingegnere, AWS DevOps | 

### Configura e distribuisci l'applicazione di assistenza basata sulla chat
<a name="configure-and-deploy-the-chat-based-assistant-application"></a>


| Operazione | Description | Competenze 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](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access). | AWS DevOps | 
| Distribuisci risorse nell'account. | Per distribuire risorse nell'account AWS utilizzando il CDK AWS, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)**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](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) viene utilizzato per mantenere dinamico lo schema dei dati. La soluzione crea e aggiorna le partizioni nella [tabella del catalogo dati di AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html) 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)Il codice CDK AWS configura il crawler AWS Glue per l'esecuzione su richiesta, ma puoi anche [pianificarne](https://docs.aws.amazon.com/glue/latest/dg/schedule-crawler.html) 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)[Il codice CDK AWS configura la sincronizzazione dell'indice Amazon Kendra per l'esecuzione su richiesta, ma puoi anche eseguirla periodicamente utilizzando il parametro Schedule.](https://docs.aws.amazon.com/kendra/latest/dg/data-source.html#cron) | AWS DevOps, DevOps ingegnere | 

### Pulisci tutte le risorse AWS nella soluzione
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rimuovi le risorse AWS. | Dopo aver testato la soluzione, pulisci le risorse:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html) | DevOps ingegnere, AWS DevOps | 

## Risoluzione dei problemi
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| AWS CDK restituisce errori. | Per assistenza con i problemi di AWS CDK, consulta [Risoluzione dei problemi comuni di AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html). | 

## Risorse correlate
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-resources"></a>
+ Amazon Base:
  + [Accesso al modello](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [Parametri di inferenza per i modelli di base](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [Creazione di funzioni Lambda con Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Inizia a usare il CDK AWS](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Lavorare con il CDK AWS in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Generative AI Application Builder su AWS](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)
+ [LangChain documentazione](https://python.langchain.com/docs/get_started/introduction)
+ [Documentazione semplificata](https://docs.streamlit.io/)

## Informazioni aggiuntive
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-additional"></a>

**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
  ```