この記事は every Tech Blog Advent Calendar 2024 の 16日目の記事です。
はじめに
こんにちは。
株式会社エブリーの開発本部データ&AIチーム(DAI)でデータエンジニアをしている吉田です。
今回は、Databricks Mosaic AIによるLLM アプリケーションの評価についてのお話です。
背景
近年、LLMを利用したアプリケーションが増えており、DELISH KITCHENでもAIによる料理アシスタントとして「デリッシュAI」の提供を開始しました。
そのような状況の中で、サービスにLLMアプリケーションを組み込む際には、アプリケーションの評価がますます重要な課題となっています。
しかし、LLMアプリケーションの品質は、データの質、モデルの性能、プロンプト、retrieverの性能など複数の要素が影響するため、評価は複雑で難しい課題です。
また、アプリケーションの評価に利用するユーザーからフィードバックを収集するためには、レビュー環境の構築やテスト人員の確保、さらに収集したフィードバックの分析といった作業が必要となります。
そこで、Databricks Mosaic AI Agent Evaluationを利用することで、アプリケーション評価にかかる負担を軽減することが可能です。
Databricks Mosaic AI Agent Evaluationとは
Databricksドキュメント、Mosaic AIエージェント評価とは? によると、以下のように説明されています。
Agent Evaluationは、開発者がRAGアプリケーションやチェーンを含む エージェントAIアプリケーションの品質、コスト、およびレイテンシを評価するのに役立ちます。 エージェント評価は、品質の問題を特定し、それらの問題の根本原因を特定するように設計されています。 Agent Evaluation の機能は、 MLOps ライフサイクルの開発フェーズ、ステージングフェーズ、本番運用フェーズ全体で統合されており、すべての評価メトリクスとデータは MLflowランに記録されます。
https://docs.databricks.com/ja/generative-ai/agent-evaluation/index.html
主に以下のような機能が提供されています。
- Review App作成 : ユーザからフィードバックを効率よく収集できるアプリケーションを簡単に作成できます
- 評価と原因分析:集めたフィードバックを活用して、評価指標を可視化し、問題の根本原因を明確にします
モデルのデプロイに合わせてReview Appが作成されることで、ユーザからのフィードバックを効率的に収集できる仕組みが提供されます。
また、Databricks Model ServingやVector Search、Unity Catalogと組み合わせることで、LLMアプリケーションの構築、運用、評価を単一のプラットフォームで行うことができます。
LLMアプリケーションの評価
今回は、RAGアプリケーションを例にLLMアプリケーションの評価を行います。
テストにはGenerative AI Cookbookの10 minute demo of Mosaic AI Agent Framework & Agent Evaluation上のコードを利用しました。
Unity CatalogにRAGモデルが登録されている前提で、以下の手順で評価を行います。
- Serving EndpointにRAGモデルを登録 & Review Appの作成
- Review Appを利用して、ユーザからフィードバックを収集
- 収集したフィードバックを利用して、評価と根本原因分析
Review Appの作成
Review Appの作成は、以下のコードを実行することで行います。
import mlflow from databricks import agents mlflow.set_registry_uri('databricks-uc') model_name = "{catalog}.{schema}.{model_name}" # Unity Catalogにモデルを登録 model_register_info = mlflow.register_model(model_uri="{model_uri}", name=model_name) # Serving Endpointにモデルをデプロイ & Review Appが作成される deployment_info = agents.deploy(model_name=model_name, model_version=model_register_info.version)
agent.deploy
を実行することで、Serving Endpointにモデルがデプロイされます。
このとき、Review App用のfeedbackというモデルが同時に作成され、自動的にReview Appが作成されます。
フィードバックの収集
Review Appを活用することで、ユーザからフィードバックを迅速に収集できる環境を整えられます。
これにより、モデルデプロイ後数分から十数分でフィードバックの収集をスタートでき、URL共有するだけでユーザの評価を収集する仕組みが構築されます。
ドメイン知識を持つ社内メンバーやステークホルダーからのフィードバックを収集することで、モデルの品質向上に寄与する重要なインサイトを得ることができます。
Review Appを利用することでユーザはLLMアプリケーションを利用しつつ、フィードバックを提供できます。
主に以下のようなフィードバックを収集します。
- 回答に対する正誤
- フィードバックの理由
- 期待される回答
- 参照されたドキュメントへの正誤
収集されたフィードバックは、自動的にDeltaテーブルに記録され後続の分析に活用することが可能です。
評価と根本原因分析
収集したフィードバックを活用し、以下のような評価を行います。
- 回答は、ユーザの質問に対応しているか
- 回答は、期待される回答と比較して適切か
- 回答は、取得されたドキュメントを元にしているか
- 取得されたドキュメントは適切か
収集されたデータは以下のような形式で記録されています。一部のカラムを抜粋しています。
{catalog_name}.{schema_name}.{model_name}_payload_assessment_logs
: フィードバックの詳細- text_assessment : LLMからの回答に対する評価
- ratings : 評価
- suggested_output : 期待される回答
- retrieval_assessment : 取得されたドキュメントに対する評価
- text_assessment : LLMからの回答に対する評価
{catalog_name}.{schema_name}.{model_name}_payload_request_logs
: ユーザのリクエストとアプリケーションの回答- request : ユーザのリクエスト
- response : アプリケーションの回答
これらのデータを利用して、以下のような評価データセットを作成し、mlflow.evaluate
を利用して評価を行います。
import mlflow import pandas as pd eval_df = pd.DataFrame([ { "request_id": "{ID}", "request": "{ユーザのリクエスト}", "response": "{アプリケーションの回答}", "expected_retrieved_context" : "[{期待されるドキュメント}]", "expected_response" : "{期待される回答}", } ]) eval_results = mlflow.evaluate( data=eval_df, model={評価したいモデル}, model_type="databricks-agent", )
mlflow.evaluate
を実行することで、モデルの評価を行います。
モデル出力と期待結果の比較を行うことで、モデルの性能を評価しています。
評価に対する根拠や、推奨される改善点が表示されるため、モデルの品質向上に寄与する重要な情報を得ることができます。
また、モデル間で評価を比較することで、改善の方向性を検討することも可能です。
終わりに
LLMアプリケーションの評価は、サービスの品質向上やユーザ体験の最適化において非常に重要なプロセスです。
Databricks Mosaic AI Agent Evaluationを活用することで、従来は複雑だった評価作業を効率化し、フィードバックの収集から分析まで一貫したプロセスで実施できる強力なフレームワークが提供されます。