
Tu primer agente de IA con Strands Agents
Construye tu primer agente de IA con Strands Agents en pocas líneas de Python. Entiende qué es un agente, construye uno y dale una herramienta que consulta datos reales para que pase de solo inferir a actuar.
1. Qué es un agente?
Un modelo de IA es stateless, o sin estado. Le mandas una petición, hace su inferencia, te responde con texto y en ese instante olvida todo lo que le dijiste. No recuerda, no actúa y no hace nada por su cuenta, solo predice el siguiente texto y se queda esperando.
Entonces, si un modelo solo te responde texto y olvida, ¿cómo es que herramientas como las que usas todos los días parecen recordar la conversación, ejecutar comandos y resolver tareas de varios pasos? La respuesta es que el modelo nunca trabaja solo. Alrededor de él vive un sistema que lo envuelve y le da todo lo que le falta, y a ese sistema se le llama harness. Si el modelo es el cerebro que razona, el harness es el cuerpo que le permite actuar en el mundo.
El harness hace varias cosas por el modelo. Corre el agent loop, el ciclo de pensar, actuar y observar que se repite hasta resolver la tarea. Se encarga de la ejecución de herramientas, para que el modelo pueda hacer cosas y no solo hablar de ellas. Y se ocupa del manejo del contexto y la memoria.
💡 Un agente no es un modelo más inteligente, es un modelo con un buen harness alrededor. Modelo + harness = agente. El modelo pone el razonamiento, el harness pone todo lo demás.

La buena noticia es que ese harness no lo tienes que construir tú a mano. Para eso existen SDKs que nos hacen esta tarea más sencilla y aquí es donde entra Strands.
2. Strands Agents SDK
Strands Agents es un SDK open source para construir agentes. Lo que hace por ti es justamente darte ese harness, tú eres el encargado de decidir qué modelo usar, qué herramientas darle y cómo se debe comportar, y Strands se encarga del loop, de ejecutar las herramientas y de mantener el contexto.
Con estas pocas líneas de código ya tenemos un agente:
1
2
3
4
5
6
from strands import Agent
agent = Agent()
response = agent("¿Qué es una API en programación?")
print(response)Antes de que corras este código, hay un detalle. Por defecto Strands usa Amazon Bedrock como proveedor del modelo, que es el servicio administrado de AWS para acceder a modelos fundacionales. Para que funcione necesitas una cuenta de AWS e iniciar sesión desde la terminal con aws login .
Y necesitas tener Strands instalado, claro:
1
pip install strands-agentsLo cool de Strands es que no te fuerza a usar solo AWS. Existen diferentes model providers, que se adapta a lo que tú utilizas actualmente. Por ejemplo si estuvieras usando la API de OpenAI el código se vería muy parecido con unos pequeños cambios:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from strands import Agent
from strands.models.openai import OpenAIModel
model = OpenAIModel(
client_args={
"api_key": "<KEY>",
},
# **model_config
model_id="gpt-4o"
)
agent = Agent(model=model)
response = agent("¿Qué es una API en programación?")
print(response)Si lo corres, el agente ya razona sobre tu pregunta y te responde con una explicación de qué es una API.

