Skip to main content
ターン内で委譲されたエージェントの invocation です。 同じトレース内のネストされた invoke_agent OTel スパンに対応します。 SubAgent は Pydantic モデルです。インスタンスを作成する際に、以下の任意のフィールドをキーワード引数として指定できます。 SubAgent はコンテキストマネージャーであり、with 文で使用できます。

フィールド

メソッド

start_llm

このサブエージェント内で LLM Call を開始します。 _current_llm contextvar を設定するため、コンテキストマネージャーを使用するかどうかにかかわらず、 get_current_llm() から LLM を参照できます。 SubAgent のコンテキストに入っている場合は、LLM の OTel 親をこの SubAgent のスパンに固定します。

start_tool

このサブエージェント内でツール実行を開始します。 SubAgent に入っている場合は、Tool の OTel 親をこの SubAgent のスパンに固定します。

start_subagent

このサブエージェントの配下に、ネストされたサブエージェントを開始します。 この SubAgent がエンターされている場合、ネストされた SubAgent の OTel 親をこの SubAgent のスパンに固定します。

record

複数のサブエージェントフィールドを 1 回の呼び出しで設定します。 手動でインストルメントされたエージェントでは、サブエージェントに対してフィールドごとに代入 (system_instructions、agent_id、 …) を行う必要がありますが、このメソッドはそれらを 1 回のキーワード引数による呼び出しにまとめます。明示的に渡された (None 以外の) フィールドのみが適用され、既存の値は保持されます。メソッドチェーン用に self を返します。Turn.record / LLM.record と同様の動作です。 注: ストリーミング (with) パスでは、サブエージェントのスパン名は __enter__ の時点で name から決定されます。そのため、スパン名に反映させたい場合は、record ではなく start_subagent / turn.subagent で name を設定してください。なお、record を使用した場合でも gen_ai.agent.name 属性は更新されます。

end

start

このサブエージェントのスパンを開始します。with を使わずに __enter__ を呼び出すのと同じです。 サブエージェントが並行して実行される可能性がある場合は、start_subagent に set_current=False を渡してください。end() は ContextVar.reset を使ってデタッチするため、 重なり合うスパンが LIFO の順序どおりに終了しないと、アンビエントなコンテキストスタックが 警告なしに破損します。その結果、残った兄弟スパンがカレントではなくなり、 最後のデタッチでは、すでに終了したスパンが復元されてしまいます。 start_llm / start_tool / start_subagent で作成した子スパンは、 いずれの場合もこのスパンの下にネストされます。これらのファクトリーが 明示的な親コンテキストを引き渡すためです。

record_error

スパンを終了せずにエラーを記録します。スパンを終了する準備ができたら end() を呼び出します。

set_attributes

このスパンに任意の OTel 属性を付与します。 キーが 1 つでも複数でも dict を渡してください。キーが 1 つの場合は span.set_attributes({"weave.tag": "value"}) のように使用します。OTel の Span.set_attributes に準拠しています。 start_* ファクトリー、start()、または with によってスパンが開始された後、 スパンが終了する前に呼び出す必要があります。このウィンドウ外での呼び出しは no-op となり、警告がログされます。バッチ取り込みの場合は、オブジェクトの宣言済みフィールドに 直接値を設定し、そのオブジェクトを log_turn / log_conversation に渡してください。
最終更新日 2026年9月30日