Skip to main content
このガイドでは、CoreWeave Agent Lens を使用してサブエージェントをトレースし、委譲されたエージェントの invocation を、親ターンと同じトレース内にネストされたスパンとして表示する方法を説明します。サブエージェントをトレースすると、親エージェントがどの専門エージェントを呼び出し、それらが何を行い、最終的な回答にどう寄与したかなど、エージェントの推論の階層全体を把握できます。このガイドは、Agent Lens でマルチエージェントシステムをインストルメントする開発者を対象としています。 サブエージェントとは、ターン内で実行される、委譲されたエージェントの invocation です。スーパーバイザーエージェントが専門エージェントにタスクを割り振る場合など、あるエージェントが別のエージェントに処理を引き渡す場面でサブエージェントを使用します。 Agent Lens でインストルメントすると、サブエージェントは親ターンと同じトレース内に、ネストされた invoke_agent OpenTelemetry (OTel) スパンを出力します。Conversations タブでは、このネスト構造が、サブエージェントを呼び出したターンの下にサブエージェントの invocation としてレンダリングされ、その配下にサブエージェント自身の LLM Call とツール呼び出しがまとめて表示されます。

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

コードのインストルメンテーションを行う前に、Agent Lens がトレース内でサブエージェントをどのように表現するかを理解しておくと役立ちます。tracing.start_subagent スパンは OTel の invoke_agent スパンに対応し、親ターンと同じ操作名を出力します。Agent Lens は、トレース内の親子関係に基づいて両者を次のように区別します:
サブエージェントは現在アクティブな会話の conversation_id を継承するため、Conversations タブでは同じ会話の他のデータとまとめて表示されます。
tracing.start_subagent は invoke_agent スパンを作成します。このスパンは、OTel コンテキストで現在アクティブなスパン (通常は親ターン、または委譲のきっかけとなった LLM Call) の子に自動的になります。親子関係は OTel のコンテキスト伝播によって処理されるため、委譲を明示的に指定する必要はありません。

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

次の例では、スーパーバイザーエージェントがリクエストを受け取り、リサーチ専門のサブエージェントに委譲します。サブエージェントは Wikipedia 検索ツールを使用して回答を検索します。 Agent Lens は、会話を tracing.start_conversation でラップし、その中を conversation.start_turn でラップすることで、階層全体を取得します。さらに、専門エージェント用の tracing.start_subagent ブロックを使用してサブエージェントのトレースを取得し、各 LLM Call とツール実行を子スパンとして記録します。 これらの例では、エージェント間のトレースに焦点を当てるため、ルーティングロジックを意図的に省略しています。
Conversations タブでは、サブエージェントはターン内にネストされた invoke_agent ブロックとして表示され、その下にサブエージェント自身の LLM Call とツール呼び出しがまとめて表示されます。スーパーバイザーが直接行った LLM Call は、引き続きサブエージェントと同じ階層 (兄弟要素) に表示されます。

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

次の例では、コンテンツパイプラインエージェントを実行します。このエージェントは 1 つのリクエストを処理する際、兄弟関係にある 3 つのサブエージェントに順番に処理を委譲します。事実を収集する researcher、投稿の下書きを作成する writer、最終的な出力を仕上げる reviewer の 3 つです。 Agent Lens は、サブエージェントごとに個別の tracing.start_subagent ブロックを開くことで、3 つのサブエージェントすべてを同じターン配下の兄弟として取得します。各サブエージェントは実行中のターンの OTel コンテキストを継承するため、サブエージェント同士が入れ子になることはありません。いずれもターンの配下にネストされた同階層の invoke_agent スパンとして表示されます。
Conversations タブでは、ターンの中に 3 つのサブエージェントの invocation が兄弟として並び、それぞれの下に個別の LLM Call がネストされています。また、researcher にはツール呼び出しも含まれています。サブエージェント同士が親子関係になることはありません。

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

サブエージェントは、さらに別のサブエージェントに処理を委譲することもできます。start_subagent の各呼び出しは、OTel コンテキストで現在アクティブなスパンの配下にネストされます。
この例では、ターンの下に 3 階層のネストが作成されます。
Conversations タブでは、research-coordinator がターンのサブエージェントとして表示され、anthropic-researcher と openai-researcher はコーディネーターの下に同階層の要素として表示されます。また、anthropic-summarizer は anthropic-researcher のサブエージェントとして表示されます。
最終更新日 2026年9月30日