Y aunque este agente ya puede responder cosas, lo cierto es que solo tenemos un modelo hasta ahora y sigue siendo esa pieza stateless de la que hablamos al inicio.
3. Creando herramientas
Mira lo que pasa si le pregunto por algo que el modelo no puede saber por su cuenta, como el tipo de cambio de hoy:
1
2
3
4
from strands import Agent
agent = Agent()
print(agent("¿Cuántos pesos mexicanos son 100 dólares hoy?"))
Vamos a darle una herramienta, o tool, que consulte el tipo de cambio real. Voy a usar la API pública de Frankfurter , que da tipos de cambio actualizados, es gratis y lo mejor para nosotros es que no necesita API key. En Strands, crear una herramienta es tan simple como decorar una función normal de Python con
@tool:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests
from strands import Agent, tool
# 1.
def convertir_moneda(cantidad: float, de: str, a: str) -> str: # 2.
"""Convierte una cantidad de una moneda a otra usando tipos de cambio actuales.
Úsala cuando el usuario pregunte por conversiones de divisas.
Las monedas se indican con su código de tres letras, por ejemplo USD, MXN, EUR.
""" # 3.
url = f"https://api.frankfurter.app/latest?amount={cantidad}&from={de}&to={a}"
return str(requests.get(url).json()["rates"]) # 4.
agent = Agent(tools=[convertir_moneda]) # 5.
print(agent("¿Cuántos pesos mexicanos son 100 dólares?"))Vamos a desmenuzar lo que está pasando, porque cada pieza importa:
@toolle avisa a Strands que esta función está disponible para que el agente la use.- Los type hints (
cantidad: float,de: str,a: str) le dicen al modelo qué datos tiene que proporcionar para llamar la función. - El docstring, Strands se lo pasa al modelo para explicarle qué hace la herramienta y cuándo conviene usarla.
- El cuerpo es cualquier código de Python. En este caso un
requests.geta la API y devolvemos el resultado. - Registramos la tool en el agente pasándola en la lista
tools.
Y ahora sí, si corres este código, pasa algo distinto. El agente lee tu pregunta, se da cuenta de que tiene una herramienta que sirve para eso, deduce que "dólares" es
USD y "pesos mexicanos" es MXN, llama a tu función con esos valores, recibe el dato real y te responde con el número de hoy.
Yo nunca escribí un
if que dijera "si el usuario menciona dólares, llama a convertir_moneda". El modelo razonó por sí solo que necesitaba la herramienta, y decidió cuándo y cómo usarla. Tú defines qué puede hacer el agente, y el modelo decide cuándo hacerlo.Las bases de la programación siguen siendo exactamente las mismas.convertir_monedaes una función común y corriente que hace un request, la misma que escribirías para cualquier otro proyecto. Lo único que cambió es quién la dispara. Antes la llamabas tú desde tu código o desde una interfaz gráfica, ahora la interacción con la computadora pasa a través del agente, en lenguaje natural.
Con eso tu agente dejó de solo razonar y ahora también actúa sobre el mundo. Y aunque aquí escribimos la herramienta desde cero para entender cómo funciona, vale la pena que sepas que Strands también trae herramientas listas para usar , así que no siempre tienes que construirlas tú.
Preguntas frecuentes
¿Cuánto me cuesta correr esto?
Depende del modelo que uses. Con Bedrock pagas por token procesado, y para pruebas personales como las de este artículo el gasto es muy bajo. Aun así, para números exactos revisa la página de precios de Amazon Bedrock según el modelo que elijas. Si prefieres no gastar nada, puedes cambiar a un modelo local con Ollama y el resto del código se queda igual.
¿El agente siempre va a usar la herramienta?
No necesariamente, y eso es intencional. El modelo decide si la herramienta aplica o no para lo que le pediste. Por eso el docstring importa tanto, entre mejor le expliques qué hace y cuándo usarla, mejores decisiones va a tomar.
¿Puedo darle más de una herramienta?
Claro, y ahí es donde se pone bueno. Le pasas varias funciones en la lista
tools y el agente decide cuál usar en cada momento, o incluso encadena varias para resolver una tarea. Empezamos con una para entender el patrón, pero el principio es el mismo para todas.Conclusión
Empezamos con un modelo que solo razona y terminamos con un agente que consulta datos reales del mundo. Recapitulemos lo que aprendimos:
- Un modelo por sí solo es stateless, razona y responde texto, pero no actúa ni recuerda.
- El harness es lo que lo envuelve y lo convierte en agente. Maneja el loop, ejecuta las herramientas y cuida el contexto y la memoria.
- Un agente no es una cosa, es un conjunto de cosas: modelo + harness = agente.
- Strands te da ese harness listo, así arrancas un agente en pocas líneas en lugar de construirlo a mano.
- Las bases de programación no cambian, solo cambia quién manda a llamar tus funciones.
Construir agentes no es aprender a programar de cero otra vez, es programar como siempre lo has hecho, solo que ahora tus funciones las invoca un agente en lenguaje natural en lugar de una interfaz gráfica. Ahora te toca a ti. Usa alguna API que te guste, ponla en una función con
@tool y dásela a tu agente.Si te gusta este tipo de contenido y eres más de videos, síguenos en nuestro canal de YouTube AWS Developers LATAM , ahí te esperamos.
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article