El secreto para que Hermes trabaje el triple

Vistas: 1
0:00 / 0:00
El secreto para que Hermes trabaje el triple

En los episodios y artículos anteriores te he hablado largo y tendido de cómo este magnífico agente de código abierto es capaz de aprender, crear habilidades por sí mismo y facilitarnos la vida en el día a día. Sin embargo, tengo que entonar el mea culpa, en mis anteriores entregas pasé muy de puntillas sobre una de las características más revolucionarias y potentes de esta herramienta. Me refiero, por supuesto, a los subagentes y al sistema de delegación.

Hoy nos vamos a remangar y vamos a profundizar a fondo en este concepto. Vamos a desgranar cómo configurar subagentes, cómo pasar de la clásica delegación síncrona que bloquea tu terminal a la nueva y flamante delegación asíncrona y, sobre todo, cómo diseñar un flujo de trabajo optimizado para que tu IA trabaje en paralelo sin que tu hardware local se asfixie o tu cartera llore por el consumo excesivo de tokens

El gran enemigo silencioso: El envenenamiento del contexto y la lentitud secuencial

Para entender por qué los subagentes son una bendición, primero debemos comprender cómo funciona la mente de un modelo de lenguaje de gran tamaño (LLM). Cuando inicias una conversación con Hermes, cada pregunta que haces, cada respuesta que recibes y cada ejecución de herramienta que el agente realiza se va registrando en la memoria de la sesión. Esto es lo que conocemos como la ventana de contexto.

Imagínate que estás trabajando en un despacho físico. Al comenzar el día, tu mesa está completamente despejada. Conforme vas realizando tareas, vas sacando carpetas, folios de notas, informes antiguos y esquemas. En un abrir y cerrar de ojos, tu mesa de trabajo está sepultada bajo una montaña de papeles. Si necesitas buscar un número de teléfono específico que apuntaste a primera hora, tendrás que rebuscar entre toda esa maraña de folios.

En la IA ocurre exactamente lo mismo. Este fenómeno se conoce técnicamente como context poisoning o envenenamiento del contexto. Cuando una sesión de chat acumula demasiados datos de herramientas intermedias, búsquedas web masivas o depuraciones de código infinitas, ocurren tres cosas bastante graves:

Pérdida de precisión

A la IA le cuesta mucho más mantener el foco. Al tener que procesar miles de líneas de información irrelevante para la pregunta actual, es mucho más propensa a cometer errores, alucinar o ignorar instrucciones críticas.

Degradación del rendimiento y lentitud

Cada nueva interacción obliga al modelo a releer y procesar toda la pizarra de contexto acumulada de nuevo. Si estás ejecutando tu agente en un hardware local con recursos limitados, notarás de inmediato cómo el tiempo de respuesta pasa de unos pocos segundos a varios minutos de agónica espera.

Costes económicos desorbitados

Si utilizas APIs comerciales o plataformas de enrutamiento como OpenRouter, cada token de entrada se factura. Enviar un contexto gigante de 30.000 o 40.000 tokens en cada interacción del chat para que la IA te responda con un simple o no es un auténtico sinsentido económico.

Aquí es donde la arquitectura de Hermes demuestra su genialidad. En lugar de obligar a un único agente a procesar todo en serie sobre el mismo hilo de conversación, Hermes nos permite dividir y vencer gracias al uso de subagentes.

¿Qué es exactamente un subagente en Hermes?

A efectos prácticos, un subagente es un hilo de ejecución completamente nuevo, una instancia de Hermes hija que se crea de manera temporal para resolver una misión muy concreta. Piensa en él como en un becario superespecializado al que le asignas una tarea delimitada.

La genialidad del diseño de subagentes en Hermes radica en sus estrictas políticas de aislamiento y control:

Contexto totalmente limpio

Un subagente inicia su vida con una conversación completamente vacía. No tiene ni la más remota idea de lo que has hablado previamente con el agente padre. No sabe si estás programando en Rust, planificando tu menú semanal o si estás cansado. Esta falta de sesgo y este espacio de memoria de cero tokens garantizan que el subagente trabaje de la forma más rápida y precisa posible.

Entorno y terminal aislados

El subagente no comparte el estado de la terminal con el agente principal. Cuenta con su propia terminal virtual y su propia área de trabajo. Esto significa que cualquier error de ejecución, cualquier paquete temporal que instale o cualquier archivo que modifique de manera intermedia no contaminará la sesión principal.

Herramientas limitadas y controladas

Cuando levantas un subagente, puedes (y debes) limitar la caja de herramientas (toolsets) a las que tiene acceso. Si su tarea consiste únicamente en leer un archivo local y buscar patrones, no tiene sentido que disponga de herramientas para navegar por internet o realizar llamadas de API externas. Menos herramientas utilizables se traducen en un menor tamaño del sistema de guiado y una seguridad perimetral excelente.

El patrón de padre fuerte y niños baratos

