Delegación de subagentes y procesamiento por lotes de Hermes Agent
Este capítulo presenta dos capacidades de procesamiento paralelo de Hermes: la delegación de subagentes permite que un agente principal distribuya tareas a múltiples subagentes para que se ejecuten en paralelo, y el sistema de procesamiento por lotes puede ejecutar agentes en paralelo sobre cientos de prompts y generar datos de entrenamiento estructurados.
Delegación de subagentes y paralelismo
Hermes admite delegar tareas del agente principal a subagentes para lograr flujos de trabajo paralelos.
Los subagentes se implementan mediante eldelegationconjunto de herramientas:
Ejemplo
# Asegúrate de que el conjunto de herramientas delegation esté habilitado
toolsets:
- delegation
El agente principal utilizaspawn_agentospawn_parallella herramienta para generar subagentes.
El siguiente pseudocódigo ilustra el mecanismo de delegación paralela:
Ejemplo
# spawn_parallel lanza múltiples subagentes a la vez, cada uno se ejecuta de forma independiente
spawn_parallel([
{"prompt": "Analiza los datos de ventas del primer trimestre y genera un informe de tendencias"},
{"prompt": "Analiza los datos de ventas del segundo trimestre y genera un informe de tendencias"},
{"prompt": "Analiza los datos de ventas del tercer trimestre y genera un informe de tendencias"}
])
# Los tres subagentes trabajan en paralelo, los resultados se agregan y se devuelven al agente principal
Tareas en segundo plano
Inicia tareas en segundo plano directamente en la sesión:
Ejemplo
/background verifica todos los servidores e informa sobre las caídas
Colaboración multiagente con Kanban
El conjunto de herramientas Kanban proporciona una colaboración multiagente más estructurada: un agente orquestador distribuye las tareas al tablero, y varios agentes trabajadores las reclaman y ejecutan:
Ejemplo
hermes tools enable kanban
# Agrega descripciones de rol al Perfil para que el orquestador conozca las capacidades de cada agente
hermes profile create researcher \
--description "Capaz de leer código fuente y documentación externa, y producir informes de investigación"
hermes profile create coder \
--description "Capaz de implementar funciones, corregir errores y escribir pruebas"
El conjunto de herramientas Kanban debe habilitarse explícitamente: ni siquiera all o * lo activan automáticamente. Esto es un diseño intencional, porque la colaboración multiagente consume más tokens.
Procesamiento por lotes y generación de datos de entrenamiento para RL
El procesamiento por lotes te permite ejecutar agentes en paralelo sobre cientos o miles de prompts, generando datos de trayectoria estructurados, principalmente para la generación de datos de entrenamiento de ajuste fino de modelos y para evaluación.
Inicio rápido
Ejemplo
cat data/prompts.jsonl
# {"prompt": "Escribe una función en Python para encontrar la subcadena palindrómica más larga"}
# {"prompt": "Crea un endpoint de API REST de autenticación de usuarios con Flask"}
# {"prompt": "Depura este error: TypeError: cannot unpack non-iterable"}
# Ejecutar el procesamiento por lotes
python batch_runner.py \
--dataset_file=data/prompts.jsonl \
--batch_size=10 \
--run_name=my_first_run \
--model=anthropic/claude-sonnet-4-6 \
--num_workers=4
# Reanudar tareas interrumpidas desde un punto de control
python batch_runner.py \
--dataset_file=data/prompts.jsonl \
--batch_size=10 \
--run_name=my_first_run \
--resume
Formato del conjunto de datos
Cada línea es un objeto JSON, debe contener elpromptcampo, y opcionalmente puede incluir contexto adicional:
Ejemplo
{"prompt": "Depura este error", "cwd": "/home/user/project", "docker_image": "python:3.12"}
Parámetros principales
| Parámetro | Valor por defecto | Descripción |
|---|---|---|
| --dataset_file | Obligatorio | Ruta del conjunto de datos JSONL |
| --batch_size | Obligatorio | Número de prompts por lote |
| --run_name | Obligatorio | Nombre de la ejecución (para el directorio de salida y la reanudación desde un punto de control) |
| --model | claude-sonnet-4.6 | Modelo utilizado |
| --num_workers | 4 | Número de procesos de trabajo en paralelo |
| --max_turns | 10 | Máximo de rondas de llamadas a herramientas por prompt |
| --distribution | "default" | Distribución de conjuntos de herramientas (muestreo aleatorio de diferentes combinaciones de herramientas) |
| --reasoning_effort | — | Nivel de esfuerzo de razonamiento: none/minimal/low/medium/high/xhigh |
| --resume | false | Reanudar desde un punto de control |
Estructura de salida
El procesamiento por lotes genera la siguiente estructura de directorios:
data/my_first_run/ ├── trajectories.jsonl # 最终合并输出(所有批次) ├── batch_0.jsonl # 各批次结果 ├── batch_1.jsonl ├── checkpoint.json # 断点续传记录 └── statistics.json # 工具使用统计
Cada trayectoria se genera en formato ShareGPT, e incluye el historial completo de conversación, los registros de llamadas a herramientas y las estadísticas de cobertura de razonamiento:
Ejemplo
"prompt_index": 42,
"conversations": [
{"from": "human", "value": "Escribe una función para encontrar palíndromos..."},
{"from": "gpt", "value": "Voy a crear esta función...",
"tool_calls": [{"name": "terminal", "arguments": {...}}]},
{"from": "tool", "value": "...resultado de la ejecución..."},
{"from": "gpt", "value": "Esta es la función completa..."}
],
"completed": true,
"toolsets_used": ["terminal", "file"],
"tool_stats": {
"terminal": {"count": 2, "success": 2, "failure": 0}
}
}
Filtrado de calidad
Al finalizar la ejecución por lotes, se aplican automáticamente dos filtros:
| Elemento de filtro | Regla | Propósito |
|---|---|---|
| Filtro de cero razonamiento | Se descartan las muestras sin ningún rastro de razonamiento | Asegura que la salida incluya el proceso de pensamiento, mejorando la calidad de los datos de entrenamiento |
| Filtro de nombres de herramientas alucinados | Se filtran las entradas que contienen llamadas a herramientas que no están en la lista de herramientas válidas | Excluye las llamadas a herramientas no válidas generadas por alucinaciones del modelo |
Los rastros de razonamiento se refieren a la marca <REASONING_SCRATCHPAD> o a los thinking tokens nativos. Los datos filtrados son más adecuados para el ajuste fino de modelos.
Integración con el entorno RL de Atropos
El procesamiento por lotes puede generar directamente datos de entrenamiento compatibles con Atropos:
Ejemplo
python batch_runner.py \
--dataset_file=data/coding_tasks.jsonl \
--run_name=atropos_run \
--model=nous-hermes-3.1 \
--num_workers=8 \
--reasoning_effort=high
# El trajectories.jsonl generado se puede usar directamente como entrada de entrenamiento para Atropos