Agent-as-Tool
あらゆるエージェントを呼び出し可能なツールとしてラップ — 同期、ストリーミング、会話型に対応。
Agent-as-Tool
JamJetでは、任意のエージェントをワークフロー内で呼び出し可能なツールとしてラップできます。3つの呼び出しモードにより、クイック検索から長時間実行される分析、マルチターン会話まで、さまざまなユースケースに対応します。
3つのモード
Sync
単一リクエスト、単一レスポンス。高速でステートレスな操作に最適です。
graph.add_agent_tool("classifier",
agent="https://classifier-agent.example.com",
mode="sync",
timeout_ms=5000,
)/tasks/sendにポストし、完全なレスポンスをノード出力として返します。
Streaming
リアルタイムイベント送信による段階的なNDJSON処理。進行状況の可視化、予算管理、早期終了が必要な長時間実行エージェントに最適です。
graph.add_agent_tool("researcher",
agent="https://research-agent.example.com",
mode="streaming",
budget={"max_cost_usd": 0.50},
streaming={"idle_timeout_secs": 30},
)/tasks/sendSubscribeにポストし、NDJSONストリームを段階的に処理します:
- リアルタイムイベント — 各チャンクは到着時に即座にステートバックエンドに送信され、最後にまとめて送信されることはありません
- アイドルタイムアウト —
idle_timeout_secs(デフォルト30秒)以内にデータが到着しない場合、ストリームは終了されます - 予算ガード — チャンクから累積された
cost_usdがmax_cost_usdを超えると、ストリームは停止します - A2Aキャンセル — 早期終了時(予算またはタイムアウト)、リモートエージェントに対してベストエフォートの
tasks/cancelが送信されます - 部分結果の保持 — すでに送信されたチャンクは、失敗時でも決して失われません
Conversational
反復的な改善のためのマルチターン交換。コーディネーターが入力を送信し、レスポンスを読み取り、次のターンの入力としてフィードバックします。
graph.add_agent_tool("editor",
agent="https://editor-agent.example.com",
mode={"conversational": {"max_turns": 5}},
)ループ内で/tasks/sendにポストします。エージェントがstatus: "completed"で応答するか、max_turnsに達すると停止します。
ストリーミング設定
| パラメータ | デフォルト | 説明 |
|---|---|---|
streaming.idle_timeout_secs | 30 | 終了前の無音秒数 |
budget.max_cost_usd | None | 終了前の最大累積コスト |
timeout_ms | 30000 | 全体的なHTTPタイムアウト(syncおよびconversationalのみ) |
ストリーミングモードでは、チャンク単位のアイドルタイムアウトが全体的なHTTPタイムアウトに置き換わります。クライアントはグローバルタイムアウトなしで構築されているため、アクティブなデータを持つ長時間実行ストリームが早期に強制終了されることはありません。
イベント
エージェントツールは構造化されたイベントをイベントログに出力します:
| イベント | タイミング |
|---|---|
agent_tool_invoked | リモートエージェントへのリクエスト送信時 |
agent_tool_progress | NDJSONチャンクを受信するたび(ストリーミングのみ) |
agent_tool_completed | 最終出力を伴う正常完了時 |
agent_tool_terminated | 早期終了時(予算超過またはアイドルタイムアウト) |
agent_tool_error | ストリーム途中でのネットワークエラー時 |
各イベントには正確なタイミング記録のための timestamp_ms が含まれます。プログレスイベントには chunk_index と accumulated_cost_usd が含まれます。
エラーハンドリング
| 障害 | 動作 |
|---|---|
| ストリーム途中でのネットワークエラー | ノードがエラーで失敗、部分的な結果は保持される |
| NDJSON内の不正なJSON | {"raw": "..."} としてラップされ、ストリームは継続 |
| 非UTF-8データ | 警告付きでスキップ、ストリームは継続 |
| アイドルタイムアウト | ノードが失敗、A2Aキャンセルを送信 |
| 予算超過 | ノードが失敗、A2Aキャンセルを送信 |
| エージェントがHTTPエラーを返す | ノードが即座に失敗 |
深刻な障害(タイムアウト、ネットワークエラー)はノードを失敗させ、ワークフローが再試行やエラー処理を行えるようにします。予算超過も失敗として扱われます。
プロトコル解決
エージェントURIがプロトコルを決定します:
| URIプレフィックス | プロトコル |
|---|---|
https:// | A2A(リモートHTTP) |
jamjet:// | ローカル(インプロセス) |
| その他 | MCP |
例
3つのモードすべてを使用した完全なワークフローについては、agent-as-toolの例を参照してください。