Mosaic AI Agent Evaluationのウォークスルー

Mosaic AI Agent Evaluation、こちらで少し触ってましたがきちんと理解していなかったので、理解に努めます。

https://qiita.com/taka_yayoi/items/be87ac7198f03317be77

こちらの説明を咀嚼しながら、サンプルノートブックを動かします。

https://docs.databricks.com/ja/generative-ai/agent-evaluation/index.html

# Mosaic AI Agent Evaluationとは

> Agent Evaluationは、開発者がRAGアプリケーションやチェーンを含む [エージェントAIアプリケーション](https://docs.databricks.com/ja/generative-ai/agent-framework/ai-agents.html)の品質、コスト、およびレイテンシを評価するのに役立ちます。 エージェント評価は、品質の問題を特定し、それらの問題の根本原因を特定するように設計されています。 Agent Evaluation の機能は、 MLOps ライフサイクルの開発フェーズ、ステージングフェーズ、本番運用フェーズ全体で統合されており、すべての評価メトリクスとデータは MLflow 実行に記録されます。

RAGを含むエージェントアプリケーションの評価に使えると。評価指標は品質、コスト、レイテーシーなど。以下の図における緑枠の部分を担う機能となります。

![Screenshot 2024-11-05 at 20.42.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d36c8921-1840-6a5b-9ad6-ed25ab3d03da.png)

しかし、マニュアルにも記載されているように、LLMはもちろん、それを活用するRAGやエージェントシステムの評価は一筋縄では行きません。定量的な指標自体が開発途上ですし、人間による目視確認では限界があります。そこで、このAgent Evaluationでは、[LLMジャッジやエージェントに特化したメトリクス](https://docs.databricks.com/ja/generative-ai/agent-evaluation/llm-judge-metrics.html)を活用しています。

# Mosaic AI Agent Evaluationの入出力

以下の図でイメージできるかと思います。要は(RAGを含む)エージェントの入出力や正解データを与えることで、LLMジャッジが品質の評価を行い、同時にレイテンシーやトークン数のようなある種のゴールデンシグナルも収集するという流れです。

![Screenshot 2024-11-05 at 21.06.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8f60e9ac-314f-b1e2-385d-03e528ab5b0c.png)

# Mosaic AI Agent Evaluationの使い方

サンプルノートブックがわかりやすいです。以下では、コメントや文字列を翻訳しています。`examples`でダミーのリクエストやレスポンス、根拠付けに用いる`retrieved_context`や正しさの評価に用いる`expected_response`を指定しています。今回はダミーですが、実際には開発・稼働中の生成AIの入出力をインプットすることになります。

次のコードは、以前に生成された出力に対してエージェント評価を呼び出し、テストする方法を示しています。エージェント評価の一部であるLLMジャッジによって計算された評価スコアを含むデータフレームを返します。

```py
%pip install mlflow databricks-agents
dbutils.library.restartPython()
```
```py
import mlflow
import pandas as pd

examples =  {
    "request": [
        "Sparkとは何ですか？",
        "Spark DataFrameをPandasに変換するにはどうすればよいですか？",
    ],
    "response": [
        "Sparkはデータ分析フレームワークです。",
        "これは不可能です。Sparkはパンダではありません。",
    ],
    "retrieved_context": [ # オプション、根拠を判断するために必要です。
        [{"doc_uri": "doc1.txt", "content": "2013年に、データ分析フレームワークであるSparkがUC BerkeleyのAMPLabによってオープンソース化されました。"}],
        [{"doc_uri": "doc2.txt", "content": "Spark DataFrameをPandasに変換するには、toPandas()を使用できます。"}],
    ],
    "expected_response": [ # オプション、正確性を判断するために必要です。
        "Sparkはデータ分析フレームワークです。",
        "Spark DataFrameをPandasに変換するには、toPandas()メソッドを使用できます。",
    ]
}

result = mlflow.evaluate(
    data=pd.DataFrame(examples),    # 評価セット
    # model=logged_model.model_uri, # MLFlowモデルがある場合。`retrieved_context`と`response`はモデルの呼び出しから取得されます。
    model_type="databricks-agent",  # Mosaic AIエージェント評価を有効にする
)

# MLFlow UIで評価結果を確認する（コンソール出力を参照）、またはその場でアクセスする：
display(result.tables['eval_results'])
```

上を実行すると、定義した評価セットに対してLLMジャッジによる評価が行われ、メトリクスを含む評価結果がMLflowランとして記録されます。右側のMLflowペインに記録されています。

![Screenshot 2024-11-05 at 20.47.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1db8d573-7702-996c-a8c3-c02b6e2f8ea7.png)

`🏃 View run bald-yak-876 at:`のリンクをクリックすると、MLflowランとして記録された評価結果にアクセスすることができます。LLMジャッジによる品質評価のメトリクスを確認できます。

![Screenshot 2024-11-05 at 21.10.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/05c43c64-1db3-b71a-02f5-77417bca09f6.png)

**評価結果**タブでは、より視覚的に評価結果を確認し、ドリルダウンすることができます。

![Screenshot 2024-11-05 at 21.11.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/928df079-e5eb-33fe-75ed-e244cc10eb10.png)

![Screenshot 2024-11-05 at 21.12.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ac75c4b4-efb9-5131-0efe-b14be4bd95f0.png)
![Screenshot 2024-11-05 at 21.12.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f4837185-5898-482c-32b4-c018cfb51b5f.png)

今回は二つのリクエストしか評価していないので若干画面が寂しいですが、本格的な評価をする際には助けになりそうです。

エクスペリメントの**評価**タブでも評価結果を概観することが出来ます。

![Screenshot 2024-11-05 at 21.15.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6b63467a-7709-8022-cfdb-3095110dd988.png)

今回はダミーデータでしたが、次回は以下のページを参考に実際に稼働している生成AIアプリでの挙動をウォークスルーします。

https://docs.databricks.com/ja/generative-ai/agent-evaluation/evaluating-production-traffic.html

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)