

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

# Tutorial: creazione di un agente di Amazon Bedrock semplice
<a name="agent-tutorial"></a>

Questo tutorial illustra la creazione e la configurazione di un agente di Amazon Bedrock semplice utilizzando la Console di gestione AWS. Viene descritto come creare un agente in grado di rispondere alle domande degli utenti sulla data e l’ora correnti invocando una funzione Lambda.

Nel corso di questo tutorial, apprenderai come:

1. Creare una funzione Lambda. Crea una funzione Python che restituisca la data e l’ora correnti quando viene invocata dall’agente.

1. Creare un agente di Amazon Bedrock. Configura un agente nella console Amazon Bedrock con le istruzioni per gestire le query su data e ora.

1. Testare l’agente. Utilizza l’interfaccia di test integrata per verificare che l’agente sia in grado di rispondere correttamente alle richieste di data e ora.

1. Implementare una versione dell’agente con un alias. Crea una versione dell’agente e implementala con un alias per renderla disponibile.

1. Chiamare l’agente dal codice Python. Scopri come interagire a livello di codice con l’agente utilizzando AWS SDK per Python (Boto). 

1. Eliminare le risorse. Rimuovere le risorse AWS create durante il tutorial per evitare di incorrere in addebiti inutili.

Alla fine del tutorial, sarà disponibile un agente di Amazon Bedrock funzionante in grado di comprendere le richieste in linguaggio naturale di informazioni su data e ora e di rispondere con dati accurati derivanti dalla funzione Lambda.

Il tutorial si basa sull’esempio di codice agente nel repository [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/python/example_code/bedrock-agent/scenario_get_started_with_agents.py) della documentazione AWS. 

**Topics**
+ [Prerequisiti](agent-tutorial-prereq.md)
+ [Fase 1: creare una funzione Lambda](agent-tutorial-step1.md)
+ [Fase 2: creare un agente di Amazon Bedrock](agent-tutorial-step2.md)
+ [Fase 3: testare l’agente](agent-tutorial-step3.md)
+ [Fase 4: implementare l’agente con un alias](agent-tutorial-step4.md)
+ [Fase 5: chiamare l’agente dal codice Python](agent-tutorial-step5.md)
+ [Fase 6: eliminare le risorse](agent-tutorial-step6.md)
+ [Risorse aggiuntive](agent-tutorial-resources.md)

# Prerequisiti
<a name="agent-tutorial-prereq"></a>

