Ir al contenido

Agente de Python

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

Genera un agente de IA en Python para construir agentes con herramientas, y opcionalmente desplegarlo en Amazon Bedrock AgentCore Runtime. Elige el framework del agente con la opción framework: Strands (el predeterminado) o LangChain (construido sobre LangGraph).

El generador expone tu agente mediante un protocol de servidor. Ambos frameworks soportan HTTP (el predeterminado), el protocolo Agent-to-Agent (A2A) para interoperabilidad con otros agentes compatibles con A2A, y el protocolo AG-UI para integración directa con el frontend mediante CopilotKit.

Puedes generar un Agente de Python de dos formas:

  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 - py#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 Agent
    framework strands | langchain strands El SDK del agente a utilizar.
    name string - El nombre de tu Agent (predeterminado: agent)
    auth iam | cognito iam El método utilizado para autenticar con tu Agent. Solo aplicable cuando infra está configurado (se ignora cuando infra es none).
    protocol http | a2a | ag-ui http El protocolo del servidor para tu Agent. HTTP expone un servidor HTTP FastAPI. A2A expone un servidor de protocolo Agent-to-Agent. AG-UI expone un servidor de protocolo Agent-User Interaction para integración directa con el frontend.
    iac inherit | cdk | terraform inherit El proveedor de IaC preferido. Por defecto, se hereda de tu selección inicial.
    infra agentcore | none agentcore El tipo de infraestructura para alojar tu Agent.
    preferInstallDependencies boolean true Si se prefiere instalar las dependencias después de que se ejecute el generador. Establece en false para diferir la instalación cuando se ejecutan múltiples generadores en lote (la instalación aún se ejecuta si es necesaria para que los generadores subsecuentes puedan calcular el grafo de proyectos de Nx); instala una vez al final.

    El generador añadirá los siguientes archivos a tu proyecto Python existente. Los archivos generados dependen del protocol elegido:

    protocol = http
    • Directorioyour-project/
      • Directorioyour_module/
        • Directorioagent/ (o nombre personalizado si se especifica)
          • __init__.py Inicialización del paquete Python
          • init.py Configuración de aplicación FastAPI con middleware CORS y manejo de errores
          • agent.py Definición principal del agente con herramientas de ejemplo
          • main.py Punto de entrada FastAPI para Bedrock AgentCore Runtime
          • Dockerfile Punto de entrada para alojar tu agente (excluido cuando infra es None)
      • pyproject.toml Actualizado con dependencias de Strands
      • project.json Actualizado con objetivos de servicio del agente
    protocol = a2a

    El punto de entrada expone tu agente mediante el protocolo A2A (Strands usa el Strands A2A Server; LangChain envuelve el grafo en un ejecutor a2a-sdk), montado sobre una aplicación FastAPI:

    • Directorioyour-project/
      • Directorioyour_module/
        • Directorioagent/ (o nombre personalizado si se especifica)
          • __init__.py Inicialización del paquete Python
          • agent.py Definición principal del agente con herramientas de ejemplo
          • main.py Punto de entrada del servidor A2A
          • Dockerfile Punto de entrada para alojar tu agente (excluido cuando infra es None)
      • pyproject.toml Actualizado con dependencias del framework y A2A
      • project.json Actualizado con objetivos de servicio del agente
    protocol = ag-ui

    El punto de entrada expone tu agente mediante el protocolo AG-UI para integración directa con el frontend usando CopilotKit. Los agentes Strands usan la integración ag-ui-strands; los agentes LangChain usan ag-ui-langgraph:

    • Directorioyour-project/
      • Directorioyour_module/
        • Directorioagent/ (o nombre personalizado si se especifica)
          • __init__.py Inicialización del paquete Python
          • agent.py Definición principal del agente con herramientas de ejemplo
          • main.py Punto de entrada del servidor AG-UI
          • Dockerfile Punto de entrada para alojar tu agente (excluido cuando infra es None)
      • pyproject.toml Actualizado con dependencias del framework y AG-UI
      • project.json Actualizado con objetivos de servicio del agente
    infra = agentcore

    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 Agente, se generan los siguientes archivos:

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

    Si seleccionaste None para infra, no se generan constructos CDK ni módulos Terraform — el Agente solo puede ejecutarse localmente. La opción auth se ignora en este modo ya que no hay un endpoint alojado para autenticar.

    Cuando se despliega en Bedrock AgentCore Runtime, el agente se construye en una imagen de contenedor, se envía a Amazon ECR y se ejecuta en AgentCore Runtime. Los clientes invocan el endpoint del plano de datos de AgentCore Runtime, que reenvía las solicitudes a tu agente. El agente llama a Amazon Bedrock para la inferencia del modelo y puede invocar herramientas, servidores MCP o APIs descendentes.

    ClientECRAgent(AgentCore Runtime)Bedrock(Model Inference)CloudWatch(Logs, Metrics) Containerimage InvokeModel

    Puedes editar agent.py para añadir herramientas, configurar el modelo y personalizar el prompt del sistema. La API depende del framework que elegiste.

    Las herramientas son funciones que el agente de IA puede llamar para realizar acciones. Ambos frameworks usan un enfoque basado en decoradores para definir herramientas, derivan el nombre y descripción de la herramienta del nombre de la función y el docstring, y generan el esquema de entrada a partir de tus type hints.

    from strands import Agent, tool
    @tool
    def calculate_sum(numbers: list[int]) -> int:
    """Calcula la suma de una lista de números"""
    return sum(numbers)
    @tool
    def get_weather(city: str) -> str:
    """Obtiene información meteorológica de una ciudad"""
    # Tu integración de API del tiempo aquí
    return f"Weather in {city}: Soleado, 25°C"
    # Añade herramientas al agente
    agent = Agent(
    system_prompt="Eres un asistente útil con acceso a varias herramientas.",
    tools=[calculate_sum, get_weather],
    )

    Strands provee una colección de herramientas preconstruidas a través del paquete strands-tools:

    from strands_tools import current_time, http_request, file_read
    agent = Agent(
    system_prompt="Eres un asistente útil.",
    tools=[current_time, http_request, file_read],
    )

    Por defecto, los agentes Strands usan Claude 4 Sonnet, pero puedes personalizar el proveedor del modelo. Consulta la documentación de Strands sobre proveedores de modelos para opciones de configuración:

    from strands import Agent
    from strands.models import BedrockModel
    # Crea un BedrockModel
    bedrock_model = BedrockModel(
    model_id="anthropic.claude-sonnet-4-20250514-v1:0",
    region_name="us-west-2",
    temperature=0.3,
    )
    agent = Agent(model=bedrock_model)

    Para consumir servidores MCP creados con los generadores py#mcp-server o ts#mcp-server puedes hacer uso del generador connection, que conecta las herramientas del servidor MCP a tu agente para ambos frameworks.

    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, consulta la documentación de MCP de Strands o LangChain.

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

      El protocolo de servidor de tu agente determina cómo se comunica. Todas las opciones son servidas por FastAPI — el punto de entrada difiere:

      • HTTP (por defecto): Un servidor FastAPI estándar con un endpoint personalizado /invocations, CORS y streaming. Mejor para integraciones de clientes personalizados.
      • A2A: Un servidor Agent-to-Agent montado sobre una aplicación FastAPI (Strands usa el Strands A2A Server; LangChain usa el a2a-sdk agnóstico del framework). Mejor cuando tu agente necesita ser descubrible e invocable por otros agentes compatibles con A2A.
      • AG-UI: El protocolo AG-UI mediante SSE (Strands usa ag-ui-strands; LangChain usa ag-ui-langgraph). Mejor para integración directa con el frontend usando CopilotKit en un sitio web React.

      El punto de entrada del servidor difiere según el framework (Strands produce un Agent gestionado por contexto, mientras que LangChain ejecuta un grafo compilado create_agent), pero el contrato externo para cada protocolo es el mismo.

      Todos los protocolos exponen /ping para el contrato de verificación de salud del runtime de AgentCore. Los agentes A2A escuchan en el puerto 9000; los agentes HTTP y AG-UI escuchan en el puerto 8080. El Dockerfile y la infraestructura generados están configurados para ti.

      protocol = http

      El servidor HTTP generado incluye:

      • Configuración de aplicación FastAPI con middleware CORS
      • Middleware de manejo de errores
      • Generación de esquema OpenAPI
      • Endpoint de verificación de salud (/ping)
      • Endpoint de invocación del agente (/invocations)

      Personalizando Entradas y Salidas de Invocación con Pydantic

      Sección titulada «Personalizando Entradas y Salidas de Invocación con Pydantic»

      El endpoint de invocación del agente usa modelos Pydantic para definir y validar los esquemas de solicitud y respuesta. Puedes personalizar estos modelos en main.py para que coincidan con los requisitos de tu agente.

      El modelo InvokeInput por defecto acepta un mensaje.

      from pydantic import BaseModel
      class InvokeInput(BaseModel):
      message: str

      Puedes extender este modelo para incluir cualquier campo adicional que tu agente necesite.

      El ID de sesión se extrae del header HTTP x-amzn-bedrock-agentcore-runtime-session-id, de acuerdo con el contrato de sesión de Bedrock AgentCore Runtime. Si el header no se proporciona, se genera un UUID aleatorio como alternativa.

      Para respuestas de streaming, el generador proporciona JsonStreamingResponse que serializa automáticamente modelos Pydantic al formato JSON Lines (application/jsonl). Este formato es compatible con la especificación de streaming de OpenAPI 3.2 y funciona perfectamente con el cliente TypeScript generado.

      Por defecto, el agente produce objetos StreamChunk que contienen el texto de respuesta del agente:

      class StreamChunk(BaseModel):
      content: str

      Puedes personalizar el modelo StreamChunk según tus necesidades:

      from pydantic import BaseModel
      class StreamChunk(BaseModel):
      content: str
      timestamp: str
      token_count: int

      Existe una solicitud de característica abierta para soporte nativo en FastAPI.

      El generador incluye una dependencia del SDK Python de Bedrock AgentCore para las constantes PingStatus. Si lo deseas, es sencillo usar BedrockAgentCoreApp en lugar de FastAPI, sin embargo ten en cuenta que se pierde la seguridad de tipos.

      Puedes encontrar detalles sobre las capacidades del SDK en la documentación.

      protocol = a2a

      El main.py generado monta un servidor A2A sobre una aplicación FastAPI padre que también expone /ping. Los agentes Strands usan el A2AServer de Strands; los agentes LangChain envuelven el grafo compilado en un AgentExecutor de a2a-sdk. 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.py para cambiar herramientas o el prompt del sistema. El servidor A2A completa la tarjeta del agente (/.well-known/agent-card.json) a partir del name y description del agente.

      protocol = ag-ui

      El main.py generado expone un único endpoint POST que transmite eventos de AG-UI mediante Server-Sent Events (SSE), así como /ping para la verificación de salud del runtime de AgentCore. La configuración depende del framework:

      • Strands: envuelve tu Agent en un ag_ui_strands.StrandsAgent y crea la aplicación FastAPI mediante create_strands_app().
      • LangChain: envuelve el grafo compilado en un ag_ui_langgraph.LangGraphAgent y lo sirve desde un bucle FastAPI /invocations hecho a mano.

      La mayoría de los usuarios no necesitarán modificar este archivo — edita agent.py para cambiar herramientas o el prompt del sistema.

      Para ejecutar tu Agente (y todo lo conectado a él) localmente, usa el target dev del proyecto:

      Terminal window
      pnpm nx dev your-project

      Si has agregado múltiples componentes a tu proyecto (agentes, servidores MCP, etc.), esto los inicia todos. Para ejecutar solo este agente, apunta a su target <your-agent-name>-dev:

      Terminal window
      pnpm nx agent-dev your-project

      Esto usa uv run para ejecutar tu Agente usando el SDK Python de Bedrock AgentCore.

      El generador configura un target Nx <your-agent-name>-chat que te lleva a un chat interactivo en la terminal con tu agente.

      El target de chat se ejecuta de forma independiente. Por defecto se conecta a tu agente ejecutándose localmente, así que primero inicia el target <your-agent-name>-dev del agente (en una terminal separada):

      Terminal window
      pnpm nx agent-dev your-project

      Luego, en otra terminal, inicia el chat:

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

      El generador emite un scripts/<your-agent-name>/chat.ts para cada protocolo. Se conecta al agente local por defecto, o a tu agente desplegado cuando se establece RUNTIME_CONFIG_APP_ID (consulta Chatear con tu agente desplegado más abajo).

      Para agentes HTTP, el script de chat usa un cliente TypeScript con tipos generado a partir de la especificación OpenAPI del agente. El generador también emite:

      • scripts/<your-agent-name>_openapi.py — un pequeño script que exporta la especificación OpenAPI del agente
      • Un target Nx <your-agent-name>-openapi que lo ejecuta
      • Un target Nx <your-agent-name>-generate-client que produce un cliente TypeScript con tipos bajo scripts/<your-agent-name>/generated/

      Cuando personalizas la forma de entrada del agente (por ejemplo, añades nuevos campos a InvokeInput), actualiza chat.ts para pasar los nuevos campos al invocar el agente y el resto funciona automáticamente.

      infra = agentcore

      Para chatear con tu agente desplegado en Bedrock AgentCore, establece la variable de entorno RUNTIME_CONFIG_APP_ID al id de aplicación de AppConfig del despliegue (salida como RuntimeConfigApplicationId por el stack desplegado). El script de chat resuelve el ARN de runtime de tu agente desde la configuración de runtime y se conecta al endpoint desplegado:

      Para agentes autenticados con IAM, las solicitudes se firman con SigV4 usando tus credenciales AWS predeterminadas. Asegúrate de que el entorno tenga credenciales AWS con permiso para invocar el runtime:

      Terminal window
      RUNTIME_CONFIG_APP_ID=<app-id> pnpm nx run your-project:agent-chat
      infra = agentcore

      Desplegando tu Agente a Bedrock AgentCore Runtime

      Sección titulada «Desplegando tu Agente a Bedrock AgentCore Runtime»

      Si seleccionaste agentcore para infra, se genera la infraestructura CDK o Terraform relevante que puedes usar para desplegar tu 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 Agent. Puedes elegir entre autenticación IAM (predeterminada) o Cognito al generar tu agente.

      Por defecto, tu 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#website#auth, o puedes crear tu propio UserPool y UserPoolClient de CDK.

      Para construir tu Agente para Bedrock AgentCore Runtime, se añade un target bundle que:

      • Exporta dependencias Python a requirements.txt usando uv export
      • Instala dependencias para la plataforma objetivo (aarch64-manylinux_2_28) con uv pip install

      También se añade un target docker específico de tu Agente, que copia el Dockerfile y los artefactos empaquetados en un directorio de contexto docker. Esto co-localiza el Dockerfile con la salida construida, permitiendo a CDK construir la imagen Docker directamente usando AgentRuntimeArtifact.fromAsset.

      Tu agente se configura automáticamente con observabilidad usando AWS Distro for Open Telemetry (ADOT), mediante auto-instrumentación en tu Dockerfile.

      Puedes encontrar trazas en CloudWatch seleccionando “GenAI Observability”. Para ver trazas, habilita Transaction Search.

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

      protocol = http

      Para invocar un Agente ejecutándose localmente mediante el target <your-agent-name>-serve, puedes enviar una simple solicitud POST a /invocations en el puerto donde se ejecuta tu agente local. Por ejemplo, con curl:

      Ventana de terminal
      curl -N -X POST http://localhost:8081/invocations \
      -d '{"message": "what is 3 + 5?"}' \
      -H "Content-Type: application/json"

      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.

      Para autenticación IAM, la solicitud debe firmarse usando AWS Signature Version 4 (SigV4).

      Ventana de terminal
      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'
      Haz clic aquí para más detalles sobre cómo configurar el comando acurl anterior

      Para invocar tu Agente desde un sitio web React, puedes hacer uso del generador connection, que configura automáticamente un cliente 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 genera un cliente autenticado con SigV4 para el agente objetivo y transforma mediante AST el agent.py de este agente para registrar el agente A2A remoto como un delegado decorado con @tool.

        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 = ag-ui

          Para invocar tu agente AG-UI desde un sitio web React, usa el generador connection, que configura un cliente de CopilotKit para tu agente desplegado 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.

            Usa el generador connection para integrar este proyecto con otros en tu workspace. Las siguientes conexiones involucran este proyecto:

            Strands Agents Python
            React a Python Agent Llama a un Python Agent desde un sitio web React
            CopilotKit
            React a AG-UI Agent Llama a un Agent que expone el protocolo AG-UI desde un sitio web React a través de CopilotKit
            Strands Agents Python Model Context Protocol
            Python Agent a MCP Conecta un Python Agent a un servidor MCP
            Strands Agents Python Agent2Agent
            Python Agent a A2A Agent Conecta un Python Agent a un agente A2A remoto
            Strands Agents TypeScript Agent2Agent
            TypeScript Agent a A2A Agent Conecta un TypeScript Agent a un agente A2A remoto
            Strands Agents Python Amazon DynamoDB Python
            Python Agent a Python DynamoDB Conecta un Python Agent a una tabla DynamoDB
            Strands Agents Python Amazon Bedrock AgentCore Gateway
            Python Agent a AgentCore Gateway Conecta un Python Agent a un AgentCore Gateway