共用方式為


建置 MLflow 評估資料集

若要系統地測試和改善 GenAI 應用程式,您可以使用評估資料集。 評估資料集是一組選取的範例輸入,可以是標記的 (具有已知的預期輸出) 或未標記的 (沒有基本事實答案)。 評估資料集可協助您透過下列方式改善應用程式的效能:

  • 透過針對生產中已知問題的範例進行測試,以改善品質。
  • 防止性能倒退。 創建一組必須始終正常工作的“黃金集合”示例。
  • 比較應用程式版本。 針對相同的資料測試不同的提示、模型或應用程式邏輯。
  • 以特定功能為目標。 建立針對安全、領域知識或邊緣案例的專用資料集。
  • 作為 LLMOps 的一部分,在不同環境中驗證應用。

MLflow 評估資料集會儲存在 Unity 目錄中,提供內建的版本設定、譜系、共用和治理。

需求

  • 若要建立評估資料集,您必須具有 CREATE TABLE Unity 目錄結構描述的許可權。
  • 評估資料集會附加在 MLflow 實驗上。 如果你還沒有實驗,請參考 「建立 MLflow 實驗 」來建立實驗。

評估資料集的資料來源

您可以使用以下任一種方法來建立評估資料集:

  • 現有的痕跡。 如果你已經從生成式人工智慧應用程式擷取到痕跡,可以用它們建立基於真實世界情境的評估資料集。
  • 現有資料集,或直接輸入的範例。 此選項適合快速原型製作或針對特定功能進行精確測試。
  • 合成資料。 Databricks 能自動從你的文件產生代表性評估集,讓你能快速評估代理人,並涵蓋良好的測試案例。

本頁說明如何建立 MLflow 評估資料集。 你也可以使用其他類型的資料集,例如 Pandas DataFrames 或字典清單。 如需範例,請參閱 GenAI 的 MLflow 評估範例

用 UI 建立資料集

請依照以下步驟使用介面,從現有的痕跡中建立資料集。

  1. 點擊側邊欄的 「實驗 」以顯示實驗頁面。

  2. 在表格中,點擊你的實驗名稱即可開啟。

  3. 在左側邊欄,點選 「Traces」。

    側邊欄的軌跡條

  4. 使用位於追蹤清單左側的勾選框來選擇要匯出到資料集中的追蹤記錄。 要選取所有的追踪,請按 Trace ID 旁的方框。

    評估資料集的痕跡選擇

  5. 點擊 動作。 從下拉選單中選擇 「新增到評估資料集」。

  6. 加入追蹤至評估資料集」對話框會出現。

    如果本實驗有評估資料集,則會出現在對話框中。

    1. 請在要將這些追蹤加入的資料集旁邊點擊 匯出
    2. 匯出追蹤記錄後,按鈕會變成「匯出」。 按一下完成

    若實驗中沒有評估資料集:

    1. 點擊 建立新資料集
    2. 「建立資料集 」對話框中,點選 「選擇結構」,並選擇要存放該資料集的結構。
    3. 按一下 [確認]
    4. 「建立評估資料集」對話框的「表格名稱」欄位,輸入評估資料集名稱並點選「建立資料集」。
    5. 新增追蹤到評估資料集 」對話框會出現,顯示你剛建立的資料集。 點擊資料集旁邊的匯出
    6. 匯出追蹤記錄後,按鈕會變成「匯出」。 按一下完成

使用 SDK 建立資料集

請依照以下步驟使用 SDK 建立資料集。

步驟 1. 建立資料集

import mlflow
import mlflow.genai.datasets
import time
from databricks.connect import DatabricksSession

# 0. If you are using a local development environment, connect to Serverless Spark which powers MLflow's evaluation dataset service
spark = DatabricksSession.builder.remote(serverless=True).getOrCreate()

# 1. Create an evaluation dataset

# Replace with a Unity Catalog schema where you have CREATE TABLE permission
uc_schema = "workspace.default"
# This table will be created in the above UC schema
evaluation_dataset_table_name = "email_generation_eval"

eval_dataset = mlflow.genai.datasets.create_dataset(
    name=f"{uc_schema}.{evaluation_dataset_table_name}",
)
print(f"Created evaluation dataset: {uc_schema}.{evaluation_dataset_table_name}")

步驟二:將紀錄加入你的資料集

本節說明將紀錄加入評估資料集的多種選項。

根據現有痕跡

建置相關評估數據集的最有效方式之一是直接從您的應用程式歷程記錄中擷取範例,這些歷程記錄是由 MLflow Tracing 所追蹤的互動。 您可以使用 MLflow 監視 UI 或 SDK,從追蹤建立資料集。

程式化搜尋痕跡,然後用 search_traces()加入資料集。 使用過濾器來依據成功、失敗、生產環境使用或其他特性來識別痕跡。 請參考 程式化的搜尋追蹤

import mlflow

# 2. Search for traces
traces = mlflow.search_traces(
    filter_string="attributes.status = 'OK'",
    order_by=["attributes.timestamp_ms DESC"],
    tags.environment = 'production',
    max_results=10
)

print(f"Found {len(traces)} successful traces")

# 3. Add the traces to the evaluation dataset
eval_dataset = eval_dataset.merge_records(traces)
print(f"Added {len(traces)} records to evaluation dataset")

# Preview the dataset
df = eval_dataset.to_df()
print(f"\nDataset preview:")
print(f"Total records: {len(df)}")
print("\nSample record:")
sample = df.iloc[0]
print(f"Inputs: {sample['inputs']}")

選取追蹤以用於評估資料集

在將痕跡加入資料集前,先辨識哪些痕跡代表你評估需求的重要測試案例。 你可以同時使用定量與定性分析來選擇具有代表性的痕跡。

