

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à.

# Implementa uno use case RAG AWS utilizzando Terraform e Amazon Bedrock
<a name="deploy-rag-use-case-on-aws"></a>

*Martin Maritsch, Nicolas Jacob Baer, Olivier Brique, Julian Ferdinand Grueber, Alice Morano e Nicola D Orazio, Amazon Web Services*

## Riepilogo
<a name="deploy-rag-use-case-on-aws-summary"></a>

AWS [offre varie opzioni per creare casi d'uso di intelligenza artificiale generativa abilitati per Retrieval Augmented Generation (RAG).](https://aws.amazon.com/what-is/retrieval-augmented-generation/) Questo modello fornisce una soluzione per un'applicazione basata su RAG basata su Amazon Aurora LangChain e compatibile con PostgreSQL come archivio vettoriale. Puoi implementare direttamente questa soluzione con Terraform nel tuo e implementare il seguente semplice caso d'uso RAG: Account AWS 

1. L'utente carica manualmente un file in un bucket Amazon Simple Storage Service (Amazon S3), come un file Microsoft Excel o un documento PDF. (Per ulteriori informazioni sui tipi di file supportati, consulta la documentazione [non](https://docs.unstructured.io/open-source/core-functionality/partitioning) strutturata.)

1. Il contenuto del file viene estratto e incorporato in un database di conoscenze basato su Aurora PostgreSQL senza server, compatibile con Aurora, che supporta l'inserimento quasi in tempo reale di documenti nell'archivio vettoriale. Questo approccio consente al modello RAG di accedere e recuperare le informazioni pertinenti per i casi d'uso in cui le basse latenze sono importanti.

1. Quando l'utente interagisce con il modello di generazione del testo, migliora l'interazione attraverso il recupero e l'aumento dei contenuti pertinenti dai file precedentemente caricati.

Il pattern utilizza [Amazon Titan Text Embeddings v2](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-embedding-models.html) come modello di incorporamento e [Anthropic Claude 3 Sonnet](https://aws.amazon.com/bedrock/claude/) come modello di generazione del testo, entrambi disponibili su Amazon Bedrock.

## Prerequisiti e limitazioni
<a name="deploy-rag-use-case-on-aws-prereqs"></a>

**Prerequisiti**
+  Account AWS Un attivo.
+ AWS Command Line Interface (AWS CLI) installato e configurato con il tuo Account AWS. Per istruzioni sull'installazione, consulta [Installazione o aggiornamento alla versione più recente di AWS CLI nella](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) AWS CLI documentazione. Per rivedere AWS le tue credenziali e l'accesso al tuo account, consulta [Configurazione e impostazioni dei file di credenziali](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) nella AWS CLI documentazione.
+ Accesso ai modelli abilitato per i modelli linguistici di grandi dimensioni richiesti (LLMs) nella tua Account AWS console Amazon Bedrock. Questo modello richiede quanto segue: LLMs
  + `amazon.titan-embed-text-v2:0`
  + `anthropic.claude-3-sonnet-20240229-v1:0`

**Limitazioni**
+ Questa architettura di esempio non include un'interfaccia per la risposta programmatica alle domande con il database vettoriale. Se il tuo caso d'uso richiede un'API, valuta la possibilità di aggiungere [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide) con una AWS Lambda funzione che esegue attività di recupero e risposta alle domande. 
+ Questa architettura di esempio non include funzionalità di monitoraggio per l'infrastruttura distribuita. Se il tuo caso d'uso richiede il monitoraggio, prendi in considerazione l'aggiunta di [servizi AWS di monitoraggio](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Se carichi molti documenti in un breve lasso di tempo nel bucket Amazon S3, la funzione Lambda potrebbe incontrare dei limiti di velocità. Come soluzione, puoi disaccoppiare la funzione Lambda con una coda Amazon Simple Queue Service (Amazon SQS) in cui puoi controllare la frequenza delle chiamate Lambda.
+ Alcuni Regioni AWS non sono disponibili in tutti. Servizi AWS Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) versione 2 o successiva
+ [Docker](https://docs.docker.com/get-started/) versione 26.0.0 o successiva
+ [Poetry versione 1.7.1](https://pypi.org/project/poetry/) o successiva
+ [Python](https://www.python.org/downloads/) versione 3.10 o successiva
+ [Terraform versione 1.8.4](https://developer.hashicorp.com/terraform/install) o successiva

## Architecture
<a name="deploy-rag-use-case-on-aws-architecture"></a>

Il diagramma seguente mostra i componenti del flusso di lavoro e dell'architettura per questo modello.

![\[Flusso di lavoro per creare un'applicazione basata su RAG utilizzando Aurora LLMs PostgreSQL e Amazon Bedrock.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/8f184945-7f17-4760-8806-6d0eaeef372a/images/3771b7a0-05bd-4eb3-ad5b-199e22f86184.png)


Questo diagramma illustra quanto segue:

1. Quando un oggetto viene creato nel bucket Amazon S3`bedrock-rag-template-<account_id>`, una [notifica Amazon S3 richiama la funzione Lambda](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html). `data-ingestion-processor`

1. La funzione Lambda si `data-ingestion-processor` basa su un'immagine Docker memorizzata nel repository Amazon Elastic Container Registry (Amazon ECR). `bedrock-rag-template`

   [La funzione utilizza [LangChain S3 FileLoader](https://python.langchain.com/v0.1/docs/integrations/document_loaders/aws_s3_file/) per leggere il file come documento. LangChain ](https://api.python.langchain.com/en/v0.0.339/schema/langchain.schema.document.Document.html) Quindi, i [LangChain RecursiveCharacterTextSplitter](https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/)blocchi di ogni documento, con una `CHUNK_SIZE` e una `CHUNK_OVERLAP` che dipendono dalla dimensione massima del token del modello di incorporamento Amazon Titan Text Embedding V2. Successivamente, la funzione Lambda richiama il modello di incorporamento su Amazon Bedrock per incorporare i blocchi in rappresentazioni vettoriali numeriche. Infine, questi vettori sono archiviati nel database Aurora PostgreSQL. Per accedere al database, la funzione Lambda recupera innanzitutto il nome utente e la password da. Gestione dei segreti AWS

1. Sull'[istanza del notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) Amazon SageMaker AI`aws-sample-bedrock-rag-template`, l'utente può scrivere un prompt di domande. Il codice richiama Claude 3 su Amazon Bedrock e aggiunge le informazioni della knowledge base al contesto del prompt. Di conseguenza, Claude 3 fornisce risposte utilizzando le informazioni contenute nei documenti.

L'approccio di questo modello alla rete e alla sicurezza è il seguente:
+ La funzione Lambda `data-ingestion-processor` si trova in una sottorete privata all'interno del cloud privato virtuale (VPC). La funzione Lambda non è autorizzata a inviare traffico alla rete Internet pubblica a causa del suo gruppo di sicurezza. Di conseguenza, il traffico verso Amazon S3 e Amazon Bedrock viene instradato solo attraverso gli endpoint VPC. Di conseguenza, il traffico non attraversa la rete Internet pubblica, il che riduce la latenza e aggiunge un ulteriore livello di sicurezza a livello di rete.
+ Tutte le risorse e i dati vengono crittografati laddove applicabile utilizzando la chiave AWS Key Management Service (AWS KMS) con l'alias. `aws-sample/bedrock-rag-template`

**Automazione e scalabilità**

Questo modello utilizza Terraform per distribuire l'infrastruttura dal repository di codice in un. Account AWS

## Tools (Strumenti)
<a name="deploy-rag-use-case-on-aws-tools"></a>

**Servizi AWS**
+ [Amazon Aurora PostgreSQL Compatible Edition è un motore](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) di database relazionale completamente gestito e conforme ad ACID che ti aiuta a configurare, gestire e scalare le distribuzioni PostgreSQL. In questo modello, Aurora PostgreSQL Compatible utilizza il plugin pgvector come database vettoriale.
+ [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 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 Servizi AWS tramite comandi nella shell della riga di comando.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile. In questo modello, Amazon ECR ospita l'immagine Docker per la funzione Lambda`data-ingestion-processor`.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [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. In questo modello, Lambda inserisce i dati nell'archivio vettoriale.
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) è un servizio di machine learning (ML) gestito che ti aiuta a creare e addestrare modelli di machine learning per poi distribuirli in un ambiente ospitato pronto per la produzione.
+ Con [Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) puoi sostituire le credenziali nel codice,incluse le password, con una chiamata API a Secrets Manager in modo da recuperare il segreto a livello di codice.
+ [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.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS. Il VPC include sottoreti e tabelle di routing per controllare il flusso di traffico.

**Altri strumenti**
+ [Docker](https://docs.docker.com/manuals/) è un insieme di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in container.
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.
+ [Poetry](https://pypi.org/project/poetry/) è uno strumento per la gestione delle dipendenze e la creazione di pacchetti in Python.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [terraform-rag-template-using-amazon-bedrock](https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock).

## Best practice
<a name="deploy-rag-use-case-on-aws-best-practices"></a>
+ Sebbene questo esempio di codice possa essere distribuito in qualsiasi ambiente Regione AWS, ti consigliamo di utilizzare Stati Uniti orientali (Virginia settentrionale) `us-east-1` o Stati Uniti occidentali (California settentrionale). `us-west-1` Questa raccomandazione si basa sulla disponibilità di modelli di base e di incorporamento in Amazon Bedrock al momento della pubblicazione di questo modello. Per un up-to-date elenco dei modelli Amazon Bedrock Foundation supportati in Regioni AWS, consulta [Model support by Regione AWS](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) nella documentazione di Amazon Bedrock. [Per informazioni sulla distribuzione di questo esempio di codice in altre regioni, consulta Informazioni aggiuntive.](#deploy-rag-use-case-on-aws-additional)
+ Questo modello fornisce solo una demo 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 al server per Amazon S3.
  + Imposta il [monitoraggio e gli avvisi](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html) per la funzione Lambda.
  + Se il tuo caso d'uso richiede un'API, prendi in considerazione l'aggiunta di Amazon API Gateway con una funzione Lambda che esegue attività di recupero e risposta alle domande.
+ Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza nella documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) IAM.

## Epiche
<a name="deploy-rag-use-case-on-aws-epics"></a>

### Implementa la soluzione in un Account AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il GitHub repository fornito con questo pattern, utilizzate il seguente comando:<pre>git clone https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock</pre> | AWS DevOps | 
| Configura le variabili. | Per configurare i parametri per questo pattern, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS DevOps | 
| Distribuire la soluzione. | Per distribuire la soluzione, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)L'implementazione dell'infrastruttura fornisce un'istanza SageMaker AI all'interno del VPC e con le autorizzazioni per accedere al database Aurora PostgreSQL. | AWS DevOps | 

### Test della soluzione
<a name="test-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui la demo. | Una volta completata la precedente installazione dell'infrastruttura, segui i seguenti passaggi per eseguire la demo su un notebook Jupyter:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)Il notebook Jupyter ti guida attraverso il seguente processo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | Informazioni generali su AWS | 

### Pulisci l'infrastruttura
<a name="clean-up-infrastucture"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci l'infrastruttura. | Per rimuovere tutte le risorse che hai creato quando non sono più necessarie, usa il seguente comando:<pre>terraform destroy -var-file=commons.tfvars</pre> | AWS DevOps | 

## Risorse correlate
<a name="deploy-rag-use-case-on-aws-resources"></a>

**AWS resources**
+ [Creazione di funzioni Lambda con Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Parametri di inferenza per i modelli di base](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [Accesso ai modelli Amazon Bedrock Foundation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [Il ruolo dei database vettoriali nelle applicazioni di intelligenza artificiale generativa](https://aws.amazon.com/blogs/database/the-role-of-vector-datastores-in-generative-ai-applications/) (AWS Database Blog)
+ [Lavorare con Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

**Altre risorse**
+ [documentazione pgvector](https://github.com/pgvector/pgvector)

## Informazioni aggiuntive
<a name="deploy-rag-use-case-on-aws-additional"></a>

**Implementazione di un database vettoriale**

Questo modello utilizza la compatibilità con Aurora PostgreSQL per implementare un database vettoriale per RAG. In alternativa ad Aurora PostgreSQL, AWS offre altre funzionalità e servizi per RAG, come Amazon Bedrock Knowledge Bases e Amazon Service. OpenSearch Puoi scegliere la soluzione più adatta alle tue esigenze specifiche:
+ [Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) fornisce motori di ricerca e analisi distribuiti che puoi utilizzare per archiviare e interrogare grandi volumi di dati.
+ [Amazon Bedrock Knowledge Bases](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) è progettato per creare e distribuire basi di conoscenza come astrazione aggiuntiva per semplificare il processo di acquisizione e recupero di RAG. Le Knowledge Base di Amazon Bedrock possono funzionare sia con Aurora PostgreSQL che con Amazon Service. OpenSearch 

**Distribuzione su altri Regioni AWS**

Come descritto in [Architettura](#deploy-rag-use-case-on-aws-architecture), si consiglia di utilizzare la regione Stati Uniti orientali (Virginia settentrionale) `us-east-1` o Stati Uniti occidentali (California settentrionale) `us-west-1` per distribuire questo esempio di codice. Tuttavia, esistono due modi possibili per distribuire questo esempio di codice in regioni diverse da and. `us-east-1` `us-west-1` È possibile configurare la regione di distribuzione nel `commons.tfvars` file. Per l'accesso al modello di base interregionale, considera le seguenti opzioni:
+ **Attraversamento della rete Internet pubblica**: se il traffico può attraversare la rete Internet pubblica, aggiungi gateway Internet al VPC. Quindi, modifica il gruppo di sicurezza assegnato alla funzione Lambda `data-ingestion-processor` e all'istanza del notebook SageMaker AI per consentire il traffico in uscita verso la rete Internet pubblica.
+ **Non utilizzare la rete Internet pubblica**: per distribuire questo esempio in una regione diversa da `us-east-1` o`us-west-1`, procedi come segue:

1. Nella `us-west-1` regione `us-east-1` o, crea un VPC aggiuntivo che includa un endpoint VPC per. `bedrock-runtime` 

1. Crea una connessione peering utilizzando il peering [VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) o [un gateway di transito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html) verso il VPC dell'applicazione.

1. Quando configuri il client `bedrock-runtime` boto3 in qualsiasi funzione Lambda al di fuori di `us-east-1` o`us-west-1`, passa il nome DNS privato dell'endpoint VPC per `bedrock-runtime` in `us-east-1` o us-west-1 come nome al client boto3. `endpoint_url`