次の方法で共有


評価セットを合成する

重要

この機能は、パブリック プレビューにあります。

このページでは、エージェントの品質を測定するための高品質の評価セットを合成的に生成する方法について説明します。

多くの場合、評価セットを手動で構築するには時間がかかり、エージェントのすべての機能を確実にカバーすることは困難です。 モザイク AI エージェント評価では、ドキュメントから代表的な評価セットを自動的に生成することで、この障壁を取り除き、テスト ケースを適切にカバーしてエージェントを迅速に評価できます。

評価セットを生成する

ドキュメントの取得を使用するエージェントの評価を合成するには、databricks-agents Python パッケージの一部である generate_evals_df メソッドを使用します。 API の詳細については、Python SDK リファレンスを参照してください。

このメソッドでは、Pandas DataFrame または Spark DataFrame としてドキュメントを提供する必要があります。

入力データフレームには、次の列が必要です。

  • content: 解析されたドキュメントの内容を文字列として指定します。
  • doc_uri: ドキュメント URI。

生成の制御に役立つ 3 つの追加パラメーターを使用できます。

  • num_evals: すべてのドキュメントで生成する評価の合計数。 この関数は、生成された評価を考慮して、すべてのドキュメントのサイズに応じて分散させようとします。 num_evals がドキュメントの数より少ない場合、すべてのドキュメントが評価セットでカバーされるわけではありません。

    num_evals を使用してドキュメント全体に評価を配布する方法の詳細については、「num_evalsの使用方法」参照してください。

  • agent_description: エージェントのタスクの説明

  • question_guidelines: 合成質問の生成に役立つ一連のガイドライン。 これは、生成を求めるために使用される自由形式の文字列です。 次の例を参照してください。

generate_evals_df の出力は、次の列を含む DataFrame です。

  • request_id: 一意の要求 ID。
  • request: 合成された要求。
  • expected_facts: 応答で予想されるファクトの一覧。 この列には dtype list[string] があります。
  • expected_retrieved_context: この評価が合成されたコンテキスト (ドキュメントコンテンツとdoc_uriを含む)。

次の例では、generate_evals_df を使用して評価セットを生成し、mlflow.evaluate() を直接呼び出して、この評価セットに対する Meta Llama 3.1 のパフォーマンスを測定します。 Llama 3.1 モデルはドキュメントを見たことがないので、それが幻覚する可能性があります。 それでも、この実験はカスタム エージェントのベースラインとして適しています。


%pip install mlflow mlflow[databricks] databricks-agents
dbutils.library.restartPython()

import mlflow
from databricks.agents.evals import generate_evals_df
import pandas as pd
import math

# `docs` can be a Pandas DataFrame or a Spark DataFrame with two columns: 'content' and 'doc_uri'.
docs = pd.DataFrame.from_records(
    [
      {
        'content': f"""
            Apache Spark is a unified analytics engine for large-scale data processing. It provides high-level APIs in Java,
            Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set
            of higher-level tools including Spark SQL for SQL and structured data processing, pandas API on Spark for pandas
            workloads, MLlib for machine learning, GraphX for graph processing, and Structured Streaming for incremental
            computation and stream processing.
        """,
        'doc_uri': 'https://spark.apache.org/docs/3.5.2/'
      },
      {
        'content': f"""
            Spark’s primary abstraction is a distributed collection of items called a Dataset. Datasets can be created from Hadoop InputFormats (such as HDFS files) or by transforming other Datasets. Due to Python’s dynamic nature, we don’t need the Dataset to be strongly-typed in Python. As a result, all Datasets in Python are Dataset[Row], and we call it DataFrame to be consistent with the data frame concept in Pandas and R.""",
        'doc_uri': 'https://spark.apache.org/docs/3.5.2/quick-start.html'
      }
    ]
)

agent_description = """
The Agent is a RAG chatbot that answers questions about using Spark on Databricks. The Agent has access to a corpus of Databricks documents, and its task is to answer the user's questions by retrieving the relevant docs from the corpus and synthesizing a helpful, accurate response. The corpus covers a lot of info, but the Agent is specifically designed to interact with Databricks users who have questions about Spark. So questions outside of this scope are considered irrelevant.
"""

question_guidelines = """
# User personas
- A developer who is new to the Databricks platform
- An experienced, highly technical Data Scientist or Data Engineer

# Example questions
- what API lets me parallelize operations over rows of a delta table?
- Which cluster settings will give me the best performance when using Spark?

# Additional Guidelines
- Questions should be succinct, and human-like
"""

num_evals = 10

evals = generate_evals_df(
    docs,
    # The total number of evals to generate. The method attempts to generate evals that have full coverage over the documents
    # provided. If this number is less than the number of documents, is less than the number of documents,
    # some documents will not have any evaluations generated. See "How num_evals is used" below for more details.
    num_evals=num_evals,
    # A set of guidelines that help guide the synthetic generation. These are free-form strings that will be used to prompt the generation.
    agent_description=agent_description,
    question_guidelines=question_guidelines
)

