これは対話型ノートブックです。ローカルで実行するか、次のリンクを使用できます。
- シンプルな LLM call と応答のモックを作成し、Weave にログします。
- より複雑な LLM call と応答のモックを作成し、Weave にログします。
- ログされたトレースに対してサンプルの検索クエリを実行します。
ログされたトレースを表示
このガイドのコードを実行したときに作成される Weave トレースはすべて、Weave プロジェクト (team_id\project_id で指定) の Traces タブに移動し、トレース名を選択すると表示できます。
始める前に、前提条件を完了してください。
前提条件: 変数とエンドポイントを設定する
トレースをログする前に、Service API のエンドポイントを設定し、W&B の認証情報を使用して認証する必要があります。 以下のコードは、Service API へのアクセスに使用する URL エンドポイントを設定します。https://trace.wandb.ai/call/starthttps://trace.wandb.ai/call/endhttps://trace.wandb.ai/calls/stream_query
project_id: トレースをログする先の W&B プロジェクト名。team_id: W&B チーム名。wandb_token: W&B APIキー。
シンプルなトレース
以下のセクションでは、シンプルなトレースを作成する手順を順に説明します:シンプルなトレースを開始する
次のコードは、サンプルの LLM callpayload_start を作成し、url_start エンドポイントを使って Weave にログします。payload_start オブジェクトは、クエリ Why is the sky blue? を含む OpenAI の gpt-4o への call を模倣しています。
成功すると、このコードはトレースが開始されたことを示すメッセージを出力します。
シンプルなトレースを終了する
シンプルなトレースを完了するには、次のコードでサンプルの LLM callpayload_end を作成し、url_end エンドポイントを使って Weave にログします。payload_end オブジェクトは、クエリ Why is the sky blue? に対する OpenAI’s gpt-4o からの応答を模倣したものです。このオブジェクトは、Weave ダッシュボードの Trace view で料金サマリー情報と Chat Completion が生成されるように整形されています。
成功すると、このコードはトレースが完了したことを示すメッセージを出力します:
複雑なトレース
シンプルな単一ステップのトレースをログしたので、以下のセクションでは、複数の操作からなるRAGルックアップのように、子スパンを含むより複雑なトレースを作成する手順を説明します。複雑なトレースを開始する
次のコードは、複数のスパンを含む、より複雑なトレースを作成する方法を示しています。たとえば、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) を指定します。
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: 結果からフィードバックデータを除外します。