核心评估实验数据集

数据集

数据集是一组输入和期望输出的集合,用于测试你的应用。无论是基于 UI 还是基于 SDK 的实验都支持 Litefuse 数据集。

Litefuse 数据集视图

Datasets

为什么使用数据集?

  • 用真实的生产 trace 为你的应用创建测试用例
  • 与团队协作创建和收集数据集条目
  • 让测试数据有一个唯一的来源

快速开始

创建一个数据集

数据集名称在项目内唯一。

langfuse.create_dataset(
    name="<dataset_name>",
    # optional description
    description="My first dataset",
    # optional metadata
    metadata={
        "author": "Alice",
        "date": "2022-01-01",
        "type": "benchmark"
    }
)

See Python SDK docs for details on how to initialize the Python client.

上传或新建数据集条目

数据集条目可以通过提供输入(以及可选的期望输出)添加到数据集中。如果你愿意,也可以通过 Litefuse UI 中的 CSV 上传器导入数据集条目。

langfuse.create_dataset_item(
    dataset_name="<dataset_name>",
    # any python object or value, optional
    input={
        "text": "hello world"
    },
    # any python object or value, optional
    expected_output={
        "text": "hello world"
    },
    # metadata, optional
    metadata={
        "model": "llama3",
    }
)

See Python SDK docs for details on how to initialize the Python client.

数据集文件夹

数据集可以组织到虚拟文件夹中,用于将用途相似的数据集分组。 要创建文件夹,在数据集名称中加入斜杠(/)。UI 会自动把每一段以 / 结尾的部分识别为文件夹。

在文件夹中创建和获取数据集

通过在数据集名称中加入斜杠(/),可以使用 Litefuse UI 或 SDK 在文件夹中创建并获取数据集。

dataset_name = "evaluation/qa-dataset"
 
# When creating a dataset, use the full dataset name
langfuse.create_dataset(
    name=dataset_name,
)
 
# When fetching a dataset in a folder, use the full dataset name
langfuse.get_dataset(
    name=dataset_name
)
 

这会在名为 evaluation 的文件夹中创建并获取一个名为 qa-dataset 的数据集。完整的数据集名称仍然是 evaluation/qa-dataset

URL 编码:通过 API 或 JS/TS SDK 把带斜杠的数据集名作为路径参数使用时,请进行 URL 编码。例如在 TypeScript 中:encodeURIComponent(name)

版本

要在 Litefuse UI 中访问数据集版本,进入:Datasets > 进入某个数据集 > 选择 Items 标签页。在该页面你可以切换版本视图。

每次对数据集条目执行 addupdatedeletearchive 都会产生一个新的数据集版本。版本通过 timestamp 跟踪随时间发生的变化。

GET API 默认返回查询时刻的最新版本。你可以通过 version 参数获取指定版本时间戳的数据集。

版本仅适用于数据集条目,不包括数据集 schema。数据集 schema 的变更不会产生新版本。

获取指定版本的数据集

你可以通过提供版本时间戳来获取数据集在某个时间点的状态。这会只返回该时间戳存在的条目。

from langfuse import get_client
from datetime import datetime, timedelta
 
langfuse = get_client()
 
# Capture dataset state as of 2025-12-15 at 06:30:00 UTC
version_timestamp = datetime(2025, 12, 15, 6, 30, 0, tzinfo=timezone.utc)
 
# Fetch dataset at version timestamp
dataset_at_version = langfuse.get_dataset(
    name="my-dataset",
    version=version_timestamp
)
 
# Fetch latest version
dataset_latest = langfuse.get_dataset(name="my-dataset")

在版本化数据集上运行实验

你可以直接在版本化的数据集上运行实验。这适用于比较模型在不同数据集版本下的表现,或基于某个时间点的精确数据集状态复现实验结果。

from datetime import timedelta
import time
from langfuse import Langfuse
 
langfuse = Langfuse()
 
