Skip to main content
Colab で開く Weave は、LangChain Python ライブラリ経由で行われる Call をトラッキングしてログします。 LLM を扱ううえで、デバッグは避けて通れない作業です。モデルの Call が失敗する、出力の形式が崩れる、ネストされたモデルの Call で処理の流れが分かりにくくなるなど、問題の原因を特定するのは簡単ではありません。LangChain アプリケーションは複数のステップと LLM Call の invocation で構成されることが多いため、チェーンやエージェントの内部動作を把握しておくことが重要です。 Weave は、LangChain アプリケーションのトレースを自動的に取得します。これにより、アプリケーションのパフォーマンスを監視・分析できるため、LLM ワークフローのデバッグや最適化が容易になります。 このガイドは、LangChain アプリケーションを開発していて、Weave でトレース、評価、可観測性を導入したい開発者を対象としています。自動トレースの有効化、メタデータの付与、トレースの手動制御、そして評価に向けて LangChain チェーンを Weave モデルとしてラップする方法を順に説明します。

はじめに

まず、スクリプトの冒頭で weave.init() を呼び出します。weave.init() の引数にはプロジェクト名を指定します。Weave はこのプロジェクト名を使用してトレースを整理します。

Call のメタデータをトラッキングする

カスタムメタデータを使用すると、Weights & Biases の UI でトレースをフィルターしたり分析したりできます。LangChain の Call からメタデータをトラッキングするには、weave.attributes コンテキストマネージャーを使用します。このコンテキストマネージャーでは、チェーンや単一のリクエストなど、特定のコードブロックを対象にカスタムメタデータを設定できます。
Weave は、LangChain の Call のトレースにメタデータを紐付けて自動的にトラッキングします。メタデータは Weave の Web インターフェースで確認できます。 LangChain のトレースのメタデータ属性を表示している Weights & Biases の UI

トレース

LLM アプリケーションのトレースを一元的なデータベースに保存しておくと、開発と本番運用の両方で役立ちます。蓄積したトレースは、アプリケーションのデバッグや改善に使用できるデータセットになります。 Weave は、LangChain アプリケーションのトレースを自動的に取得します。プロンプトテンプレート、チェーン、LLM Call、ツール、エージェントのステップなど、LangChain ライブラリを介して行われた Call をトラッキングしてログします。トレースは Weave の Web インターフェースで確認できます。 LangChain のトレースを表示している Weights & Biases の UI

Call を手動でトレースする

自動トレースに加えて、WeaveTracer コールバックまたは weave_tracing_enabled コンテキストマネージャーを使用して、Call を手動でトレースすることもできます。これらの方法は、LangChain アプリケーションの個々の部分でリクエストコールバックを使用するのと似ています。アプリケーション全体ではなく、特定のチェーンや invocation だけをトレースしたい場合に使用してください。 以下のセクションでは、それぞれの方法について説明します。 注: Weave はデフォルトで LangChain の Runnables をトレースします。この機能は weave.init() を呼び出すと有効になります。この動作を無効にするには、weave.init() を呼び出す前に環境変数 WEAVE_TRACE_LANGCHAIN を "false" に設定します。これにより、アプリケーション内の特定のチェーン、さらには個々のリクエスト単位でトレース動作を制御できます。

WeaveTracer を使用する

WeaveTracer コールバックを個々の LangChain コンポーネントに渡すと、特定のリクエストをトレースできます。

weave_tracing_enabled コンテキストマネージャーを使用する

weave_tracing_enabled コンテキストマネージャーを使用して、特定のコードブロックでのみトレースを有効にすることもできます。

設定

weave.init() を呼び出すと、Weave は環境変数 WEAVE_TRACE_LANGCHAIN を "true" に設定し、トレースを有効にします。これにより、LangChain アプリケーションのトレースが Weave によって自動的に取得されます。この動作を無効にするには、この環境変数を "false" に設定してください。

LangChain のコールバックとの関係

このセクションでは、Weave のトレースが LangChain のコールバックシステムとどのように連携するかを説明します。アプリケーションに最適なアプローチを選択する際の参考にしてください。

自動ログ

weave.init() による自動ログは、LangChain アプリケーション内のすべてのコンポーネントにコンストラクターコールバックを渡すのと同様の効果があります。つまり Weave は、プロンプトテンプレート、チェーン、LLM Call、ツール、エージェントのステップなど、アプリケーション全体のあらゆるやり取りをグローバルにトラッキングします。

手動でのログ

手動でログする方法 (WeaveTracer と weave_tracing_enabled) は、LangChain アプリケーションの個々の部分でリクエストコールバックを使用する方法に似ています。これらの方法を使用すると、アプリケーションのどの部分を Weave でトレースするかをより細かく制御できます。
  • コンストラクターコールバック: チェーンまたはコンポーネント全体に適用され、すべてのやり取りを一貫してログします。
  • リクエストコールバック: 特定のリクエストに適用され、個々の invocation を詳細にトレースします。
Weave を LangChain と統合すると、LLM アプリケーションのログとモニタリングが可能になり、デバッグやパフォーマンスのチューニングが容易になります。 詳細については、LangChain のドキュメントを参照してください。

モデルと評価

さまざまなユースケースで LLM を整理・評価する作業は、プロンプト、モデルの設定、推論パラメーターなどのコンポーネントが増えるほど難しくなります。weave.Model を使用すると、システムプロンプトや使用するモデルといった実験の詳細を取得して整理できるため、反復処理の比較が容易になります。 以下のセクションでは、LangChain のチェーンを weave.Model としてラップし、評価する方法を説明します。 次の例では、LangChain のチェーンを WeaveModel でラップしています。
このコードで作成したモデルは、Weights & Biases UI で可視化できます。 LangChain チェーンを Weave モデルとしてラップした状態を表示している Weights & Biases UI Weave モデルは、serve や 評価 と組み合わせて使用することもできます。

評価

評価を使用すると、モデルのパフォーマンスを測定できます。weave.Evaluation クラスは、特定のタスクやデータセットでモデルがどの程度のパフォーマンスを発揮するかを取得します。これにより、異なるモデルやアプリケーションの反復処理を比較しやすくなります。次の例では、前述のモデルを評価する方法を示します。
このコードを実行すると評価トレースが生成され、Weights & Biases UI で可視化できます。 LangChain の評価トレースを表示している Weights & Biases UI

既知の問題

非同期 Call のトレース: LangChain の AsyncCallbackManager の実装にバグがあるため、非同期 Call が正しい順序でトレースされません。Weave はこの問題を修正する PR を提出済みです。この問題により、LangChain の Runnables で ainvoke、astream、abatch メソッドを使用すると、トレース内の Call の順序が正しく表示されない場合があります。
最終更新日 2026年9月30日