Délégation de sous-agents et traitement par lots avec Hermes Agent
Ce chapitre présente les deux capacités de traitement parallèle d'Hermes : la délégation de sous-agents, qui permet à un agent principal de répartir des tâches entre plusieurs sous-agents pour une exécution parallèle, et un système de traitement par lots capable d'exécuter des agents en parallèle sur des centaines de prompts et de générer des données d'entraînement structurées.
Délégation de sous-agents et parallélisme
Hermes prend en charge la délégation de tâches de l'agent principal vers des sous-agents, ce qui permet des flux de travail parallèles.
Sous-agents viadelegationImplémentation du jeu d'outils :
Exemple
# Assurez-vous que le jeu d'outils delegation est activé
toolsets:
- delegation
L'agent principal utilisespawn_agentouspawn_parallelAgent dérivé d'un outil.
Le pseudo-code suivant illustre le mécanisme de délégation parallèle :
Exemple
# spawn_parallel distribue plusieurs sous-agents simultanément, chacun s'exécutant indépendamment.
spawn_parallel([
{"prompt": "Analyser les données de ventes du T1 et générer un rapport de tendance"},
{"prompt": "Analyser les données de ventes du T2 et générer un rapport de tendance"},
{"prompt": "Analyser les données de ventes du T3 et générer un rapport de tendance"}
])
# Trois sous-agents travaillent en parallèle, les résultats sont agrégés et renvoyés à l'Agent principal
Tâche en arrière-plan
Démarrer directement les tâches en arrière-plan dans la session :
Exemple
/background vérifier tous les serveurs et signaler les indisponibilités
Collaboration multi-agents Kanban
L’ensemble d’outils Kanban offre une collaboration multi-agents plus structurée — un Agent orchestrateur distribue les tâches au tableau, et plusieurs Agents travailleurs les réclament et les exécutent :
Exemple
hermes tools enable kanban
# Ajouter des descriptions de rôle au Profile afin que l’orchestrateur connaisse les capacités de chaque Agent.
hermes profile create researcher \
--description "Compétent pour lire le code source et la documentation externe, produire des rapports de recherche"
hermes profile create coder \
--description "Compétent pour implémenter des fonctionnalités, corriger des bugs et écrire des tests"
L’ensemble d’outils Kanban doit être explicitement activé — même all ou * ne l’activera pas automatiquement. C’est une conception intentionnelle, car la collaboration multi-agents consomme plus de tokens.
Traitement par lots et génération de données d’entraînement RL
Le traitement par lots vous permet d’exécuter des agents en parallèle sur des centaines ou des milliers de prompts, en générant des données de trajectoire structurées — principalement utilisées pour la génération de données d’entraînement pour le fine-tuning de modèles et l’évaluation.
Démarrage rapide
Exemple
cat data/prompts.jsonl
# {"prompt": "Écrire une fonction Python pour trouver la plus longue sous-chaîne palindromique"}
# {"prompt": "Créer des points de terminaison d'API REST d'authentification utilisateur avec Flask"}
# {"prompt": "DebugThisError:TypeError: impossible de déballer un non-itérable"}
# Exécuter le traitement par lots
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
# Reprendre une tâche interrompue à partir d'un point de contrôle
python batch_runner.py \
--dataset_file=data/prompts.jsonl \
--batch_size=10 \
--run_name=my_first_run \
--resume
Format du jeu de données
Chaque ligne est un objet JSON, doit contenirpromptChamp, peut contenir un contexte supplémentaire :
Exemple
{"prompt": "DebugThisError", "cwd": "/home/user/project", "docker_image": "python:3.12"}
Paramètres principaux
| Paramètre | Valeur par défaut | Description |
|---|---|---|
| --dataset_file | Requis | Chemin du jeu de données JSONL |
| --batch_size | Requis | Nombre de prompts par lot |
| --run_name | Requis | Nom de l'exécution (utilisé pour le répertoire de sortie et la reprise du point de contrôle) |
| --model | claude-sonnet-4.6 | Modèles utilisés |
| --num_workers | 4 | Nombre de processus de travail parallèles |
| --max_turns | 10 | Nombre maximal de tours d'appel d'outil par invite |
| --distribution | "default" | Distribution des ensembles d'outils (échantillonnage aléatoire de différentes combinaisons d'outils) |
| --reasoning_effort | — | Effort de raisonnement : aucun/minimal/faible/moyen/élevé/xhigh |
| --resume | false | Reprendre à partir du point de contrôle |
Structure de sortie
Le traitement par lots génère la structure de répertoires suivante :
data/my_first_run/ ├── trajectories.jsonl # 最终合并输出(所有批次) ├── batch_0.jsonl # 各批次结果 ├── batch_1.jsonl ├── checkpoint.json # 断点续传记录 └── statistics.json # 工具使用统计
Chaque trajectoire est produite au format ShareGPT, incluant l'historique complet de la conversation, les enregistrements d'invocation d'outils et les statistiques de couverture du raisonnement :
Exemple
"prompt_index": 42,
"conversations": [
{"from": "human", "value": "Écrire une fonction pour trouver des palindromes..."},
{"from": "gpt", "value": "Je vais créer cette fonction...",}
"tool_calls": [{"name": "terminal", "arguments": {...}}]},
{"from": "tool", "value": "...résultat d'exécution..."},
{"from": "gpt", "value": "Voici la fonction terminée..."}
],
"completed":,
"toolsets_used": ["terminal", "file"],
"tool_stats": {
"terminal": {"count": 2, "success": 2, "failure": 0}
}
}
Filtrage de la qualité
Une fois l'exécution par lots terminée, deux filtres sont automatiquement appliqués :
| Élément de filtre | Règles | Objectif |
|---|---|---|
| Filtrage des cas sans inférence | Les échantillons sans aucune trace de raisonnement ont été écartés. | Veiller à ce que la sortie contienne le processus de réflexion afin d'améliorer la qualité des données d'entraînement |
| Filtrage des noms d'outils hallucinés | Les entrées contenant des appels d'outils qui ne figurent pas dans la liste des outils valides sont filtrées. | Exclure les appels d'outils non valides produits par hallucination du modèle |
Les traces de raisonnement font référence aux marqueurs <REASONING_SCRATCHPAD> ou aux tokens de réflexion natifs. Les données filtrées sont plus adaptées au fine-tuning du modèle.
Intégration avec l'environnement RL Atropos
Le traitement par lots peut générer directement des données d'entraînement compatibles Atropos :
Exemple
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
# La sortie trajectories.jsonl peut être directement utilisée comme entrée d'entraînement Atropos