学習内容
weave.init()を使用して、agent tracing 用に Weave を初期化する。start_conversation/startConversationとstart_turn/startTurnを使用して、会話とターンを開始する。start_llm/startLLMで LLM Call をラップし、Usage を記録する。start_tool/startToolでツール実行をラップし、結果を記録する。- 完全なトークン使用量と課金対象のモデルを記録して、トークン数とコストが表示されるようにする。
- 生成された会話、ターン、ツールコールを Agents ビューで確認する。
Weave SDK とエージェントの連携の仕組み
Python では、4 つの関数はすべてコンテキストマネージャーとして動作します (
with weave.start_*(...) as obj:) 。コンテキストを抜けると、例外が発生した場合も含めて、スパンを終了し、属性を flush します。TypeScript では、返された各オブジェクトに対して .end() を呼び出します。例外が発生した場合でも確実にクリーンアップするには、try { ... } finally { obj.end(); } を使用してください。
gen_ai.usage.* や gen_ai.agent.name などの他の GenAI semantic-convention attributes を指定すると、追加の表示も有効になりますが、これらは任意です。
前提条件
- W&Bアカウントと APIキー
- OpenAI APIキー
- Python 3.10+ (Python の例を使用する場合)
- Node.js 18+ (TypeScript の例では組み込みの
fetchが必要です)
パッケージをインストール
Weave を初期化する
weave.init() は W&B で認証を行い、エージェントのスパンを Agents ビューに送信する OTel exporter を設定します。チームにそのプロジェクトが存在しない場合、Weave は最初に書き込むときにプロジェクトを作成します。
ツールを定義する
トレースされたマルチターン エージェントを実行する
chatスパン を開始し、ツールを呼び出すかどうかを LLM に選択させます。- LLM がツールをリクエストした場合は、呼び出しを
execute_toolスパン で囲み、その結果を LLM に戻します。 - 2 つ目の
chatスパン を開始し、最終的な回答を生成します。
トークン使用量とコストを記録する
chat スパン には、トークン使用量とモデル ID が含まれます。Weave は usage からトークン数を表示し、usage とモデル ID からコストを算出します。そのため、値が不完全だったり価格を計算できなかったりすると、トレースの他の部分が正しく見えていても、0 in / 0 out tokens や Cost - と表示されます。record(...) を使うと、これらのフィールド (output_messages、response_id、reasoning などを含む) を 1 回の呼び出しで設定できます。適用されるのは、渡したフィールドだけです。
コストを表示するには、次の 2 点が正しく設定されている必要があります。
- 完全な usage。
input_tokensは、キャッシュされたトークンを含む入力全体の合計です。Weave ではキャッシュ読み取りとキャッシュ書き込みをそれぞれの料金で計算し、それらを入力合計から差し引きます。そのため、cache_read_input_tokensとcache_creation_input_tokensは、それらを含む合計input_tokensとは別に報告する必要があります。prompt caching を持つ provider (たとえば Anthropic) では、キャッシュされたトークンが入力の大半を占めることが珍しくないため、これらを省略すると usage とコストがほぼゼロとして表示されます。 - 価格計算可能なモデル ID。 コストはモデルに対するルックアップで決まります。Weave は
response_model(provider が実際に返した正確なモデル) を優先し、なければstart_llmに渡したmodelを使用します。opusやsonnetのような alias では価格計算できずCost -と表示されるため、レスポンスが返す具体的な ID (resp.model) をresponse_modelとして渡してください。
prompt_tokens に含めてカウントされるため、上の例をそのまま使えます。一方、Anthropic ではキャッシュされたトークンが input_tokens とは別に報告されるため、Weave が料金計算に使う合計にそれらを足し戻してください。
Agents ビューでエージェントのトレースを確認する
weave.init() を実行すると、以下を確認できる project へのリンクが出力されます。
- Agents タブに
research-botの行が 1 つ表示されます。 - 3 つのターンを含む 1 つの会話。
- 各ターン (
invoke_agent) には、2 つのchatスパンと、その内側にネストされたexecute_toolスパンがあります。 - 各
chatのトークン数、レイテンシ、モデル、およびメッセージのやり取り全体。
アプリから会話へのリンク
weave.init() は entity と project を保持するクライアントを返し、start_conversation は conversation_id を公開します。
次のステップ
- Weave でエージェントをトレースする 方法と、Weave SDK で利用できる機能やオプションについて学びます。
- エージェントに Weave を統合する方法についてさらに多くのオプションを確認するには、エージェント インテグレーションを選択する を参照してください。