Compartir a través de

生成 MLflow 评估数据集

本指南介绍了创建 评估数据集 的各种方法,以便系统地测试和提高 GenAI 应用程序的质量。 你将了解多种生成数据集的方法,这些数据集可在迭代应用时实现一致的可重复评估。

评估数据集可帮助你:

  • 修复已知问题:从生产添加有问题的示例以重复测试修复
  • 防止回归:创建必须始终正常工作的“黄金集”示例
  • 比较版本:针对相同数据测试不同的提示、模型或应用逻辑
  • 目标特定功能:为安全、域知识或边缘案例生成专用数据集

从单个精心策划的数据集开始,然后在测试需求增长时扩展到多个数据集。

你将了解的内容:

  • 从生产追踪创建数据集,以测试实际场景
  • 从头开始生成数据集,以便对特定功能进行有针对性的测试
  • 从 CSV、JSON 或其他格式导入现有评估数据
  • 生成综合测试数据以扩展覆盖范围
  • 根据领域专家反馈添加基本事实标签

注释

本指南介绍如何使用 MLflow 托管的评估数据集,这些数据集提供版本历史记录和世系跟踪。 对于快速原型制作,还可以将评估数据集作为 Python 字典或 Pandas/Spark 数据帧提供,该数据集遵循 MLflow 托管数据集的相同架构。 若要详细了解评估数据集架构,请参阅 评估数据集参考 页。

先决条件

  1. 安装 MLflow 和所需包

    pip install --upgrade "mlflow[databricks]>=3.1.0"
    
  2. 请按照设置环境快速入门创建 MLflow 试验。

  3. 使用 CREATE TABLE 权限访问 Unity Catalog 架构以创建评估数据集。

构建数据集的方法

MLflow 提供了多种灵活的方法来构建根据需求定制的评估数据集:

选择最适合当前数据源和评估目标的方法或方法的组合。

步骤 1:创建数据集

无论你选择的方法是什么,首先,你必须创建一个 MLflow 托管的评估数据集。 此方法允许跟踪一段时间内数据集的更改,并将单个评估结果链接到此数据集。

使用 UI

按照以下录音操作,使用用户界面创建评估数据集

使用 UI 创建评估数据集

使用 SDK

通过程序搜索踪迹并将它们添加到数据集中,创建评估数据集。

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(
    uc_table_name=f"{uc_schema}.{evaluation_dataset_table_name}",
)
print(f"Created evaluation dataset: {uc_schema}.{evaluation_dataset_table_name}")

步骤 2:将记录添加到数据集

方法 1:从现有跟踪创建

构建相关评估数据集的最有效方法之一是直接从 MLflow 跟踪捕获的应用程序的历史交互中挑选示例。 您可以使用 MLflow 监控 UI 或 SDK 从跟踪创建数据集。

使用 UI

按照以下记录,使用 UI 将现有生产跟踪添加到数据集中

trace

使用 SDK

使用程序检索跟踪信息,然后将其添加到数据集。 有关如何使用筛选器的详细信息,请参阅search_traces()参考页。

import mlflow

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

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

# 3. Add the traces to the evaluation 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']}")

方法 2:从域专家标签创建

利用 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}")

方法 3:从头开始生成或导入现有

可以导入现有数据集或从头开始策划示例。 数据必须匹配(或转换以匹配) 评估数据集架构

# 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.merge_records(evaluation_examples)

方法 4:使用合成数据种子

生成综合数据可以通过快速创建各种输入并覆盖边缘事例来扩展测试工作。

后续步骤

继续您的旅程,并参考这些推荐的行动和教程。

参考指南

浏览本指南中提到的概念和功能的详细文档。