Tu primer agente
El Strands Agents SDK es un framework open source (creado por AWS) para construir agentes de IA con un enfoque "model-driven": el modelo decide qué hacer en cada paso, y el SDK maneja el bucle de ejecución (el agent loop) por vos. Funciona con cualquier proveedor — Bedrock, Anthropic, y también OpenAI directamente.
1. Instala las dependencias
2. Escribe tu primer agente
Un agente en Strands necesita solo dos cosas: un modelo y (opcionalmente) herramientas. Así se ve el "Hello World":
Corrés python agente.py y ya tenés un agente conversacional funcionando. No hay bucles manuales, no hay parsing de function calls a mano — el SDK se encarga de todo el ciclo pregunta → razonamiento → respuesta.
Cambiá el model_id a otro modelo de OpenAI (por ejemplo uno más económico) y compará la velocidad de respuesta. Después cambiá el prompt para pedirle al agente que responda siempre en formato de lista.
System prompt y el bucle del agente
Cada vez que le hablás a un agente, Strands ejecuta el agent loop: envía tu mensaje + historial + herramientas disponibles al modelo, el modelo decide si responde directamente o llama una herramienta, y el ciclo se repite hasta que el modelo da una respuesta final. El system_prompt es lo que moldea cómo piensa el agente en cada vuelta de ese ciclo.
Parámetros que vas a usar seguido
temperature— más bajo (0.0–0.3) para tareas precisas/soporte, más alto (0.7+) para creatividadmax_tokens— límite de longitud de respuesta, importante para controlar costomodel_id— podés mezclar un modelo económico para tareas simples y uno más potente para razonamiento complejo
Escribí un system prompt para un agente que solo responde preguntas sobre un tema específico de tu elección, y que rechaza cortésmente cualquier otra pregunta.
Dale herramientas (Tools) a tu agente
@tool y usar herramientas ya construidas del paquete strands_tools.Un agente sin herramientas solo puede "hablar". Con herramientas, puede actuar: consultar una API, hacer un cálculo, leer un archivo. En Strands, cualquier función de Python se vuelve una herramienta con el decorador @tool — los type hints se convierten en el schema, y el docstring en la descripción que el modelo usa para decidir cuándo llamarla.
El agente decide solo, sin que se lo digas explícitamente, que necesita llamar clima_actual para la primera parte y calculator (una herramienta prebuilt de strands_tools) para la segunda — y combina ambos resultados en una sola respuesta.
Creá una herramienta buscar_producto(nombre: str) que devuelva precio/stock desde un diccionario en memoria, y probá que el agente la use correctamente en una conversación con varias preguntas seguidas.
Memoria conversacional y sesiones
Un objeto Agent ya mantiene su historial de conversación mientras viva en memoria — cada llamada nueva se agrega al mismo hilo. Para conversaciones largas, Strands ofrece conversation managers que deciden cómo truncar o resumir el historial para no exceder la ventana de contexto del modelo.
El SlidingWindowConversationManager conserva los últimos N mensajes y descarta los más viejos automáticamente — útil para bots de soporte o ventas que corren indefinidamente sin acumular contexto infinito (y costo infinito).
Simulá una conversación de 5 turnos y comprobá qué pasa cuando reducís el window_size a un número muy chico (ej. 2) — vas a notar que el agente "olvida" el inicio de la charla.
Respuestas tipadas con Pydantic
Cuando vas a conectar el agente a otro sistema (una base de datos, un CRM, un frontend), no querés parsear texto libre — querés JSON validado. Strands soporta esto de forma nativa usando modelos de Pydantic como esquema de salida.
Esto es la base para automatizar clasificación de tickets, extracción de datos de documentos, o cualquier flujo donde la salida del agente alimenta código, no un humano leyendo texto.
Definí un modelo Pydantic para extraer datos de una reseña de producto (rating del 1-5, sentimiento, y si menciona un problema específico) y probalo con 3 reseñas de ejemplo distintas.
Respuestas en tiempo real
Para una API o un chat en producción no querés esperar a que el agente termine de "pensar" para mostrar algo — querés ir mostrando tokens a medida que llegan. Strands expone invoke_async() y un sistema de callback handlers para esto.
Si estás construyendo una API (FastAPI, por ejemplo) y no necesitás ver el streaming en la terminal sino solo procesar eventos internamente, podés desactivar la salida en vivo con callback_handler=None al crear el agente, y manejar los eventos vos mismo.
Envolvé el agente en un endpoint de FastAPI que devuelva la respuesta como StreamingResponse, reusando el generador async de arriba.
Agents-as-Tools: tu primer equipo de agentes
Cuando un solo agente empieza a tener demasiadas responsabilidades (investigar, escribir, validar), conviene dividirlo en agentes especializados. El patrón más simple de Strands para esto es Agents-as-Tools: envolvés un agente entero dentro de una función @tool, y otro agente lo puede "llamar" como si fuera una herramienta más.
El agente redactor decide cuándo delegar en el investigador — vos no orquestás el flujo paso a paso, el modelo lo hace. Este patrón consume pocos tokens extra porque la coordinación es determinista (una llamada a función normal).
Agregá un tercer agente "revisor" que reciba el texto del redactor y devuelva una versión corregida, encadenando los tres roles.
Graph y Swarm: patrones de orquestación
Strands trae tres formas de coordinar múltiples agentes, cada una para un caso distinto:
- Agents-as-Tools (nivel anterior) — delegación simple y determinista, ideal cuando ya sabés qué agente hace qué
- Graph — un grafo dirigido y determinista: los agentes son nodos, las conexiones definen el flujo de datos entre ellos. Ideal para pipelines predecibles (ej. investigar → redactar → revisar, siempre en ese orden)
- Swarm — los agentes deciden dinámicamente a quién pasarle la tarea entre ellos. Más flexible, pero consume más tokens porque el modelo "razona" sobre a quién delegar
Este es el corazón de una arquitectura de agentes en producción: un orquestador (router) que nunca resuelve el dominio él mismo, solo decide a quién delegar — igual que un dispatcher humano en un call center.
Agregá logging dentro de cada herramienta consultar_* para registrar cuántas veces se enruta a cada especialista — es el primer paso hacia observabilidad real.
Observabilidad, errores y guardrails
Antes de poner esto en producción, tres cosas dejan de ser opcionales: saber qué hizo el agente (trazas), qué pasa cuando algo falla (errores/reintentos), y cuánto puede llegar a costar (límites).
Observabilidad con OpenTelemetry
Strands emite trazas usando el estándar OpenTelemetry de forma nativa — cada llamada al modelo, cada uso de herramienta y cada paso del event loop queda registrado, compatible con Jaeger, Grafana Tempo, AWS X-Ray o Datadog.
Manejo de errores y reintentos
Guardrails básicos
- Límite de
max_tokenspor respuesta para evitar respuestas descontroladamente largas - Validar que las herramientas críticas (ej. las que escriben en una base de datos) requieran confirmación explícita
- Un límite de "pasos" máximos del event loop, para evitar que un agente entre en un ciclo de llamadas a herramientas infinito
Agregá un contador de tokens usados por sesión y cortá la conversación (con un mensaje claro al usuario) si se supera un presupuesto que definas.
Orquestador + load balancer en producción
Llegado este punto tenés un orquestador que delega en agentes especialistas — pero corriendo todos en un solo proceso Python, un pico de tráfico tumba todo. El último paso es separar cada agente en su propio servicio, y repartir la carga entre múltiples instancias.
1. Cada agente como su propio servicio
Envolvés cada agente especialista en un microservicio con FastAPI, desplegable de forma independiente (Docker, Lambda, Fargate o EKS — Strands soporta los cuatro out of the box):
2. Múltiples workers detrás de un load balancer
Corrés varias réplicas de cada servicio (ej. 3 instancias de servicio_soporte) y ponés un load balancer (nginx, o uno gestionado como AWS ALB) repartiendo tráfico entre ellas — así ningún agente especialista es un punto único de falla:
3. Cola de trabajos para desacoplar el orquestador
Para picos de tráfico o tareas largas, el orquestador no llama a los especialistas directamente — encola el trabajo (Redis, SQS) y los workers lo consumen a su propio ritmo. Esto evita que un agente lento bloquee a todos los demás:
Con esto tenés el camino completo: de un agent("hola") de una línea en el Nivel 1, a una arquitectura de producción real con enrutamiento inteligente, escalado horizontal y observabilidad de punta a punta.
Tomá el orquestador del Nivel 8, separá cada especialista en su propio servicio FastAPI, y montá 2 instancias de uno de ellos detrás de nginx con least_conn. Ese es tu primer sistema multi-agente en producción.