Semana 5 · Módulo 5 de 11

IA agéntica, herramientas y Amazon Bedrock AgentCore

Aprenderás qué es un agente de IA desde cero, cómo se le dan herramientas, memoria y límites, y cómo se construye con Strands Agents, MCP y Amazon Bedrock AgentCore. Es el task statement 2.1, uno de los más «de diseño» del examen: agentes frente a workflows, multiagente, human-in-the-loop y controles de seguridad.

⏱ ~16 h de estudioTask statements: 2.1
Al terminar este módulo sabrás:
  • Explicar el bucle de un agente (razonar, actuar, observar) y sus piezas (modelo, herramientas, memoria, planificación)
  • Elegir entre workflow determinista, agente único y sistema multiagente según los requisitos
  • Diseñar herramientas fiables (esquemas, validación, errores, timeouts) y exponerlas con MCP o AgentCore Gateway
  • Construir un agente con Strands Agents y desplegarlo en AgentCore Runtime
  • Elegir el componente de AgentCore adecuado (Runtime, Memory, Gateway, Identity, Policy, Observability, Evaluations…)
  • Reconocer Bedrock Agents «Classic» en un enunciado y saber su estado y su alternativa
  • Implementar human-in-the-loop y límites de seguridad (condiciones de parada, timeouts, IAM, circuit breakers)
Índice del módulo

Reparto de la semana

Día Qué hacer Tiempo
Lunes Leer «Qué es un agente», «Patrones de razonamiento» y «Workflows frente a agentes». Dibujar a mano el bucle ReAct 2,5 h
Martes «Herramientas», «MCP» y «Strands Agents». Instalar Strands en CloudShell y ejecutar el ejemplo mínimo 2,5 h
Miércoles Lab 09 (agente con Strands y herramienta propia, con aprobación humana) 2,5 h
Jueves «Amazon Bedrock AgentCore» componente a componente y «Bedrock Agents Classic» 2,5 h
Viernes Lab 10 (desplegar el agente en AgentCore Runtime). Recuerda: exige plan de pago 2 h
Sábado «Multiagente», «Human-in-the-loop» y «Límites de seguridad». Repasar las trampas 2 h
Domingo Test del módulo (fallos → volver a la sección), tarjetas y resumen propio de una página 2 h

Por qué importa

Hasta ahora has usado el modelo como una función: le mandas un prompt y te devuelve texto. Un agente (agent) va un paso más allá: el modelo decide qué hacer, llama a herramientas (APIs, bases de datos, otros modelos), mira el resultado y vuelve a decidir, en bucle, hasta cumplir un objetivo. Es la pieza que convierte un chatbot en algo que actúa: consulta un pedido, abre una incidencia, reserva una cita.

El task statement 2.1 (Implement agentic AI solutions and tool integrations) tiene siete skills y el examen las pregunta como decisiones de arquitectura:

  • ¿Agente o workflow determinista? ¿Un agente o varios?
  • ¿Dónde guardo la memoria? ¿Cómo evito que el agente entre en bucle o gaste sin control?
  • ¿Cómo expongo mis APIs como herramientas de forma estándar (MCP) y segura (IAM, OAuth, políticas)?
  • ¿Dónde ejecuto el agente en producción con aislamiento por sesión (AgentCore Runtime)?
  • ¿Cómo meto a una persona en el circuito para aprobar acciones delicadas?

Qué es un agente, desde cero

Del prompt al bucle

Un modelo fundacional (foundation model, FM) solo genera texto. No puede consultar tu base de datos ni enviar un correo. Lo que sí puede es pedir que alguien lo haga: con tool use (también llamado function calling, llamada a funciones), tú describes herramientas en la petición y el modelo, en vez de contestar, devuelve «quiero llamar a consultar_pedido con pedido_id = P-1001». Tu código ejecuta la herramienta, le devuelve el resultado y el modelo continúa. Lo viste en el módulo 04 con la API Converse: el modelo responde con stopReason = tool_use y un bloque toolUse; tú contestas con un bloque toolResult.

Un agente es exactamente ese mecanismo metido en un bucle con un objetivo:

flowchart TD
    U["Petición del usuario"] --> M["Modelo: razona y decide"]
    M -->|"stopReason = tool_use"| T["Ejecutar herramienta"]
    T -->|"toolResult (observación)"| M
    M -->|"stopReason = end_turn"| R["Respuesta final"]
    M -->|"límite de turnos, tokens o tiempo"| S["Parada controlada"]

A este bucle se le llama agent loop o bucle razonar-actuar-observar. Cada vuelta es un turno (turn o cycle): una llamada al modelo más las herramientas que pida.

Las piezas de un agente

Pieza Qué es Ejemplo en AWS
Modelo (el «cerebro») FM que razona y elige la siguiente acción Amazon Nova, Claude en Amazon Bedrock
Instrucciones (system prompt) Rol, objetivo, reglas y tono «Eres el asistente de pedidos; no inventes precios»
Herramientas (tools, actions) Funciones que el agente puede invocar, descritas con nombre, descripción y esquema JSON de parámetros Lambda, APIs REST, servidores MCP, AgentCore Gateway
Memoria a corto plazo El historial de la conversación actual que se reenvía al modelo Mensajes en el propio agente, AgentCore Memory (eventos)
Memoria a largo plazo Hechos, preferencias o resúmenes que sobreviven entre sesiones AgentCore Memory (estrategias), DynamoDB
Planificación Descomponer un objetivo en pasos y decidir el orden ReAct, plan-and-execute, un agente supervisor
Entorno de ejecución Dónde corre el bucle, con aislamiento, escalado e identidad AgentCore Runtime, Lambda, ECS/EKS
Límites y controles Condiciones de parada, permisos, políticas, aprobación humana Límite de turnos, IAM, AgentCore Policy, Step Functions

Memoria: corto y largo plazo

Un LLM no recuerda nada entre llamadas. Toda la «memoria» es contexto que tú vuelves a enviar.

  • Memoria a corto plazo (short-term memory): los mensajes de la sesión actual. Crece con cada turno y consume la ventana de contexto (context window, el máximo de tokens que el modelo acepta). Por eso se gestiona con estrategias: ventana deslizante (guardar los N últimos mensajes), resumen de lo antiguo o recorte de resultados de herramientas grandes.
  • Memoria a largo plazo (long-term memory): información extraída y consolidada que se recupera en sesiones futuras («el cliente prefiere envío urgente»). Se recupera por búsqueda semántica, igual que en RAG.
  • Estado (state): datos estructurados de la tarea (paso actual, identificadores, contadores). No es lo mismo que memoria conversacional; suele vivir en DynamoDB, en el estado de Step Functions o en el estado del agente.

