メインコンテンツへスキップ
これは対話型ノートブックです。ローカルで実行するか、次のリンクを使用できます。
このノートブックでは、W&B Weave Service API を使用してトレースを Weave にログする方法を学びます。
  1. シンプルな LLM call と応答のモックを作成し、Weave にログします。
  2. より複雑な LLM call と応答のモックを作成し、Weave にログします。
  3. ログされたトレースに対してサンプルの検索クエリを実行します。
ログされたトレースを表示 このガイドのコードを実行したときに作成される Weave トレースはすべて、Weave プロジェクト (team_id\project_id で指定) の Traces タブに移動し、トレース名を選択すると表示できます。
始める前に、前提条件を完了してください。

前提条件: 変数とエンドポイントを設定する

トレースをログする前に、Service API のエンドポイントを設定し、W&B の認証情報を使用して認証する必要があります。 以下のコードは、Service API へのアクセスに使用する URL エンドポイントを設定します。 さらに、次の変数も設定する必要があります。
  • project_id: トレースをログする先の W&B プロジェクト名。
  • team_id: W&B チーム名。
  • wandb_token: W&B APIキー

シンプルなトレース

以下のセクションでは、シンプルなトレースを作成する手順を順に説明します:
  1. シンプルなトレースを開始する
  2. シンプルなトレースを終了する

シンプルなトレースを開始する

次のコードは、サンプルの LLM call payload_start を作成し、url_start エンドポイントを使って Weave にログします。payload_start オブジェクトは、クエリ Why is the sky blue? を含む OpenAI の gpt-4o への call を模倣しています。 成功すると、このコードはトレースが開始されたことを示すメッセージを出力します。

シンプルなトレースを終了する

シンプルなトレースを完了するには、次のコードでサンプルの LLM call payload_end を作成し、url_end エンドポイントを使って Weave にログします。payload_end オブジェクトは、クエリ Why is the sky blue? に対する OpenAI’s gpt-4o からの応答を模倣したものです。このオブジェクトは、Weave ダッシュボードの Trace view で料金サマリー情報と Chat Completion が生成されるように整形されています。 成功すると、このコードはトレースが完了したことを示すメッセージを出力します:

複雑なトレース

シンプルな単一ステップのトレースをログしたので、以下のセクションでは、複数の操作からなるRAGルックアップのように、子スパンを含むより複雑なトレースを作成する手順を説明します。
  1. 複雑なトレースを開始する
  2. RAGドキュメントのルックアップ用の子スパンを追加する
  3. LLM completion call用の子スパンを追加する
  4. 複雑なトレースを終了する

複雑なトレースを開始する

次のコードは、複数のスパンを含む、より複雑なトレースを作成する方法を示しています。たとえば、Retrieval-Augmented Generation (RAG) のルックアップを行い、その後に LLM の call を実行するケースです。最初の部分では、操作を表す親トレース (payload_parent_start) を初期化します。この場合の操作は、ユーザーのクエリ Can you summarize the key points of this document? を処理することです。 payload_parent_start オブジェクトは、複数の step から成る ワークフロー の最初の step を模しており、url_start エンドポイントを使用してその操作を Weave にログします。 成功すると、このコードは親 call がログされることを示すメッセージを出力します。

RAG ドキュメントルックアップ用の子スパンを追加する

次のコードは、前の step で開始した複雑な親トレースに子スパンを追加する方法を示しています。この step では、ワークフローにおける RAG ドキュメントルックアップのサブ 操作 を表現しています。 子トレースは payload_child_start オブジェクトで開始され、これには次の内容が含まれます。
  • trace_id: この子スパンを親トレースに関連付けます。
  • parent_id: この子スパンを親 操作 に関連付けます。
  • inputs: 検索クエリをログします。例: "探しているドキュメントの検索クエリです。"
url_start エンドポイント への call が成功すると、子 call が開始され、完了したことを示すメッセージが出力されます。

LLM completion call の子スパンを追加する

次のコードは、複雑な親トレースに別の子スパンを追加し、LLM completion call を表現する方法を示しています。この step では、前の RAG operation で取得したドキュメントコンテキストに基づく LLM の応答生成をモデル化します。 LLM completion トレースは payload_child_start オブジェクトで開始され、これには次が含まれます。
  • trace_id: この子スパンを親トレースに紐付けます。
  • parent_id: この子スパンを親ワークフローに関連付けます。
  • inputs: ユーザークエリと追加されたドキュメントコンテキストを含む、LLM への入力メッセージをログします。
  • model: この operation に使用するモデル (gpt-4o) を指定します。
成功すると、コードは LLM の子スパンのトレースが開始されたことを示すメッセージを出力します。
処理が完了した後、payload_child_end オブジェクトは、LLM が生成した応答を output フィールドにログして、トレースを終了します。コードは Usage のサマリー情報もログします。 成功すると、コードは LLM の子スパンのトレースが開始されて終了したことを示すメッセージを出力します。

複雑なトレースを終了する

次のコードは、親トレースを完了してワークフローの終了を示す方法を示しています。この step では、すべての子 スパン (たとえば、RAG ルックアップ や LLM completion) の結果を集約し、最終的な出力とメタデータをログします。 トレースは payload_parent_end オブジェクト を使用して完了します。これには次が含まれます。
  • id: 最初に親トレースを開始したときの parent_call_id
  • output: ワークフローの最終出力を表します。
  • summary: ワークフローの使用状況データを集約します。
  • prompt_tokens: すべてのプロンプトで使用された token の合計数。
  • completion_tokens: すべての応答で生成された token の合計数。
  • total_tokens: ワークフロー全体の token 総数。
  • requests: 実行された Request の総数 (この場合は 1) 。
成功すると、コードは次を出力します。

ルックアップクエリを実行する

Weave にログされたトレースは、Service API を使用してプログラムからクエリできます。以下のコードは、前の例で作成したトレースをクエリし、inputs.model フィールドが gpt-4o と等しいトレースだけをフィルタリングする方法を示しています。 query_payload オブジェクトには、次の内容が含まれます。
  • project_id: クエリ対象のチームとプロジェクトを識別します。
  • filter: クエリが トレースルート (最上位のトレース) のみを返すようにします。
  • query: $expr 演算子を使用してフィルタリングロジックを定義します。
    • $getField: inputs.model フィールドを取得します。
    • $literal: inputs.model"gpt-4o" に等しいトレースに一致します。
  • limit: クエリ結果を 10,000 件に制限します。
  • offset: 先頭の結果からクエリを開始します。
  • sort_by: started_at タイムスタンプの降順で結果を並べます。
  • include_feedback: 結果からフィードバックデータを除外します。
クエリが成功すると、応答にはクエリパラメーターに一致するトレースデータが含まれます。