はじめに
まず、スクリプトの冒頭でweave.init() を呼び出します。weave.init() の引数にはプロジェクト名を指定します。Weave はこのプロジェクト名を使用してトレースを整理します。
Call のメタデータをトラッキングする
カスタムメタデータを使用すると、Weights & Biases の UI でトレースをフィルターしたり分析したりできます。LangChain の Call からメタデータをトラッキングするには、weave.attributes コンテキストマネージャーを使用します。このコンテキストマネージャーでは、チェーンや単一のリクエストなど、特定のコードブロックを対象にカスタムメタデータを設定できます。
トレース
LLM アプリケーションのトレースを一元的なデータベースに保存しておくと、開発と本番運用の両方で役立ちます。蓄積したトレースは、アプリケーションのデバッグや改善に使用できるデータセットになります。 Weave は、LangChain アプリケーションのトレースを自動的に取得します。プロンプトテンプレート、チェーン、LLM Call、ツール、エージェントのステップなど、LangChain ライブラリを介して行われた Call をトラッキングしてログします。トレースは Weave の Web インターフェースで確認できます。
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 を詳細にトレースします。
モデルと評価
さまざまなユースケースで LLM を整理・評価する作業は、プロンプト、モデルの設定、推論パラメーターなどのコンポーネントが増えるほど難しくなります。weave.Model を使用すると、システムプロンプトや使用するモデルといった実験の詳細を取得して整理できるため、反復処理の比較が容易になります。
以下のセクションでは、LangChain のチェーンを weave.Model としてラップし、評価する方法を説明します。
次の例では、LangChain のチェーンを WeaveModel でラップしています。
Weave モデルは、serve や 評価 と組み合わせて使用することもできます。
評価
評価を使用すると、モデルのパフォーマンスを測定できます。weave.Evaluation クラスは、特定のタスクやデータセットでモデルがどの程度のパフォーマンスを発揮するかを取得します。これにより、異なるモデルやアプリケーションの反復処理を比較しやすくなります。次の例では、前述のモデルを評価する方法を示します。
既知の問題
非同期 Call のトレース: LangChain のAsyncCallbackManager の実装にバグがあるため、非同期 Call が正しい順序でトレースされません。Weave はこの問題を修正する PR を提出済みです。この問題により、LangChain の Runnables で ainvoke、astream、abatch メソッドを使用すると、トレース内の Call の順序が正しく表示されない場合があります。