Hermes Agent サブエージェント委任とバッチ処理

この章では、Hermesの2つの並列処理機能を紹介します。サブエージェント委任は、メインエージェントがタスクを複数のサブエージェントに分散して並列実行させるものであり、バッチ処理システムは数百のプロンプト上でエージェントを並列実行し、構造化されたトレーニングデータを生成できます。


サブエージェント委任と並列処理

Hermesは、メインエージェントからサブエージェントへのタスク委任をサポートし、並列ワークフローを実現します。

サブエージェントはdelegationツールセットを通じて実装されます:

例

# ファイルパス:~/.hermes/config.yaml
# delegation ツールセットが有効になっていることを確認
toolsets
:
 - delegation

メインエージェントはspawn_agent 或 spawn_parallelツールを使用してサブエージェントを生成します。

以下の疑似コードは並列委任のメカニズムを説明しています:

例

# セッションにおけるエージェントの並列委任メカニズム(疑似コード、原理の説明)
# spawn_parallel は複数のサブエージェントを同時に派遣し、それぞれ独立して実行する

spawn_parallel([
  {"prompt": "第1四半期の売上データを分析し、トレンドレポートを生成"},
  {"prompt": "第2四半期の売上データを分析し、トレンドレポートを生成"},
  {"prompt": "第3四半期の売上データを分析し、トレンドレポートを生成"}
])
# 3つのサブエージェントが並列で動作し、結果を集約してメインエージェントに返す

バックグラウンドタスク

セッション内でバックグラウンドタスクを直接起動:

例

# セッション内でバックグラウンドタスクを起動
/background すべてのサーバーをチェックしてダウン状況を報告

Kanban マルチエージェント協調

Kanbanツールセットは、より構造化されたマルチエージェント協調を提供します。オーケストレーターエージェントがタスクをカンバンに配布し、複数のワーカーエージェントがそれを引き受けて実行します:

例

# kanban ツールセットを有効化(明示的な有効化が必要、all/* でも自動的には有効化されない)
hermes tools enable kanban

# Profile に役割の説明を追加し、オーケストレーターが各エージェントの能力を把握できるようにする
hermes profile create researcher \
  --description "ソースコードと外部ドキュメントの読解が得意で、調査レポートを出力する"
hermes profile create coder \
  --description "機能の実装、バグ修正、テスト作成が得意"

Kanbanツールセットは明示的な有効化が必要です——all や * でも自動的には有効化されません。これは意図的な設計であり、マルチエージェント協調はより多くのトークンを消費するためです。


バッチ処理とRLトレーニングデータ生成

バッチ処理を使用すると、数百または数千のプロンプト上でエージェントを並列実行し、構造化された軌跡データを生成できます。これは主に、モデル微調整用のトレーニングデータ生成と評価に使用されます。

クイックスタート

例

# JSONL形式のプロンプトデータセットを準備
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": "回文を検索するPython関数を書く"}
{"prompt": "このエラーをデバッグする", "cwd": "/home/user/project", "docker_image": "python:3.12"}

主要パラメータ

パラメータデフォルト値説明
--dataset_file必須JSONLデータセットのパス
--batch_size必須バッチごとのプロンプト数
--run_name必須実行名(出力ディレクトリとチェックポイント再開に使用)
--modelclaude-sonnet-4.6使用するモデル
--num_workers4並列ワーカープロセス数
--max_turns10プロンプトごとの最大ツール呼び出しラウンド数
--distribution"default"ツールセット分布(異なるツール組み合わせをランダムサンプリング)
--reasoning_effort—推論努力レベル:none/minimal/low/medium/high/xhigh
--resumefalseチェックポイントから再開

出力構造

バッチ処理は以下のディレクトリ構造を生成します:

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互換のトレーニングデータを直接生成できます:

例

# 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のトレーニング入力として使用できます
その他の拡張