Patrones de razonamiento

Chain-of-thought (CoT)

Chain-of-thought (cadena de pensamiento) es pedir al modelo que razone paso a paso antes de responder. Mejora tareas de lógica y cálculo. Es una técnica de prompt (módulo 04); en un agente es la parte «razonar» de cada turno.

ReAct: razonar + actuar

ReAct (Reason + Act) alterna tres cosas: Thought (pensamiento: qué necesito), Action (acción: llamar a una herramienta) y Observation (observación: el resultado). Se repite hasta tener la respuesta. Es el patrón por defecto de casi todos los frameworks de agentes, incluidos Strands y AgentCore Harness.

Pregunta: ¿Cuánto cuesta enviar por urgente el pedido P-1001?
Thought: necesito el peso del pedido.
Action: consultar_pedido(pedido_id="P-1001")
Observation: {"estado": "enviado", "peso_kg": 2.5}
Thought: ahora calculo el envío urgente de 2,5 kg.
Action: calcular_envio(peso_kg=2.5, modalidad="urgente")
Observation: {"coste_eur": 11.75}
Respuesta: El envío urgente costaría 11,75 €.

Otros patrones que debes reconocer

Patrón Idea Cuándo
Plan-and-execute Un paso de planificación genera la lista de tareas; otro las ejecuta; se replanifica si algo falla Tareas largas con muchos pasos, cuando quieres el plan visible y auditable
Reflexión / autocrítica El agente (u otro modelo) revisa su respuesta y la corrige Calidad por encima de latencia (informes, código)
Descomposición de problemas Dividir una pregunta compleja en subpreguntas Análisis con varias fuentes; también en RAG (módulo 03)
Routing (enrutado) Clasificar la petición y mandarla al especialista Varios dominios; es la base de Agent Squad
Orquestador-trabajadores Un supervisor reparte subtareas a especialistas y agrega Multiagente (más abajo)

ReAct con Step Functions (skill 2.1.2)

La guía cita expresamente «Step Functions to implement ReAct patterns and chain-of-thought reasoning». La idea: en vez de un bucle while en tu código, el bucle es una máquina de estados con estados visibles, reintentos, timeouts y un contador de iteraciones como condición de parada.

flowchart TD
    A["Inicializar: iteracion = 0"] --> B["Lambda: llamar al modelo (Converse)"]
    B --> C{"stopReason"}
    C -->|"end_turn"| OK["Éxito: devolver respuesta"]
    C -->|"tool_use"| D{"iteracion mayor o igual que 8"}
    D -->|"sí"| F["Fallo controlado: LimiteIteraciones"]
    D -->|"no"| E["Lambda: ejecutar herramienta (timeout, reintentos)"]
    E --> G["iteracion + 1 y añadir toolResult al historial"]
    G --> B
    E -->|"error tras reintentos"| H["Catch: devolver error al modelo o escalar a humano"]

Fragmento de la definición (Amazon States Language, ASL):

{
  "StartAt": "LlamarModelo",
  "States": {
    "LlamarModelo": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": { "FunctionName": "react-llamar-modelo", "Payload.$": "$" },
      "OutputPath": "$.Payload",
      "TimeoutSeconds": 60,
      "Retry": [
        { "ErrorEquals": ["ThrottlingException"], "IntervalSeconds": 2, "BackoffRate": 2, "MaxAttempts": 4 }
      ],
      "Next": "DecidirSiguientePaso"
    },
    "DecidirSiguientePaso": {
      "Type": "Choice",
      "Choices": [
        { "Variable": "$.stopReason", "StringEquals": "end_turn", "Next": "Exito" },
        { "Variable": "$.iteracion", "NumericGreaterThanEquals": 8, "Next": "LimiteIteraciones" }
      ],
      "Default": "EjecutarHerramienta"
    },
    "EjecutarHerramienta": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": { "FunctionName": "react-ejecutar-herramienta", "Payload.$": "$" },
      "OutputPath": "$.Payload",
      "TimeoutSeconds": 30,
      "Catch": [ { "ErrorEquals": ["States.ALL"], "ResultPath": "$.error", "Next": "EscalarAHumano" } ],
      "Next": "LlamarModelo"
    },
    "EscalarAHumano": { "Type": "Fail", "Error": "HerramientaFallida" },
    "LimiteIteraciones": { "Type": "Fail", "Error": "LimiteIteraciones" },
    "Exito": { "Type": "Succeed" }
  }
}

Qué gana esta versión frente a un bucle en código: historial de ejecución auditable, reintentos declarativos, timeouts por paso, condición de parada explícita y la posibilidad de insertar un paso de aprobación humana (lo verás en «Human-in-the-loop»). Qué pierde: más latencia y más piezas que mantener. Si el enunciado prima «trazabilidad de cada paso» y «control de ejecución», Step Functions encaja; si prima «mínimo esfuerzo operativo para un agente conversacional», un framework de agentes en AgentCore Runtime.

Workflows deterministas frente a agentes

No todo necesita un agente. Un agente es no determinista: el modelo elige el camino, así que dos ejecuciones pueden diferir. Eso da flexibilidad y quita previsibilidad.

Enfoque Quién decide el camino Ventajas Inconvenientes Servicios típicos
Workflow determinista Tú, en el diseño Previsible, auditable, fácil de probar, coste acotado Rígido: cada caso nuevo exige cambiar el flujo Step Functions, Amazon Bedrock Flows (Prompt Flows), código
Workflow con pasos de LLM Tú; el LLM clasifica o extrae en pasos concretos Buen equilibrio; el LLM no controla el flujo Sigue siendo rígido en la estructura Step Functions con Bedrock, Bedrock Flows con nodos de condición
Agente único El modelo, dentro de las herramientas que le das Flexible ante peticiones abiertas Menos previsible; necesita límites Strands en AgentCore Runtime, AgentCore Harness
Multiagente Varios modelos coordinados Especialización, paralelismo, dominios separados Más coste, latencia y complejidad de depuración Strands (agents-as-tools, swarm, graph), Agent Squad, A2A