display(evals)

# Evaluate the model using the newly generated evaluation set. After the function call completes, click the UI link to see the results. You can use this as a baseline for your agent.
results = mlflow.evaluate(
  model="endpoints:/databricks-meta-llama-3-1-405b-instruct",
  data=evals,
  model_type="databricks-agent"
)

# Note: To use a different model serving endpoint, use the following snippet to define an agent_fn. Then, specify that function using the `model` argument.
# MODEL_SERVING_ENDPOINT_NAME = '...'
# def agent_fn(input):
#   client = mlflow.deployments.get_deploy_client("databricks")
#   return client.predict(endpoint=MODEL_SERVING_ENDPOINT_NAME, inputs=input)

次の出力例では、列 request_idexpected_retrieved_context は表示されません。

request 想定される事実
Apache Spark で使用される Spark SQL とは - Spark SQL は、Apache Spark での SQL 処理に使用されます。
- Spark SQL は、Apache Spark での構造化データ処理に使用されます。
Apache Spark でサポートされている高度なツールと、どのような目的に対応していますか? - SQL および構造化データ処理用の Spark SQL。
- Pandas ワークロードを処理するための Spark 上の pandas API。
- 機械学習用の MLlib。
- グラフ処理用の GraphX。
- 増分計算とストリーム処理のための構造化ストリーミング。
Spark の主な抽象化とは何ですか。また、Python ではデータセットはどのように表されますか? - Spark の主な抽象化はデータセットです。
- Python では、Spark のデータセットは DataFrame と呼ばれます。
- Python では、データセットは Dataset[Row] として表されます
Python のすべてのデータセットが Spark の DataFrames と呼ばれるのはなぜですか? - Python のデータセットは、データ フレームの概念との一貫性を維持するために、Spark では DataFrames と呼ばれます。
- データ フレームの概念は Pandas と R の標準です。

num_evals の使用方法

num_evals は、一連のドキュメントに対して生成された評価の合計数です。 この関数は、ドキュメント サイズの違いを考慮しながら、これらの評価をドキュメント全体に分散します。 つまり、ドキュメント セット全体で 1 ページあたりほぼ同じ数の質問を保持しようとします。

num_evals がドキュメントの数より少ない場合、一部のドキュメントでは評価が生成されません。 関数によって返される DataFrame には、評価の生成に使用された source_doc_ids を含む列が含まれます。 この列を使用して元のDataFrameに戻って結合し、スキップされたドキュメントの評価を生成できます。

必要なカバレッジの num_evals を見積もるために、estimate_synthetic_num_evals メソッドを提供します。


from databricks.agents.evals import estimate_synthetic_num_evals

num_evals = estimate_synthetic_num_evals(
  docs, # Same docs as before.
  eval_per_x_tokens = 1000 # Generate 1 eval for every x tokens to control the coverage level.
)

合成評価セットの作成 - ノートブックの例

合成評価セットを作成するコード例については、次のノートブックを参照してください。

合成評価のノートブック例

ノートブック を取得する

エージェントのパフォーマンスを向上させる 10 分間のデモ

次のノートブック例は、エージェントの品質を向上させる方法を示しています。 これには、次の手順が含まれます。

  1. 合成評価データセットを生成します。
  2. ベースライン エージェントをビルドして評価します。
  3. 複数の構成 (異なるプロンプトなど) と基本モデル間でベースライン エージェントを比較し、品質、コスト、待機時間の適切なバランスを見つけます。
  4. 関係者がテストして追加のフィードバックを提供できるように、エージェントを Web UI にデプロイします。

合成データ ノートブックを使用してエージェントのパフォーマンスを向上させる

ノートブック を取得する

合成データを利用するモデルに関する情報

  • 合成データは、Microsoft が運営する Azure OpenAI を含め、GenAI アプリケーションを評価するためにサードパーティのサービスを使用する場合があります。
  • Azure OpenAI の場合、Databricks は不正使用の監視をオプトアウトしているため、Azure OpenAI でプロンプトや応答が保存されません。
  • 欧州連合 (EU) ワークスペースの場合、合成データでは、EU でホストされているモデルが使用されます。 他のすべてのリージョンでは、米国でホストされているモデルが使用されます。
  • Azure AI を利用した AI 支援機能を無効にすると、合成データ サービスが Azure AI を利用したモデルを呼び出せなくなります。
  • 合成データ サービスに送信されるデータは、モデルトレーニングには使用されません。
  • 合成データは、顧客がエージェント アプリケーションを評価するのに役立ちます。また、LLM のトレーニング、改善、微調整には出力を使用しないでください。