評価セットの合成

プレビュー

この機能はパブリックプレビュー段階です。

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

評価セットを手動で作成するのは時間がかかることが多く、エージェントのすべての機能をカバーしていることを確認することは困難です。 Mosaic AI Agent Evaluationは、ドキュメントから代表的な評価セットを自動的に生成することでこの障壁を取り除き、テストケースを良好にカバーしてエージェントを迅速に評価できるようにします。

評価セットの生成

ドキュメント取得を使用するエージェントの評価を合成するには、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[文字列] があります。

  • 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

expected_facts

Apache Spark で Spark SQL は何に使用されますか?

  • Spark SQL は、Apache Spark での SQL 処理に使用されます。

  • Spark SQL は、Apache Spark での構造化データ処理に使用されます。

Apache Spark でサポートされている高レベルのツールにはどのようなものがあり、それらはどのような目的を果たしますか?

  • SQL および構造化データ処理用の Spark SQL。

  • PandasAPISparkPandasワークロードを処理するための 。

  • 機械学習用の MLlib。

  • グラフ処理用の GraphX。

  • インクリメンタル計算とストリーム処理のための構造化ストリーミング。

Sparkの主な抽象化は何ですか、またデータセットはPythonでどのように表現されますか?

  • Spark の主な抽象化はデータセットです。

  • Python では、Spark のデータセットは DataFrame と呼ばれます。

  • Pythonでは、データセットはデータセット[Row]として表されます

なぜ 内のすべてのデータセットがPython DataFramesでSpark と呼ばれるのですか?

  • のデータセットは、データ フレームの概念との一貫性を保つために、Python DataFramesではSpark と呼ばれます。

  • データ フレームの概念は、Pandas と R で標準です。

num_evalsの使用方法

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

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 でホストされているモデルを使用します。 その他のすべての地域では、米国でホストされているモデルが使用されます。

  • パートナーが提供する AI 支援機能 を無効にすると、合成データサービスがパートナーが提供するモデルを呼び出すのを防ぐことができます。

  • 合成データサービスに送られたデータは、モデルトレーニングには使用されません。

  • 合成データは、顧客がエージェント アプリケーションを評価するのに役立つことを目的としており、出力を LLMのトレーニング、改善、または微調整に使用しないでください。