Regla práctica: empieza por lo más simple que cumpla. Si los pasos son conocidos y fijos (validar documento → extraer campos → guardar), workflow. Si las peticiones son abiertas y la ruta depende de lo que se descubra por el camino, agente. Si hay dominios muy distintos o subtareas paralelas, multiagente.

Herramientas fiables (skill 2.1.6)

Una herramienta mal diseñada es la causa más habitual de agentes que fallan. El modelo solo ve nombre, descripción y esquema: si son ambiguos, elegirá mal o pasará parámetros erróneos.

Definición estandarizada

Todas las plataformas usan la misma idea: un JSON Schema de entrada. En Converse se llama toolSpec:

{
  "toolSpec": {
    "name": "calcular_envio",
    "description": "Calcula el coste de envío en euros de un paquete.",
    "inputSchema": {
      "json": {
        "type": "object",
        "properties": {
          "peso_kg": { "type": "number", "description": "Peso en kg, mayor que 0 y como máximo 30." },
          "modalidad": { "type": "string", "enum": ["estandar", "urgente"] }
        },
        "required": ["peso_kg"]
      }
    }
  }
}

Buenas prácticas

Práctica Por qué
Nombres verbales y descripciones que digan cuándo usarla y qué devuelve El modelo elige herramientas leyendo la descripción
Tipos estrictos, enum, rangos y campos required Reduce parámetros inventados
Validar parámetros en la herramienta aunque el esquema ya los restrinja Defensa en profundidad: el modelo puede saltarse el esquema
Devolver errores útiles como resultado de herramienta (status: error y un mensaje claro), no excepciones opacas El modelo puede corregirse y reintentar con otros parámetros
Resultados pequeños y estructurados Los resultados vuelven al contexto: un JSON de 50.000 tokens dispara coste y latencia
Timeouts y reintentos con backoff en la herramienta Una API lenta no debe colgar el agente
Idempotencia en acciones con efectos (cobrar, cancelar) El agente puede repetir una llamada
Pocas herramientas por agente, o búsqueda semántica de herramientas Muchas herramientas confunden y engordan el prompt (Gateway ofrece semantic tool selection)

Lambda como herramienta: validación y errores

La guía pide «Lambda functions to implement error handling and parameter validation». Patrón típico:

import json

def handler(event, context):
    # El agente (o el gateway) entrega los parámetros de la herramienta
    try:
        peso = float(event["peso_kg"])
    except (KeyError, TypeError, ValueError):
        return {"ok": False, "error": "peso_kg es obligatorio y debe ser numérico"}
    if not 0 < peso <= 30:
        return {"ok": False, "error": "peso_kg debe estar entre 0 y 30"}
    modalidad = event.get("modalidad", "estandar")
    if modalidad not in ("estandar", "urgente"):
        return {"ok": False, "error": "modalidad debe ser estandar o urgente"}
    coste = 4.0 + 0.6 * peso if modalidad == "estandar" else 9.0 + 1.1 * peso
    return {"ok": True, "coste_eur": round(coste, 2)}

Devolver ok: false con un mensaje en vez de lanzar una excepción permite al modelo entender el error y rectificar.

Herramientas en Strands: la API @tool

En Strands, una función Python con el decorador @tool se convierte en herramienta: el docstring se usa como descripción y los type hints y la sección Args generan el esquema. Si la función devuelve un diccionario con status y content, Strands lo pasa tal cual como toolResult; cualquier otro valor lo serializa como resultado correcto. Si los parámetros no cumplen el esquema o la función lanza una excepción, Strands devuelve al modelo un resultado con status: error. Esto es lo que la guía llama «using the Strands API to implement custom behaviors».

Model Context Protocol (MCP)

Qué problema resuelve

Sin un estándar, cada framework define herramientas a su manera y cada integración (Jira, una base de datos, tu API) se reescribe para cada agente. MCP (Model Context Protocol) es un protocolo abierto que estandariza cómo una aplicación de IA descubre y usa herramientas y datos externos. Escribes un servidor MCP y cualquier cliente MCP (Strands, Kiro, AgentCore, IDEs…) puede usarlo.

Arquitectura

flowchart LR
    subgraph Host["Host: aplicación de IA (agente, IDE)"]
        C1["Cliente MCP 1"]
        C2["Cliente MCP 2"]
    end
    C1 -->|"JSON-RPC (stdio)"| S1["Servidor MCP local: documentación de AWS"]
    C2 -->|"JSON-RPC (Streamable HTTP)"| S2["Servidor MCP remoto: API de pedidos"]
    S2 --> API["Sistema interno"]
  • Host: la aplicación que usa el modelo. Cliente: el conector dentro del host (uno por servidor). Servidor: expone capacidades.
  • Mensajes JSON-RPC 2.0. La especificación vigente a octubre de 2026 es la versión 2026-07-28.
  • El servidor ofrece tres primitivas: Tools (funciones que el modelo ejecuta), Resources (datos de contexto) y Prompts (plantillas). El cliente puede ofrecer, por ejemplo, elicitation (el servidor pide datos al usuario).
  • Transportes habituales: stdio (proceso local, típico en IDEs y desarrollo) y Streamable HTTP (servidor remoto, típico en producción).
  • La especificación insiste en seguridad: consentimiento del usuario antes de invocar herramientas y tratar como no confiables las descripciones de herramientas de servidores desconocidos.

MCP en AWS (skill 2.1.7)

Necesidad Opción Por qué
Herramienta ligera, sin estado, tráfico irregular Servidor MCP stateless en AWS Lambda Pagas por invocación, escala solo; ideal para consultas simples
Herramienta compleja: estado, conexiones persistentes, dependencias pesadas, ejecuciones largas Servidor MCP en Amazon ECS (Fargate) o EKS Proceso de larga duración, más memoria y control
Alojar un servidor MCP gestionado con aislamiento por sesión AgentCore Runtime con protocolo MCP Runtime admite los protocolos HTTP, MCP y A2A
Convertir APIs, Lambdas, OpenAPI o Smithy existentes en herramientas MCP sin reescribirlas, con autenticación de entrada y salida AgentCore Gateway Un único endpoint MCP que agrega muchas fuentes
Usar servidores MCP ya hechos por AWS (documentación, CDK, servicios…) Repositorio oficial awslabs/mcp Servidores MCP open source de AWS
Acceso consistente desde el agente Librerías cliente MCP (SDK mcp de Python, MCPClient de Strands) Mismo patrón de acceso para cualquier servidor

Así se conecta Strands a un servidor MCP (ejemplo del README oficial del SDK):

