invoke_agent OpenTelemetry (OTel) スパン を出力します。Agents ビューでは、このネストは、それをトリガーした ターン の下に サブエージェント 呼び出しとして表示され、その配下に固有の LLM Calls と tool calls がグループ化されます。
サブエージェントのデータモデル
weave.start_subagent スパン は OTel の invoke_agent スパン に対応しており、親 ターン と同じ operation 名を出力します。Weave では、トレース 内での親子関係によってこの 2 つを区別します。
conversation_id を継承するため、Agentsビューでは会話の他の部分と同じグループにまとめられます。
weave.start_subagent は invoke_agent スパン を作成します。この スパン は、OTel コンテキスト内で現在アクティブな スパン (通常は親 ターン や、委譲のきっかけとなった LLM Call) の子として自動的に関連付けられます。親子関係は OTel コンテキストの伝播によって処理されるため、明示的に委譲を指定する必要はありません。
単一のサブエージェントをトレースする
weave.start_conversation で、続いて conversation.start_turn でラップすることで、階層全体を取得します。次に Weave は、専門エージェント用の weave.start_subagent ブロックを使用し、各 LLM Call とツール実行を子スパンとして記録することで、サブエージェントのトレースを取得します。
これらの例では、エージェント間のトレースに焦点を当てるため、ルーティング ロジックは意図的に省略しています。
invoke_agent ブロックとして表示され、その配下にサブエージェント自身の LLM Calls と tool calls がグループ化されます。スーパーバイザーが直接行う LLM Calls は、サブエージェントと同じ階層に残ります。
複数のサブエージェントをトレースする
researcher、投稿の下書きを作成する writer、最終出力を仕上げる reviewer です。
Weave は、各サブエージェントごとに個別の weave.start_subagent ブロックを開くことで、3 つすべてのサブエージェントを同じターン配下の兄弟として取得します。各サブエージェントはアクティブなターンの OTel コンテキストを継承するため、サブエージェントは互いの配下ではなく、ターンの配下にネストされた対等な invoke_agent スパン として表示されます。
researcher には tool call も含まれています。これらのサブエージェント同士に親子関係はありません。
ネストしたサブエージェントをトレースする
start_subagent の各呼び出しは、OTel コンテキストで現在アクティブなスパンの下にネストされます。
research-coordinator はそのターンのサブエージェントとして表示され、anthropic-researcher と openai-researcher は research-coordinator 配下の並列するエージェントとして表示され、anthropic-summarizer は anthropic-researcher のサブエージェントとして表示されます。