# 根据现有文档构建 AI 训练数据集

收集已批准的客服工单或文档，然后整理成可供审核的 JSONL 数据集，其中包含来源引用、重复项检查和独立的评估数据划分。

Canonical page: https://beeuni.ai/blog/zh/build-ai-training-dataset-jsonl

你想用历史客服工单训练一个请求分类模型，但问题和回复散落在不同记录中。Beeuni 可以收集选定的对话，整理成带标签的示例，并检查缺失字段和重复内容。你审核不确定的标签后，就能得到一份 JSONL 数据集：每行是一条 JSON 记录，并能追溯到原始工单。

## 先确定模型要表现出的行为，再选择文件格式

假设你想训练模型对收到的请求进行分类。每个示例都需要一条请求和一个经批准的类别。如果你想让模型依据手册作答，示例就需要包含问题、作为依据的文本和经过核实的答案。把每段文字都改写成问题，并不能保证答案正确或有用。

连接存放这些资料的服务，或授权智能体访问文档库。先指定一个名称明确的资料集或日期范围。对于公开文档，请说明要纳入的网站和栏目。请智能体在你审核首批示例前，列出收集到的来源以及无法读取的页面。

## 先处理一个小型标注问题

设想一个虚构的客服团队正在准备请求分类器。它需要四个标签：账单、账户访问、产品帮助和需要审核。智能体通过获得授权的客服连接器，读取约定日期范围内已关闭的工单。只收集标注和追踪来源所需的字段，排除联系方式和无关附件。工单进入的队列未必代表正确标签：账单团队的客服可能回答的是转发来的登录问题。

将工单引用、筛选规则和收集时间与来源副本一起保存在 Computer 中。针对这个副本执行转换，这样工单即使在审核过程中被编辑，示例也不会在不知情的情况下发生变化。智能体可以编写并运行提取和验证脚本，然后一并交付数据集、脚本和审核报告。

先选取包含简短消息、长对话和多个问题的请求。明确模型进行预测时会看到哪些输入。如果模型只会看到客户的第一条消息，就不要把最终解决方案放进训练输入中。否则，模型会从应用收到新请求时无法获取的信息中学习。

| 虚构请求 | 建议标签 | 标注决定 |
| --- | --- | --- |
| 我这个月被扣了两次款。 | 账单 | 对扣款提出异议 |
| 我一直收不到密码重置邮件。 | 账户访问 | 请求涉及登录 |
| 我无法登录，赶不上下次续费前取消。 | 需要审核 | 确定优先处理哪个意图 |
| 这样还是不行。 | 需要审核 | 上下文不足，无法分类 |

在让智能体标注其余内容之前，先为第三行写明规则。你可以按当前最紧迫的障碍分流，也可以将所有包含相互冲突意图的请求交由审核。这两种策略都可能合理。若标注人员采用不同规则，模型就会学到不一致的示例。

## 利用分歧改进标注指南

让两位审核人员独立标注同一小批示例。保留他们最初的标签和最终决定。出现分歧时，记录原因：上下文缺失、类别重叠或标注错误。智能体可以把这些情况整理到审核文件中，但负责工作流程的人应最终确定分流规则。

如果某项决定导致标注指南发生变化，就重新检查受该规则影响的旧示例。对于这个虚构的分类器，选择“当前最紧迫的障碍”后，取消续费请求就会归入账户访问。其他将登录故障与付款问题结合在一起的消息，也应按同一规则处理。只修正有争议的那一行，会让先前的不一致继续存在。

将来源消息与合成变体分开保存。把同一请求改写十次或许有助于覆盖不同表达方式，但这并不等于增加了十种独立情况。如果生成了变体，请记录它们所对应的原始示例，并审核其含义。一个看似很小的改动，例如把“已扣款”改成“将扣款”，就可能改变预期标签。

## 生成训练记录前，保留审核记录

使用一种能让来源与每个示例保存在一起的中间格式。对于问答数据集，一个虚构的审核记录可能如下所示。数据集中的问题和答案必须来自你自己的已核实材料。

```
{"id":"sample-001","source":"sample-handbook.txt","section":"Opening hours","question":"When does the desk open?","answer":"The desk opens at 9 a.m.","review_status":"pending","split":"unassigned"}
```

这是整理数据时使用的中间格式，不能直接提交给训练 API。审核通过后，将记录转换成训练工具要求的格式。如果工具只接受消息或输入输出对，就在配套文件中保留来源引用和审核决定。

## 为智能体设置可执行的检查

- **结构：**解析每一行 JSONL，并要求字段和数据类型符合预期。
- **来源：**确认每个示例都指向现有的来源和章节。
- **重复项：**比较标准化后的文本，再单独审核近似重复项。措辞相似的内容仍可能描述不同事实。
- **隐私：**扫描个人信息和凭证，并在导出前审核所有标记的记录。
- **覆盖范围：**统计每个类别的示例数量，并列出几乎没有或完全没有经审核材料的类别。

脚本可以检查来源引用是否存在，但无法证明答案确实依据该来源。请检查答案，包括上下文缺失或内容相互矛盾的示例。将生成的候选记录与已批准记录分开保存。

## 同一个案例不要同时出现在训练集和测试集中

明确评估要衡量什么。如果要测试模型在未见文档上的表现，就将同一文档中的所有示例放在同一数据划分中。如果多个文件描述的是同一案例，则按案例分组。随机拆分数据行，可能会让评估集答案的近似副本出现在训练集中。

请生成 train.jsonl、validation.jsonl、来源清单和验证报告。报告应包含记录数量、被拒记录、重复项组和数据划分规则。数据集通过这些检查后，你可以让 Beeuni [在已连接的训练计算机上运行微调实验](/blog/zh/run-model-fine-tuning-with-beeuni)。

对于这个分类器，可用的交付内容应包括标签定义、输入字段，以及如何处理含糊请求的规则，并附上 JSONL 文件。还要包含准备脚本及其设置，以便其他开发者能够复现转换过程。记录导出所用的来源批次；名为 final.jsonl 的文件并不能告诉审核人员它与上一次导出相比有哪些变化。

如果来源最初是电子表格，[CSV 清理指南](/blog/zh/clean-messy-csv-without-losing-rows)会介绍标识符和缺失值的处理方法。若要通过自建界面来准备数据集，请从 [SDK 指南](/docs/zh/sdk)开始。
