

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 un assistente basato su chat completamente automatizzato utilizzando gli agenti e le knowledge base di Amazon Bedrock
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases"></a>

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

## Riepilogo
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-summary"></a>

Molte organizzazioni incontrano difficoltà nella creazione di un assistente basato su chat in grado di orchestrare diverse fonti di dati per offrire risposte complete. Questo modello presenta una soluzione per lo sviluppo di un assistente basato su chat in grado di rispondere alle domande provenienti sia dalla documentazione che dai database, con un'implementazione semplice.

A partire [da Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html), questo servizio di intelligenza artificiale generativa (AI) completamente gestito offre un'ampia gamma di modelli di base avanzati (FMs). Ciò facilita la creazione efficiente di applicazioni di intelligenza artificiale generativa con una forte attenzione alla privacy e alla sicurezza. Nel contesto del recupero della documentazione, il [Retrieval Augmented Generation (](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html)RAG) è una funzionalità fondamentale. Utilizza [basi di conoscenza](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) per arricchire i prompt FM con informazioni contestualmente rilevanti provenienti da fonti esterne. Un indice [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) funge da database vettoriale alla base delle knowledge base per Amazon Bedrock. Questa integrazione è migliorata attraverso un'attenta progettazione tempestiva per ridurre al minimo le imprecisioni e garantire che le risposte siano ancorate a una documentazione fattuale. Per le query sui database, Amazon Bedrock trasforma le FMs richieste testuali in query SQL strutturate, incorporando parametri specifici. [Ciò consente il recupero preciso dei dati dai database gestiti dai database.AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/define-database.html) [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) viene utilizzato per queste query.

Per gestire interrogazioni più complesse, ottenere risposte complete richiede informazioni provenienti sia dalla documentazione che dai database. [Agents for Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) è una funzionalità di intelligenza artificiale generativa che ti aiuta a creare agenti autonomi in grado di comprendere attività complesse e suddividerle in attività più semplici da orchestrare. La combinazione di informazioni ricavate dalle attività semplificate, facilitata dagli agenti autonomi di Amazon Bedrock, migliora la sintesi delle informazioni, portando a risposte più complete ed esaustive. Questo modello dimostra come creare un assistente basato su chat utilizzando Amazon Bedrock e i relativi servizi e funzionalità di intelligenza artificiale generativa all'interno di una soluzione automatizzata.