from mcp import stdio_client, StdioServerParameters
from strands import Agent
from strands.tools.mcp import MCPClient

aws_docs_client = MCPClient(
    lambda: stdio_client(StdioServerParameters(command="uvx", args=["awslabs.aws-documentation-mcp-server@latest"]))
)

with aws_docs_client:
    agent = Agent(tools=aws_docs_client.list_tools_sync())
    response = agent("Tell me about Amazon Bedrock and how to use it with Python")

MCP también sirve para recuperación: la skill 1.5.6 habla de «MCP clients for vector queries». Un servidor MCP que envuelve tu Knowledge Base da a cualquier agente un acceso estándar a la búsqueda vectorial.

Strands Agents

Qué es

Strands Agents es un SDK open source de AWS (Python y TypeScript, licencia Apache 2.0) para construir agentes con un enfoque model-driven: tú das modelo, instrucciones y herramientas, y el propio modelo dirige el bucle. Datos verificados a octubre de 2026:

  • Paquete PyPI strands-agents (versión 1.57.1, requiere Python 3.10 o superior); herramientas de ejemplo en strands-agents-tools.
  • El código vive en el monorepositorio strands-agents/harness-sdk, que incluye también el Strands harness (strands-harness): un agente ya ensamblado con valores por defecto, para cuando no quieres montar el bucle tú.
  • Proveedor por defecto: Amazon Bedrock (BedrockModel), pero es multiproveedor (Anthropic, OpenAI, Gemini, Ollama, LiteLLM, SageMaker…).
  • Incluye de serie: herramientas con @tool, clientes MCP, hooks (interceptar el ciclo de vida), límites por invocación (turnos y tokens), interrupciones para human-in-the-loop, gestores de conversación y de sesión, patrones multiagente (agents-as-tools, swarm, graph, workflow, A2A), streaming y trazas OpenTelemetry.

Un agente completo en pocas líneas

from strands import Agent, tool
from strands.models import BedrockModel

@tool
def calcular_envio(peso_kg: float, modalidad: str = "estandar") -> dict:
    """Calcula el coste de envío en euros de un paquete.

    Args:
        peso_kg: Peso del paquete en kilogramos. Debe ser mayor que 0 y como máximo 30.
        modalidad: Modalidad de envío: "estandar" o "urgente".
    """
    if not 0 < peso_kg <= 30:
        return {"status": "error", "content": [{"text": "peso_kg debe estar entre 0 y 30"}]}
    base, por_kg = (9.0, 1.1) if modalidad == "urgente" else (4.0, 0.6)
    return {"coste_eur": round(base + por_kg * peso_kg, 2)}

modelo = BedrockModel(
    model_id="eu.amazon.nova-lite-v1:0",   # perfil de inferencia EU
    region_name="eu-central-1",
    temperature=0.2,
    max_tokens=800,
)

agente = Agent(
    model=modelo,
    system_prompt="Eres el asistente de envíos de una tienda online. No inventes precios.",
    tools=[calcular_envio],
    callback_handler=None,   # sin impresión en streaming por consola
)

resultado = agente("¿Cuánto cuesta enviar 2,5 kg por urgente?", limits={"turns": 5})
print(resultado.stop_reason, str(resultado))
print(resultado.metrics.accumulated_usage)   # inputTokens, outputTokens, totalTokens

Puntos que conviene retener:

  • limits={"turns": 5} es una condición de parada: si se alcanza, el agente termina con stop_reason = "limit_turns". También existen output_tokens y total_tokens como presupuestos.
  • resultado.stop_reason puede ser, entre otros, end_turn, max_tokens, guardrail_intervened, interrupt o los de límite.
  • resultado.metrics da ciclos, uso de tokens y estadísticas por herramienta (llamadas, errores, tiempo): base de la observabilidad de herramientas (skill 4.3.4).
  • Si no pasas model, el SDK usa por defecto un modelo Claude Sonnet de Bedrock y, si no encuentra región configurada, us-west-2. En Europa indica siempre el modelo (con perfil eu. si tienes requisitos de residencia) y la región.

Memoria y sesiones en Strands

  • Corto plazo: el objeto Agent guarda los mensajes. Un conversation_manager controla el crecimiento: SlidingWindowConversationManager(window_size=20) conserva los últimos mensajes; también hay uno que resume.
  • Persistencia de sesión: un session_manager guarda el historial fuera del proceso (por ejemplo, en S3 o en AgentCore Memory) para retomar la conversación en otro contenedor.
  • Largo plazo: integración con AgentCore Memory como gestor de sesión.

Hooks: comportamiento a medida

Los hooks te dejan ejecutar código en eventos del ciclo de vida: BeforeInvocationEvent, BeforeModelCallEvent, BeforeToolCallEvent, AfterToolCallEvent, etc. Sirven para registrar métricas, validar o modificar parámetros de herramientas, cancelar una llamada (event.cancel_tool) o pedir aprobación humana (event.interrupt(...)). Lo usarás en el lab 09.

Multiagente en Strands

Patrón Strands Cómo funciona Cuándo
Agents as tools Pasas agentes especialistas en tools de un orquestador; cada uno es una herramienta Supervisor que delega en expertos
Swarm Un grupo de agentes que se pasan el trabajo (handoffs) de forma autónoma Colaboración flexible entre pares
Graph Grafo de agentes con aristas y condiciones; admite bifurcaciones y bucles Flujo estructurado con decisiones del LLM en los nodos
Workflow DAG fijo de tareas, con paralelismo Pipeline repetible y determinista
A2A Agentes en procesos o servicios distintos que hablan el protocolo Agent-to-Agent Agentes de equipos distintos, desplegados por separado
from strands import Agent

agente_envios = Agent(
    name="agente_envios",
    description="Responde preguntas sobre plazos y costes de envío.",
    system_prompt="Eres experto en logística.",
)
agente_devoluciones = Agent(
    name="agente_devoluciones",
    description="Gestiona dudas sobre devoluciones y reembolsos.",
    system_prompt="Eres experto en devoluciones.",
)

supervisor = Agent(
    system_prompt="Deriva cada pregunta al especialista adecuado y combina sus respuestas.",
    tools=[agente_envios, agente_devoluciones],   # agents-as-tools
)

Sistemas multiagente y coordinación de modelos (skills 2.1.1 y 2.1.4)

Arquitecturas multiagente

