Salta ai contenuti

Agente TypeScript Strands

Filter this guide Pick generator option values to hide sections that don't apply.

Genera un TypeScript Strands Agent per la creazione di agenti AI con strumenti e, facoltativamente, distribuiscilo su Amazon Bedrock AgentCore Runtime. Per impostazione predefinita, il generatore utilizza tRPC su WebSocket per sfruttare il supporto di streaming bidirezionale di AgentCore per una comunicazione in tempo reale e type-safe. In alternativa, puoi scegliere il protocollo Agent-to-Agent (A2A) per l’interoperabilità con altri agenti compatibili con A2A.

Strands è un framework leggero per la creazione di agenti AI. Le caratteristiche principali includono:

  • Leggero e personalizzabile: Un semplice ciclo di agente che non ti ostacola
  • Pronto per la produzione: Completa osservabilità, tracciamento e opzioni di distribuzione per la scalabilità
  • Agnostico rispetto a modello e provider: Supporta molti modelli diversi da vari provider
  • Strumenti guidati dalla community: Potente set di strumenti contribuiti dalla community
  • Supporto multi-agente: Tecniche avanzate come team di agenti e agenti autonomi
  • Modalità di interazione flessibili: Supporto conversazionale, streaming e non-streaming

Puoi generare un TypeScript Strands Agent in due modi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - ts#strands-agent
  5. Compila i parametri richiesti
    • Clicca su Generate
    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 tRPC/WebSocket. A2A espone un server con protocollo Agent-to-Agent. AG-UI non è ancora supportato per gli agent TypeScript.
    iacProvider string Inherit Il provider IaC preferito. Per impostazione predefinita viene ereditato dalla selezione iniziale.

    Il generatore aggiungerà i seguenti file al tuo progetto TypeScript esistente. I file generati dipendono dal protocol scelto:

    protocol = HTTP
    • Directoryyour-project/
      • Directorysrc/
        • Directoryagent/ (o nome personalizzato se specificato)
          • index.ts Punto di ingresso per Bedrock AgentCore Runtime (server tRPC/WebSocket)
          • init.ts Inizializzazione tRPC
          • router.ts Router tRPC con procedure dell’agente
          • agent.ts Definizione principale dell’agente con strumenti di esempio
          • client.ts Client fornito per invocare il tuo agente
          • agent-core-trpc-client.ts Factory del client per connettersi agli agenti su AgentCore Runtime
          • Dockerfile Punto di ingresso per l’hosting del tuo agente (escluso quando computeType è impostato su None)
      • package.json Aggiornato con le dipendenze di Strands
      • project.json Aggiornato con i target di serve dell’agente
    protocol = A2A

    Il punto di ingresso utilizza il Strands A2A Express Server invece di tRPC:

    • Directoryyour-project/
      • Directorysrc/
        • Directoryagent/ (o nome personalizzato se specificato)
          • index.ts Punto di ingresso del server A2A Express
          • agent.ts Definizione principale dell’agente con strumenti di esempio
          • Dockerfile Punto di ingresso per l’hosting del tuo agente (escluso quando computeType è impostato su None)
      • package.json Aggiornato con le dipendenze di Strands ed Express
      • project.json Aggiornato con i target di serve dell’agente
    computeType = BedrockAgentCoreRuntime

    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

    Per distribuire il tuo Strands Agent, vengono generati i seguenti file:

    • Directorypackages/common/constructs/src
      • Directoryapp
        • Directoryagents
          • Directory<project-name>
            • <project-name>.ts Costrutto CDK per distribuire il tuo agente
    computeType = None

    Se hai selezionato None per computeType, non vengono generati costrutti CDK o moduli Terraform — lo Strands Agent può essere eseguito solo localmente.

    Il protocollo del server del tuo agente determina come comunica. Puoi scegliere tra:

    • HTTP (predefinito): Utilizza tRPC su WebSocket per una comunicazione in tempo reale e type-safe. Ideale per integrazioni client personalizzate e controllo granulare sull’API dell’agente.
    • A2A: Utilizza il protocollo Agent-to-Agent (A2A) per la comunicazione inter-agente standardizzata. Ideale quando il tuo agente deve essere rilevabile e invocabile da altri agenti compatibili con A2A.

    Il protocollo è impostato nell’infrastruttura CDK/Terraform e il codice dell’applicazione viene generato di conseguenza.

    protocol = HTTP

    Il TypeScript Strands Agent utilizza tRPC su WebSocket, sfruttando il supporto di streaming bidirezionale di AgentCore per abilitare la comunicazione in tempo reale e type-safe tra i client e il tuo agente.

    Poiché tRPC supporta le procedure Query, Mutation e Subscription su WebSocket, puoi definire un numero qualsiasi di procedure. Per impostazione predefinita, viene definita per te una singola procedura di subscription denominata invoke in router.ts.

    Gli strumenti sono funzioni che l’agente AI può chiamare per eseguire azioni. Puoi aggiungere nuovi strumenti nel file agent.ts:

    import { Agent, tool } from '@strands-agents/sdk';
    import { z } from 'zod';
    const letterCounter = tool({
    name: 'letter_counter',
    description: 'Count occurrences of a specific letter in a word',
    inputSchema: z.object({
    word: z.string().describe('The input word to search in'),
    letter: z.string().length(1).describe('The specific letter to count'),
    }),
    callback: (input) => {
    const { word, letter } = input;
    const count = word.toLowerCase().split(letter.toLowerCase()).length - 1;
    return `The letter '${letter}' appears ${count} time(s) in '${word}'`;
    },
    });
    // Add tools to your agent
    export const getAgent = async (sessionId: string) => {
    return new Agent({
    systemPrompt: 'You are a helpful assistant with access to various tools.',
    tools: [letterCounter],
    });
    };

    Il framework Strands gestisce automaticamente:

    • Validazione dell’input utilizzando schemi Zod
    • Generazione dello schema JSON per la chiamata degli strumenti
    • Gestione degli errori e formattazione delle risposte

    Per impostazione predefinita, gli agenti Strands utilizzano Claude 4 Sonnet, ma puoi facilmente passare da un provider di modelli all’altro:

    import { Agent } from '@strands-agents/sdk';
    import { BedrockModel } from '@strands-agents/sdk/models/bedrock';
    import { OpenAIModel } from '@strands-agents/sdk/models/openai';
    // Use Bedrock
    const bedrockModel = new BedrockModel({
    modelId: 'anthropic.claude-sonnet-4-20250514-v1:0',
    });
    let agent = new Agent({ model: bedrockModel });
    let response = await agent.invoke('What can you help me with?');
    // Alternatively, use OpenAI by just switching model provider
    const openaiModel = new OpenAIModel({
    apiKey: process.env.OPENAI_API_KEY,
    modelId: 'gpt-4o',
    });
    agent = new Agent({ model: openaiModel });
    response = await agent.invoke('What can you help me with?');

    Consulta la documentazione di Strands sui provider di modelli per ulteriori opzioni di configurazione.

    Puoi aggiungere strumenti dai server MCP al tuo agente Strands.

    Per consumare i Server MCP che hai creato utilizzando i generatori py#mcp-server o ts#mcp-server puoi utilizzare il generatore connection.

    1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
    2. Apri la console Nx in VSCode
    3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
    4. Cerca @aws/nx-plugin - connection
    5. Compila i parametri richiesti
      • Clicca su Generate

      Fai riferimento alla guida del generatore connection per i dettagli su come viene configurata la connessione.

      Per altri server MCP, consulta la Documentazione di Strands.

      Per una guida più approfondita sulla scrittura di agenti Strands, fai riferimento alla documentazione di Strands.

      protocol = A2A

      L’index.ts generato monta il Strands A2A Express Server su un’app Express in modo che l’agente generato esponga gli endpoint del protocollo A2A insieme a un health check /ping. Quando distribuito su AgentCore, il punto di 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.ts per cambiare gli strumenti o il prompt di sistema. Gli agenti A2A ascoltano sulla porta 9000 (contro 8080 per HTTP), per cui il Dockerfile e l’infrastruttura generati sono già configurati.

      Il generatore configura un target denominato <your-agent-name>-serve, che avvia il tuo Strands Agent localmente per lo sviluppo e il testing.

      Terminal window
      pnpm nx agent-serve your-project

      Questo comando utilizza tsx --watch per riavviare automaticamente il server quando i file cambiano. L’agente sarà disponibile su http://localhost:8081 (o la porta assegnata se hai più agenti).

      Il generatore configura un target Nx <your-agent-name>-chat che dipende da <your-agent-name>-serve-local. Eseguendolo avvia l’agente localmente e ti porta in una chat interattiva da terminale:

      Terminal window
      pnpm nx run your-project:agent-chat

      Per gli agenti HTTP (tRPC su WebSocket), il generatore emette anche un piccolo scripts/<your-agent-name>/chat.ts che avvolge il <Agent>Client.local({ url }) generato in modo da poterlo personalizzare mentre evolvi la forma di input dell’agente.

      computeType = BedrockAgentCoreRuntime

      Distribuire il Tuo Strands Agent su Bedrock AgentCore Runtime

      Sezione intitolata “Distribuire il Tuo Strands Agent su Bedrock AgentCore Runtime”

      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');
      }
      }

      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);
      }
      }

      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 generatore configura automaticamente un target bundle che utilizza Rolldown per creare un pacchetto di distribuzione:

      Terminal window
      pnpm nx bundle <project-name>

      La configurazione di Rolldown si trova in rolldown.config.ts, con un’entry per bundle da generare. Rolldown gestisce la creazione di più bundle in parallelo se definiti.

      Il target bundle utilizza index.ts come punto di ingresso per il server WebSocket da ospitare su Bedrock AgentCore Runtime.

      Il generatore configura un target <your-agent-name>-docker che copia il Dockerfile dalla directory sorgente del tuo agente nella directory di output del bundle. Questo co-localizza il Dockerfile con gli artefatti in bundle, consentendo a CDK di costruire l’immagine Docker direttamente utilizzando AgentRuntimeArtifact.fromAsset.

      Viene generato anche un target docker che prepara il contesto docker per tutti gli agenti se ne hai definiti più di uno.

      Il tuo agente è automaticamente configurato con l’osservabilità utilizzando AWS Distro for Open Telemetry (ADOT), configurando l’auto-instrumentazione nel tuo Dockerfile.

      Puoi trovare le tracce nella Console AWS di CloudWatch, selezionando “GenAI Observability” nel menu. Nota che affinché le tracce vengano popolate dovrai abilitare Transaction Search.

      Per maggiori dettagli, fai riferimento alla documentazione di AgentCore sull’osservabilità.

      La comunicazione dell’agente viene trasmessa tramite tRPC su WebSocket. Pertanto, si consiglia di utilizzare la factory del client type-safe generata in client.ts.

      protocol = HTTP

      Puoi invocare un agente in esecuzione localmente utilizzando il metodo factory .local dalla factory del client.

      Puoi, ad esempio, creare un file denominato scripts/test.ts nel tuo workspace che importa il client:

      scripts/test.ts
      import { AgentClient } from '../packages/<project>/src/agent/client.js';
      const client = AgentClient.local({ url: 'http://localhost:8081/ws' });
      client.invoke.subscribe({ message: 'what is 1 plus 1?' }, { onData: console.log });

      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,
      });
      }
      }

      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>/invocations

      Il modo esatto per invocare questo URL dipende dal metodo di autenticazione utilizzato.

      Il file client.ts generato include una factory del client type-safe che può essere utilizzata per invocare il tuo agente distribuito.

      Puoi invocare il tuo agente distribuito passando il suo ARN al metodo factory withIamAuth:

      import { AgentClient } from './agent/client.js';
      const client = AgentClient.withIamAuth({
      agentRuntimeArn: 'arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent',
      });
      client.invoke.subscribe({ message: 'what is 1 plus 1?' }, {
      onData: (message) => console.log(message),
      onError: (error) => console.error(error),
      onComplete: () => console.log('Done'),
      });

      Per invocare il tuo Strands Agent da un sito web React, puoi utilizzare il generatore connection, che configura automaticamente un client tRPC WebSocket con l’autenticazione corretta (IAM o Cognito).

      1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
      2. Apri la console Nx in VSCode
      3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
      4. Cerca @aws/nx-plugin - connection
      5. Compila i parametri richiesti
        • Clicca su Generate

        Fai riferimento alla guida del generatore connection per i dettagli su come viene configurata la connessione.

        protocol = A2A

        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 di destinazione e trasforma tramite AST l’agent.ts di questo agente per registrare l’agente A2A remoto come tool di Strands.

        1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
        2. Apri la console Nx in VSCode
        3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
        4. Cerca @aws/nx-plugin - connection
        5. Compila i parametri richiesti
          • Clicca su Generate

          Fai riferimento alla guida del generatore connection per i dettagli su come viene configurata la connessione.