## Prerequisiti e limitazioni
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ [Docker, installato](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit (AWS CDK), [installato](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools) e [avviato in o](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap) `us-east-1` `us-west-2` Regioni AWS
+ AWS CDK [Toolkit versione 2.114.1 o successiva, installata](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
+ AWS Command Line Interface [https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Python versione 3.11 o successiva, installata](https://www.python.org/downloads/)
+ In Amazon Bedrock, [abilita l'accesso](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) a Claude 2, Claude 2.1, Claude Instant e Titan Embeddings G1 — Text

**Limitazioni**
+ Questa soluzione viene distribuita su un unico dispositivo. Account AWS
+ Questa soluzione può essere implementata solo Regioni AWS dove sono supportati Amazon Bedrock e Amazon OpenSearch Serverless. Per ulteriori informazioni, consulta la documentazione per [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) e [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-regions).

**Versioni del prodotto**
+ Llama-index versione 0.10.6 o successiva
+ Sqlalchemy versione 2.0.23 o successiva
+ OpenSearch-PY versione 2.4.2 o successiva
+ Requests\_AWS4Auth versione 1.2.3 o successiva
+ AWS SDK per Python (Boto3) versione 1.34.57 o successiva

## Architecture
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-architecture"></a>

**Stack tecnologico Target**

[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)È un framework di sviluppo software open source per definire l'infrastruttura cloud in codice e fornirla tramite. AWS CloudFormation Lo AWS CDK stack utilizzato in questo modello distribuisce le seguenti risorse: AWS  
+ AWS Key Management Service (AWS KMS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Glue Data Catalog, per il componente del database AWS Glue 
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+ Amazon OpenSearch Serverless
+ Amazon Elastic Container Registry (Amazon ECR) 
+ Amazon Elastic Container Service (Amazon ECS)
+ AWS Fargate
+ Amazon Virtual Private Cloud (Amazon VPC) (Amazon VPC)
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 

**Architettura Target**

![Diagramma di architettura utilizzando una knowledge base e un agente Amazon Bedrock](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/15372718-3a5d-4918-9cfa-422c455f288d/images/ff19152e-0bb6-4758-a6dd-4f6140e55113.png)


Il diagramma mostra una configurazione AWS nativa del cloud completa all'interno di un'unica configurazione, utilizzandone più di una. Regione AWS Servizi AWS L'interfaccia principale per l'assistente basato sulla chat è un'applicazione [Streamlit](https://docs.streamlit.io/) ospitata su un cluster Amazon ECS. Un [Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/) gestisce l'accessibilità. Le interrogazioni effettuate tramite questa interfaccia attivano la funzione `Invocation` Lambda, che si interfaccia quindi con gli agenti per Amazon Bedrock. Questo agente risponde alle richieste degli utenti consultando le knowledge base per Amazon Bedrock o richiamando una funzione Lambda. `Agent executor` Questa funzione attiva una serie di azioni associate all'agente, seguendo uno schema API predefinito. Le knowledge base di Amazon Bedrock utilizzano un indice OpenSearch Serverless come base per il database vettoriale. Inoltre, la `Agent executor` funzione genera query SQL che vengono eseguite sul AWS Glue database tramite Amazon Athena. 

## Tools (Strumenti)
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-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 ti aiuta a definire e fornire l'infrastruttura AWS Cloud 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 consente di interagire Servizi AWS tramite comandi nella shell della 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.
+ [Elastic Load Balancing](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à.
+ [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 AWS Glue crawler e una tabella. AWS Glue Data Catalog 
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) è una configurazione serverless su richiesta per Amazon Service. OpenSearch In questo modello, un indice OpenSearch Serverless funge da database vettoriale per le knowledge base di Amazon Bedrock.
+ [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.

**Altri strumenti**
+ [Streamlit](https://docs.streamlit.io/) è un framework Python open source per creare applicazioni di dati.

**Deposito di codice**

Il codice per questo pattern è disponibile nel GitHub [genai-bedrock-agent-chatbot](https://github.com/awslabs/genai-bedrock-agent-chatbot/)repository. L'archivio del codice contiene i seguenti file e cartelle:
+ `assets`cartella: le risorse statiche, come il diagramma dell'architettura e il set di dati pubblico.
+ `code/lambdas/action-lambda`folder — Il codice Python per la funzione Lambda che funge da azione per l'agente Amazon Bedrock.
+ `code/lambdas/create-index-lambda`folder — Il codice Python per la funzione Lambda che crea l'indice Serverless. OpenSearch 
+ `code/lambdas/invoke-lambda`folder — Il codice Python per la funzione Lambda che richiama l'agente Amazon Bedrock, chiamato direttamente dall'applicazione Streamlit.
+ `code/lambdas/update-lambda`folder — Il codice Python per la funzione Lambda che aggiorna o elimina le risorse dopo che le risorse sono state distribuite tramite. AWS AWS CDK
+ `code/layers/boto3_layer`folder: lo AWS CDK stack che crea un livello Boto3 condiviso tra tutte le funzioni Lambda.
+ `code/layers/opensearch_layer`folder: lo AWS CDK stack che crea un livello OpenSearch Serverless che installa tutte le dipendenze per creare l'indice.
+ `code/streamlit-app`folder — Il codice Python che viene eseguito come immagine del contenitore in Amazon ECS.
+ `code/code_stack.py`— I file di AWS CDK costruzione in Python che AWS creano risorse.
+ `app.py`— I file Python AWS CDK dello stack che AWS distribuiscono le risorse nell'account di destinazione. AWS 
+ `requirements.txt`— L'elenco di tutte le dipendenze Python che devono essere installate per. AWS CDK
+ `cdk.json`— Il file di input per fornire i valori necessari per creare risorse. Inoltre, nei `context/config` campi, è possibile personalizzare la soluzione di conseguenza. Per ulteriori informazioni sulla personalizzazione, vedere la sezione [Informazioni aggiuntive](#develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional).

## Best practice
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-best-practices"></a>
+ L'esempio di codice fornito qui è solo a scopo proof-of-concept (PoC) o pilota. Se vuoi portare il codice in produzione, assicurati di utilizzare le seguenti best practice:
  + Abilita la registrazione degli [accessi ad Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)
  + Abilita i log di [flusso VPC](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)
+ Imposta il monitoraggio e gli avvisi per le funzioni 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, consulta le [Best practice per l'utilizzo AWS Lambda delle funzioni](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Epiche
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-epics"></a>

### Imposta AWS le credenziali sulla tua workstation locale
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esporta le variabili per l'account e la regione. | Per fornire AWS le credenziali AWS CDK utilizzando le variabili di ambiente, esegui i seguenti comandi.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number><br />export CDK_DEFAULT_REGION=<Region></pre> | AWS DevOps, DevOps ingegnere | 
| Configura il profilo AWS CLI denominato. | Per configurare il profilo AWS CLI denominato per l'account, segui le istruzioni in [Configurazione e impostazioni del file di credenziali](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html). | AWS DevOps, DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository sulla tua workstation locale. | Per clonare il repository, esegui il seguente comando nel tuo terminale.<pre>git clone https://github.com/awslabs/genai-bedrock-agent-chatbot.git</pre> | DevOps ingegnere, AWS DevOps | 
| Configura l'ambiente virtuale Python. | Per configurare l'ambiente virtuale Python, esegui i seguenti comandi.<pre>cd genai-bedrock-agent-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre><br />Per configurare le dipendenze richieste, esegui il comando seguente.<pre>pip3 install -r requirements.txt</pre> | DevOps ingegnere, AWS DevOps | 
| Configura l' AWS CDK ambiente. | Per convertire il codice in un AWS CloudFormation modello, esegui il comando`cdk synth`. | AWS DevOps, DevOps ingegnere | 

### Configura e distribuisci l'applicazione
<a name="configure-and-deploy-the-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci risorse nell'account. | Per distribuire risorse Account AWS utilizzando il AWS CDK, procedi come segue:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.html)<br />Una volta completata la distribuzione, puoi accedere all'applicazione di assistenza basata sulla chat utilizzando l'URL fornito nella scheda **Output** della console. CloudFormation  | DevOps ingegnere, AWS DevOps | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rimuovi le AWS risorse. | Dopo aver testato la soluzione, per ripulire le risorse, esegui il comando`cdk destroy`. | AWS DevOps, DevOps ingegnere | 

## Risorse correlate
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-resources"></a>

**AWS documentazione**
+ Risorse Amazon Bedrock:
  + [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)
  + [Agenti per Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
  + [Basi di conoscenza per Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)
+ [Creazione di funzioni Lambda con Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ AWS CDK risorse:
  + [Inizia con AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [Risoluzione dei AWS CDK problemi più comuni](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [Lavorare con il AWS CDK in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Generative AI Application Builder attivo AWS](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)

**Altre risorse AWS **
+ [Motore vettoriale per Amazon Serverless OpenSearch ](https://aws.amazon.com/opensearch-service/serverless-vector-engine/)

**Altre risorse**
+ [LlamaIndex documentazione](https://docs.llamaindex.ai/en/stable/)
+ [Documentazione semplificata](https://docs.streamlit.io/)

## Informazioni aggiuntive
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional"></a>

**Personalizza l'assistente basato sulla chat con i tuoi dati**

Per integrare i dati personalizzati per l'implementazione della soluzione, segui queste linee guida strutturate. Questi passaggi sono progettati per garantire un processo di integrazione semplice ed efficiente, che ti consenta di implementare la soluzione in modo efficace con i tuoi dati personalizzati.

*Per l'integrazione dei dati nella knowledge base*

**Preparazione dei dati**

1. Individua la `assets/knowledgebase_data_source/` cartella.

1. Posiziona il tuo set di dati in questa cartella.

**Modifiche alla configurazione**

1. Apri il file `cdk.json`.

1. Vai al `context/configure/paths/knowledgebase_file_name` campo, quindi aggiornalo di conseguenza.

1. Passa al `bedrock_instructions/knowledgebase_instruction` campo, quindi aggiornalo per riflettere accuratamente le sfumature e il contesto del nuovo set di dati.

*Per l'integrazione strutturale dei dati*

**Organizzazione dei dati**

1. All'interno della `assets/data_query_data_source/` directory, crea una sottodirectory, ad esempio`tabular_data`.

1. Inserisci il tuo set di dati strutturato (i formati accettabili includono CSV, JSON, ORC e Parquet) in questa sottocartella appena creata.

1. Se ti stai connettendo a un database esistente, aggiorna la funzione per connetterti `create_sql_engine()` `code/lambda/action-lambda/build_query_engine.py` al tuo database.

**Aggiornamenti della configurazione e del codice**

1. Nel `cdk.json` file, aggiorna il `context/configure/paths/athena_table_data_prefix` campo per allinearlo al nuovo percorso dei dati.

1. Esegui la revisione `code/lambda/action-lambda/dynamic_examples.csv` incorporando nuovi text-to-SQL esempi che corrispondono al tuo set di dati.

1. Esegui la revisione `code/lambda/action-lambda/prompt_templates.py` per rispecchiare gli attributi del tuo set di dati strutturato.

1. Nel `cdk.json` file, aggiorna il `context/configure/bedrock_instructions/action_group_description` campo per spiegare lo scopo e la funzionalità della funzione `Action group` Lambda.

1. Nel `assets/agent_api_schema/artifacts_schema.json` file, spiega le nuove funzionalità della tua funzione `Action group` Lambda.

*Aggiornamento generale*

Nel `cdk.json` file, nella `context/configure/bedrock_instructions/agent_instruction` sezione, fornisci una descrizione completa della funzionalità e dello scopo di progettazione previsti per l'agente Amazon Bedrock, tenendo conto dei nuovi dati integrati.