Skip to main content
検索拡張生成(Retrieval Augmented Generation、RAG)は、カスタム知識ベースにアクセスできる生成AIアプリケーションを構築する一般的な方法です。 この例では、ドキュメントを取得するための検索ステップを含む例を示します。これを追跡することで、アプリをデバッグし、LLMコンテキストに取り込まれたドキュメントを確認できます。 また、LLMジャッジを使用して評価する方法も示します。 Evals hero 以下をチェックしてください RAG++コース エンジニア向けの実践的なRAGテクニックについてより高度に学ぶには、Weights & Biases、CohereおよびWeaviateによる本番環境対応のソリューションを学び、パフォーマンスを最適化し、コストを削減し、アプリケーションの精度と関連性を向上させることができます。

1. 知識ベースの構築

まず、記事の埋め込みを計算します。通常は記事の埋め込みを一度計算し、埋め込みとメタデータをデータベースに保存しますが、ここでは簡単にするためにスクリプトを実行するたびに計算しています。

2. RAGアプリの作成

次に、検索関数をget_most_relevant_document デコレータでラップし、weave.op() クラスを作成します。Model を呼び出してweave.init('rag-qa') 関数のすべての入力と出力を追跡し、後で検査できるようにします。

3. LLMジャッジによる評価

アプリケーションを評価する簡単な方法がない場合、一つのアプローチはLLMを使用してその側面を評価することです。ここでは、LLMジャッジを使用してコンテキストの精度を測定しようとする例を示します。与えられた回答に到達する際にコンテキストが有用だったかどうかを確認するようにプロンプトを設定します。このプロンプトは人気のある RAGASフレームワークから拡張されています。

スコアリング関数の定義

前回の 評価パイプラインの構築チュートリアル と同様に、アプリをテストするための一連のサンプル行とスコアリング関数を定義します。スコアリング関数は1行を取り、評価します。入力引数は行の対応するキーと一致する必要があるため、question はここでは行辞書から取得されます。output はモデルの出力です。モデルへの入力は、その入力引数に基づいて例から取得されるため、question もここで同様です。私たちは async 関数を使用しているため、並列で高速に実行されます。asyncについての簡単な紹介が必要な場合は、こちらで見つけることができます。

Optional: Defining a Scorer クラス

一部のアプリケーションでは、カスタム評価クラスを作成したい場合があります - 例えば、特定のパラメータ(チャットモデル、プロンプトなど)を持つ標準化された LLMJudge クラスを作成し、各行の特定のスコアリングと集計スコアの特定の計算を行う場合です。そのためにWeaveは、すぐに使用できる Scorer クラスのリストを定義し、カスタム Scorer を簡単に作成できるようにしています - 以下では、カスタム class CorrectnessLLMJudge(Scorer) を作成する方法を見ていきます。 高レベルでは、カスタムScorerを作成するステップは非常に簡単です:
  1. から継承するカスタムクラスを定義する weave.flow.scorer.Scorer
  2. 関数をオーバーライドし、score を追加して@weave.op() 関数の各呼び出しを追跡したい場合
    • この関数は output 引数を定義する必要があり、モデルの予測がここに渡されます。モデルが「None」を返す可能性がある場合に備えて、タイプを Optional[dict] として定義します。
    • 残りの引数は一般的な Any または dict にするか、weave.Evaluate クラスを使用してモデルの評価に使用されるデータセットから特定の列を選択することができます - これらは preprocess_model_input が使用される場合、単一行の列名またはキーと完全に同じ名前である必要があります。
  3. Optional: 関数をオーバーライドしてsummarize 集計スコアの計算をカスタマイズします。デフォルトでは、カスタム関数を定義しない場合、Weaveは weave.flow.scorer.auto_summarize 関数を使用します。
    • この関数には @weave.op() デコレータが必要です。
これをスコアラーとして使用するには、初期化して scorers 引数としてEvaluationに渡します:

4. すべてをまとめる

RAGアプリで同じ結果を得るには:
  • LLM呼び出しと検索ステップ関数を weave.op()
  • (オプション) Model サブクラスを predict 関数とアプリの詳細で作成する
  • 評価するための例を収集する
  • 1つの例をスコアリングするスコアリング関数を作成する
  • 使用する Evaluation クラスで例に対して評価を実行する
NOTE: 時にはEvaluationsの非同期実行がOpenAI、Anthropicなどのモデルのレート制限をトリガーすることがあります。これを防ぐために、並列ワーカーの数を制限する環境変数を設定できます。例えば WEAVE_PARALLELISM=3 ここでは、コード全体を示します。

結論

アプリケーションの異なるステップ(この例では検索ステップなど)に可観測性を組み込む方法を学びました。 また、LLMジャッジのようなより複雑なスコアリング関数を構築して、アプリケーションの応答を自動評価する方法も学びました。