version_timestamp = datetime(2025, 12, 15, 6, 30, 0, tzinfo=timezone.utc)
 
# Fetch versioned dataset 
versioned_dataset = langfuse.get_dataset("qa-dataset", version=version_timestamp)
 
# Run experiment on the versioned dataset
def my_llm_application(*, item, **kwargs):
    # Your LLM application logic here
    # For this example, we'll just return the expected output
    return item.expected_output
 
result = versioned_dataset.run_experiment(
    name="Baseline Experiment v1",
    description="Running on dataset v1",
    task=my_llm_application
)

这种方式通过以下能力来确保可复现性:

  • 即使条目已被更新或删除,仍可在历史数据集版本上重新运行实验
  • 比较数据集变更前后的模型表现
  • 保持实验一致性,并精确复现先前运行的结果
  • 在同一基线数据集版本上测试改进

Schema 强校验

可以为数据集添加 JSON Schema 校验,确保所有数据集条目符合既定结构。这有助于保持数据质量、尽早发现错误并在团队间保持一致性。

创建或更新数据集时,你可以为 input 和/或 expectedOutput 字段定义 JSON schema。一旦设置,所有数据集条目会被自动按这些 schema 校验。合法条目会被接受,不合法条目会被拒绝并附带详细的校验错误信息。

langfuse.create_dataset(
    name="qa-conversations",
    input_schema={
        "type": "object",
        "properties": {
            "messages": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "role": {"type": "string", "enum": ["user", "assistant", "system"]},
                        "content": {"type": "string"}
                    },
                    "required": ["role", "content"]
                }
            }
        },
        "required": ["messages"]
    },
    expected_output_schema={
        "type": "object",
        "properties": {"response": {"type": "string"}},
        "required": ["response"]
    }
)

创建合成数据集

通常你会想生成一些合成示例来测试应用、为数据集打底。LLM 非常擅长通过 prompt 生成常见问题/任务。

下面这本 cookbook 中给出了如何生成合成数据集的示例:

从生产数据创建条目

一种常见工作流是:从生产 trace 中挑选应用表现不佳的样例,让专家给出期望输出,再用同样的数据测试新版本的应用。

langfuse.create_dataset_item(
    dataset_name="<dataset_name>",
    input={ "text": "hello world" },
    expected_output={ "text": "hello world" },
    # link to a trace
    source_trace_id="<trace_id>",
    # optional: link to a specific span, event, or generation
    source_observation_id="<observation_id>"
)

批量将 observation 添加到数据集

你可以在 observations 表中批量将多个 observation 添加到数据集。这非常适合从生产数据快速构建测试数据集。

字段映射系统让你能掌控如何把 observation 数据转换为数据集条目。你可以原样使用整个字段(例如把完整的 observation input 映射成数据集条目的 input),或使用 JSON path 表达式提取特定值,或者从多个字段构建自定义对象。

  1. 进入 Observations
  2. 用筛选条件找到相关的 observation
  3. 通过复选框选择 observation
  4. 点击 ActionsAdd to dataset
  5. 选择创建新数据集或选择已有数据集
  6. 配置字段映射,控制 observation 数据如何映射到数据集条目字段
  7. 预览映射并确认

批量操作在后台运行,并支持部分成功。如果部分 observation 没能通过数据集 schema 的校验,合法条目仍会被添加,错误会被记录便于回查。你可以在 SettingsBatch Actions 查看进度。

编辑/归档数据集条目

你可以编辑或归档数据集条目。归档的条目会从未来的实验运行中移除。

通过提供你想更新的条目 id,可以对条目执行 upsert。

langfuse.create_dataset_item(
    id="<item_id>",
    # example: update status to "ARCHIVED"
    status="ARCHIVED"
)

数据集运行

创建好数据集后,你就可以基于它来测试和评估你的应用。

了解更多关于实验数据模型的内容。

这个页面对你有帮助吗?