メインコンテンツへスキップ
このガイドでは、委任されたエージェント呼び出しが親 ターン と同じ トレース 内でネストされた スパン として表示されるように、W&B Weave で サブエージェント をトレースする方法を説明します。サブエージェント をトレースすると、親エージェントがどの専門エージェントを呼び出したか、それらが何を実行したか、そして最終的な回答にどう貢献したかを含め、エージェントの推論の階層全体を確認できます。このガイドは、Weave で multi-agent システムのインストルメンテーションを行う開発者を対象としています。 サブエージェント は、ターン 内で実行される委任されたエージェント呼び出しです。あるエージェントが別のエージェントに処理を引き継ぐ場合、たとえば supervisor agent が specialist agent にディスパッチするような場合に、サブエージェント を使用します。 Weave でこれらをインストルメンテーションすると、サブエージェント は親 ターン と同じ トレース 内にネストされた invoke_agent OpenTelemetry (OTel) スパン を出力します。Agents ビューでは、このネストは、それをトリガーした ターン の下に サブエージェント 呼び出しとして表示され、その配下に固有の LLM Calls と tool calls がグループ化されます。

サブエージェントのデータモデル

コードをインストルメンテーションする前に、Weave が トレース 内でサブエージェントをどのように表現するかを理解しておくと役立ちます。weave.start_subagent スパン は OTel の invoke_agent スパン に対応しており、親 ターン と同じ operation 名を出力します。Weave では、トレース 内での親子関係によってこの 2 つを区別します。
サブエージェントはアクティブな会話の conversation_id を継承するため、Agentsビューでは会話の他の部分と同じグループにまとめられます。
weave.start_subagentinvoke_agent スパン を作成します。この スパン は、OTel コンテキスト内で現在アクティブな スパン (通常は親 ターン や、委譲のきっかけとなった LLM Call) の子として自動的に関連付けられます。親子関係は OTel コンテキストの伝播によって処理されるため、明示的に委譲を指定する必要はありません。

単一のサブエージェントをトレースする

次の例では、リクエストを受け取る supervisor agent を実行し、回答を見つけるために Wikipedia の検索ツールを使用するリサーチ専門のサブエージェントに処理を委任します。 Weave は、会話全体を weave.start_conversation で、続いて conversation.start_turn でラップすることで、階層全体を取得します。次に Weave は、専門エージェント用の weave.start_subagent ブロックを使用し、各 LLM Call とツール実行を子スパンとして記録することで、サブエージェントのトレースを取得します。 これらの例では、エージェント間のトレースに焦点を当てるため、ルーティング ロジックは意図的に省略しています。
Agents ビュー では、サブエージェントは ターン 内でネストされた invoke_agent ブロックとして表示され、その配下にサブエージェント自身の LLM Calls と tool calls がグループ化されます。スーパーバイザーが直接行う LLM Calls は、サブエージェントと同じ階層に残ります。

複数のサブエージェントをトレースする

次の例では、1 つのリクエストを処理するために、3 つの兄弟サブエージェントに順番に委譲するコンテンツパイプライン エージェントを実行します。3 つのサブエージェントは、事実を収集する researcher、投稿の下書きを作成する writer、最終出力を仕上げる reviewer です。 Weave は、各サブエージェントごとに個別の weave.start_subagent ブロックを開くことで、3 つすべてのサブエージェントを同じターン配下の兄弟として取得します。各サブエージェントはアクティブなターンの OTel コンテキストを継承するため、サブエージェントは互いの配下ではなく、ターンの配下にネストされた対等な invoke_agent スパン として表示されます。
Agents ビュー では、このターンに 3 つの兄弟関係にあるサブエージェント呼び出しが含まれており、それぞれの配下に独自の LLM Call がネストされています。また、researcher には tool call も含まれています。これらのサブエージェント同士に親子関係はありません。

ネストしたサブエージェントをトレースする

サブエージェントは、さらに別のサブエージェントに委譲することもできます。start_subagent の各呼び出しは、OTel コンテキストで現在アクティブなスパンの下にネストされます。
この例では、ターン の下に 3 階層のネストが作成されます。
Agents ビュー では、research-coordinator はそのターンのサブエージェントとして表示され、anthropic-researcheropenai-researcherresearch-coordinator 配下の並列するエージェントとして表示され、anthropic-summarizeranthropic-researcher のサブエージェントとして表示されます。