Escribiste cincuenta líneas de Python. Un system prompt, una lista de tools, una llamada al modelo. Tu agente agenda reuniones, consulta bases de datos, envía correos. Funciona de maravilla en tu terminal. ¿Lo mandas a producción?
Abrí tu archivo de tests primero. Dale. Intentá escribir un test para algo que da una respuesta diferente cada vez que le preguntás.
El problema del no-determinismo del que nadie quiere hablar
Así se ve un test normal de Python:
def test_add():
assert add(2, 2) == 4 # determinístico. siempre 4.
Así se ve un test de agente:
def test_booking_agent():
result = agent.run("Book a room for tomorrow 2pm")
assert result == ??? # ¿qué ponés acá?
# El agente podría decir "Done! Booked room A at 2pm"
# o "I've reserved conference room A for tomorrow at 14:00"
# o "Booked! Room A, April 27, 2:00 PM"
# Todas correctas. Todas cadenas diferentes.
Un LLM — el cerebro detrás de ChatGPT, Claude, Gemini — es no-determinístico. Misma entrada, diferente salida. Cada vez. Tu assertEqual no sirve para nada. Esto no es un bug. Es la propiedad fundamental que hace útiles a los agentes. Y hace que sea casi imposible testearlos con las herramientas en las que los ingenieros confiaron durante décadas.
Tres SDKs se lanzaron este mes. Cero comandos de test.
Tres SDKs importantes para agentes — kits de herramientas para construir agentes de IA — salieron en abril. Anthropic lanzó Managed Agents API el 8 de abril. OpenAI actualizó su Agents SDK el 15 de abril. Google sacó ADK 1.0 junto con Agent Simulation en Cloud Next el 22 de abril. Los tres te entregan primitivas para construir y ejecutar. Ninguno incluye un comando de test.
Esto no es una comparación entre tres proveedores. Es un patrón. Toda la industria — cada laboratorio importante de IA — decidió que testear es tu problema.
Lo que ofrecen en su lugar
Google fue el que más se acercó. En Cloud Next, anunciaron Agent Evaluation — un servicio en la nube que puntúa a tu agente en completitud de tareas, uso de herramientas y seguridad. Genuinamente útil para métricas a nivel de sistema. Pero corre en Vertex AI, cuesta aproximadamente $0.50–2.00 por evaluación según la complejidad, y tarda minutos en completarse. Correlo por pull request en un repo con actividad y estás viendo $300+ al mes solo en fees de evaluación — antes del uso real de la API. Eso no es un unit test. Es un evento de facturación.
La Managed Agents API de Anthropic provee tracing — un log de cada paso que dio tu agente — pero cero utilidades de test. Sin mock del modelo, sin grabación de respuestas, sin helpers de aserción.
OpenAI ofrece un parámetro seed para reproducibilidad parcial, pero "parcial" significa "a veces la misma salida, a veces no." Intentá construir CI/CD — pipelines de deploy automatizados — sobre un "a veces."
El patrón de aserciones de comportamiento
La comunidad encontró un workaround. En vez de hacer assert sobre texto exacto, asertás sobre patrones de comportamiento — qué herramientas llamó el agente, en qué orden, y si paró cuando debía:
def test_booking_agent_behavior(recorded_responses):
trace = agent.run("Book a room for tomorrow 2pm")
# Assert sobre llamadas a tools, no sobre texto de salida
assert trace.tool_calls[0].name == "check_availability"
assert trace.tool_calls[1].name == "create_booking"
assert "room" in trace.tool_calls[1].args
assert trace.completed # no se quedó en un loop infinito
Proyectos open-source como DeepEval y Promptfoo son pioneros en este enfoque. Ninguno se integra nativamente con ninguno de los tres SDKs. Lo estás pegando con cinta vos mismo.
Cada workaround tiene un precio
¿Mockear el modelo? Perdés el razonamiento del LLM que hace valiosos a los agentes — estás testeando una marioneta, no un agente. ¿Snapshot tests — grabar una respuesta exacta y compararla después? Se rompen con cada actualización del modelo o cambio de prompt. ¿Evaluaciones en la nube? Minutos y dólares por pull request. ¿Aserciones de comportamiento? Difíciles de escribir, más difíciles de mantener, y básicamente estás armando un framework de testing desde cero para cada proyecto.
La tensión de fondo: los ingenieros construyeron herramientas de testing para software determinístico. Los agentes no son ni determinísticos ni, estrictamente hablando, software en el sentido tradicional. Son sistemas estocásticos disfrazados de software.
Qué hacer realmente ahora mismo
Ningún proveedor te va a salvar. Esto es lo que funciona, con todo lo absurdo reconocido — estás inventando infraestructura de testing en 2026 porque tres empresas billonarias no se molestaron:
-
Grabá respuestas reales del LLM como golden fixtures — respuestas conocidas como buenas que replays en tests en vez de llamar al modelo cada vez. Sí, estás construyendo a mano la plomería de tests que el SDK debería haber traído incluida. No, la ironía no se nos escapa.
-
Asertá sobre secuencias de tool-calls, no sobre el texto final. ¿El agente llamó a
check_availabilityantes decreate_booking? Suficiente. Tu cerebro entrenado conassertEqualva a gritar. Dejalo. -
Corré smoke tests contra modelos reales en un cron diario, no por pull request. Detectá model drift sin quemar tu presupuesto de CI.
-
Tratá los tests de agentes como tests de integración — más lentos, menos, de mayor valor — no como unit tests. Cinco buenos tests de comportamiento le ganan a cincuenta snapshot tests frágiles. Cualquiera que te diga "simplemente escribí más tests" no intentó testear algo que genera un haiku diferente sobre reservas de salas cada vez que corre.
# Práctico: patrón de record & replay
import json
def record_golden_fixture(agent, prompt, path):
"""Corré una vez contra el modelo real, guardá el trace."""
trace = agent.run(prompt)
with open(path, "w") as f:
json.dump(trace.to_dict(), f)
return trace
def test_from_fixture(mock_agent, fixture_path):
"""Replay del trace guardado, assert sobre la estructura."""
with open(fixture_path) as f:
golden = json.load(f)
mock_agent.load_trace(golden)
result = mock_agent.replay()
assert [c["name"] for c in result.tool_calls] == [
"check_availability", "create_booking"
]
El proveedor que lance agent test primero gana
Django capturó a los desarrolladores web con manage.py test. Rails lo hizo con rails test. El primer SDK de agentes que convierta el testing en una primitiva por defecto — no un upsell en la nube a $0.50 por ejecución, no un addon de terceros, sino un comando local que funcione offline — captura la capa de desarrolladores por encima de la calidad del modelo y la cantidad de herramientas.
El agente intesteable es el nuevo microservicio sin tests. Todos lo mandan a producción. Todos se arrepienten seis meses después. Ahora mismo, ese comando agent test no existe en ninguno de los tres SDKs principales.
Tu archivo de tests sigue vacío.





