はじめに
まず、スクリプトの先頭でweave.init() を呼び出します。weave.init() の引数は、Weave がトレースを整理するために使用するプロジェクト名です。
Call メタデータをトラッキングする
カスタムメタデータは、Weave UI でトレースをフィルターして分析するのに役立ちます。LangChain の Call のメタデータをトラッキングするには、weave.attributes コンテキストマネージャーを使用します。このコンテキストマネージャーを使用すると、チェーンや単一のリクエストなど、特定のコードブロックにカスタムメタデータを設定できます。
トレース
LLM アプリケーションのトレースを一元的なデータベースに保存すると、開発時にも本番環境でも役立ちます。これらのトレースにより、アプリケーションのデバッグや改善に使用できるデータセットが得られます。 Weave は、LangChain アプリケーションのトレースを自動的に取得します。Weave は、LangChain ライブラリを介して行われる呼び出しをトラッキングしてログし、これには プロンプトテンプレート、チェーン、LLM Call、ツール、agent steps が含まれます。トレースは Weave の Web インターフェースで確認できます。
Call を手動でトレースする
自動トレースに加えて、WeaveTracer コールバックまたは weave_tracing_enabled コンテキストマネージャーを使用して、Call を手動でトレースすることもできます。これらの方法は、LangChain アプリケーション内の個々の部分でリクエスト コールバックを使用するのに似ています。アプリケーション全体ではなく、特定のチェーンや呼び出しをトレースしたい場合に使用します。
以下のセクションでは、それぞれのアプローチについて説明します。
注: Weave はデフォルトで LangChain の Runnables をトレースします。これは weave.init() を呼び出すと有効になります。weave.init() を呼び出す前に環境変数 WEAVE_TRACE_LANGCHAIN を "false" に設定すると、この動作を無効にできます。これにより、アプリケーション内の特定のチェーンや個々のリクエストに対するトレース動作を制御できます。
WeaveTracer を使用する
WeaveTracer コールバックを個々の LangChain コンポーネントに渡すことで、特定のリクエストをトレースできます。
コンテキストマネージャー weave_tracing_enabled を使用する
または、weave_tracing_enabled コンテキストマネージャーを使用して、特定のコードブロックでトレースを有効にできます。
設定
weave.init() を呼び出すと、環境変数 WEAVE_TRACE_LANGCHAIN を "true" に設定することでトレースが有効になります。これにより、Weave は LangChain アプリケーションのトレースを自動的に取得します。この動作を無効にするには、環境変数を "false" に設定します。
LangChain のコールバックとの関係
このセクションでは、Weave のトレースが LangChain のコールバック システムとどのように連携するのかを説明します。これにより、アプリケーションに最適なアプローチを選択できます。自動ロギング
weave.init() が提供する自動ロギングは、LangChain アプリケーション内のすべてのコンポーネントにコンストラクタのコールバックを渡すのに似ています。つまり、Weave は、プロンプトテンプレート、チェーン、LLM calls、ツール、agent steps を含むすべてのやり取りを、アプリケーション全体でグローバルにトラッキングします。
手動ログ記録
手動ログ記録の method (WeaveTracer と weave_tracing_enabled) は、LangChain アプリケーションの個々の部分でリクエストコールバックを使用するのと似ています。これらの method を使うと、Weave がアプリケーションのどの部分をトレースするかをより細かく制御できます。
- コンストラクターコールバック: チェーンまたはコンポーネント全体に適用され、すべてのやり取りを一貫してログ記録します。
- リクエストコールバック: 特定のリクエストに適用され、個別の呼び出しを詳細にトレースできます。
Modelsと評価
異なるユースケースにわたって LLM を整理して評価することは、プロンプト、モデルの設定、推論パラメーターなどのコンポーネントが増えるほど難しくなります。weave.Model を使用すると、system prompt や使用するモデルといった実験の詳細を記録して整理できるため、イテレーションを比較しやすくなります。
以下のセクションでは、LangChain の チェーン を weave.Model としてラップし、それを評価する方法を示します。
以下の例では、LangChain の チェーン を WeaveModel でラップする方法を示します。
Weave Models は、serve や 評価 でも使用できます。
評価
評価を使うと、モデルのパフォーマンスを測定できます。weave.Evaluation クラスを使うことで、特定のタスクやデータセットに対してモデルがどの程度うまく機能するかを把握できます。これにより、異なるモデルやアプリケーションの各イテレーションを比較しやすくなります。以下の例では、前述のモデルを評価する方法を示します。
既知の問題
非同期 Call のトレース: LangChain のAsyncCallbackManager 実装のバグにより、非同期 Call が正しい順序でトレースされません。Weave はこの問題を修正するための PR を提出しています。そのため、LangChain の Runnables で ainvoke、astream、abatch メソッドを使用すると、トレース内の Call の順序が正確でない場合があります。