メインコンテンツへスキップ
このガイドでは、Weave を使用して LlamaIndex アプリケーションをトレース、デバッグ、評価する方法を説明します。読み進めることで、Weave が LlamaIndex Python library を介して行われる Call をどのように自動的に取得するかを学べます。これにより、カスタムのロギング コードを書かなくても、RAG パイプライン、エージェントのステップ、LLM Call をモニターできます。このガイドは、デバッグ、パフォーマンス分析、評価のためにワークフローの可視性を必要とする、LlamaIndex で LLM アプリケーションを構築する開発者を対象としています。 LLM を扱う際、デバッグは避けられません。モデルの Call が失敗した場合、output の形式が正しくない場合、またはネストされたモデルの Call によって混乱が生じた場合など、問題を正確に特定するのは難しいことがあります。LlamaIndex アプリケーションは複数のステップと LLM Call の呼び出しで構成されることが多く、チェーンやエージェントの内部動作を理解することが重要です。 Weave は、LlamaIndex アプリケーションのトレースを自動的に取得することで、このプロセスを効率化します。これにより、アプリケーションのパフォーマンスをモニターして分析できるため、LLM ワークフローのデバッグや最適化に役立ちます。Weave は評価ワークフローにも役立ちます。

はじめに

まず、スクリプトの先頭で weave.init() を呼び出します。これにより Weave が初期化され、以降の LlamaIndex の Call のトレース収集が開始されます。weave.init() の引数には、トレースの整理に役立つプロジェクト名を指定します。
前の例では、内部で OpenAI への Call を行う基本的な LlamaIndex のチャットエンジンを作成します。このコードを実行すると、Weave がチャットエンジンの実行トレースを取得し、Weave の Web インターフェースで確認できるようになります。次のトレースを参照してください。 simple_llamaindex.png

トレース

このセクションでは、Weave が RAG パイプラインのような複数 step の LlamaIndex workflow をどのように取得するかを説明します。 LlamaIndex は、データを LLMs に簡単に接続できることで知られています。基本的な RAG application には、埋め込み step、検索 step、応答生成 step が必要です。複雑さが増すにつれて、開発時と本番環境の両方で、個々の step のトレースを中央データベースに保存することが重要になります。 これらのトレースは、application のデバッグや改善に不可欠です。Weave は、プロンプトテンプレート、LLM Call、tool、エージェント steps を含め、LlamaIndex ライブラリを通じて行われるすべての calls を自動的にトラッキングします。トレースは Weave の Web インターフェースで確認できます。 以下の例は、LlamaIndex’s Starter Tutorial (OpenAI) にある基本的な RAG パイプラインを示しています。
トレースタイムラインは、“イベント” をキャプチャするだけでなく、該当する場合は実行時間、コスト、token 数も記録します。トレースを掘り下げると、各 step の inputs と outputs を確認できます。 llamaindex_rag.png

ワンクリックでの可観測性

このセクションでは、Weave インテグレーションが LlamaIndex の組み込み可観測性システムにどのように組み込まれているかを説明します。そのため、ハンドラーを手動で設定する必要はありません。 LlamaIndex は、本番環境で筋の通った LLM アプリケーションを構築できるように、ワンクリックでの可観測性を提供しています。 Weave インテグレーションでは、LlamaIndex のこの機能を活用し、WeaveCallbackHandler()llama_index.core.global_handler に自動で設定します。そのため、LlamaIndex と Weave を使用するユーザーが行う必要があるのは、weave.init([NAME_OF_PROJECT]) で Weave の run を初期化することだけです。

より簡単に実験できるように Model を作成する

プロンプト、モデルの設定、推論パラメーターなど、複数のコンポーネントを含むアプリケーションで、さまざまなユースケースにわたって LLM を整理し評価するのは簡単ではありません。weave.Model を使用すると、システムプロンプトや使用するモデルといった実験の詳細を取得して整理できるため、異なるイテレーションを比較しやすくなります。 次の例では、weave/data フォルダー内のデータを使用して、LlamaIndex のクエリエンジンを WeaveModel として構築する方法を示します。
weave.Model を継承した SimpleRAGPipeline クラスは、この RAG パイプラインの重要なパラメーターをまとめています。query メソッドを weave.op() でデコレートすると、トレースが有効になります。この構造にしておくことで、Weave で RAG パイプラインのさまざまな設定をバージョン管理し、比較し、評価できるようになります。 llamaindex_model.png

weave.Evaluation を使った評価

このセクションでは、固定されたデータセットに対するモデルのパフォーマンスを測定し、イテレーションを定量的に比較する方法を示します。 評価を行うと、アプリケーションのパフォーマンスを測定できます。weave.Evaluation クラスを使うことで、特定のタスクやデータセットに対してモデルがどの程度うまく機能するかを把握できるため、異なるモデルやアプリケーションの各イテレーションを比較しやすくなります。次の例では、前のセクションで作成したモデルを評価する方法を示します。
この評価は、前のセクションの例を基にしています。weave.Evaluation を使って評価するには、評価用データセット、scorer 関数、weave.Model が必要です。これらの要件は、次の3つの主要コンポーネントに適用されます。
  • 評価サンプルの dict のキーは、scorer 関数の引数および weave.Modelpredict method の引数と一致している必要があります。
  • weave.Model には、predictinfer、または forward という名前の method が必要です。トレースのため、この method は weave.op() でデコレートする必要があります。
  • scorer 関数は weave.op() でデコレートされており、output という名前付き引数を持つ必要があります。
llamaindex_evaluation.png Weave を LlamaIndex とインテグレーションすることで、LLM アプリケーションの包括的なログすることとモニタリングが可能になり、評価を通じてデバッグとパフォーマンスの最適化を効率化できます。