用于系统化 GenAI 应用评估的特选测试数据。 包括输入、可选的基线真值(预期)和元数据。
提供评估数据的两种方法
可以通过两种方式向 MLflow 评估工具提供评估数据:
1. 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 记分器使用的多个保留密钥: guidelines
, expected_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 评估数据集用户界面
MLflow 评估数据集 SDK 参考
评估数据集 SDK 提供编程访问,用于创建、管理和使用用于 GenAI 应用评估的数据集。
运行示例的先决条件
安装 MLflow 和所需包
pip install --upgrade "mlflow[databricks]>=3.1.0" "databricks-connect>=16.1"
请按照 设置环境快速指南 创建 MLflow 试验。
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)
后续步骤
操作指南
概念
- Evaluation Harness - 如何使用数据集
- 运行评估 - 数据集评估的结果
- 记分器 - 应用于数据集的指标