gen_ai.agent.name や gen_ai.conversation.id などの GenAI semantic-convention 属性 がタグ付けされます。
個々の関数を @weave.op デコレーターで Ops としてトレースしている場合は、代わりに LLM アプリケーションをトレースする を参照してください。
始める前に
weave パッケージをインストールして project を初期化します。この手順により、チームと project が Weave に登録され、SDK がスパンを UI の正しい場所にルーティングできるようになります。
- Python
- TypeScript
[YOUR-TEAM] は W&B チーム名に、[YOUR-PROJECT] は W&B のプロジェクト名に置き換えてください。start_conversation()、start_turn()、start_llm()、start_tool()、start_subagent() を呼び出す前に、weave.init() を呼び出してください。トレースが無効になっている場合、または init 呼び出しがない場合、すべてのエージェント トレース関数は何もせずに終了します。そのため、インストルメンテーションは本番コードに残したまま、設定で制御できます。エージェントのデータモデル
| 概念 | Weave SDK クラス | OTel スパン タイプ | 説明 | 参照ページ |
|---|---|---|---|---|
| エージェント | (no class) | (no スパン, grouped by the agent_name 属性) | Agents タブ内のエージェント型アプリケーション。1 つ以上の会話を含みます | |
| 会話 | Conversation | (no スパン, turns are grouped by the conversation_id 属性) | 1 つ以上のターンを含む会話または run | Python TypeScript |
| ターン | Turn | invoke_agent | 1 つのユーザーメッセージと、それに対するエージェントの完全な応答 | Python TypeScript |
| LLM Call | LLM | chat | 言語モデル API への 1 回の Call | Python TypeScript |
| ツール呼び出し | Tool | execute_tool | LLM の応答によってトリガーされる 1 回のツール呼び出し | Python TypeScript |
| サブエージェント呼び出し | SubAgent | invoke_agent | ネストされたエージェント呼び出し。通常は、あるエージェントが別のエージェントに委譲する場合に発生します | Python TypeScript |
conversation_id 属性によって ターン をグループ化します。そのため、各 ターン はそれぞれ独立した OTel トレースを開始します。この設計は、分散トレースと並列実行をサポートします。クライアントは、サーバー側での集約を行わずに、スパン を OTel collector に直接送信します。
エージェントのトレース API
with、TypeScript では try/finally を使用) を返すか、.end() を呼び出して手動で終了できます。
会話を開始する
start_conversation() (Python) または startConversation() (TypeScript) は、すべての子スパンに conversation_id 属性を付与し、ターンが Agents タブでグループ化されるようにします。conversation_id / conversationId を渡す場合は、会話のライフタイム全体で不変である必要があります。同じ ID を再利用すると、既存の会話に新しいターンを追加できます。省略した場合は、SDK が UUID を自動的に生成します。
アクティブな会話はコンテキスト (Python の ContextVar または Node.js の AsyncLocalStorage) に格納されるため、同じ非同期コンテキストで実行されるコードであれば、会話オブジェクトを明示的に渡さなくても weave.get_current_conversation() / weave.getCurrentConversation() で取得できます。
- Python
- TypeScript
ターンを開始する
start_turn() (Python) と startTurn() (TypeScript) は、新しい OTel トレースのルートとなる invoke_agent スパン を新しく作成します。Weave は、この スパン を使用して、タイムラインビュー内で 1 回の完全なユーザーとエージェントのやり取りを表現します。
呼び出し方法は 2 とおりあります。
- トップレベル関数として (
weave.start_turn(...)/weave.startTurn(...))。以下の例で示す形式です。コンテキストからアクティブな会話を取得し、その会話 ID を継承します。アクティブな会話がない場合、ターンはconversation_idなしで作成され、ほかのターンとグループ化されません。 - 参照を保持している会話のインスタンスメソッドとして (
conversation.start_turn(...)/conversation.startTurn(...))。コンテキストマネージャーブロック内など、スコープ内に明示的な会話オブジェクトがある場合に便利です。以下の「コンテキストマネージャーまたは try-finally パターン」の例では、この形式を使用しています。両方の SDK のConversation、Turn、LLM、Tool、SubAgentのリファレンスページへの直接リンクについては、上記のデータモデル表を参照してください。
- Python
- TypeScript
LLM Call を開始する
start_llm() / startLLM() は、現在のターンの下にネストされた chat span を作成します。Weave はこの span を使用して、Agents ビューに token 使用量、モデル名、入力メッセージと出力メッセージ、および推論を表示します。
- Python
- TypeScript
llm オブジェクトに割り当ててください。
- Python
- TypeScript
provider_name / providerName は明示的に渡してください。Weave はモデル文字列からこれを推測しません。
ツール呼び出しを開始する
start_tool() / startTool() は execute_tool span を作成します。この span は、コンテキスト内でアクティブな OTel span の子になります (通常は、ツール呼び出しを生成した LLM Call の chat span です) 。
- Python
- TypeScript
- Python
- TypeScript
エージェント トレースの使用パターン
Message(Python · TypeScript) は、会話内の 1 つのエントリ (ユーザー入力、アシスタントの応答、system prompt、または tool の結果) を表します。モデルが受け取った内容を記録するには、メッセージのリストをllm.input_messages/llm.inputMessagesに割り当て、生成した内容を記録するにはllm.output_messages/llm.outputMessagesに割り当てます。Usage(Python · TypeScript) は、LLM の応答から token 数を取得し、llm.usageに割り当てられます。
コンテキストマネージャーまたは try-finally パターン
start_llm() / startLLM() または start_tool() / startTool() を呼び出せます。これは、コードが同じ async コンテキスト内で実行されている限り、モジュール境界をまたいでも機能します。コールスタック内のどこからでも現在アクティブなオブジェクトを取得するには、weave.get_current_conversation() / weave.getCurrentConversation()、weave.get_current_turn() / weave.getCurrentTurn()、および weave.get_current_llm() / weave.getCurrentLLM() を使用します。
- Python
- TypeScript
手動で開始・終了するパターン
with ブロックや try/finally を使用できない場合は、.end() を明示的に使用します。たとえば、スパン の開始と終了が別々の関数呼び出しにまたがる場合や、コルーチンの外で非同期ライフサイクルを管理する場合です。作成したすべてのオブジェクトに対して .end() を呼び出し、スパン が終了して collector に flush されるようにする責任はユーザーにあります。
- Python
- TypeScript
セマンティック規約
Weave UI でデータがどのように表示されるか
https://wandb.ai/[YOUR-TEAM]/[YOUR-PROJECT]/weave/agents) に表示されます。
- Conversations タブには、すべての会話と、ターンのアクティビティを示すミニマップが表示されます。
- Conversation detail view は会話をクリックすると開き、すべてのターン、LLM Call、ツール実行、トークン数、関連付けられたフィードバックが表示されます。