定量痕跡選擇

使用 MLflow UI 或 SDK 根據可衡量的特性過濾和分析痕跡:

  • 在 MLflow 介面中:以標籤篩選(例如 tag.quality_score < 0.7),搜尋特定輸入/輸出,依延遲或令牌使用排序
  • 程式化:查詢追蹤以執行進階分析
import mlflow
import pandas as pd

# Search for traces with potential quality issues
traces_df = mlflow.search_traces(
    filter_string="tag.quality_score < 0.7",
    max_results=100
)

# Analyze patterns
# For example, check if quality issues correlate with token usage
correlation = traces_df["span.attributes.usage.total_tokens"].corr(traces_df["tag.quality_score"])
print(f"Correlation between token usage and quality: {correlation}")

完整的追蹤查詢語法與範例,請參見 程式化搜尋追蹤

定性痕跡選擇

檢視個別痕跡以找出需要人為判斷的模式:

  • 檢視導致低品質輸出的投入
  • 找出你的應用程式處理邊緣情況的模式
  • 識別遺漏的內容或錯誤推理
  • 比較高品質與低品質的痕跡,以了解差異因素

一旦你辨識出具代表性的痕跡,就使用上述搜尋與合併方法將它們加入你的資料集。

小提示

將預期輸出或品質指標納入追蹤,以實現基本事實的比較。 請參閱 收集領域專家回饋 以添加人工標籤。

由領域專家提供的標籤

利用 MLflow 標籤課程中收集的領域專家回饋,豐富你的評估資料集,加入真實標籤。 在執行這些步驟之前,請遵循 收集領域專家意見反饋 指南來建立標記工作階段。

import mlflow.genai.labeling as labeling

# Get a labeling sessions
all_sessions = labeling.get_labeling_sessions()
print(f"Found {len(all_sessions)} sessions")

for session in all_sessions:
    print(f"- {session.name} (ID: {session.labeling_session_id})")
    print(f"  Assigned users: {session.assigned_users}")

# Sync from the labeling session to the dataset

all_sessions[0].sync(dataset_name=f"{uc_schema}.{evaluation_dataset_table_name}")

小提示

收集專家回饋後,你可以對齊評審標準以符合人類回饋。 請參閱 讓法官與人類保持一致

從零開始製作或匯入現有的

您可以從頭開始匯入現有的數據集或策展範例。 您的數據必須符合 評估數據集架構(或轉換以符合)。

# Define comprehensive test cases
evaluation_examples = [
    {
        "inputs": {"question": "What is MLflow?"},
        "expected": {
            "expected_response": "MLflow is an open source platform for managing the end-to-end machine learning lifecycle.",
            "expected_facts": [
                "open source platform",
                "manages ML lifecycle",
                "experiment tracking",
                "model deployment"
            ]
        },
    },
]

eval_dataset = eval_dataset.merge_records(evaluation_examples)

以合成資料來進行初始化

產生綜合數據可以藉由快速建立各種輸入並涵蓋邊緣案例,來擴展測試工作。 請參見 合成評估集

用於對話模擬

為了實現可重現的多回合測試,請使用類似以下程式碼來儲存對話模擬的測試案例。 關於模擬多回合對話的完整文件,請參見 對話模擬

from mlflow.genai.datasets import create_dataset, get_dataset
from mlflow.genai.simulators import ConversationSimulator

# Create a dataset for simulation test cases
dataset = create_dataset(
    name="conversation_scenarios",
    tags={"type": "simulation", "agent": "support-bot"},
)

# Define test cases with goals and personas
simulation_test_cases = [
    {
        "inputs": {
            "goal": "Get help setting up experiment tracking",
            "persona": "You are a data scientist new to MLflow",
        },
    },
    {
        "inputs": {
            "goal": "Debug a model deployment error",
            "persona": "You are a senior engineer who expects precise answers",
        },
    },
    {
        "inputs": {
            "goal": "Understand model versioning best practices",
            "persona": "You are building an ML platform for your team",
            "context": {"team_size": "large", "compliance": "strict"},
        },
    },
]

dataset.merge_records(simulation_test_cases)

# Later, use the dataset with ConversationSimulator
dataset = get_dataset(name="conversation_scenarios")
simulator = ConversationSimulator(test_cases=dataset)

更新現有的數據集

你可以用 UI 或 SDK 更新評估資料集。

Databricks 使用者介面

使用 UI 將紀錄加入現有的評估資料集。

  1. 在 Databricks 工作區開啟資料集頁面:

    1. 在 Databricks 工作區,導覽到你的實驗。
    2. 在左側側邊欄,點選 「資料集」。
    3. 點擊列表中的資料集名稱。

    側邊欄的 Datasets 標籤

  2. 點擊 新增記錄。 新增一列,內容為通用內容。

  3. 直接編輯新資料列以輸入新紀錄的輸入項和預期值。 可選擇為新紀錄設定任何標籤。

  4. 按兩下 [儲存變更]。

MLflow SDK

使用 MLflow SDK 來更新現有的評估資料集:

import mlflow.genai.datasets
import pandas as pd

# Load existing dataset
dataset = mlflow.genai.datasets.get_dataset(name="catalog.schema.eval_dataset")

# Add new test cases
new_cases = [
    {
        "inputs": {"question": "What are MLflow models?"},
        "expectations": {
            "expected_facts": ["model packaging", "deployment", "registry"],
            "min_response_length": 100
        }
    }
]

# Merge new cases
dataset = dataset.merge_records(new_cases)

局限性

如果您需要針對您的使用案例放寬任何這些限制,請連絡您的 Databricks 代表。

後續步驟