flowchart TD
    U["Usuario"] --> S["Agente supervisor"]
    S --> A1["Especialista: facturación"]
    S --> A2["Especialista: logística"]
    S --> A3["Especialista: técnico"]
    A1 --> S
    A2 --> S
    A3 --> S
    S --> R["Respuesta agregada"]
  • Supervisor u orquestador: un agente planifica y delega; los especialistas no hablan entre sí. Fácil de razonar y de auditar.
  • Router o clasificador: una capa ligera decide a qué agente va cada mensaje; el agente elegido responde directamente. Barato y rápido (es lo que hace Agent Squad).
  • Red o swarm: los agentes se pasan el control. Flexible, más difícil de depurar.
  • Jerárquico: supervisores de supervisores para dominios grandes.

Costes a vigilar: cada agente añade llamadas al modelo (tokens y latencia), y el contexto compartido crece. Mide la coordinación con trazas (AgentCore Observability) y evalúa con AgentCore Evaluations (módulo 10).

Agent Squad

Agent Squad (antes Multi-Agent Orchestrator) es un framework open source para Python y TypeScript que enruta cada petición al agente más adecuado mediante un clasificador que mira la descripción de cada agente y el historial, y mantiene el contexto de la conversación entre agentes. Trae agentes preconstruidos (Bedrock, Lex, Lambda, Anthropic, OpenAI…) y un SupervisorAgent que coordina un equipo en paralelo con el patrón agent-as-tools. La guía lo nombra junto a Strands («Strands Agents and AWS Agent Squad for multi-agent systems»).

Coordinación de modelos (skill 2.1.4)

No todo son agentes: a veces coordinas modelos.

Técnica Idea Ejemplo
Modelos especializados Cada subtarea con el FM que mejor la hace Nova Micro clasifica, un modelo más capaz redacta, un modelo multimodal lee la imagen
Ensembles con agregación propia Varios modelos responden y una lógica (votación, puntuación, un juez) elige o combina Tres modelos clasifican un ticket; gana la mayoría
Framework de selección de modelo Reglas o métricas deciden qué modelo usar por petición Por complejidad, idioma, coste o latencia; en AppConfig para cambiarlo sin desplegar
Cascada (model cascading) Primero el barato; si la confianza es baja, se escala al caro Reduce coste en consultas rutinarias (skill 2.2.3, módulo 06)

Amazon Bedrock ofrece además Intelligent Prompt Routing (enrutado entre modelos de una familia según la petición; lo verás en el módulo 09).

Amazon Bedrock AgentCore, componente a componente

La idea

Construir el bucle de un agente es fácil; llevarlo a producción no: aislamiento entre usuarios, escalado, memoria duradera, identidad y credenciales para llamar a terceros, control de qué herramientas puede usar, trazas y evaluación. Amazon Bedrock AgentCore es la plataforma de AWS que resuelve esas piezas como servicios modulares que funcionan juntos o por separado, con cualquier framework (Strands, LangGraph, CrewAI, LlamaIndex, Google ADK, OpenAI Agents SDK…) y cualquier modelo (de Bedrock o de fuera).

flowchart LR
    Cli["Cliente (app, API)"] -->|"Identity: IAM SigV4 u OAuth"| RT["AgentCore Runtime (microVM por sesión)"]
    RT --> MOD["Modelo (Bedrock u otro proveedor)"]
    RT --> MEM["AgentCore Memory"]
    RT -->|"MCP"| GW["AgentCore Gateway"]
    GW --> POL["Policy (Cedar): permitir o denegar cada llamada"]
    POL --> L["Lambda"]
    POL --> O["APIs OpenAPI / Smithy / API Gateway"]
    POL --> MS["Servidores MCP"]
    RT --> CI["Code Interpreter"]
    RT --> BR["Browser"]
    RT -.->|"OpenTelemetry"| OBS["Observability (CloudWatch)"]
    OBS -.-> EV["Evaluations"]

Los componentes y cuándo usar cada uno

Componente Qué hace Úsalo cuando…
Harness Bucle de agente gestionado por configuración: declaras modelo, system prompt y herramientas; AgentCore ejecuta el bucle, las herramientas, la memoria y la respuesta. Cada sesión corre en una microVM aislada con sistema de ficheros y shell Quieres el camino más rápido y sin código de orquestación. Es la alternativa recomendada a Agents Classic
Runtime Entorno serverless para desplegar agentes y herramientas en código, con aislamiento por sesión en microVM, arranques rápidos, tareas largas, streaming, WebSocket y protocolos HTTP, MCP y A2A Tienes tu propio agente (Strands, LangGraph…) o necesitas orquestación a medida, multiagente o un servidor MCP alojado
Memory Memoria a corto plazo (eventos de la conversación) y a largo plazo (registros extraídos por estrategias) que se puede compartir entre agentes El agente debe recordar dentro de la sesión y entre sesiones, sin montar tu almacén
Gateway Convierte APIs, Lambdas y servicios en herramientas MCP, agrega servidores MCP existentes, gestiona autenticación de entrada y salida, búsqueda semántica de herramientas, integraciones de un clic (Salesforce, Slack, Jira…) y enrutado de inferencia entre proveedores Quieres dar herramientas a agentes de forma estándar y gobernada
Identity Identidad de agentes y gestión de credenciales: entrada (quién puede invocar: IAM o OAuth/JWT con Cognito, Okta, Entra ID…) y salida (OAuth o API keys para llamar a terceros, en modo delegado del usuario o autónomo) El agente actúa en nombre de un usuario o accede a SaaS sin credenciales en el código
Code Interpreter Sandbox aislado para ejecutar código (Python, JavaScript, TypeScript) Cálculos, análisis de datos o gráficos sin ejecutar código del modelo en tu infraestructura
Browser Navegador gestionado en la nube para que el agente navegue, rellene formularios y extraiga información Automatizar webs sin API
Observability Trazas, logs y métricas de cada paso del agente, en formato OpenTelemetry, en CloudWatch Depurar, auditar y medir en producción
Evaluations Evaluación automática de agentes con LLM-as-a-judge sobre sesiones, trazas y spans; evaluadores integrados y personalizados; modos online, bajo demanda y por lotes Medir calidad y uso de herramientas antes y después de desplegar
Optimization Recomendaciones generadas a partir de trazas, configuraciones versionadas y A/B testing Mejorar prompts y descripciones de herramientas con datos
Policy Reglas deterministas fuera del código del agente: intercepta cada llamada a herramienta a través de Gateway y la evalúa con políticas en Cedar (o Dogwood, compatible), escritas también en lenguaje natural; admite reglas temporales por sesión Limitar qué puede hacer el agente (importes, usuarios, herramientas) de forma verificable
Registry (AWS Agent Registry) Catálogo central de agentes, servidores MCP, herramientas y skills con flujo de publicación y aprobación Gobierno y descubrimiento en organizaciones grandes
Payments Micropagos de agentes a APIs de pago (protocolos x402 y MPP) con límites de gasto Casos muy específicos; poco probable en el examen

