Ir al contenido

Agente Strands de TypeScript

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

Genera un TypeScript Strands Agent para construir agentes de IA con herramientas, y opcionalmente despliégalo en Amazon Bedrock AgentCore Runtime. Por defecto, el generador utiliza tRPC sobre WebSocket para aprovechar el soporte de streaming bidireccional de AgentCore para comunicación en tiempo real y con seguridad de tipos. Alternativamente, puedes elegir el protocolo Agent-to-Agent (A2A) para interoperabilidad con otros agentes compatibles con A2A.

Strands es un framework ligero para construir agentes de IA. Las características clave incluyen:

  • Ligero y personalizable: Bucle de agente simple que no se interpone en tu camino
  • Listo para producción: Observabilidad completa, rastreo y opciones de despliegue para escalar
  • Agnóstico de modelo y proveedor: Soporta muchos modelos diferentes de varios proveedores
  • Herramientas impulsadas por la comunidad: Conjunto poderoso de herramientas contribuidas por la comunidad
  • Soporte multi-agente: Técnicas avanzadas como equipos de agentes y agentes autónomos
  • Modos de interacción flexibles: Soporte conversacional, streaming y no-streaming

Puedes generar un TypeScript Strands Agent de dos maneras:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#strands-agent
  5. Complete los parámetros requeridos
    • Haga clic en Generate
    Parámetro Tipo Predeterminado Descripción
    project Requerido string - El proyecto al que agregar el Strands Agent
    computeType string BedrockAgentCoreRuntime El tipo de cómputo para alojar tu Strands Agent.
    name string - El nombre de tu Strands Agent (predeterminado: agent)
    auth string IAM El método utilizado para autenticar con tu Strands Agent. Elige entre IAM (predeterminado) o Cognito.
    protocol string HTTP El protocolo del servidor para tu Strands Agent. HTTP expone un servidor tRPC/WebSocket. A2A expone un servidor de protocolo Agent-to-Agent. AG-UI aún no está soportado para agentes TypeScript.
    iacProvider string Inherit El proveedor de IaC preferido. Por defecto, se hereda de tu selección inicial.

    El generador agregará los siguientes archivos a tu proyecto TypeScript existente. Los archivos generados dependen del protocol elegido:

    protocol = HTTP
    • Directorioyour-project/
      • Directoriosrc/
        • Directorioagent/ (o nombre personalizado si se especifica)
          • index.ts Punto de entrada para Bedrock AgentCore Runtime (servidor tRPC/WebSocket)
          • init.ts Inicialización de tRPC
          • router.ts Router de tRPC con procedimientos del agente
          • agent.ts Definición principal del agente con herramientas de ejemplo
          • client.ts Cliente provisto para invocar tu agente
          • agent-core-trpc-client.ts Fábrica de cliente para conectar a agentes en AgentCore Runtime
          • Dockerfile Punto de entrada para alojar tu agente (excluido cuando computeType está establecido en None)
      • package.json Actualizado con dependencias de Strands
      • project.json Actualizado con targets de servicio del agente
    protocol = A2A

    El punto de entrada usa el Strands A2A Express Server en lugar de tRPC:

    • Directorioyour-project/
      • Directoriosrc/
        • Directorioagent/ (o nombre personalizado si se especifica)
          • index.ts Punto de entrada del servidor A2A Express
          • agent.ts Definición principal del agente con herramientas de ejemplo
          • Dockerfile Punto de entrada para alojar tu agente (excluido cuando computeType está establecido en None)
      • package.json Actualizado con dependencias de Strands y Express
      • project.json Actualizado con targets de servicio del agente
    computeType = BedrockAgentCoreRuntime

    Dado que este generador proporciona infraestructura como código basada en tu proveedor de iacProvider seleccionado, creará un proyecto en packages/common que incluye los constructos CDK o módulos de Terraform correspondientes.

    El proyecto común de infraestructura como código tiene la siguiente estructura:

    • Directoriopackages/common/constructs
      • Directoriosrc
        • Directorioapp/ Constructos para infraestructura específica de un proyecto/generador
        • Directoriocore/ Constructos genéricos reutilizados por los constructos en app
        • index.ts Punto de entrada que exporta los constructos de app
      • project.json Objetivos de compilación y configuración del proyecto

    Para desplegar tu Strands Agent, se generan los siguientes archivos:

    • Directoriopackages/common/constructs/src
      • Directorioapp
        • Directorioagents
          • Directorio<project-name>
            • <project-name>.ts Constructo CDK para desplegar tu agente
    computeType = None

    Si seleccionaste None para computeType, no se generan constructos CDK ni módulos Terraform — el Strands Agent solo puede ejecutarse localmente.

    El protocolo del servidor de tu agente determina cómo se comunica. Puedes elegir entre:

    • HTTP (predeterminado): Usa tRPC sobre WebSocket para comunicación en tiempo real y con seguridad de tipos. Mejor para integraciones de clientes personalizadas y control fino sobre la API del agente.
    • A2A: Usa el protocolo Agent-to-Agent (A2A) para comunicación estandarizada entre agentes. Mejor cuando tu agente necesita ser descubrible e invocable por otros agentes compatibles con A2A.

    El protocolo se establece en la infraestructura CDK/Terraform, y el código de la aplicación se genera en consecuencia.

    protocol = HTTP

    El TypeScript Strands Agent utiliza tRPC sobre WebSocket, aprovechando el soporte de streaming bidireccional de AgentCore para habilitar comunicación en tiempo real y con seguridad de tipos entre clientes y tu agente.

    Dado que tRPC soporta procedimientos Query, Mutation y Subscription sobre WebSocket, puedes definir cualquier número de procedimientos. Por defecto, se define un único procedimiento de suscripción llamado invoke en router.ts.

    Las herramientas son funciones que el agente de IA puede llamar para realizar acciones. Puedes agregar nuevas herramientas en el archivo 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],
    });
    };

    El framework Strands maneja automáticamente:

    • Validación de entrada usando esquemas Zod
    • Generación de esquema JSON para llamadas a herramientas
    • Manejo de errores y formateo de respuestas

    Por defecto, los agentes Strands usan Claude 4 Sonnet, pero puedes cambiar fácilmente entre proveedores de modelos:

    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 documentación de Strands sobre proveedores de modelos para más opciones de configuración.

    Puedes agregar herramientas desde servidores MCP a tu agente Strands.

    Para consumir Servidores MCP que has creado usando los generadores py#mcp-server o ts#mcp-server puedes hacer uso del generador connection.

    1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
    2. Abra la consola Nx en VSCode
    3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
    4. Busque @aws/nx-plugin - connection
    5. Complete los parámetros requeridos
      • Haga clic en Generate

      Consulta la guía del generador connection para detalles sobre cómo se configura la conexión.

      Para otros servidores MCP, por favor consulta la Documentación de Strands.

      Para una guía más profunda sobre cómo escribir agentes Strands, consulta la documentación de Strands.

      protocol = A2A

      El index.ts generado monta el Strands A2A Express Server en una aplicación Express para que el agente generado exponga los endpoints del protocolo A2A junto con un health check /ping. Cuando se despliega en AgentCore, el punto de entrada resuelve el ARN público del runtime desde AppConfig y lo anuncia en la tarjeta del agente.

      La mayoría de los usuarios no necesitarán modificar este archivo — edita agent.ts para cambiar herramientas o el prompt del sistema. Los agentes A2A escuchan en el puerto 9000 (vs 8080 para HTTP), para lo cual el Dockerfile y la infraestructura generados ya están configurados.

      El generador configura un target llamado <your-agent-name>-serve, que inicia tu Strands Agent localmente para desarrollo y pruebas.

      Terminal window
      pnpm nx agent-serve your-project

      Este comando usa tsx --watch para reiniciar automáticamente el servidor cuando cambian los archivos. El agente estará disponible en http://localhost:8081 (o el puerto asignado si tienes múltiples agentes).

      El generador configura un target Nx <your-agent-name>-chat que depende de <your-agent-name>-serve-local. Ejecutarlo inicia el agente localmente y te lleva a un chat interactivo de terminal:

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

      Para agentes HTTP (tRPC sobre WebSocket), el generador también emite un pequeño scripts/<your-agent-name>/chat.ts que envuelve el <Agent>Client.local({ url }) generado para que puedas personalizarlo a medida que evoluciona la forma de entrada del agente.

      computeType = BedrockAgentCoreRuntime

      Desplegar tu Strands Agent en Bedrock AgentCore Runtime

      Sección titulada «Desplegar tu Strands Agent en Bedrock AgentCore Runtime»

      Si seleccionaste BedrockAgentCoreRuntime para computeType, se genera la infraestructura CDK o Terraform relevante que puedes usar para desplegar tu Strands Agent en Amazon Bedrock AgentCore Runtime.

      Se genera una construcción CDK para tu agente, nombrada según el name que elegiste al ejecutar el generador, o <ProjectName>Agent por defecto.

      Puedes usar esta construcción CDK en una aplicación CDK:

      import { MyProjectAgent } from ':my-scope/common-constructs';
      export class ExampleStack extends Stack {
      constructor(scope: Construct, id: string) {
      new MyProjectAgent(this, 'MyProjectAgent');
      }
      }

      El generador proporciona una opción auth para configurar la autenticación de tu Strands Agent. Puedes elegir entre autenticación IAM (predeterminada) o Cognito al generar tu agente.

      Por defecto, tu Strands Agent estará protegido usando autenticación IAM, simplemente despliégalo sin ningún argumento:

      import { MyProjectAgent } from ':my-scope/common-constructs';
      export class ExampleStack extends Stack {
      constructor(scope: Construct, id: string) {
      new MyProjectAgent(this, 'MyProjectAgent');
      }
      }

      Puedes otorgar acceso para invocar tu agente en Bedrock AgentCore Runtime usando el método grantInvokeAccess, por ejemplo:

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

      Cuando seleccionas autenticación Cognito, el generador configura el agente para usar Cognito para la autenticación.

      La construcción generada acepta una propiedad identity que configura la autenticación 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,
      });
      }
      }

      La construcción UserIdentity puede generarse usando el generador ts#react-website#auth, o puedes crear tu propio UserPool y UserPoolClient de CDK.

      El generador configura automáticamente un objetivo bundle que utiliza Rolldown para crear un paquete de despliegue:

      Terminal window
      pnpm nx bundle <project-name>

      La configuración de Rolldown se encuentra en rolldown.config.ts, con una entrada por cada bundle a generar. Rolldown gestiona la creación de múltiples bundles en paralelo si están definidos.

      El target bundle usa index.ts como punto de entrada para el servidor WebSocket para alojar en Bedrock AgentCore Runtime.

      El generador configura un target <your-agent-name>-docker que copia el Dockerfile desde el directorio fuente de tu agente al directorio de salida del bundle. Esto co-ubica el Dockerfile con los artefactos empaquetados, permitiendo que CDK construya la imagen Docker directamente usando AgentRuntimeArtifact.fromAsset.

      También se genera un target docker que prepara el contexto docker para todos los agentes si tienes múltiples definidos.

      Tu agente está configurado automáticamente con observabilidad usando el AWS Distro for Open Telemetry (ADOT), configurando auto-instrumentación en tu Dockerfile.

      Puedes encontrar trazas en la Consola AWS CloudWatch, seleccionando “GenAI Observability” en el menú. Ten en cuenta que para que las trazas se completen necesitarás habilitar Transaction Search.

      Para más detalles, consulta la documentación de AgentCore sobre observabilidad.

      La comunicación del agente se transmite vía tRPC sobre WebSocket. Como tal, se recomienda usar la fábrica de cliente con seguridad de tipos generada en client.ts.

      protocol = HTTP

      Puedes invocar un agente ejecutándose localmente usando el método de fábrica .local de la fábrica de cliente.

      Puedes, por ejemplo, crear un archivo llamado scripts/test.ts en tu workspace que importe el cliente:

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

      Para invocar tu Agente desplegado en Bedrock AgentCore Runtime, puedes enviar una solicitud POST al endpoint del plano de datos de Bedrock AgentCore Runtime con tu ARN de runtime codificado en URL.

      Puedes obtener el ARN de runtime desde tu infraestructura de la siguiente manera:

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

      El ARN tendrá el siguiente formato: arn:aws:bedrock-agentcore:<region>:<account>:runtime/<agent-runtime-id>.

      Luego puedes codificar el ARN en URL reemplazando : con %3A y / con %2F.

      La URL del plano de datos de Bedrock AgentCore Runtime para invocar el agente es la siguiente:

      https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations

      La forma exacta de invocar esta URL depende del método de autenticación utilizado.

      El archivo client.ts generado incluye una fábrica de cliente con seguridad de tipos que puede usarse para invocar tu agente desplegado.

      Puedes invocar tu agente desplegado pasando su ARN al método de fábrica 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'),
      });

      Para invocar tu Strands Agent desde un sitio web React, puedes hacer uso del generador connection, que configura automáticamente un cliente tRPC WebSocket con la autenticación correcta (IAM o Cognito).

      1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
      2. Abra la consola Nx en VSCode
      3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
      4. Busque @aws/nx-plugin - connection
      5. Complete los parámetros requeridos
        • Haga clic en Generate

        Consulta la guía del generador connection para detalles sobre cómo se configura la conexión.

        protocol = A2A

        Para delegar trabajo desde este agente a un agente A2A remoto (ya sea TypeScript o Python), usa el generador connection. Este provee un cliente autenticado con SigV4 para el agente objetivo y transforma mediante AST el agent.ts de este agente para registrar el agente A2A remoto como una tool de Strands.

        1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
        2. Abra la consola Nx en VSCode
        3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
        4. Busque @aws/nx-plugin - connection
        5. Complete los parámetros requeridos
          • Haga clic en Generate

          Consulta la guía del generador connection para detalles sobre cómo se configura la conexión.