05 数据集
您已拥有一个经过追踪、属性标记和监控的应用。data/seed-dataset.json 和 scripts/seed-dataset.ts 已在该检查点的仓库中。
研讨会材料在公共 langfuse/langfuse-workshop 仓库中维护。使用该仓库获取可运行的应用、检查点分支和本地设置。
起始点
git checkout checkpoint/05-dataset您已拥有一个经过追踪、属性标记和监控的应用。data/seed-dataset.json 和 scripts/seed-dataset.ts 已在该检查点的仓库中。
确保 .env 具有:
DATASET_NAME=dad-it-support-workshop为什么要构建数据集
数据集是您对系统在生产环境中将面临的内容的表示——您期望的输入,以及对于每个输入,什么是好的答案。通过明确地写下期望,您可以在每次更改后重新运行代理来测试它们,并知道您是否有帮助或有害。好的数据集是自信地发布和迭代而不回退的基础。
在 Langfuse 学院的数据集课程 中了解更多。
目标
创建第一个数据集,捕获我们期望 Specs 处理的请求类型。为了实现这一目标:
- 理解项目形状 —— 每个数据集项都有相同的三个字段,我们希望我们的项与代理的实际输入相匹配。
- 创建托管数据集 使其存储在 Langfuse 中,并为下一步的实验做好准备。

第 1 步 —— 读取项目形状
Langfuse 中的数据集项遵循一致的形状 —— 三个字段,一个必需,两个可选:
| 字段 | 必需 | 目的 |
|---|---|---|
input | 是 | 您要提供给代理的内容。对我们来说,与 { messages: [...] } 形状 /api/chat 接受的相同。 |
expectedOutput | 可选 | 好答案的样子。自由形式 —— 由评估者用于比较实际和期望。 |
metadata | 可选 | 用于过滤和分组的标签或其他字段(category、difficulty 等)。 |
对我们来说,一个项目的概念形状是:
{
"input": "How do I turn Bluetooth on on my iPhone?",
"expectedOutput": {
"idealAnswer": "Open Settings, tap Bluetooth, and turn the Bluetooth switch on.",
"expectedKeywords": ["Settings", "Bluetooth", "switch", "on"]
},
"metadata": { "category": "iphone-bluetooth", "difficulty": "easy" }
}expectedOutput 中的两个字段回答两个不同的评估问题:
idealAnswer是人类可读的参考回复。这是 LLM-as-a-judge 正确性评估者(第 06 章)从$.idealAnswer读取的内容,以决定含义是否匹配。expectedKeywords是答案必须包含的字符串的小列表,才能被认为"涵盖了步骤"。在第 06 章中,实验脚本使用它来获得确定性的keyword_overlap分数 —— 快速、廉价且不需要模型调用。
metadata 让我们在之后并排比较实验运行时按类别或难度切割运行。
如果您查看 data/seed-dataset.json 中的实际 JSON,input 是 /api/chat 接受的完整 { messages: [...] } 形状,加上数据集行的 id 字段。我们已简化上面的示例以显示项目是什么;磁盘上的格式是实验脚本(第 06 步)可以直接提供给 runSupportConversation(...) 的格式,无需重写输入。
第 2 步 —— 创建数据集
您有多个选项可将项目纳入 Langfuse 数据集:
- 手动添加项目在 UI 中(数据集 → 新项目)。
- 上传 CSV / JSON 文件通过 UI。
- 将实时生产追踪直接从追踪视图转换为数据集项 —— 一旦您有监控捕获有趣的追踪,这是最强大的方法。
- 通过 SDK / CLI 进行程序化创建 —— 最适合像我们这样的初始大量加载。
对于本研讨会,我们使用程序化方法,因为我们已经有一个精选的 JSON 文件:
npm run dataset:seed打开 Langfuse → 数据集。列表视图应该显示新的 dad-it-support-workshop 数据集,包含 14 项和 0 个实验运行(到目前为止):

点击进入数据集并切换到 Items 选项卡。您应该看到每个创建的项目,包含输入、期望输出和元数据列:

入门数据集涵盖的内容
- iPhone 蓝牙基础和边界情况
- iPhone Wi-Fi 重新连接 + "我看不到网络"
- 照片捕获 + WhatsApp 分享
- Apple Maps 导航 + 实时位置限制
- 消息基础
- 超出范围(申报税款、预订我的火车)
- 限制情况(密码、实时位置)
如果您稍后添加项目,最好选择与您在监控中看到的真实信号相匹配的项目,而不是从头开始发明的项目。
如何验证您已完成
- 数据集在 Langfuse 中显示,包含所有项目。
- 项目输入看起来像真实聊天轮次会有的
messages数组。 - 您可以阐述数据集涵盖的故障模式。
总结
数据集是您写下系统预期处理内容的方式。好的数据集让您有信心发布和迭代而不回退。您可以通过 Langfuse CLI 或技能创建数据集、从 UI 中的生产追踪构建它们或在代码中维护它们,如我们所做的 —— 正确的方法取决于您的最佳示例来自何处。
接下来,我们使用这个数据集对代理运行实验。
结束状态
这是 06-experiments 的起始点。