Runtime en detalle

Datos verificados en la documentación:

  • Cada sesión (runtimeSessionId) corre en una microVM dedicada con CPU, memoria y sistema de ficheros aislados. Al terminar, la microVM se destruye y la memoria se sanea: no hay contaminación entre sesiones.
  • Una sesión puede durar hasta 8 horas y termina por inactividad a los 15 minutos. Las operaciones asíncronas largas también llegan a 8 horas.
  • Cada actualización crea una versión inmutable; el endpoint DEFAULT apunta a la última y puedes crear endpoints propios (dev, test, prod) que apunten a versiones concretas: despliegue controlado y rollback.
  • Autenticación de entrada: IAM (SigV4) u OAuth 2.0 (JWT de tu proveedor de identidad). Salida: OAuth o API keys vía AgentCore Identity.
  • Contrato HTTP: tu contenedor expone POST /invocations y GET /ping. El SDK bedrock-agentcore lo hace por ti con BedrockAgentCoreApp y el decorador @app.entrypoint.
  • Despliegue: la AgentCore CLI (npm install -g @aws/agentcore; comandos agentcore create, dev, deploy, invoke, status, logs, remove) empaqueta el código como zip (CodeZip, sin Docker) o como contenedor, y aprovisiona con AWS CDK. También puedes usar la API CreateAgentRuntime con una imagen de ECR.
  • Facturación por consumo (vCPU-hora y GB-hora de uso activo). Estimación a 1/10/2026 en eu-central-1: 0,0895 USD por vCPU-hora y 0,00945 USD por GB-hora (precios de AgentCore).

Memory en detalle

  • Corto plazo: cada interacción se guarda como evento (CreateEvent) asociado a un sessionId (y a un actor). Se recupera con ListEvents; admite metadatos para filtrar.
  • Largo plazo: un proceso asíncrono extrae y consolida información de los eventos en registros de memoria, recuperables con búsqueda semántica (RetrieveMemoryRecords). Lo que se extrae lo deciden las estrategias:
    • Integradas (built-in): semántica (hechos y conocimiento), preferencias de usuario, resumen y episódica (episodios con reflexión entre ellos).
    • Integradas con override: cambias los prompts de extracción manteniendo el pipeline gestionado.
    • Autogestionadas (self-managed): tú controlas extracción y consolidación.
  • Sin estrategias, no se genera memoria a largo plazo.

Gateway en detalle

  • Tres categorías de destinos (targets): MCP (agrega Lambda, etapas de API Gateway REST, esquemas OpenAPI, modelos Smithy, servidores MCP, plantillas de integraciones y conectores en un único servidor MCP virtual), HTTP (paso directo, incluido tráfico A2A) e inferencia (enruta peticiones de modelos entre proveedores).
  • Autenticación de entrada (quién puede usar el gateway) y de salida (credenciales hacia cada herramienta: IAM, OAuth, API key), con renovación de tokens.
  • Selección semántica de herramientas: el agente busca la herramienta adecuada entre miles sin meterlas todas en el prompt.
  • Se integra con Policy y con Bedrock Guardrails para aplicar controles a nivel de agente.
  • Precio estimado (eu-central-1, 1/10/2026): 5 USD por millón de invocaciones.

Regiones y cuenta

  • En eu-central-1 (Fráncfort) y eu-west-1 (Irlanda) están disponibles Harness, Runtime, Memory, Gateway, Identity, herramientas integradas, Observability, Policy y Evaluations. En eu-south-2 (España) hay Runtime, Gateway, Identity, herramientas integradas, Observability, Policy y Evaluations, pero no Memory ni Harness. Registry, en la UE, solo en Irlanda. Consulta la tabla de regiones antes de diseñar.
  • La cuenta debe estar en plan de pago (Paid plan).

Bedrock Agents «Classic» (para el examen)

Qué era y qué estado tiene

Amazon Bedrock Agents (lanzado en noviembre de 2023) fue el servicio gestionado de agentes de Bedrock. Desde el 30/07/2026 se llama Agents Classic y está en modo mantenimiento:

  • Los agentes existentes siguen funcionando y todas las APIs (InvokeAgent, UpdateAgent, alias, action groups…) siguen disponibles para quien ya lo usaba.
  • Las cuentas sin actividad de Bedrock Agents en los últimos 12 meses reciben AccessDeniedException (HTTP 403) al llamar a CreateAgent o InvokeInlineAgent. No hay proceso de excepción.
  • El catálogo de modelos de Agents Classic está congelado; no tendrá funciones nuevas. No hay fecha de fin de vida ni plazo obligatorio de migración.
  • Agents Classic no tiene cargo propio: se paga el modelo y los recursos asociados.
  • Migración recomendada: AgentCore Harness (lo más parecido) o agentes en código en AgentCore Runtime para orquestación avanzada o multiagente. La AgentCore CLI puede importar la configuración de un agente Classic.

Conceptos de Agents Classic que pueden salir

Concepto Qué es
Action group Conjunto de acciones del agente, definido con un esquema OpenAPI o con function details, ejecutado por una Lambda
Return of control En vez de una Lambda, el agente devuelve a tu aplicación qué acción quiere ejecutar y con qué parámetros; tú la ejecutas (útil para human-in-the-loop o sistemas que no pueden recibir llamadas)
Knowledge base asociada Se asocia una Bedrock Knowledge Base al agente para RAG
Advanced prompts Plantillas sobrescribibles por etapa: preprocesado, orquestación, generación de respuesta con KB y posprocesado
Versiones y alias Versión inmutable del agente; el alias apunta a una versión (despliegue y rollback)
Trace Traza del razonamiento paso a paso (preprocesado, orquestación, llamadas, observaciones): la «agent tracing» de la skill 3.4.1
Memoria Configuración de sesión y memoria entre sesiones (resumen)
AMAZON.UserInput Acción integrada para que el agente pida datos que faltan al usuario
AMAZON.CodeInterpreter Ejecución de código en sandbox
Guardrails Se asocia un Bedrock Guardrail al agente
Multi-agent collaboration Un agente supervisor coordina agentes colaboradores (modo supervisor o supervisor con enrutado)
Inline agents Agentes definidos en la propia llamada (InvokeInlineAgent), sin crearlos antes

