评估数据集

用于系统化 GenAI 应用评估的特选测试数据。 包括输入、可选的基线真值(预期)和元数据。

提供评估数据的两种方法

可以通过两种方式向 MLflow 评估工具提供评估数据:

存储在 Unity 目录中的专用数据集,其中包含:

  • 版本控制:跟踪随时间推移的数据集更改
  • 谱系:将数据集记录链接到其输入(源跟踪)并跟踪其使用情况(评估任务和应用版本)
  • 协作:跨团队共享数据集
  • 集成:通过 MLflow UI 和 API 实现无缝工作流
  • 治理:Unity 目录安全性和访问控制
  • 跟踪转换:使用 UI 或 SDK 轻松将生产跟踪转换为评估数据集记录
  • 可视化效果:直接在 MLflow UI 中检查和编辑数据集内容

何时使用:生产评估工作流、回归测试,以及何时需要数据集管理功能。

2. 任意数据集 (快速原型制作)

使用现有的数据结构,例如:

  • 字典列表
  • Pandas 数据帧
  • Spark 数据帧

何时使用:快速试验、原型制作或已有这些格式的评估数据时。

评估数据集架构

无论是使用 MLflow 的评估数据集抽象还是将数据直接 mlflow.genai.evaluate()传递给,评估数据集都遵循一致的结构。

核心字段

评估数据集的抽象或直接传递数据时,都会使用以下字段。

数据类型 DESCRIPTION 必选
inputs dict[Any, Any] 应用的输入(例如用户问题、上下文),存储为 JSON 可序列化的dict 是的
expectations dict[Str, Any] 地面真实标签,以 JSON 序列化形式存储 dict 可选

expectations 保留密钥

expectations 具有由预生成 LLM 记分器使用的多个保留密钥: guidelinesexpected_facts以及 expected_response

领域 使用者 DESCRIPTION
expected_facts correctness 法官 应显示的事实列表
expected_response is_correct 得分手 确切或类似的预期输出
guidelines meets_guidelines 得分手 要遵循的自然语言规则
expected_retrieved_context document_recall 得分手 应检索的文档

附加字段

评估数据集 abstraaction 使用以下字段来跟踪世系和版本历史记录。

数据类型 DESCRIPTION 必选
dataset_record_id 字符串 记录的唯一标识符。 如果未提供,则自动设置。
create_time 时间戳 创建记录的时间。 插入或更新时自动设置。
created_by 字符串 创建记录的用户。 插入或更新时自动设置。
last_update_time 时间戳 上次更新记录的时间。 插入或更新时自动设置。
last_updated_by 字符串 上次更新记录的用户。 插入或更新时自动设置。
source 结构体 数据集记录的源(请参阅下文)。 可选
tags dict[str, Any] 数据集记录的键值标记。 可选

源字段

字段 source 跟踪数据集记录来自何处。 每个记录只能有 一个 源类型:

1. 人类源 - 由人员手动创建的记录

{
    "source": {
        "human": {
            "user_name": "jane.doe@company.com"
        }
    }
}
  • user_name (str):创建记录的用户

2. 文档源 - 从文档合成的记录

{
    "source": {
        "document": {
            "doc_uri": "s3://bucket/docs/product-manual.pdf",
            "content": "The first 500 chars of the document..."  # Optional
        }
    }
}
  • doc_uri (str):源文档的 URI/路径
  • content (str,可选):文档的摘录或完整内容

3. 跟踪源 - 从生产跟踪创建的记录

{
    "source": {
        "trace": {
            "trace_id": "tr-abc123def456"
        }
    }
}
  • trace_id (str):源跟踪的唯一标识符

MLflow 评估数据集用户界面

eval 数据集 ui

MLflow 评估数据集 SDK 参考

评估数据集 SDK 提供编程访问,用于创建、管理和使用用于 GenAI 应用评估的数据集。

运行示例的先决条件

  1. 安装 MLflow 和所需包

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

  3. CREATE TABLE Unity 目录架构中的权限

create_dataset()

在 Unity 目录中创建新的评估数据集。

import mlflow.genai.datasets

# Create a dataset with auto-inferred experiment
dataset = mlflow.genai.datasets.create_dataset(
    uc_table_name="catalog.schema.evaluation_dataset"
)

# Create a dataset associated with specific experiment(s)
dataset = mlflow.genai.datasets.create_dataset(
    uc_table_name="catalog.schema.evaluation_dataset",
    experiment_id="1213947645336731"
)

