Agente Python Strands
Genera un Agente Strands in Python per costruire agenti AI con strumenti, e opzionalmente distribuiscilo su Amazon Bedrock AgentCore Runtime. Per impostazione predefinita, il generatore utilizza FastAPI per esporre un server HTTP. In alternativa, puoi scegliere il protocollo Agent-to-Agent (A2A) per l’interoperabilità con altri agenti compatibili A2A, o il protocollo AG-UI per l’integrazione diretta con il frontend tramite CopilotKit.
Cos’è Strands?
Sezione intitolata “Cos’è Strands?”Strands è un framework Python leggero e pronto per la produzione per costruire agenti AI. Caratteristiche principali:
- Leggero e personalizzabile: Ciclo agenti semplice che non ostacola il lavoro
- Pronto per la produzione: Osservabilità completa, tracciamento e opzioni di distribuzione scalabili
- Agnostico su modelli e provider: Supporta molti modelli diversi da vari provider
- Strumenti della community: Set potente di strumenti contribuiti dalla community
- Supporto multi-agente: Tecniche avanzate come team di agenti e agenti autonomi
- Modalità interattive flessibili: Supporto conversazionale, streaming e non-streaming
Utilizzo
Sezione intitolata “Utilizzo”Genera un Agente Strands
Sezione intitolata “Genera un Agente Strands”Puoi generare un Agente Strands in Python in due modi:
- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - py#strands-agent - Compila i parametri richiesti
- Clicca su
Generate
pnpm nx g @aws/nx-plugin:py#strands-agentyarn nx g @aws/nx-plugin:py#strands-agentnpx nx g @aws/nx-plugin:py#strands-agentbunx nx g @aws/nx-plugin:py#strands-agentPuoi anche eseguire una prova per vedere quali file verrebbero modificati
pnpm nx g @aws/nx-plugin:py#strands-agent --dry-runyarn nx g @aws/nx-plugin:py#strands-agent --dry-runnpx nx g @aws/nx-plugin:py#strands-agent --dry-runbunx nx g @aws/nx-plugin:py#strands-agent --dry-runOpzioni
Sezione intitolata “Opzioni”| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
| project Obbligatorio | string | - | Il progetto a cui aggiungere lo Strands Agent |
| computeType | string | BedrockAgentCoreRuntime | Il tipo di compute per ospitare il tuo Strands Agent. |
| name | string | - | Il nome del tuo Strands Agent (predefinito: agent) |
| auth | string | IAM | Il metodo utilizzato per autenticarsi con il tuo Strands Agent. Scegli tra IAM (predefinito) o Cognito. |
| protocol | string | HTTP | Il protocollo server per il tuo Strands Agent. HTTP espone un server HTTP FastAPI. A2A espone un server con protocollo Agent-to-Agent. AG-UI espone un server con protocollo Agent-User Interaction per l'integrazione diretta con il frontend. |
| iacProvider | string | Inherit | Il provider IaC preferito. Per impostazione predefinita viene ereditato dalla selezione iniziale. |
Output del Generatore
Sezione intitolata “Output del Generatore”Il generatore aggiungerà i seguenti file al tuo progetto Python esistente. I file generati dipendono dal protocol scelto:
Protocollo HTTP (predefinito)
Sezione intitolata “Protocollo HTTP (predefinito)”Directoryyour-project/
Directoryyour_module/
Directoryagent/ (o nome personalizzato se specificato)
- __init__.py Inizializzazione pacchetto Python
- init.py Configurazione applicazione FastAPI con middleware CORS e gestione errori
- agent.py Definizione principale dell’agente con strumenti di esempio
- main.py Punto d’ingresso FastAPI per Bedrock AgentCore Runtime
- Dockerfile Punto d’ingresso per ospitare il tuo agente (escluso se
computeTypeè impostato aNone)
- pyproject.toml Aggiornato con le dipendenze Strands
- project.json Aggiornato con i target di servizio dell’agente
Protocollo A2A
Sezione intitolata “Protocollo A2A”Quando protocol è impostato su A2A, il punto d’ingresso utilizza lo Strands A2A Server invece di FastAPI:
Directoryyour-project/
Directoryyour_module/
Directoryagent/ (o nome personalizzato se specificato)
- __init__.py Inizializzazione pacchetto Python
- agent.py Definizione principale dell’agente con strumenti di esempio
- main.py Punto d’ingresso server A2A
- Dockerfile Punto d’ingresso per ospitare il tuo agente (escluso se
computeTypeè impostato aNone)
- pyproject.toml Aggiornato con le dipendenze Strands
- project.json Aggiornato con i target di servizio dell’agente
Protocollo AG-UI
Sezione intitolata “Protocollo AG-UI”Quando protocol è impostato su AG-UI, il punto d’ingresso utilizza l’integrazione ag-ui-strands, che espone il tuo agente tramite il protocollo AG-UI per l’integrazione diretta con il frontend tramite CopilotKit:
Directoryyour-project/
Directoryyour_module/
Directoryagent/ (o nome personalizzato se specificato)
- __init__.py Inizializzazione pacchetto Python
- agent.py Definizione principale dell’agente con strumenti di esempio
- main.py Punto d’ingresso server AG-UI usando ag-ui-strands
- Dockerfile Punto d’ingresso per ospitare il tuo agente (escluso se
computeTypeè impostato aNone)
- pyproject.toml Aggiornato con le dipendenze Strands e AG-UI
- project.json Aggiornato con i target di servizio dell’agente
Infrastruttura
Sezione intitolata “Infrastruttura”Poiché questo generatore fornisce infrastruttura come codice basata sul tuo iacProvider selezionato, creerà un progetto in packages/common che include i relativi costrutti CDK o moduli Terraform.
Il progetto comune di infrastruttura come codice è strutturato come segue:
Directorypackages/common/constructs
Directorysrc
Directoryapp/ Construct per l’infrastruttura specifica di un progetto/generatore
- …
Directorycore/ Construct generici riutilizzati dai construct in
app- …
- index.ts Punto di ingresso che esporta i construct da
app
- project.json Target di build e configurazione del progetto
Directorypackages/common/terraform
Directorysrc
Directoryapp/ Moduli Terraform per l’infrastruttura specifica di un progetto/generatore
- …
Directorycore/ Moduli generici riutilizzati dai moduli in
app- …
- project.json Target di build e configurazione del progetto
Per la distribuzione del tuo Strands Agent, vengono generati i seguenti file:
Directorypackages/common/constructs/src
Directoryapp
Directoryagents
Directory<project-name>
- <project-name>.ts Costrutto CDK per distribuire l’agente
Directorypackages/common/terraform/src
Directoryapp
Directoryagents
Directory<project-name>
- <project-name>.tf Modulo per distribuire l’agente
Directorycore
Directoryagent-core
- runtime.tf Modulo generico per distribuire su Bedrock AgentCore Runtime
Lavorare con il tuo Strands Agent
Sezione intitolata “Lavorare con il tuo Strands Agent”Aggiungere Strumenti
Sezione intitolata “Aggiungere Strumenti”Gli strumenti sono funzioni che l’agente AI può chiamare per eseguire azioni. Il framework Strands utilizza un approccio semplice basato su decoratori per definire gli strumenti.
Puoi aggiungere nuovi strumenti nel file agent.py:
from strands import Agent, tool
@tooldef calculate_sum(numbers: list[int]) -> int: """Calcola la somma di una lista di numeri""" return sum(numbers)
@tooldef get_weather(city: str) -> str: """Ottieni informazioni meteo per una città""" # Integrazione con l'API meteo qui return f"Meteo a {city}: Soleggiato, 25°C"
# Aggiungi strumenti al tuo agenteagent = Agent( system_prompt="Sei un assistente utile con accesso a vari strumenti.", tools=[calculate_sum, get_weather],)Il framework Strands gestisce automaticamente:
- Validazione dei tipi basata sugli hint di tipo delle funzioni
- Generazione dello schema JSON per le chiamate agli strumenti
- Gestione errori e formattazione delle risposte
Utilizzare Strumenti Predefiniti
Sezione intitolata “Utilizzare Strumenti Predefiniti”Strands fornisce una collezione di strumenti predefiniti tramite il pacchetto strands-tools:
from strands_tools import current_time, http_request, file_read
agent = Agent( system_prompt="Sei un assistente utile.", tools=[current_time, http_request, file_read],)Configurazione del Modello
Sezione intitolata “Configurazione del Modello”Di default, gli agenti Strands usano Claude 4 Sonnet, ma puoi personalizzare il provider del modello. Vedi la documentazione Strands sui provider di modelli per le opzioni di configurazione:
from strands import Agentfrom strands.models import BedrockModel
# Crea un BedrockModelbedrock_model = BedrockModel( model_id="anthropic.claude-sonnet-4-20250514-v1:0", region_name="us-west-2", temperature=0.3,)
agent = Agent(model=bedrock_model)Utilizzare Server MCP
Sezione intitolata “Utilizzare Server MCP”Puoi aggiungere strumenti da server MCP al tuo agente Strands.
Per utilizzare server MCP creati con i generatori py#mcp-server o ts#mcp-server puoi utilizzare il generatore connection.
- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - connection - Compila i parametri richiesti
- Clicca su
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionPuoi anche eseguire una prova per vedere quali file verrebbero modificati
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runConsulta la guida del generatore connection per dettagli su come viene configurata la connessione.
Per altri server MCP, consulta la Documentazione Strands.
Approfondimenti
Sezione intitolata “Approfondimenti”Per una guida più dettagliata sulla scrittura di agenti Strands, consulta la documentazione Strands.
Protocollo
Sezione intitolata “Protocollo”Il protocollo del server del tuo agente determina come comunica. Tutte le opzioni sono servite da FastAPI — il punto d’ingresso è diverso:
- HTTP (predefinito): Un server FastAPI standard con un endpoint personalizzato
/invocations, CORS e streaming. Ideale per integrazioni client personalizzate. - A2A: Lo Strands A2A Server montato su un’app FastAPI. Ideale quando il tuo agente deve essere individuabile e invocabile da altri agenti compatibili A2A.
- AG-UI: L’integrazione ag-ui-strands, che espone il protocollo AG-UI tramite SSE. Ideale per l’integrazione diretta con il frontend tramite CopilotKit in un sito web React.
Tutti i protocolli espongono /ping per il contratto di controllo dello stato del runtime AgentCore. Gli agenti A2A ascoltano sulla porta 9000; gli agenti HTTP e AG-UI ascoltano sulla porta 8080. Il Dockerfile e l’infrastruttura generati sono configurati per te.
Server FastAPI (protocollo HTTP)
Sezione intitolata “Server FastAPI (protocollo HTTP)”Il server HTTP generato include:
- Configurazione dell’applicazione FastAPI con middleware CORS
- Middleware per la gestione degli errori
- Generazione dello schema OpenAPI
- Endpoint di controllo dello stato (
/ping) - Endpoint di invocazione dell’agente (
/invocations)
Personalizzare Input e Output di Invocazione con Pydantic
Sezione intitolata “Personalizzare Input e Output di Invocazione con Pydantic”L’endpoint di invocazione dell’agente utilizza modelli Pydantic per definire e validare gli schemi di richiesta e risposta. Puoi personalizzare questi modelli in main.py per adattarli ai requisiti del tuo agente.
Definire Modelli di Input
Sezione intitolata “Definire Modelli di Input”Il modello InvokeInput predefinito accetta un messaggio.
from pydantic import BaseModel
class InvokeInput(BaseModel): message: strPuoi estendere questo modello per includere qualsiasi campo aggiuntivo di cui il tuo agente ha bisogno.
L’ID di sessione viene estratto dall’header HTTP x-amzn-bedrock-agentcore-runtime-session-id, coerentemente con il contratto di sessione di Bedrock AgentCore Runtime. Se l’header non viene fornito, viene generato un UUID casuale come fallback.
Definire Modelli di Output
Sezione intitolata “Definire Modelli di Output”Per le risposte in streaming, il generatore fornisce JsonStreamingResponse che serializza automaticamente i modelli Pydantic in formato JSON Lines (application/jsonl). Questo formato è compatibile con la specifica di streaming di OpenAPI 3.2 e funziona perfettamente con il client TypeScript generato.
Di default, l’agente produce oggetti StreamChunk contenenti il testo di risposta dell’agente:
class StreamChunk(BaseModel): content: strPuoi personalizzare il modello StreamChunk per adattarlo alle tue esigenze:
from pydantic import BaseModel
class StreamChunk(BaseModel): content: str timestamp: str token_count: intEsiste una richiesta di funzionalità aperta per il supporto nativo in FastAPI.
Bedrock AgentCore Python SDK
Sezione intitolata “Bedrock AgentCore Python SDK”Il generatore include una dipendenza sul Bedrock AgentCore Python SDK per le costanti PingStatus. Se desiderato, è semplice utilizzare BedrockAgentCoreApp invece di FastAPI, tuttavia nota che la type-safety viene persa.
Puoi trovare maggiori dettagli sulle capacità dell’SDK nella documentazione qui.
Server A2A (protocollo A2A)
Sezione intitolata “Server A2A (protocollo A2A)”Quando protocol=A2A, il main.py generato monta A2AServer.to_fastapi_app() su un’app FastAPI padre che espone anche /ping. Quando distribuito su AgentCore, il punto d’ingresso risolve l’ARN pubblico del runtime da AppConfig e lo pubblicizza nella scheda dell’agente.
La maggior parte degli utenti non avrà bisogno di modificare questo file — modifica agent.py per cambiare strumenti o il prompt di sistema. Il server A2A popola la scheda dell’agente (/.well-known/agent-card.json) dal name e dalla description del costruttore Agent.
Server AG-UI (protocollo AG-UI)
Sezione intitolata “Server AG-UI (protocollo AG-UI)”Quando protocol=AG-UI, il main.py generato avvolge il tuo Strands Agent in un ag_ui_strands.StrandsAgent e crea un’app FastAPI tramite create_strands_app(). L’app risultante espone un singolo endpoint POST che trasmette eventi AG-UI tramite Server-Sent Events (SSE), oltre a /ping per il controllo dello stato del runtime AgentCore.
La maggior parte degli utenti non avrà bisogno di modificare questo file — modifica agent.py per cambiare strumenti o il prompt di sistema.
Eseguire il tuo Strands Agent
Sezione intitolata “Eseguire il tuo Strands Agent”Sviluppo Locale
Sezione intitolata “Sviluppo Locale”Il generatore configura un target chiamato <your-agent-name>-serve, che avvia il tuo Strands Agent localmente per sviluppo e test.
pnpm nx agent-serve your-projectyarn nx agent-serve your-projectnpx nx agent-serve your-projectbunx nx agent-serve your-projectQuesto comando usa uv run per eseguire il tuo Strands Agent utilizzando il Bedrock AgentCore Python SDK.
Distribuire il tuo Strands Agent su Bedrock AgentCore Runtime
Sezione intitolata “Distribuire il tuo Strands Agent su Bedrock AgentCore Runtime”Infrastructure as Code
Sezione intitolata “Infrastructure as Code”Se hai selezionato BedrockAgentCoreRuntime per computeType, viene generata l’infrastruttura CDK o Terraform rilevante che puoi utilizzare per distribuire il tuo Strands Agent su Amazon Bedrock AgentCore Runtime.
Viene generato un costrutto CDK per il tuo agent, denominato in base al name che hai scelto durante l’esecuzione del generatore, o <ProjectName>Agent per impostazione predefinita.
Puoi utilizzare questo costrutto CDK in un’applicazione CDK:
import { MyProjectAgent } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { new MyProjectAgent(this, 'MyProjectAgent'); }}Viene generato un modulo Terraform per te, denominato in base al name che hai scelto durante l’esecuzione del generatore, o <ProjectName>-agent per impostazione predefinita.
Puoi utilizzare questo modulo terraform in un progetto Terraform:
# Agentmodule "my_project_agent" { # Relative path to the generated module in the common/terraform project source = "../../common/terraform/src/app/agents/my-project-agent"}Autenticazione
Sezione intitolata “Autenticazione”Il generatore fornisce un’opzione auth per configurare l’autenticazione per il tuo Strands Agent. Puoi scegliere tra l’autenticazione IAM (predefinita) o Cognito durante la generazione del tuo agent.
Per impostazione predefinita, il tuo Strands Agent sarà protetto utilizzando l’autenticazione IAM, semplicemente distribuiscilo senza alcun argomento:
import { MyProjectAgent } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { new MyProjectAgent(this, 'MyProjectAgent'); }}Puoi concedere l’accesso per invocare il tuo agent su Bedrock AgentCore Runtime utilizzando il metodo grantInvokeAccess, ad esempio:
import { MyProjectAgent } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { const agent = new MyProjectAgent(this, 'MyProjectAgent'); const lambdaFunction = new Function(this, ...);
agent.grantInvokeAccess(lambdaFunction); }}# Agentmodule "my_project_agent" { # Relative path to the generated module in the common/terraform project source = "../../common/terraform/src/app/agents/my-project-agent"}Per concedere l’accesso per invocare il tuo agent, dovrai aggiungere una policy come la seguente, facendo riferimento all’output module.my_project_agent.agent_core_runtime_arn:
{ Effect = "Allow" Action = [ "bedrock-agentcore:InvokeAgentRuntime" ] Resource = [ module.my_project_agent.agent_core_runtime_arn, "${module.my_project_agent.agent_core_runtime_arn}/*" ]}Autenticazione Cognito
Sezione intitolata “Autenticazione Cognito”Quando selezioni l’autenticazione Cognito, il generatore configura l’agent per utilizzare Cognito per l’autenticazione.
Il costrutto generato accetta una prop identity che configura l’autenticazione Cognito:
import { MyProjectAgent, UserIdentity } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { const identity = new UserIdentity(this, 'Identity');
new MyProjectAgent(this, 'MyProjectAgent', { identity, }); }}Il costrutto UserIdentity può essere generato utilizzando il generatore ts#react-website#auth, oppure puoi creare il tuo UserPool e UserPoolClient CDK.
Il modulo generato accetta le variabili user_pool_id e user_pool_client_ids per l’autenticazione Cognito:
module "user_identity" { source = "../../common/terraform/src/core/user-identity"}
module "my_project_agent" { source = "../../common/terraform/src/app/agents/my-project-agent"
user_pool_id = module.user_identity.user_pool_id user_pool_client_ids = [module.user_identity.user_pool_client_id]}Target Bundle e Docker
Sezione intitolata “Target Bundle e Docker”Per costruire il tuo Strands Agent per Bedrock AgentCore Runtime, viene aggiunto un target bundle al tuo progetto, che:
- Esporta le dipendenze Python in un file
requirements.txtusandouv export - Installa le dipendenze per la piattaforma target (
aarch64-manylinux_2_28) usandouv pip install
Viene anche aggiunto un target docker specifico per il tuo Strands Agent, che copia il Dockerfile e gli artefatti bundle in una directory di contesto docker. Questo co-localizza il Dockerfile con l’output costruito, permettendo a CDK di costruire l’immagine Docker direttamente usando AgentRuntimeArtifact.fromAsset.
Osservabilità
Sezione intitolata “Osservabilità”Il tuo agente è configurato automaticamente con osservabilità usando AWS Distro for Open Telemetry (ADOT), configurando auto-strumentazione nel tuo Dockerfile.
Puoi trovare le tracce nella Console AWS CloudWatch, selezionando “GenAI Observability” nel menu. Nota che per popolare le tracce dovrai abilitare Transaction Search.
Per maggiori dettagli, consulta la documentazione AgentCore sull’osservabilità.
Invocare il tuo Strands Agent
Sezione intitolata “Invocare il tuo Strands Agent”Invocare il Server Locale
Sezione intitolata “Invocare il Server Locale”Per invocare un Agente in esecuzione localmente tramite il target <your-agent-name>-serve, puoi inviare una semplice richiesta POST a /invocations sulla porta su cui il tuo agente locale è in esecuzione. Ad esempio, con curl:
curl -N -X POST http://localhost:8081/invocations \ -d '{"message": "what is 3 + 5?"}' \ -H "Content-Type: application/json"Invocare l’Agente Distribuito
Sezione intitolata “Invocare l’Agente Distribuito”Per invocare il tuo Agent distribuito su Bedrock AgentCore Runtime, puoi inviare una richiesta POST all’endpoint dataplane di Bedrock AgentCore Runtime con il tuo ARN runtime codificato in URL.
Puoi ottenere l’ARN runtime dalla tua infrastruttura come segue:
import { CfnOutput } from 'aws-cdk-lib';import { MyProjectAgent } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { const agent = new MyProjectAgent(this, 'MyProjectAgent');
new CfnOutput(this, 'AgentArn', { value: agent.agentCoreRuntime.agentRuntimeArn, }); }}# Agentmodule "my_project_agent" { # Relative path to the generated module in the common/terraform project source = "../../common/terraform/src/app/agents/my-project-agent"}
output "agent_arn" { value = module.my_project_agent.agent_core_runtime_arn}L’ARN avrà il seguente formato: arn:aws:bedrock-agentcore:<region>:<account>:runtime/<agent-runtime-id>.
Puoi quindi codificare in URL l’ARN sostituendo : con %3A e / con %2F.
L’URL dataplane di Bedrock AgentCore Runtime per invocare l’agent è il seguente:
https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocationsIl modo esatto per invocare questo URL dipende dal metodo di autenticazione utilizzato.
Autenticazione IAM
Sezione intitolata “Autenticazione IAM”Per l’Autenticazione IAM, la richiesta deve essere firmata usando AWS Signature Version 4 (SigV4).
acurl <region> bedrock-agentcore -N -X POST \'https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations' \-d '{"message": "what is 3 + 5?"}' \-H 'Content-Type: application/json'curl abilitato per Sigv4
Puoi aggiungere il seguente script al tuo file .bashrc (ed eseguire source su di esso) oppure incollare quanto segue nello stesso terminale in cui desideri eseguire il comando.
acurl () { REGION=$1 SERVICE=$2 shift; shift; curl --aws-sigv4 "aws:amz:$REGION:$SERVICE" --user "$(aws configure get aws_access_key_id):$(aws configure get aws_secret_access_key)" -H "X-Amz-Security-Token: $(aws configure get aws_session_token)" "$@"}Per effettuare una richiesta curl autenticata con sigv4, invoca acurl come segue:
acurl <region> <service> <other-curl-arguments>Ad esempio:
API Gateway
Sezione intitolata “API Gateway”acurl ap-southeast-2 execute-api -X GET https://xxxURL funzione Lambda streaming
Sezione intitolata “URL funzione Lambda streaming”acurl ap-southeast-2 lambda -N -X POST https://xxxPuoi aggiungere la seguente funzione al tuo profilo PowerShell oppure incollare quanto segue nella stessa sessione PowerShell in cui desideri eseguire il comando.
# PowerShell profile or current sessionfunction acurl { param( [Parameter(Mandatory=$true)][string]$Region, [Parameter(Mandatory=$true)][string]$Service, [Parameter(ValueFromRemainingArguments=$true)][string[]]$CurlArgs )
$AccessKey = aws configure get aws_access_key_id $SecretKey = aws configure get aws_secret_access_key $SessionToken = aws configure get aws_session_token
& curl --aws-sigv4 "aws:amz:$Region`:$Service" --user "$AccessKey`:$SecretKey" -H "X-Amz-Security-Token: $SessionToken" @CurlArgs}Per effettuare una richiesta curl autenticata con sigv4, invoca acurl utilizzando questi esempi:
API Gateway
Sezione intitolata “API Gateway”acurl ap-southeast-2 execute-api -X GET https://xxxURL funzione Lambda streaming
Sezione intitolata “URL funzione Lambda streaming”acurl ap-southeast-2 lambda -N -X POST https://xxxAutenticazione JWT / Cognito
Sezione intitolata “Autenticazione JWT / Cognito”Per l’Autenticazione Cognito, passa il Token di Accesso Cognito nell’header Authorization:
curl -N -X POST 'https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations' \ -d '{"message": "what is 3 + 5?"}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <access-token>"Puoi ottenere il token di accesso usando il comando cognito-idp admin-initiate-auth dell’AWS CLI, ad esempio:
aws cognito-idp admin-initiate-auth \ --user-pool-id <user-pool-id> \ --client-id <user-pool-client-id> \ --auth-flow ADMIN_NO_SRP_AUTH \ --auth-parameters USERNAME=<username>,PASSWORD=<password> \ --region <region> \ --query 'AuthenticationResult.AccessToken' \ --output textBrowser / Sito Web React
Sezione intitolata “Browser / Sito Web React”Per invocare il tuo Strands Agent da un sito web React, puoi utilizzare il generatore connection, che configura automaticamente un client con l’autenticazione corretta (IAM o Cognito).
- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - connection - Compila i parametri richiesti
- Clicca su
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionPuoi anche eseguire una prova per vedere quali file verrebbero modificati
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runConsulta la guida del generatore connection per dettagli su come viene configurata la connessione.
Invocare un Agente A2A come Strumento
Sezione intitolata “Invocare un Agente A2A come Strumento”Per delegare lavoro da questo agente a un agente A2A remoto (sia TypeScript che Python), utilizza il generatore connection. Fornisce un client autenticato con SigV4 per l’agente target e trasforma tramite AST il file agent.py di questo agente per registrare l’agente A2A remoto come delegato decorato con @tool.
- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - connection - Compila i parametri richiesti
- Clicca su
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionPuoi anche eseguire una prova per vedere quali file verrebbero modificati
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runConsulta la guida del generatore connection per dettagli su come viene configurata la connessione.