Equivalencias con AgentCore

Agents Classic AgentCore
Bucle de orquestación gestionado Harness
Action groups (OpenAPI o funciones + Lambda) Herramientas MCP en Gateway (REST, Lambda) o @tools en código
Knowledge Base asociada KB a través de Gateway o herramienta de recuperación en código
Trace Observability (trazas de extremo a extremo)
Advanced prompts por etapa System prompt del harness; las etapas no se replican directamente
AMAZON.UserInput y return of control Inline function tools del harness (pausa y devuelve tool_use al cliente)
AMAZON.CodeInterpreter Code Interpreter
Memoria de sesión Memory (corto y largo plazo)
Guardrails del agente Guardrails en Bedrock y Policy en Gateway
Multi-agent collaboration Limitado en el harness (agent-as-tool); completo con frameworks en Runtime
Orquestador personalizado Código propio en Runtime

Human-in-the-loop (skill 2.1.5)

Human-in-the-loop (HITL, persona en el circuito) significa que una persona revisa, aprueba o corrige en momentos concretos. Se usa cuando la acción es irreversible o cara (reembolsos, borrados), cuando la confianza del modelo es baja o cuando la normativa lo exige.

Patrones

Patrón Cómo Servicios
Aprobación previa a la acción El flujo se detiene antes de ejecutar y espera un «sí» Step Functions con .waitForTaskToken; interrupciones de Strands; return of control
Revisión posterior La salida se publica solo tras revisión; una muestra se revisa siempre Colas SQS de revisión, interfaz interna
Escalado por baja confianza Si la puntuación o el juez dicen «dudoso», pasa a humano Lambda con umbral + Step Functions
Recogida de feedback El usuario valora respuestas; se usan para evaluar y mejorar API Gateway + Lambda + DynamoDB (skill 5.1.3)
Aumento humano (human augmentation) El agente propone y el experto decide (el agente como copiloto) Interfaz de agente de contact center, borradores

Aprobación con Step Functions y task token

sequenceDiagram
    participant SF as Step Functions
    participant L as Lambda notificar
    participant P as Revisor (app interna)
    participant API as API Gateway + Lambda
    SF->>L: lambda:invoke.waitForTaskToken (con la propuesta y el token)
    L->>P: Notificación (SNS, correo, cola de tareas)
    Note over SF: Ejecución en pausa (hasta el TimeoutSeconds del estado)
    P->>API: POST /aprobar con decisión y token
    API->>SF: SendTaskSuccess o SendTaskFailure
    SF->>SF: Continúa: ejecutar acción o rechazar
{
  "PedirAprobacion": {
    "Type": "Task",
    "Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
    "Parameters": {
      "FunctionName": "notificar-revisor",
      "Payload": { "propuesta.$": "$.propuesta", "taskToken.$": "$$.Task.Token" }
    },
    "TimeoutSeconds": 86400,
    "Catch": [ { "ErrorEquals": ["States.Timeout"], "Next": "RechazarPorTiempo" } ],
    "Next": "EjecutarAccion"
  }
}

La ejecución espera sin coste de cómputo hasta que alguien llama a SendTaskSuccess (o SendTaskFailure) con el token. API Gateway es la puerta para que la interfaz del revisor envíe la decisión y también para recoger valoraciones de usuarios (skill 2.1.5: «API Gateway to implement feedback collection mechanisms»).

Aprobación dentro del agente (Strands)

En Strands, un hook sobre BeforeToolCallEvent puede llamar a event.interrupt(...). El agente se detiene con stop_reason = "interrupt" y devuelve las interrupciones pendientes; tu aplicación recoge la decisión y vuelve a invocar al agente con las respuestas. Si se rechaza, el hook pone event.cancel_tool y el modelo recibe un resultado de error. Es el patrón del lab 09.

Límites de seguridad de los agentes (skill 2.1.3)

Un agente es un programa que decide solo. Hay que ponerle barreras, y las que valen son las deterministas, fuera del modelo.

Riesgo Control Cómo en AWS
Bucle infinito o demasiados pasos Condición de parada: máximo de iteraciones, presupuesto de tokens Contador en Step Functions (Choice), limits en Strands, --max-iterations en Harness
Herramienta o modelo que no responde Timeouts por paso y total Timeout de Lambda, TimeoutSeconds en Step Functions, read timeout del SDK
Fallos en cascada de un servicio caído Circuit breaker: tras N fallos, dejar de llamar un tiempo y degradar Estado del circuito en DynamoDB + Step Functions; respuesta alternativa
Acceso excesivo Mínimo privilegio por herramienta y por agente IAM con acciones y recursos concretos, un rol por agente, permissions boundaries
Acciones fuera de las reglas de negocio Políticas deterministas sobre las llamadas AgentCore Policy (Cedar) en Gateway
Acciones irreversibles Aprobación humana Task token, interrupciones, return of control
Prompt injection indirecta (instrucciones maliciosas dentro de un documento o de la respuesta de una herramienta) Tratar resultados de herramientas como datos no confiables, filtrar y limitar acciones Bedrock Guardrails (filtro prompt attack), validación, mínimo privilegio (módulo 07)
Ejecución de código no confiable Sandbox AgentCore Code Interpreter, Runtime con microVM por sesión
Gasto descontrolado Presupuestos de tokens, límites de tasa, alarmas Límites del agente, throttling en API Gateway o Gateway, CloudWatch
Fuga entre usuarios Aislamiento de sesión e identidad por usuario microVM por sesión en Runtime, actorId en Memory, OAuth de entrada

Circuit breaker, en concreto

stateDiagram-v2
    [*] --> Cerrado
    Cerrado --> Abierto: N fallos seguidos
    Abierto --> SemiAbierto: pasa el tiempo de espera
    SemiAbierto --> Cerrado: la llamada de prueba funciona
    SemiAbierto --> Abierto: la llamada de prueba falla

Con el circuito abierto, el agente no llama a la herramienta: usa una respuesta degradada («ahora no puedo consultar pedidos; te aviso por correo») o una herramienta alternativa. En Step Functions se implementa leyendo el estado del circuito de DynamoDB antes de la tarea y actualizándolo en el Catch. La guía cita este patrón también en la skill 1.2.3 (resiliencia).

