Skip to main content
Try in Colab · GitHub source Weave SDK を使用すると、人気の SDK や custom harnesses で構築されたエージェントをトレースできます。このクイックスタートでは、カスタム構築のマルチターンエージェントに Weave を手動で統合して、OpenTelemetry スパンを emit および取得する方法を説明します。エージェント向け Weave の概念的な理解については、Trace your agents を参照してください。 SDK や harnesses (Claude Agent SDK や Codex など) と Weave を統合したい場合は、エージェントインテグレーションを選択する を参照してください。Weave は、迅速な統合のために、いくつかの agent-building SDKs および agent harnesses に autopatches します。

学習内容

このクイックスタートを終えると、Weave と互換性のある OTel スパンを出力する、動作可能なマルチターンエージェントが完成します。また、Weave が会話、ターン、LLM Call、ツール呼び出しをエージェントのコードにどのように対応付けるかを理解し、独自のカスタムエージェントにも同じパターンを適用できるようになります。 このガイドのコードでは、Wikipedia で情報を調べられる小規模な調査エージェントを構築します。3 つの質問 (3 ターン) を行い、回答を得るために Wikipedia を検索するタイミングを LLM で判断します。Weave はすべてのステップ (会話、各質問、各 AI 応答、各 Wikipedia ルックアップ) を記録するため、Weave Agents ビューで何が起きたかを確認できます。 このガイドでは、次の方法を説明します。
  • weave.init() を使用して、エージェントのトレース用に Weave を初期化します。
  • start_conversation / startConversation と start_turn / startTurn を使用して、会話とターンを開始します。
  • start_llm / startLLM で LLM Call をラップし、使用量を記録します。
  • start_tool / startTool でツール実行をラップし、結果を記録します。
  • トークン数とコストがレンダリングされるように、すべてのトークン使用量と料金を算出できるモデルを記録します。
  • Agents ビューで、記録された会話、ターン、ツール呼び出しを確認します。

Weave SDK がエージェントでどのように動作するか

Weave SDK には、エージェント向けの汎用 OTel インジェストシステムが含まれており、Weave はエージェントのコード内の任意の OTel スパンから情報を取得できます。ただし、Weights & Biases UI の Agents ビューでエージェントのトレースをレンダリングするには、Weave は以下のスパンに対して特別な処理が必要です。 Python では、4 つの関数すべてがコンテキストマネージャーとして機能します (with weave.start_*(...) as obj:)。終了時に、スパンと属性をフラッシュし、例外時も含めて終了します。TypeScript では、返された各オブジェクトで .end() を呼び出します。例外時のクリーンアップを保証するために try { ... } finally { obj.end(); } を使用してください。 その他の GenAI semantic-convention attributes、例えば gen_ai.usage.* や gen_ai.agent.name は追加のレンダリングを可能にしますが、オプションです。

前提条件

  • CoreWeave Forge アカウントと APIキー。
  • OpenAI APIキー。
  • Python 3.10 以上 (Python の例の場合) 。
  • Node.js 18 以上 (TypeScript の例では組み込みの fetch が必要です) 。

パッケージをインストールする

以下のパッケージを開発環境にインストールしてください:

Weave の初期化

weave.init() は W&B で認証を行い、Agents ビューにエージェント スパンを送信する OTel エクスポーターを設定します。project がチームに存在しない場合、Weave は初めて書き込むときに作成します。

ツールを定義する

次のコードは、エージェントの Wikipedia 検索ツールと、ツールをいつ、どのように使用するかを指定する OpenAI ツールスキーマを定義します。

トレースするマルチターンエージェントを実行する

ツールと Weave の初期化が完了したら、次のステップではそれらを組み合わせて完全なエージェントループを構築します。このループは、会話、ターン、LLM Call、ツール呼び出しがどのようにネストするかを示します。 次の例では、1 つの会話で 3 つのターンを実行します。各ターンでは、次の処理を行います。
  1. chat スパンを開始し、ツールを呼び出すかどうかを LLM に判断させます。
  2. LLM がツールをリクエストした場合、呼び出しを囲む execute_tool スパンを開始し、結果を LLM に返します。
  3. 2 つ目の chat スパンを開始して、最終回答を生成します。

トークン使用量とコストを記録する

各 chat スパンには、トークン使用量とモデル ID が含まれます。Weave は使用量からトークン数をレンダリングし、使用量とモデル ID からコストを算出します。そのため、値が不完全であったり価格を算出できなかったりすると、トレースの他の部分が正しく見えていても、トークンが 0 in / 0 out、またはコストが Cost - と表示されます。record(...) を使用すると、これらのフィールド (output_messages、response_id、reasoning なども含む) を 1 回の呼び出しで設定できます。適用されるのは、渡したフィールドのみです。 コストを表示するには、次の 2 点が正しく設定されている必要があります。
  • 完全な使用量。 input_tokens は、キャッシュされたトークンを含む入力の合計です。Weave はキャッシュ読み取りとキャッシュ書き込みをそれぞれ独自の料金で計算し、入力の合計から差し引きます。そのため、cache_read_input_tokens と cache_creation_input_tokens は、それらを含む合計の input_tokens に加えて報告する必要があります。プロンプトキャッシュを備えたプロバイダー (Anthropic など) では、キャッシュされたトークンが入力の大半を占めることが多いため、これらを省略すると、使用量とコストがほぼゼロとしてレンダリングされます。
  • 価格を算出可能なモデル ID。 コストはモデルをキーにしたルックアップで求められます。Weave は response_model (プロバイダーが実際に提供したモデル) を優先し、指定がない場合は start_llm に渡した model を使用します。opus や sonnet などのエイリアスでは価格を算出できず Cost - とレンダリングされるため、応答で返される具体的な ID (resp.model) を response_model として渡してください。
OpenAI はキャッシュされたトークンを prompt_tokens に含めてカウントするため、上記の例をそのまま適用できます。Anthropic はキャッシュされたトークンを input_tokens とは別に報告するため、Weave が価格計算に使用する合計にそれらを加算してください。

エージェントのトレースを Agents ビューで確認する

weave.init() が実行されると、project へのリンクが出力され、以下を確認できます:
  • research-bot の Agents タブに表示される行。
  • 3 つのターンからなる 1 つの会話。
  • 各ターン (invoke_agent) に含まれる 2 つの chat スパンと、内部にネストされた execute_tool スパン。
  • 各 chat のトークン数、レイテンシー、モデル、および完全なメッセージ交換。
任意のターンをクリックして、入力、出力、ツールの引数、ツール結果を検査します。 自分の UI から Weave Agents ビュー内の会話へのディープリンクを作成するには、entity、project、および会話 ID から URL を構築します。weave.init() は entity と project を保持するクライアントを返し、start_conversation は conversation_id を公開します。

次のステップ

最終更新日 2026年9月30日