Esta es una de mis estrategias favoritas para ahorrar recursos. El agente padre, que se encarga de charlar contigo, entender tus intenciones complejas, planificar las estrategias y sintetizar los resultados finales, puede configurarse con un modelo de lenguaje muy potente y masivo (un modelo frontera como Claude 3.5 Sonnet o GPT-4o). Sin embargo, cuando este padre necesita realizar tareas rutinarias o de investigación de datos brutos, delega la tarea a subagentes configurados para correr bajo modelos locales mucho más pequeños, rápidos y económicos (como Llama 3 o Phi-3 corriendo en tu propio hardware local mediante Ollama). El consumo masivo de tokens de entrada se lo traga el modelo barato, mientras que el modelo inteligente solo procesa el resumen final pulido.

La regla de oro: Cuándo delegar y cuándo ejecutar código

Un error muy habitual cuando empezamos a flipar con los subagentes es intentar utilizarlos para todo. Crear un subagente tiene un coste temporal y computacional de inicialización, por lo que debemos ser muy selectivos.

La regla que yo aplico en mi día a día es la siguiente:

Si la tarea requiere razonamiento lógico, toma de decisiones o síntesis de información basada en diferentes fuentes, delegas en un subagente. Si la tarea es puramente mecánica y algorítmica, ejecutas código de forma directa.

Por ejemplo, no tiene ningún sentido delegar en un subagente la tarea de listar el contenido de un directorio con ls -la o realizar una operación matemática básica como sumar dos variables. Para estas labores mecánicas y de paso a paso estructurado, es muchísimo más rápido y eficiente indicarle al agente principal que ejecute un comando bash directo empleando la herramienta execute_code.

Por el contrario, si lo que necesitas es buscar fallos críticos de seguridad en tres archivos de log diferentes de forma simultánea, o redactar una propuesta de solución contrastando la documentación oficial de un software con un mensaje de error de tu servidor, ahí tienes el escenario perfecto para lanzar subagentes.

Configuración y control de los subagentes en config.yaml

Como buen administrador de sistemas, te gustará tener el control absoluto de lo que ocurre en tu máquina. Hermes nos permite parametrizar con total precisión el comportamiento de la delegación de subagentes modificando su archivo de configuración principal. Los parámetros clave que debes vigilar son los siguientes:

max_concurrent_children

Este parámetro define cuántos subagentes pueden trabajar de manera simultánea en paralelo. En mi servidor de pruebas lo tengo configurado en un límite de tres, lo cual es ideal para equilibrar la velocidad de procesamiento con la carga de la CPU de mi máquina local.

max_spawn_depth

Por defecto, la delegación es plana (valor igual a 1), lo que significa que el agente padre puede crear hijos, pero estos hijos no pueden crear a su vez sus propios subagentes. Si aumentas este límite, puedes permitir la creación de orquestadores intermedios. Por ejemplo, con una profundidad de tres y un límite de concurrencia de tres, la estructura en árbol podría llegar a levantar hasta 27 agentes funcionando de forma concurrente. Ten muchísimo cuidado con esto si no quieres que tu procesador empiece a echar humo o tu factura de API se dispare de forma exponencial.

max_iterations

Define el número máximo de ciclos de pensamiento y ejecución de herramientas que un subagente puede realizar antes de verse obligado a retornar un resultado. Por defecto suele estar establecido en 50 iteraciones, asegurando que un subagente no se quede atrapado en un bucle infinito de pruebas fallidas.

Delegación síncrona frente a asíncrona: El gran salto adelante

Hasta hace muy poco, el funcionamiento de la herramienta delegate_task de Hermes era puramente síncrono. ¿Qué implicaba esto? Pues que cuando el agente principal decidía lanzar subagentes para realizar una tarea de investigación pesada, tu chat principal se quedaba completamente congelado. Tenías que esperar pacientemente a que todos los subagentes terminaran sus iteraciones, redactaran sus informes y los devolvieran al padre para poder volver a interactuar con la terminal o escribir un mensaje.

Esto era un problema obvio para tareas largas de fondo, como auditorías de seguridad semanales, análisis masivos de código o la generación de grandes bloques de contenido.

Afortunadamente, con la llegada de las actualizaciones recientes de la versión v0.17 Reach de Hermes Agent, se ha introducido el kit de herramientas de delegación asíncrona (async_delegation). Ahora, cuando el agente principal decide delegar un trabajo en segundo plano utilizando el parámetro background=true, la magia se desata:

Retorno inmediato de identificador (Task ID)

El agente principal lanza el subagente y, en cuestión de un par de milisegundos, el sistema devuelve un identificador único de la tarea (task_id). Tu hilo de conversación principal se desbloquea al instante, permitiéndote seguir preguntándole cosas a Hermes o encargándole otras tareas rápidas mientras el hijo trabaja en la sombra.

Monitoreo no bloqueante

En cualquier momento puedes utilizar la herramienta check_task pasándole el identificador correspondiente para ver el estado del subagente (si está ejecutándose, si ha fallado o si ya ha terminado) y obtener un vistazo rápido de las últimas líneas de su terminal.

Capacidad de redirección (Steering)

Si ves que el subagente de fondo se está desviando de su objetivo original, la herramienta steer_task te permite inyectar un mensaje de corrección a mitad de su ejecución para reorientar su razonamiento sin necesidad de cancelar y reiniciar todo el trabajo desde cero.

