Weave for Agents はパブリック プレビューです。一般提供前に、機能、API、Agents view UI は変更される可能性があります。
@weave.op デコレーターで Ops としてトレースしている場合は、代わりに LLM アプリケーションをトレースする を参照してください。
始める前に
weave パッケージをインストールして project を初期化します。この手順により、チームと project が Weave に登録され、SDK がスパンを UI の正しい場所にルーティングできるようになります。
- Python
- TypeScript
[YOUR-TEAM] は W&B チーム名に、[YOUR-PROJECT] は W&B のプロジェクト名に置き換えてください。start_session()、start_turn()、start_llm()、start_tool() を呼び出す前に、weave.init() を呼び出してください。トレースが無効になっている場合、または init 呼び出しがない場合、すべてのエージェント トレース関数は何もせずに終了します。そのため、インストルメンテーションは本番コードに残したまま、設定で制御できます。エージェントのデータモデル
次の図は、1 つのエージェントに複数のセッションが含まれ、1 つのセッションに複数のターンが含まれ、その後も同様に続くことを示しています。
セッションは、親 span ではなく、共有された
conversation_id 属性によって ターン をグループ化します。そのため、各 ターン はそれぞれ独立した OTel トレースを開始します。この設計は、分散トレースと並列実行をサポートします。クライアントは、サーバー側での集約を行わずに、span を OTel collector に直接送信します。
エージェントのトレース API
with、TypeScript では try/finally を使用) を返すか、.end() を呼び出して手動で終了できます。
セッションを開始する
start_session() / startSession() は、すべての子 span に conversation_id 属性を設定し、Agents タブでターンがグループ化されるようにします。session_id を渡す場合は、会話全体を通じて変わらない安定した値である必要があります。同じ ID を再利用すると、既存のセッションに新しいターンを追加できます。session_id を省略すると、SDK が自動的に UUID を生成します。
アクティブなセッションはコンテキスト (Python の ContextVar または Node.js の AsyncLocalStorage) に保存されるため、同じ非同期コンテキスト内で実行されるコードであれば、セッションオブジェクトを明示的に渡さなくても weave.get_current_session() / weave.getCurrentSession() で取得できます。
- Python
- TypeScript
ターンを開始する
start_turn() / startTurn() は、新しい OTel トレースのルートとなる invoke_agent span を新しく作成します。Weave は、この span を使用して、タイムラインビュー内で 1 回の完全なユーザーとエージェントのやり取りを表現します。
トップレベル関数として呼び出すと、コンテキストからアクティブなセッションを取得し、その会話 ID を継承します。アクティブなセッションがない場合、Weave は conversation_id なしでターンを作成し、ほかのターンとグループ化しません。
- 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は、会話内の 1 つのエントリ (ユーザー入力、アシスタントの応答、system prompt、または tool の結果) を表します。モデルが受け取った内容と生成した内容を記録するには、llm.input_messages/llm.inputMessagesに割り当てます。Usageは、LLM の応答から token 数を取得し、llm.usageに割り当てられます。
コンテキストマネージャーまたは try-finally パターン
start_llm() / startLLM() または start_tool() / startTool() を呼び出せます。これは、コードが同じ async コンテキスト内で実行されている限り、モジュール境界をまたいでも機能します。コールスタック内のどこからでも現在アクティブなオブジェクトを取得するには、weave.get_current_session() / weave.getCurrentSession()、weave.get_current_turn() / weave.getCurrentTurn()、および weave.get_current_llm() / weave.getCurrentLLM() を使用します。
- Python
- TypeScript
手動で開始・終了するパターン
with ブロックや try/finally を使用できない場合は、.end() を明示的に使用します。たとえば、span の開始と終了が別々の関数呼び出しにまたがる場合や、コルーチンの外で非同期ライフサイクルを管理する場合です。作成したすべてのオブジェクトに対して .end() を呼び出し、span が終了して collector に flush されるようにする責任はユーザーにあります。
- Python
- TypeScript
セマンティック規約
Weave UI で span がどのように表示されるか
https://wandb.ai/[YOUR-TEAM]/[YOUR-PROJECT]/weave/agents) に表示されます。
- Sessions list には、ターンのアクティビティを示すミニマップとともに、すべてのセッションが表示されます。
- multi-turn session view は、セッションをクリックすると開き、各ターン、LLM calls、ツール実行、token 数、関連付けられたフィードバックを表示します。
- 各
chatspan には、入力メッセージ、出力メッセージ、モデル名、使用量が表示されます。 - 各
execute_toolspan には、tool 名、引数、結果が表示されます。