# Associate with multiple experiments
dataset = mlflow.genai.datasets.create_dataset(
    uc_table_name="catalog.schema.evaluation_dataset",
    experiment_id=["1213947645336731", "3231394764336731"]
)

参数:

  • uc_table_name (str):数据集的 Unity 目录表名称
  • experiment_id (str 或 list,可选):要与数据集关联的试验 ID

返回:EvaluationDataset 对象

get_dataset()

从 Unity 目录加载现有评估数据集。

import mlflow.genai.datasets

# Load existing dataset
dataset = mlflow.genai.datasets.get_dataset(
    uc_table_name="catalog.schema.evaluation_dataset"
)

# Access dataset properties
print(f"Dataset ID: {dataset.dataset_id}")
print(f"Created by: {dataset.created_by}")
print(f"Last updated: {dataset.last_update_time}")

参数:

  • uc_table_name (str):数据集的 Unity 目录表名称

返回:EvaluationDataset 对象

delete_dataset()

从 Unity 目录中删除评估数据集。

危险:调用此方法将永久删除数据集。 :::

import mlflow.genai.datasets

# Delete a dataset
mlflow.genai.datasets.delete_dataset(
    uc_table_name="catalog.schema.evaluation_dataset"
)

参数:

  • uc_table_name (str):要删除的数据集的 Unity 目录表名称

返回: 没有

EvaluationDataset

EvaluationDataset 类提供用于与评估数据集交互和修改的方法。

性能

import mlflow.genai.datasets

dataset = mlflow.genai.datasets.get_dataset("catalog.schema.eval_dataset")

# Access dataset metadata
dataset_id = dataset.dataset_id          # Unique identifier
name = dataset.name                      # UC table name
schema = dataset.schema                  # Dataset schema
profile = dataset.profile                # Summary statistics
source = dataset.source                  # Source information
source_type = dataset.source_type        # Source type (e.g., "databricks-uc-table")
digest = dataset.digest                  # Hash of the dataset

# Access audit information
created_by = dataset.created_by          # Creator user
create_time = dataset.create_time        # Creation timestamp
last_updated_by = dataset.last_updated_by # Last updater
last_update_time = dataset.last_update_time # Last update timestamp

merge_records()

在数据集中添加或更新记录。 要么直接传递数据集记录,要么传递 MLflow trace_ids 列表或结果 mlflow.search_traces()

import mlflow.genai.datasets
import pandas as pd

dataset = mlflow.genai.datasets.get_dataset("catalog.schema.eval_dataset")

# Merge from list of dictionaries
records = [
    {
        "inputs": {"question": "What is MLflow?"},
        "expectations": {
            "expected_facts": ["open-source platform", "ML lifecycle"],
            "guidelines": "Response should be concise and technical"
        }
    },
    {
        "inputs": {"question": "How to track experiments?"},
        "expectations": {
            "expected_response": "Use mlflow.start_run() to track experiments..."
        }
    }
]
dataset = dataset.merge_records(records)

# Merge from Pandas DataFrame
df = pd.DataFrame(records)
dataset = dataset.merge_records(df)

# Merge from Spark DataFrame
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
spark_df = spark.createDataFrame(records)
dataset = dataset.merge_records(spark_df)

# Create from existing traces
traces = mlflow.search_traces()
dataset.merge_records(traces)

参数:

  • records (list[dict], pd.DataFrame 或 pyspark.sql.DataFrame):要合并的记录

返回: 已更新 EvaluationDataset 的对象

to_df()

将数据集转换为 Pandas 数据帧进行本地分析。

import mlflow.genai.datasets

dataset = mlflow.genai.datasets.get_dataset("catalog.schema.eval_dataset")

# Convert to DataFrame
df = dataset.to_df()

# Analyze the data
print(f"Total records: {len(df)}")
print(f"Columns: {df.columns.tolist()}")

返回: pd.DataFrame

常见模式

从生产跟踪创建数据集

import mlflow
import mlflow.genai.datasets
import pandas as pd

# Search for production traces
traces = mlflow.search_traces(
    experiment_names=["production"],
    filter_string="attributes.feedback_score > 0.8",
    max_results=100
)

# Create dataset from traces
dataset = mlflow.genai.datasets.create_dataset(
    uc_table_name="catalog.schema.production_golden_set"
)
dataset = dataset.merge_records(records)

更新现有数据集

import mlflow.genai.datasets
import pandas as pd

# Load existing dataset
dataset = mlflow.genai.datasets.get_dataset("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)

后续步骤

操作指南

概念