Observabilidad y evaluación de agentes (avance)

Lo verás a fondo en los módulos 09 y 10, pero conecta ya las piezas:

  • Trazas: cada turno, llamada al modelo y llamada a herramienta como span de OpenTelemetry. AgentCore Observability las muestra en CloudWatch; Strands las emite de serie; en Agents Classic, la trace del agente.
  • Métricas de herramientas: número de llamadas, errores, latencia, tasa de éxito (skill 4.3.4, tool calling observability).
  • Evaluación: tasa de tareas completadas, precisión en la elección de herramientas y sus parámetros, calidad del razonamiento (skill 5.1.7). AgentCore Evaluations usa LLM-as-a-judge sobre trazas.
  • Transparencia: mostrar al usuario el razonamiento resumido y las fuentes (skill 3.4.1).

Trampas típicas del examen

  • «Bedrock Agents» en un diseño nuevo: si el enunciado es de una cuenta nueva o un proyecto nuevo, la respuesta moderna es AgentCore. Si el enunciado describe un agente Classic existente (action groups, alias, trace), razona con sus conceptos.
  • Agente cuando basta un workflow: pasos fijos y auditables → Step Functions o Bedrock Flows. Un agente añade coste y no determinismo.
  • Controles en el prompt: «decirle al modelo que no borre nada» no es un control. IAM, Policy, límites y aprobación humana sí.
  • Memoria mal ubicada: el historial de la sesión en Runtime es efímero; la memoria duradera va en AgentCore Memory (o DynamoDB). Guardar historiales enormes y reenviarlos enteros agota la ventana de contexto.
  • Lambda para todo: una herramienta con estado, conexiones persistentes o ejecución larga (más de 15 minutos, el máximo de Lambda) va mejor en ECS o en AgentCore Runtime.
  • MCP frente a Gateway: MCP es el protocolo; AgentCore Gateway es un servicio que expone tus APIs como servidor MCP gestionado, con autenticación y políticas.
  • Identity frente a IAM: IAM controla qué puede hacer el rol del agente en AWS; AgentCore Identity gestiona credenciales de terceros (OAuth, API keys) y la identidad del usuario final que invoca al agente.
  • Multiagente por defecto: más agentes = más tokens, más latencia, más puntos de fallo. Solo si hay especialización real o paralelismo.
  • Human-in-the-loop con polling: la forma nativa de «esperar a una persona» en Step Functions es el task token (.waitForTaskToken), no un bucle que consulta una tabla.
  • Strands no es un servicio: es un SDK. Se ejecuta donde lo despliegues (Lambda, ECS, EKS, AgentCore Runtime).

Resumen

  • Un agente es un FM en bucle que razona, llama a herramientas y observa resultados hasta cumplir un objetivo, con memoria y límites.
  • ReAct es el patrón base; Step Functions lo implementa con estados, reintentos, timeouts y un contador como condición de parada.
  • Elige workflow si los pasos son fijos, agente si la ruta depende de lo que se descubre, multiagente solo si hay especialización real.
  • Herramientas fiables: esquemas estrictos, validación, errores útiles, resultados pequeños, timeouts e idempotencia.
  • MCP estandariza herramientas: Lambda para servidores ligeros, ECS para complejos, AgentCore Gateway para exponer APIs existentes con autenticación y políticas.
  • Strands Agents: SDK open source de AWS; @tool, BedrockModel, hooks, límites, interrupciones y patrones multiagente.
  • AgentCore: Harness (sin código), Runtime (microVM por sesión, hasta 8 h), Memory, Gateway, Identity, Code Interpreter, Browser, Observability, Evaluations, Policy. Exige plan de pago.
  • Agents Classic está en mantenimiento (cerrado a clientes nuevos desde el 30/07/2026); conoce sus conceptos y su equivalencia en AgentCore.
  • Human-in-the-loop: task tokens de Step Functions, interrupciones de Strands, return of control; API Gateway para decisiones y feedback.
  • Las barreras que cuentan son deterministas: IAM de mínimo privilegio, Policy, límites, timeouts, circuit breakers y aprobación humana.

Cobertura del temario

Task statement Skill (resumen) Dónde se trata en este módulo
2.1 2.1.1 Sistemas autónomos con memoria y gestión de estado (Strands, Agent Squad, MCP) «Qué es un agente» (memoria corta, larga y estado), «Strands Agents» (memoria y sesiones), «Agent Squad», «AgentCore Memory», «MCP»; labs 09 y 10
2.1 2.1.2 Resolución de problemas por pasos (Step Functions para ReAct y chain-of-thought) «Patrones de razonamiento» y «ReAct con Step Functions» (diagrama y ASL)
2.1 2.1.3 Workflows con salvaguardas (condiciones de parada, timeouts en Lambda, IAM, circuit breakers) «Límites de seguridad de los agentes», «Circuit breaker», límites de Strands, contador en Step Functions, AgentCore Policy
2.1 2.1.4 Coordinación de modelos (FMs especializados, ensembles con agregación, selección de modelo) «Coordinación de modelos», «Sistemas multiagente»
2.1 2.1.5 Sistemas colaborativos con humanos (Step Functions de revisión y aprobación, API Gateway para feedback, aumento humano) «Human-in-the-loop»: patrones, task token, interrupciones de Strands; lab 09
2.1 2.1.6 Integración fiable de herramientas (API de Strands, definiciones estandarizadas, Lambda con validación y errores) «Herramientas fiables», «Lambda como herramienta», «Herramientas en Strands: la API @tool»; lab 09
2.1 2.1.7 Extensión de modelos (MCP stateless en Lambda, MCP complejo en ECS, librerías cliente MCP) «Model Context Protocol», tabla «MCP en AWS», MCPClient de Strands, AgentCore Gateway y Runtime con MCP
Relacionadas 1.5.6 (clientes MCP para consultas vectoriales), 2.5.5 (Strands y Agent Squad, Step Functions para patrones de agentes), 3.4.1 (trazas de agentes), 4.3.4 (observabilidad de herramientas y coordinación multiagente), 5.1.7 (evaluación de agentes) «MCP en AWS», «Multiagente», «Bedrock Agents Classic» (trace), «Observabilidad y evaluación de agentes»

Practica lo aprendido

Hacer el test (29 preguntas)Repasar tarjetas (30)

Documentación oficial para ampliar