Langfuse WorkshopClickHouse Workshops

05 数据集

您已拥有一个经过追踪、属性标记和监控的应用。data/seed-dataset.json 和 scripts/seed-dataset.ts 已在该检查点的仓库中。

研讨会材料在公共 langfuse/langfuse-workshop 仓库中维护。使用该仓库获取可运行的应用、检查点分支和本地设置。

查看此 Markdown 文件

起始点

git checkout checkpoint/05-dataset

您已拥有一个经过追踪、属性标记和监控的应用。data/seed-dataset.json 和 scripts/seed-dataset.ts 已在该检查点的仓库中。

确保 .env 具有:

DATASET_NAME=dad-it-support-workshop

为什么要构建数据集

数据集是您对系统在生产环境中将面临的内容的表示——您期望的输入,以及对于每个输入,什么是好的答案。通过明确地写下期望,您可以在每次更改后重新运行代理来测试它们,并知道您是否有帮助或有害。好的数据集是自信地发布和迭代而不回退的基础。

在 Langfuse 学院的数据集课程 中了解更多。

目标

创建第一个数据集,捕获我们期望 Specs 处理的请求类型。为了实现这一目标:

  1. 理解项目形状 —— 每个数据集项都有相同的三个字段,我们希望我们的项与代理的实际输入相匹配。
  2. 创建托管数据集 使其存储在 Langfuse 中,并为下一步的实验做好准备。

Specs 如何处理工单 —— 一个代理、两个工具、一个模型,每次跳转都是追踪中的一个观察。

第 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 个实验运行(到目前为止):

Langfuse 中的数据集列表视图 —— dad-it-support-workshop,包含 14 项且尚无运行。

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

dad-it-support-workshop 数据集的项目视图 —— 所有 14 行,包含消息输入、理想答案 + 期望关键字和类别/难度元数据。

入门数据集涵盖的内容

  • iPhone 蓝牙基础和边界情况
  • iPhone Wi-Fi 重新连接 + "我看不到网络"
  • 照片捕获 + WhatsApp 分享
  • Apple Maps 导航 + 实时位置限制
  • 消息基础
  • 超出范围(申报税款、预订我的火车)
  • 限制情况(密码、实时位置)

如果您稍后添加项目,最好选择与您在监控中看到的真实信号相匹配的项目,而不是从头开始发明的项目。

如何验证您已完成

  • 数据集在 Langfuse 中显示,包含所有项目。
  • 项目输入看起来像真实聊天轮次会有的 messages 数组。
  • 您可以阐述数据集涵盖的故障模式。

总结

数据集是您写下系统预期处理内容的方式。好的数据集让您有信心发布和迭代而不回退。您可以通过 Langfuse CLI 或技能创建数据集、从 UI 中的生产追踪构建它们或在代码中维护它们,如我们所做的 —— 正确的方法取决于您的最佳示例来自何处。

接下来,我们使用这个数据集对代理运行实验。

结束状态

这是 06-experiments 的起始点。

本页内容

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

ZH