メインコンテンツへスキップ
Colab で開く Weave は、LangChain Python ライブラリを介して行われるすべての呼び出しを、簡単にトラッキングしてログできるように設計されています。 LLM を扱う際、デバッグは避けられません。モデルの呼び出しが失敗したり、出力の形式が崩れたり、ネストされたモデル呼び出しが混乱を招いたりすると、問題の特定が難しくなることがあります。LangChain アプリケーションは多くの場合、複数の step と LLM 呼び出しで構成されるため、チェーンやエージェントの内部動作を理解することが重要です。 Weave は、LangChain アプリケーションのトレースを自動的に取得することで、このプロセスを簡素化します。これにより、アプリケーションのパフォーマンスを監視および分析でき、LLM ワークフローのデバッグと最適化が容易になります。

はじめに

まず、スクリプトの先頭で weave.init() を呼び出します。weave.init() の引数にはプロジェクト名を指定します。これは、トレースを整理するのに役立ちます。

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

LangChain の Call のメタデータをトラッキングするには、weave.attributes コンテキストマネージャーを使用できます。このコンテキストマネージャーを使用すると、チェーンや単一のリクエストなど、特定のコードブロックにカスタムメタデータを設定できます。
Weave は、LangChain Call のトレースに関連付けてメタデータを自動的にトラッキングします。メタデータは、以下に示すように Weave の Web インターフェースで確認できます。 langchain_attributes.png

トレース

LLM アプリケーションのトレースを一元的なデータベースに保存することは、開発時にも本番環境でも非常に重要です。これらのトレースは、有用なデータセットとして機能し、アプリケーションのデバッグや改善に欠かせません。 Weave は、LangChain アプリケーションのトレースを自動的に取得します。LangChain ライブラリを介して行われるすべての呼び出しをトラッキングしてログし、これには prompt templates、chains、LLM calls、tools、agent steps が含まれます。トレースは Weave の Web インターフェースで確認できます。 langchain_trace.png

calls を手動でトレースする

自動トレースに加えて、WeaveTracer コールバックまたは weave_tracing_enabled コンテキストマネージャーを使用して、calls を手動でトレースできます。これらの方法は、LangChain アプリケーションの個々の部分でリクエストコールバックを使用する場合に似ています。 注: Weave はデフォルトで LangChain の Runnables をトレースし、これは weave.init() を呼び出すと有効になります。weave.init() を呼び出す前に、環境変数 WEAVE_TRACE_LANGCHAIN"false" に設定することで、この動作を無効にできます。これにより、アプリケーション内の特定の chain や個々のリクエストに対するトレース動作を制御できます。

WeaveTracer を使用する

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

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

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

設定

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

LangChain Callbacks との関連

自動ロギング

weave.init() が提供する自動ロギングは、LangChain アプリケーション内のすべてのコンポーネントにコンストラクタのコールバックを渡すのに似ています。つまり、プロンプトテンプレート、チェーン、LLM calls、ツール、agent steps を含むすべてのやり取りが、アプリケーション全体でグローバルにトラッキングされます。

手動ログ記録

手動ログ記録の method (WeaveTracerweave_tracing_enabled) は、LangChain アプリケーションの個々の部分でリクエストコールバックを使用するのと似ています。これらの method を使うと、アプリケーションのどの部分をトレースするかをより細かく制御できます。
  • コンストラクターコールバック: チェーンまたはコンポーネント全体に適用され、すべてのやり取りを一貫してログ記録します。
  • リクエストコールバック: 特定のリクエストに適用され、個別の呼び出しを詳細にトレースできます。
Weave を LangChain と統合することで、LLM アプリケーション全体のログ記録とモニタリングを確実に行えるようになり、デバッグやパフォーマンスの最適化が容易になります。 詳しくは、LangChain documentationを参照してください。

Modelsと評価

さまざまなユースケースのアプリケーションで LLM を整理して評価するのは、プロンプト、モデルの設定、推論パラメーターなど複数のコンポーネントが関わるため、簡単ではありません。weave.Model を使用すると、system prompt や使用するモデルといった実験の詳細を記録して整理できるため、異なるイテレーションを比較しやすくなります。 以下の例では、LangChain の チェーン を WeaveModel でラップする方法を示します。
このコードは、Weave UI で可視化できるモデルを作成します。 langchain_model.png Weave Models は、serve評価 でも使用できます。

評価

評価を使うと、モデルのパフォーマンスを測定できます。weave.Evaluation クラスを使うことで、特定のタスクやデータセットに対してモデルがどの程度うまく機能するかを把握できるため、異なるモデルやアプリケーションの各イテレーションを比較しやすくなります。以下の例では、作成したモデルを評価する方法を示します。
このコードは、Weave UIで可視化できる評価トレースを生成します。 langchain_evaluation.png WeaveをLangchainと連携することで、LLMアプリケーションのログ収集と監視を包括的に行え、デバッグやパフォーマンスの最適化を容易にできます。

既知の問題

  • 非同期 call のトレース - Langchain の AsyncCallbackManager 実装のバグにより、非同期 call が正しい順序でトレースされません。この問題を修正するための PR を提出しています。したがって、Langchain Runnables で ainvokeastreamabatch method を使用すると、trace 内の call の順序が正確でない可能性があります。