AI News HubLIVE
站内改写3 分で読了

Hermes Agentが非同期サブエージェントを追加、委任作業が親チャットをブロックしなくなる

Nous ResearchがHermes Agentに非同期サブエージェント機能を導入しました。デリゲートツールがバックグラウンドエージェントを生成できるようになり、親チャットをブロックしません。本記事では、async_delegationツールセット(issue #5586)を用いた生成、確認、誘導、収集の方法を解説し、サブエージェントの分離、同期と非同期のトレードオフ、ACPを使用するタイミングについても触れます。

ソースMarkTechPost著者: Michal Sutter

Nous ResearchはHermes Agentに変更を加え、デリゲートツールが非同期でサブエージェントを実行できるようにしました。発表によると、委任作業は親チャットをブロックしなくなります。

Hermes AgentはNous Researchが開発したオープンソースのパーソナルエージェントです。親エージェントは子エージェント(サブエージェント)を生成して作業を分散できます。これまでは、その委任によって待機が発生していました。

このアップデートはNous Researchと共同創業者TekniumによってXで発表されました。既存ユーザーはhermes updateを実行することで有効化できます。

サブエージェントとは

デリゲートツールはdelegate_taskです。それはサブエージェントを生成します。サブエージェントは分離された子エージェントであり、それぞれ独自の会話、ターミナルセッション、ツールセットを持ちます。最終サマリーのみが親に返されます。親のコンテキストは子の中間的なツール呼び出しや推論を見ることはありません。これにより、親のコンテキストウィンドウは小さく保たれます。

分離は厳格です。サブエージェントは完全に新しい会話から開始し、親の履歴に関する知識は一切持ちません。親はgoalフィールドとcontextフィールドを通じてすべてを渡す必要があります。

サブエージェントは親のAPIキー、プロバイダー設定、認証情報プールを継承します。この認証情報プールにより、レート制限時のキーローテーションが可能になります。config.yamlを通じてサブエージェントをより安価なモデルにルーティングすることもできます。

これまでの問題と変更点

ソースコードでは、delegate_taskは同期的です。親はツール呼び出し内で全ての子が完了するまでブロックされます。その間、チャットはフリーズします。

この設計はいくつかのワークフローを妨げていました。長時間のエージェントを開始しても作業を続けられず、実行中の確認や途中での誘導もできませんでした。

Nousはオープンな環境で非ブロッキングパスを構築しました。Issue #5586はasync_delegationツールセットを追加します。それはバックグラウンドエージェントを生成し、即座にtask_idを返します。発表は非同期サブエージェントが利用可能になったことを確認しています。

非同期ツールは完全なライフサイクルをカバーします:

  • delegate_task_async — バックグラウンドエージェントを生成、task_idを返す
  • check_task — 非ブロッキングでステータスと最新出力を確認
  • steer_task — 実行中のタスクにメッセージを注入
  • collect_task — 完了するまでブロックし、完全な結果を返す
  • cancel_task — 実行中のタスクを停止
  • list_tasks — セッション内の全非同期タスクを一覧表示

バックグラウンドエージェントはプロセス内スレッドとして実行され、delegate_taskと同じAIAgent機構、認証情報、ツールセットを再利用します。

同期 vs 非同期委任

| 次元 | 同期 delegate_task | 非同期委任 (async_delegation, #5586) | |------|-------------------|--------------------------------------| | 親チャット | 全子タスク完了までブロック | 即座にtask_idを返す;チャットは自由 | | 実行中の制御 | なし — 待機 | タスクごとにステータス確認、誘導、収集、キャンセル可能 | | 実行方法 | 親がツール呼び出し内で待機 | バックグラウンドのプロセス内スレッド | | コンテキストコスト | 最終サマリーのみ返る | 最終サマリーのみ返る | | 分離性 | 子ごとに新しい会話 | 子ごとに新しい会話 | | 最適な用途 | 待機可能な高速な並列タスク | チャットと並行して実行する長時間タスク | | 永続性 | ターン間で非永続 | シングルセッション;ACP (#4949) はターン間対応 |

コード例:生成と誘導

同期的なバッチは子を並列に生成し待機します。同時実行数はdelegation.max_concurrent_childrenで制限され、デフォルトは3です。

# 同期:親は全ての子が完了するまで待機
delegate_task(tasks=[
    {"goal": "トピックAを調査", "toolsets": ["web"]},
    {"goal": "ビルドを修正", "toolsets": ["terminal", "file"]},
])

issue #5586の非同期ツールセットは即座に制御を返します。

# 非同期 (async_delegationツールセット, issue #5586)
t1 = delegate_task_async(goal="トピックAを調査")
t2 = delegate_task_async(goal="トピックBを調査")

check_task(t1["task_id"]) # ステータス確認、ブロッキングなし
steer_task(t2["task_id"], "2024年以降の情報源のみ使用")
results = [collect_task(t["task_id"]) for t in (t1, t2)]

使用事例

  • 長時間の調査と並行作業:市場スキャンのサブエージェントを起動し、メインチャットで執筆を続ける。
  • 並行アプローチ評価:3つの検索バックエンドをテストするサブエージェントを生成。それぞれ分離されているため、評価が相互に汚染されない。
  • バックグラウンドコーディングタスク:複数ファイルのリファクタリングをサブエージェントに委任し、自分は他のファイルをレビュー。
  • モニタリング実行:TUIは/agentsオーバーレイ(別名/tasks)を提供し、実行中および完了したサブエージェントのライブツリーを表示。

主要なポイント

Hermes Agentは非同期サブエージェントをサポートするようになりました。デリゲートツールは親チャットをブロックしません。非ブロッキング委任はasync_delegationツールセット(issue #5586)を通じて提供されます。非同期ツールはライフサイクル全体(生成、確認、誘導、収集、キャンセル、一覧表示)をカバーします。サブエージェントは分離され、最終サマリーのみが返されるため、親コンテキストは小さく保たれます。これはプロセス内およびシングルセッションで動作し、既存ユーザーはhermes updateで有効化できます。