Hermes Agent サブエージェント委任とバッチ処理
この章では、Hermesの2つの並列処理機能を紹介します。サブエージェント委任は、メインエージェントがタスクを複数のサブエージェントに分散して並列実行させるものであり、バッチ処理システムは数百のプロンプト上でエージェントを並列実行し、構造化されたトレーニングデータを生成できます。
サブエージェント委任と並列処理
Hermesは、メインエージェントからサブエージェントへのタスク委任をサポートし、並列ワークフローを実現します。
サブエージェントはdelegationツールセットを通じて実装されます:
例
# delegation ツールセットが有効になっていることを確認
toolsets:
- delegation
メインエージェントはspawn_agent 或 spawn_parallelツールを使用してサブエージェントを生成します。
以下の疑似コードは並列委任のメカニズムを説明しています:
例
# spawn_parallel は複数のサブエージェントを同時に派遣し、それぞれ独立して実行する
spawn_parallel([
{"prompt": "第1四半期の売上データを分析し、トレンドレポートを生成"},
{"prompt": "第2四半期の売上データを分析し、トレンドレポートを生成"},
{"prompt": "第3四半期の売上データを分析し、トレンドレポートを生成"}
])
# 3つのサブエージェントが並列で動作し、結果を集約してメインエージェントに返す
バックグラウンドタスク
セッション内でバックグラウンドタスクを直接起動:
例
/background すべてのサーバーをチェックしてダウン状況を報告
Kanban マルチエージェント協調
Kanbanツールセットは、より構造化されたマルチエージェント協調を提供します。オーケストレーターエージェントがタスクをカンバンに配布し、複数のワーカーエージェントがそれを引き受けて実行します:
例
hermes tools enable kanban
# Profile に役割の説明を追加し、オーケストレーターが各エージェントの能力を把握できるようにする
hermes profile create researcher \
--description "ソースコードと外部ドキュメントの読解が得意で、調査レポートを出力する"
hermes profile create coder \
--description "機能の実装、バグ修正、テスト作成が得意"
Kanbanツールセットは明示的な有効化が必要です——all や * でも自動的には有効化されません。これは意図的な設計であり、マルチエージェント協調はより多くのトークンを消費するためです。
バッチ処理とRLトレーニングデータ生成
バッチ処理を使用すると、数百または数千のプロンプト上でエージェントを並列実行し、構造化された軌跡データを生成できます。これは主に、モデル微調整用のトレーニングデータ生成と評価に使用されます。
クイックスタート
例
cat data/prompts.jsonl
# {"prompt": "最長の回文部分文字列を探すPython関数を書く"}
# {"prompt": "Flaskでユーザー認証REST APIエンドポイントを作成する"}
# {"prompt": "このエラーをデバッグ:TypeError: cannot unpack non-iterable"}
# バッチ処理を実行
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
# チェックポイントから中断されたタスクを再開
python batch_runner.py \
--dataset_file=data/prompts.jsonl \
--batch_size=10 \
--run_name=my_first_run \
--resume
データセット形式
各行は1つのJSONオブジェクトであり、必ずpromptフィールドを含み、追加のコンテキストをオプションで含めることができます:
例
{"prompt": "このエラーをデバッグする", "cwd": "/home/user/project", "docker_image": "python:3.12"}
主要パラメータ
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
| --dataset_file | 必須 | JSONLデータセットのパス |
| --batch_size | 必須 | バッチごとのプロンプト数 |
| --run_name | 必須 | 実行名(出力ディレクトリとチェックポイント再開に使用) |
| --model | claude-sonnet-4.6 | 使用するモデル |
| --num_workers | 4 | 並列ワーカープロセス数 |
| --max_turns | 10 | プロンプトごとの最大ツール呼び出しラウンド数 |
| --distribution | "default" | ツールセット分布(異なるツール組み合わせをランダムサンプリング) |
| --reasoning_effort | — | 推論努力レベル:none/minimal/low/medium/high/xhigh |
| --resume | false | チェックポイントから再開 |
出力構造
バッチ処理は以下のディレクトリ構造を生成します:
data/my_first_run/ ├── trajectories.jsonl # 最终合并输出(所有批次) ├── batch_0.jsonl # 各批次结果 ├── batch_1.jsonl ├── checkpoint.json # 断点续传记录 └── statistics.json # 工具使用统计
各軌跡はShareGPT形式で出力され、完全な会話履歴、ツール呼び出し記録、推論カバレッジ統計を含みます:
例
"prompt_index": 42,
"conversations": [
{"from": "human", "value": "回文を検索する関数を書く..."},
{"from": "gpt", "value": "この関数を作成します...",
"tool_calls": [{"name": "terminal", "arguments": {...}}]},
{"from": "tool", "value": "...実行結果..."},
{"from": "gpt", "value": "これが完成した関数です..."}
],
"completed": true,
"toolsets_used": ["terminal", "file"],
"tool_stats": {
"terminal": {"count": 2, "success": 2, "failure": 0}
}
}
品質フィルタリング
バッチ実行終了後、自動的に2つのフィルタリングが適用されます:
| フィルタ項目 | ルール | 目的 |
|---|---|---|
| ゼロ推論フィルタリング | 推論の痕跡がないサンプルは破棄される | 出力に思考プロセスが含まれることを保証し、トレーニングデータの品質を向上させる |
| 幻覚ツール名フィルタリング | 有効なツールリストに含まれないツール呼び出しを含むエントリはフィルタリングされる | モデルの幻覚によって生成された無効なツール呼び出しを除外する |
推論の痕跡とは、<REASONING_SCRATCHPAD> マーカーまたはネイティブなthinkingトークンを指します。フィルタリング後のデータはモデル微調整により適しています。
Atropos RL環境との統合
バッチ処理はAtropos互換のトレーニングデータを直接生成できます:
例
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
# 出力された trajectories.jsonl はそのままAtroposのトレーニング入力として使用できます