Prima di iniziare questo tutorial, assicurati di disporre degli elementi indicati di seguito.
+ Account AWS con le seguenti policy gestite:
  + [AmazonBedrockFullAccess](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonBedrockFullAccess)
  + [AWSLambda\$1FullAccess](https://docs.aws.amazon.com/lambda/latest/dg/security-iam-awsmanpol.html#lambda-security-iam-awsmanpol-AWSLambda_FullAccess)
  + [IAMFullAccess](aws-managed-policy/latest/reference/IAMFullAccess.html)
**Importante**  
Queste autorizzazioni consentono di eseguire il tutorial e altre attività non correlate. Negli ambienti di produzione, assegna solo le autorizzazioni necessarie agli utenti per eseguire l’applicazione.
+ Nozioni di base dei ruoli e delle autorizzazioni IAM ([Guida per l’utente di IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html))
+ Familiarità con le funzioni AWS Lambda ([Guida per gli sviluppatori di Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html))

# Fase 1: creare una funzione Lambda
<a name="agent-tutorial-step1"></a>

Crea innanzitutto una funzione Lambda che l’agente invocherà per eseguire azioni. In questa procedura, creerai una funzione Lambda Python che restituisce la data e l’ora correnti quando viene invocata. Configurerai la funzione con le autorizzazioni di base, aggiungerai il codice necessario per gestire le richieste dell’agente di Amazon Bedrock e distribuirai la funzione in modo che sia pronta per essere connessa all’agente stesso.

Per ulteriori informazioni, consulta [Crea la tua prima funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) nella *Guida per gli sviluppatori di AWS Lambda*.

**Creazione di una funzione Lambda**

1. Accedi alla Console di gestione AWS e apri la console Lambda all’indirizzo [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Scegli **Crea funzione**.

1. Scegli **Crea da zero**.

1. Nella sezione **Basic information (Informazioni di base)**:
   + Nel campo **Nome funzione**, immetti un nome per la funzione, ad esempio `DateTimeFunction`. Annota il nome della funzione per usarlo nel passaggio 15 di [Fase 2: creare un agente di Amazon Bedrock](agent-tutorial-step2.md).
   + Per **Runtime**, seleziona **Python 3.9** (o la versione che preferisci).
   + Lascia invariato il campo **Architettura**.
   + In **Autorizzazioni**, seleziona **Modifica il ruolo di esecuzione predefinito**, quindi seleziona **Crea un nuovo ruolo con autorizzazioni Lambda di base**.

1. Scegli **Crea funzione**.

1. In **Panoramica della funzione**, in **Funzione ARN**, annota il nome della risorsa Amazon (ARN) per la funzione. Il nome viene utilizzato nel passaggio 24 di [Fase 2: creare un agente di Amazon Bedrock](agent-tutorial-step2.md). 

1. Nella scheda **Codice**, sostituisci il codice esistente con il seguente:

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   import datetime
   import json
   
   
   def lambda_handler(event, context):
       now = datetime.datetime.now()
   
       response = {"date": now.strftime("%Y-%m-%d"), "time": now.strftime("%H:%M:%S")}
   
       response_body = {"application/json": {"body": json.dumps(response)}}
   
       action_response = {
           "actionGroup": event["actionGroup"],
           "apiPath": event["apiPath"],
           "httpMethod": event["httpMethod"],
           "httpStatusCode": 200,
           "responseBody": response_body,
       }
   
       session_attributes = event["sessionAttributes"]
       prompt_session_attributes = event["promptSessionAttributes"]
   
       return {
           "messageVersion": "1.0",
           "response": action_response,
           "sessionAttributes": session_attributes,
           "promptSessionAttributes": prompt_session_attributes,
       }
   ```

1. Scegli **Implementa** per implementare la funzione.

1. Scegli la scheda ** Configurazione**.

1. Seleziona **Autorizzazioni**.

1. In **Policy basata sulle risorse**, scegli **Aggiungi autorizzazioni**.

1. In **Modifica l’istruzione della policy**, esegui queste operazioni:

   1. Scegli **Servizio AWS**

   1. In **Servizio**, seleziona **Altro**.

   1. In **ID istruzione**, immetti un identificatore univoco, ad esempio`AllowBedrockInvocation`.

   1. In **Principale**, immetti `bedrock.amazonaws.com`.

   1. In **ARN di origine**, immetti `arn:aws:bedrock:region:AWS account ID:agent/*`.

      Sostituisci `region` con la Regione AWS in uso, ad esempio `us-east-1`. Sostituisci `AWS account ID` con il tuo ID account AWS.

   1. In **Azione**, seleziona `lambda:InvokeFunction`.

1. Selezionare **Salva**.

# Fase 2: creare un agente di Amazon Bedrock
<a name="agent-tutorial-step2"></a>

A questo punto vinee creato un agente di Amazon Bedrock. In questa procedura viene configurato un agente nella console Amazon Bedrock con un modello di fondazione e vengono fornite le istruzioni che ne definiscono il comportamento come un chatbot intuitivo che restituisce informazioni su data e ora. Viene creato anche un gruppo di azioni con uno schema OpenAPI che definisce gli endpoint API che l’agente può chiamare, in particolare l’endpoint per ottenere la data e l’ora correnti. Viene anche aggiunta una policy in linea al ruolo IAM dell’agente per consentirgli di invocare la funzione Lambda. L’agente fungerà da interfaccia tra gli utenti e la funzione Lambda, interpretando le richieste in linguaggio naturale e convertendole in chiamate di funzioni strutturate per recuperare informazioni su data e ora.

Per ulteriori informazioni, consulta [Creazione e configurazione manuale dell’agente](agents-create.md).

**Creare un agente di Amazon Bedrock**

1. Accedi a Console di gestione AWS con un'identità IAM che dispone delle autorizzazioni per utilizzare la console Amazon Bedrock. Quindi, apri la console Amazon Bedrock in [https://console.aws.amazon.com/bedrock.](https://console.aws.amazon.com/bedrock)

1. Assicurati di trovarti in una AWS [regione](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/select-region.html) che supporta [gli agenti](agents-supported.md) Amazon Bedrock. 

1. Nel riquadro di navigazione, in **Strumenti per builder** scegli **Agenti**.

1. Scegliere **Create agent (Crea agente)**.

1. Nel campo **Nome**, immetti un nome per l’agente, ad esempio `MyBedrockAgent`.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Scegli **Create** (Crea). Viene visualizzato il riquadro **Generatore di agenti**.

1. Nella sezione **Dettagli dell’agente**:
   + Nel campo **Ruolo della risorsa dell’agente**, seleziona **Crea e utilizza un nuovo ruolo di servizio**.
   + In **Seleziona modello**, seleziona un modello, ad esempio Claude 3 Haiku.
   + Nella sezione **Istruzioni per l’agente**, immetti le istruzioni seguenti.

     ```
     You are a friendly chat bot. You have access to a function called that returns
     information about the current date and time. When responding with date or time,
     please make sure to add the timezone UTC.
     ```

1. Scegli **Save** (Salva).

1. Scegli la scheda **Gruppi di operazioni**.

1. In **Gruppi di operazioni**, scegli **Aggiungi**.

1. In **Inserisci il nome del gruppo di operazioni**, immetti un nome per il gruppo di azioni, ad esempio `TimeActions`.

1. (Facoltativo) In **Descrizione** immetti una descrizione per il gruppo di azioni.

1. In **Tipo di gruppo di operazioni**, seleziona **Definisci con schemi API**.

1. In **Invocazione di un gruppo di operazioni**, scegli **Seleziona una funzione Lambda esistente**. 

1. In **Seleziona una funzione Lambda esistente**, scegli il nome della funzione Lambda creata in [Fase 1: creare una funzione Lambda](agent-tutorial-step1.md).

1. In **Schema del gruppo di operazioni**, seleziona **Definizione tramite editor di schemi in linea**.

1. Nella casella **Schema OpenAPI in linea**, sostituisci lo schema esistente con lo schema YAML OpenAPI seguente:

   ```
   openapi: 3.0.0
   info:
     title: Time API
     version: 1.0.0
     description: API to get the current date and time.
   paths:
     /get-current-date-and-time:
       get:
         summary: Gets the current date and time.
         description: Gets the current date and time.
         operationId: getDateAndTime
         responses:
           '200':
             description: Gets the current date and time.
             content:
               'application/json':
                 schema:
                   type: object
                   properties:
                     date:
                       type: string
                       description: The current date
                     time:
                       type: string
                       description: The current time
   ```

1. Esamina la configurazione del gruppo di azioni e scegli **Crea**.

1. Scegli **Salva** per salvare le modifiche.

1. Scegli **Prepara** per preparare l’agente.

1. Scegli **Salva ed esci** per salvare le modifiche e uscire dal generatore di agenti.

1. Nella sezione **Panoramica degli agenti**, in **Autorizzazioni** scegli il ruolo di servizio IAM. Il ruolo viene visualizzato nella console IAM. 

1. Nella console IAM, scegli la scheda **Autorizzazioni**.

1. Scegli **Aggiungi autorizzazioni**, quindi scegli **Aggiungi policy inline**.

1. Scegli la scheda **JSON** e incolla la policy seguente. Verifica che `Resource` sia il nome della risorsa Amazon (ARN) per la funzione Lambda. Il nome ARN è stato annotato nel passaggio 6 di [Fase 1: creare una funzione Lambda](agent-tutorial-step1.md). 

1. Scegli **Next (Successivo)**.

1. Immettere un nome per la policy (ad esempio, `BedrockAgentLambdaInvoke`).

1. Scegli **Crea policy**.

# Fase 3: testare l’agente
<a name="agent-tutorial-step3"></a>

In questa procedura viene testata la bozza di lavoro dell’agente utilizzando l’interfaccia di test integrata nella console Amazon Bedrock. Vengono inviate query in linguaggio naturale che richiedono la data e l’ora correnti per osservare come l’agente elabori queste richieste, invochi la funzione Lambda e restituisca risposte formattate. Questa fase di test consente di verificare che l’agente comprenda correttamente l’intento dell’utente, chiami correttamente la funzione Lambda e presenti le informazioni in modo intuitivo.

Per ulteriori informazioni, consulta [Test e risoluzione dei problemi relativi al comportamento dell’agente](agents-test.md).

**Per testare l'agente**

1. Nella console Amazon Bedrock, apri l’agente creato in [Fase 2: creare un agente di Amazon Bedrock](agent-tutorial-step2.md)

1. Scegli **Test** per aprire il pannello **Test**.

1. Nel menu a discesa **Alias**, seleziona l’alias **TestAlias: Bozza di lavoro**.

1. Nell’interfaccia di chat, immetti un prompt che attivi una delle azioni dell’agente, ad esempio:
   + **What time is it?**
   + **Can you tell me today's date?**

1. L’agente elabora il prompt, invoca la funzione Lambda, se necessario, e restituisce una risposta.

1. (Facoltativo) Scegli **Mostra traccia** per visualizzare i passaggi di [traccia](trace-events.md) relativi al prompt inviato al modello. Nella traccia si dovrebbe vedere il ragionamento utilizzato dal modello per determinare quando chiamare la funzione Lambda per ottenere la data e l’ora.

# Fase 4: implementare l’agente con un alias
<a name="agent-tutorial-step4"></a>

Dopo aver configurato l’agente, è necessario distribuirlo con un alias per renderlo disponibile. In questa procedura si prepara l’agente per l’implementazione creandone un alias e una versione. L’alias rimanda alla versione e consente di invocare l’agente tramite un endpoint stabile, pur mantenendo la possibilità di aggiornare l’implementazione sottostante.

Per ulteriori informazioni, consulta [Implementazione e utilizzo di un agente di Amazon Bedrock nell’applicazione](agents-deploy.md).

**Implementazione dell’agente con un alias**

1. Nella console Amazon Bedrock, apri l’agente creato in [Fase 2: creare un agente di Amazon Bedrock](agent-tutorial-step2.md)

1. Scegli **Crea alias**.

1. In **Nome alias**, immetti un nome per l’alias. Ad esempio, **DateTimeAliasAgentAlias**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. In **Associa una versione**, seleziona **Crea una nuova versione e associala all’alias**.

1. Scegli **Crea alias**.

1. Crea un alias seguendo le istruzioni riportate in [Fase 3: testare l’agente](agent-tutorial-step3.md). Per la fase 6, scegli l’alias creato.

# Fase 5: chiamare l’agente dal codice Python
<a name="agent-tutorial-step5"></a>

In questa fase viene descritto come interagire a livello di codice con l’agente utilizzando AWS SDK per Python (Boto). Il codice di esempio dimostra come utilizzare l'[InvokeAgent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html)operazione, che richiede sia l'AGENT ID che l'ALIAS ID come parametri per chiamare l'agente. Il codice mostra come inviare un prompt all’agente, elaborare la risposta e gestire le modalità di risposta in streaming e non in streaming. Ciò consente di integrare il proprio agente di Bedrock nelle proprie applicazioni Python.

Per ulteriori informazioni, consulta [Invocazione di un agente dalla propria applicazione](agents-invoke-agent.md).

**Come chiamare l’agente dal codice Python**

1. Acquisire l’ID dell’agente. Per ulteriori informazioni, consulta [Visualizzazione di informazioni su un agente](agents-view.md).

1. Acquisire l’ID dell’alias dell’agente. Per ulteriori informazioni, consulta [Visualizzazione di informazioni sugli alias degli agenti in Amazon Bedrock](agents-alias-view.md).

1. Eseguire il seguente codice. Imposta gli elementi seguenti sui valori indicati:
   + **AGENT\$1ID**: ID dell’agente.
   + **ALIAS\$1ID**: ID dell’alias dell’agente.
   + **REGIONE**: alla AWS regione in cui hai creato il tuo agente, ad esempio. `us-east-1` 

   Per trasmettere in streaming la risposta dell’agente, modifica il valore di `streamFinalResponse` in `True`.

   ```
   import boto3
   import logging
   
   from botocore.exceptions import ClientError
   
   
   logging.basicConfig(level=logging.INFO)
   logger = logging.getLogger(__name__)
   
   def invoke_agent(client, agent_id, alias_id, prompt, session_id):
           response = client.invoke_agent(
               agentId=agent_id,
               agentAliasId=alias_id,
               enableTrace=True,
               sessionId = session_id,
               inputText=prompt,
               streamingConfigurations = { 
       "applyGuardrailInterval" : 20,
         "streamFinalResponse" : False
               }
           )
           completion = ""
           for event in response.get("completion"):
               #Collect agent output.
               if 'chunk' in event:
                   chunk = event["chunk"]
                   completion += chunk["bytes"].decode()
               
               # Log trace output.
               if 'trace' in event:
                   trace_event = event.get("trace")
                   trace = trace_event['trace']
                   for key, value in trace.items():
                       logging.info("%s: %s",key,value)
   
           print(f"Agent response: {completion}")
   
   
   if __name__ == "__main__":
   
       client=boto3.client(
               service_name="bedrock-agent-runtime",
               region_name="REGION") 
       
       agent_id = "AGENT_ID"
       alias_id = "ALIAS_ID"
       session_id = "123456"
       prompt = "What's the current time?"
   
       try:
   
           invoke_agent(client, agent_id, alias_id, prompt, session_id)
   
       except ClientError as e:
           print(f"Client error: {str(e)}")
           logger.error("Client error: %s", {str(e)})
   ```

# Fase 6: eliminare le risorse
<a name="agent-tutorial-step6"></a>

Quando le operazioni con l’agente di Amazon Bedrock sono terminate, è necessario eliminare le risorse per evitare di incorrere in addebiti inutili. In questa procedura finale, eliminerai sistematicamente tutte le AWS risorse create durante questo tutorial, inclusi l'agente Bedrock, la funzione Lambda e i ruoli \$1IAM associati. Questo processo di pulizia è importante per la gestione dei costi, poiché evita addebiti continui per le risorse non più in uso. La procedura è organizzata in tre parti: eliminazione dell’agente, rimozione della funzione Lambda e pulizia dei ruoli IAM creati per supportare questi servizi.

**Topics**
+ [Eliminazione dell’agente](#agent-tutorial-step6-console-agent)
+ [Eliminazione della funzione Lambda](#agent-tutorial-step6-console-lambda)
+ [Eliminazione dei ruoli IAM](#agent-tutorial-step6-console-iam)

## Eliminazione dell’agente
<a name="agent-tutorial-step6-console-agent"></a>

**Eliminazione dell’agente**

1. Nella console Amazon Bedrock, apri l’agente creato in [Fase 2: creare un agente di Amazon Bedrock](agent-tutorial-step2.md)

1. Seleziona l’agente creato.

1. Scegli **Elimina**.

1. Conferma l’eliminazione.

## Eliminazione della funzione Lambda
<a name="agent-tutorial-step6-console-lambda"></a>

**Eliminazione della funzione Lambda**

1. Apri la console all'indirizzo. AWS Lambda [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1. Seleziona la funzione Lambda creata.

1. Scegli **Operazioni**, quindi **Elimina**.

1. Conferma l’eliminazione.

## Eliminazione dei ruoli IAM
<a name="agent-tutorial-step6-console-iam"></a>

**Eliminazione dei ruoli IAM**

1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Nel riquadro di navigazione, seleziona **Ruoli**.

1. Seleziona il ruolo di servizio agente creato.

1. Scegli **Elimina**.

1. Conferma l’eliminazione.

1. Ripeti l’operazione per il ruolo di esecuzione di Lambda.

# Risorse aggiuntive
<a name="agent-tutorial-resources"></a>
+ [Guida per l’utente di Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Documentazione di riferimento dell’API Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html)
+ [Guida per gli sviluppatori di AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [IAM User Guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)
+ [Documentazione su Agent per Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
+ [Specifica OpenAPI](https://swagger.io/specification/)