Cómo construir un harness agentic de producción: herramientas tipadas, planificación en grafo y memoria por niveles
Un harness agentic de producción no es un único loop de modelo de lenguaje ejecutando acciones de forma secuencial, sino un sistema compuesto por primitivas testeables que envuelven al LLM con estructura, validación y control. Así lo plantea un análisis publicado en data4sci.com, que utiliza la analogía de una campaña aérea real: ningún operativo se lanza con un solo piloto en una cabina, por muy preparado que esté. Los sistemas de producción añaden planificadores de misión, escuadrones que ejecutan sorties en paralelo, presupuestos de combustible, registradores de vuelo y revisiones posteriores. Del mismo modo, agentes como Claude Code, Devin o Cursor añaden capas de ingeniería alrededor del bucle básico para que el sistema completo sea rápido, seguro, depurable y medible.
La pregunta central que guía este enfoque es directa: ¿cómo convertir una sola llamada a un LLM en un sistema fiable que pueda planificar, actuar, recuperarse y demostrar que hizo lo correcto? La respuesta, según la fuente, es la composición. En lugar de depender de un framework opaco, se construyen primitivas pequeñas y verificables: herramientas tipadas, un grafo acíclico dirigido (DAG) para la planificación, memoria por niveles, una jerarquía de verificación, presupuestos y un trazador, todo conectado mediante un orquestador deliberadamente ligero.
Herramientas tipadas con Pydantic
El primer problema predecible de un agente naïve es que los modelos inventan argumentos inválidos para las herramientas. La solución propuesta es declarar cada herramienta con un modelo Pydantic que impulse simultáneamente la validación en tiempo de ejecución, la generación del JSON Schema compatible con las APIs de tool-use de Anthropic y OpenAI, la documentación que consume el planificador y un campo cost_hint para contabilidad de costes. Un plan roto debe fallar rápido en la capa de validación, no dentro de una consulta a base de datos con efectos secundarios. Esta arquitectura converge con la que adoptan frameworks maduros como LangChain, Anthropic tool use y OpenAI function calling.
En el ejemplo de ejecución, un agente de comparación de ciudades, el registro contiene cuatro herramientas con tres niveles de coste: get_population y get_timezone son lecturas de diccionario prácticamente gratuitas (cost_hint 0.1), summarize_city realiza una llamada al LLM por ciudad (cost_hint 1.0) y aggregate_report ejecuta la síntesis final en markdown, la más costosa (cost_hint 2.0). Las dos últimas son herramientas que invocan al LLM internamente, lo que demuestra que los modelos pueden tratarse como cualquier otra herramienta: el worker ve una interfaz uniforme, pero el harness puede cachear, limitar o sustituir el modelo subyacente de forma independiente.
Planificación como grafo de dependencias
El segundo fallo predecible es la ejecución estrictamente secuencial. El ejemplo de las ciudades lo ilustra: comparar tres ciudades en población, zona horaria y resumen genera nueve lookups independientes cuya agregación final depende de todos ellos. Un bucle while ejecuta esas tareas una a una; un DAG expresa las dependencias de forma explícita y permite al ejecutor lanzar en paralelo todo lo que esté listo en cada momento. En lugar de pedir al LLM una acción por turno, el Planner recibe la petición de declarar el grafo completo antes de ejecutar nada.
Sin embargo, como el propio planificador es un LLM, también puede alucinar estructura: dependencias hacia nodos inexistentes o ciclos que nunca completarán. Por eso, la fuente insiste en que lo primero que se hace con un plan es validarlo, antes de gastar tokens intentando ejecutar un plan roto. La función ready_nodes devuelve únicamente aquellos nodos cuyas dependencias están todas en estado DONE y que permanecen PENDING, lo que asegura la correcta propagación del paralelismo.
El resto de las primitivas: memoria, verificación y presupuestos
El artículo menciona otras primitivas que completan el harness. El contexto se llena de basura, así que se añade memoria multinivel bajo un presupuesto de recuperación. Las salidas incorrectas se propagan silenciosamente, por lo que se incorpora una jerarquía de verificación que incluye roles diferenciados: Planner, Worker y Critic, cada uno con un prompt específico en lugar de un único prompt intentando hacerlo todo. Finalmente, los costes se disparan, de modo que se añade un sistema de presupuestación multidimensional con degradación elegante.
La fuente señala que demostrar que el harness funciona habitualmente, mediante un suite de evaluación, benchmarks de retrieval y pools de workers especializados, recibirá un tratamiento completo en una publicación futura. Para entonces, los lectores podrán distinguir si un fallo se debe a una orquestación incorrecta o a un modelo que planifica mal, gracias a un MockProvider que devuelve respuestas deterministas según el rol.
Estado actual y qué esperar
El modelo propuesto por data4sci.com representa un cambio de mentalidad: de tratar al LLM como un oráculo único a tratarlo como un componente más dentro de un sistema engineered. Cada primitiva existe porque los agentes naïve fallan de formas específicas y predecibles, y la composición de pequeñas piezas verificables permite construir sistemas agentic que no solo funcionan, sino que pueden probarse, depurarse y medirse. A medida que más organizaciones despliegan agentes en producción, este tipo de arquitecturas, basadas en tipado estricto, planificación explícita en grafo y memoria estructurada, probablemente se convertirán en el estándar de facto para cualquier sistema que aspire a seriedad operativa más allá del prototipo.