Recolección de resultados bajo demanda

Una vez que el subagente ha finalizado, puedes consolidar la información en tu chat principal utilizando collect_task cuando a ti te venga bien, integrando ese resumen limpio directamente en tu contexto de trabajo actual.

Casos de uso reales para exprimir los subagentes

Para que veas que esto no es solo teoría de laboratorio, te comparto tres escenarios reales donde la combinación de subagentes síncronos y asíncronos te va a permitir ahorrar horas de trabajo monótono:

Búsqueda de chollos en paralelo

Imagínate que le encargas a Hermes buscar el mejor precio para adquirir un hardware o unas zapatillas concretas en internet. En lugar de ir secuencialmente perdiendo el tiempo en cada página, Hermes lanza tres subagentes de forma paralela. Uno navega por Amazon, otro por Google Shopping y un tercero rastrea Decathlon o portales especializados. Cada uno opera con un contexto aislado, recopila los datos en tiempo real y, en segundos, el padre te presenta una comparativa impecable con enlaces y precios actualizados, ahorrándote el tedio de abrir decenas de pestañas en tu navegador.

Auditoría simultánea de salud del servidor

Puedes pedirle a Hermes un informe ejecutivo del estado de tu máquina. El agente principal delegará la tarea en tres subagentes concurrentes: uno auditará el uso de la CPU y los procesos más pesados, otro analizará el comportamiento de la memoria RAM y el tercero rastreará el almacenamiento en disco y los logs de errores de tus contenedores Docker. Cada subagente procesa su información de forma independiente y paralela. Si el subagente del disco falla o tarda más de la cuenta por un bloqueo de entrada/salida, los de CPU y RAM seguirán su curso y te entregarán sus informes sin interrupción.

Desarrollo de software guiado por subagentes (SSD)

Este es el sueño de todo programador perezoso. Puedes asignar a un subagente el diseño de las bases de datos y el modelo, a otro la lógica de las vistas y a un tercero la suite de pruebas unitarias de tu código. Un cuarto subagente orquestador se encargará de revisar los tres resultados, unificarlos, comprobar que no haya conflictos y entregarte el proyecto limpio listo para producción.

Errores habituales al trabajar con subagentes y cómo evitarlos

No todo es de color de rosa. Si no tienes cuidado al configurar tus flujos de delegación, puedes encontrarte con algunos de estos problemas clásicos de la automatización agentica:

No definir un objetivo ultraespecífico

El parámetro goal que se le pasa al subagente debe ser lo más claro e inequívoco posible. No es lo mismo decirle a un subagente analiza los logs que pedirle busca intentos de acceso fallidos por SSH en el archivo auth.log, clasifícalos por dirección IP y genera una lista con las diez IPs más activas. Cuanto más concreto sea el objetivo, más rápido y certero será el resultado del subagente.

No restringir las herramientas

Darle acceso de administración completo a todos tus subagentes es peligroso y derrocha recursos. Si un agente solo tiene que corregir la ortografía de un archivo Markdown, configúralo para que únicamente disponga de herramientas de lectura y escritura de archivos. Evita darle acceso a la terminal completa o a la búsqueda web para esa tarea concreta.

Dependencias cruzadas en ejecuciones paralelas

Si lanzas un grupo de subagentes en paralelo, asegúrate de que sus tareas no dependan unas de otras. Si el subagente B necesita obligatoriamente los datos que genera el subagente A para poder empezar a trabajar, no los lances juntos en paralelo; en ese caso, es mejor diseñar un flujo síncrono secuencial o esperar a recolectar el resultado del primero antes de iniciar el segundo.

Conclusiones: El futuro pasa por la automatización local soberana

El uso inteligente de subagentes en Hermes Agent demuestra que el futuro de la Inteligencia Artificial no consiste en hacer modelos cada vez más gigantescos y pesados que lo abarquen todo en una sola conversación kilométrica. El verdadero camino hacia la eficiencia pasa por la modularidad, la delegación inteligente y el aislamiento de tareas. Con esta arquitectura, no solo conseguimos que nuestras aplicaciones de IA respondan mucho más rápido, sino que ganamos un control absoluto sobre la seguridad de nuestros sistemas y optimizamos drásticamente el uso de recursos y costes.

Te animo encarecidamente a que actualices tu instalación de Hermes hoy mismo a la última versión y empieces a trastear con los parámetros de delegación síncrona y asíncrona. Una vez que experimentas la comodidad de lanzar pesadas tareas de análisis en segundo plano mientras continúas conversando con tu asistente principal, ya no hay vuelta atrás.

Y como adelanto para los próximos días, os recuerdo que sigo trabajando a tope en el tutorial sobre RAG local utilizando Ollama. Tras la magnífica acogida que tuvo el episodio donde os hablaba de la teoría de las bases de datos vectoriales, os enseñaré de forma muy práctica cómo alimentar a vuestros modelos locales con vuestros propios PDF, manuales de servidores y notas personales para que podáis consultarlos sin depender de la nube de ningún tercero. ¡La soberanía digital está al alcance de nuestra mano!


Más información,

Deja una respuesta