在线校验器

dataset_info.json 校验器

按官方字段规格逐条查你的数据集描述:哪个字段被覆盖了、哪个默认值正在生效、哪一处按规格会直接出问题。

dataset_info.json某一个数据集对应的那段描述粘进来,按 LlamaFactory 仓库 data/README.md 的字段规格逐条对照。 纯前端校验,内容不上传,输入即时出结果。

载入示例:

上面还是空的。粘一段你自己的描述进来,或者点「载入示例」看看一份最小可用的描述长什么样。

这里只校验描述对象的字段组合:来源字段的覆盖关系、formatting 取值、rankingchosen / rejected 的配套、tags 的适用格式与键名、 列名与格式是否对得上、顶层键拼写。

它只校验描述对象,不校验数据文件

这个工具读不到你的 data.json,所以它不知道里面有多少条、列名对不对得上、 内容长什么样。它做的全部事情,是拿你粘进来的这段描述去比对官方字段规格。

规则全部来自 LlamaFactory 仓库 data/README.md 的字段规格与 Alpaca / ShareGPT / OpenAI 三节说明,没有一条是我们自己加的「最佳实践」。 页面也不会对数据条数、样本质量做任何判断——那需要读你的文件,而本工具纯前端、不上传。

对照表:官方规格里的字段与默认值
数据来源字段(按覆盖优先级从高到低)

hf_hub_url > ms_hub_url > script_url > cloud_file_name > file_name

排在前面的指定后,后面的被忽略;都没指定时 file_name 必填。

columns 里有默认值的键
  • promptinstruction
  • queryinput
  • responseoutput
  • messagesconversations
columns 里默认为 None 的键

history / system / tools / images / videos / audios / chosen / rejected / kto_tag

tags 的七个键与默认值(仅用于 sharegpt)
  • role_tagfrom
  • content_tagvalue
  • user_taghuman
  • assistant_taggpt
  • observation_tagobservation
  • function_tagfunction_call
  • system_tagsystem
规格列出的顶层键

hf_hub_url / ms_hub_url / script_url / cloud_file_name / file_name / formatting / ranking / subset / split / folder / num_samples / columns / tags

这个工具在算什么

LlamaFactory 认数据集,靠的是 dataset_info.json 里那一段描述。 你在训练命令里写 dataset: my_data,它就去这个文件里找 my_data 这个键, 按对应的那个对象决定:数据从哪儿读、按哪种格式解析、哪一列当输入、哪一列当输出。

麻烦在于这段描述写错了通常不会当场报错。 你多写了一个 file_name,它被上面的 hf_hub_url 悄悄盖掉; 你给 alpaca 格式配了 messages 列,那一条压根不会被读; 你以为打开了偏好训练,但 ranking 没设成 true。 这些都要跑起来之后从结果不对劲反推回来,而反推是最贵的那种排错。

所以这个页面做的事很窄:把你粘进来的那段描述,拿官方字段规格逐条对一遍, 顺便把「按覆盖链最终生效的来源字段」和「最终生效的格式」直接算给你看。

数字和规则从哪来

全部来自 LlamaFactory 仓库的 data/README.md——就是那篇讲 dataset_info.json 字段规格、并分节说明 Alpaca / ShareGPT / OpenAI 三种格式的文档。 页面里出现的每一个默认值都是从那儿抄的:formatting 不写时是 alpacaranking 不写时是 falsesplit 不写时是 traincolumnsprompt / query / response / messages 分别默认对应 instruction / input / output / conversationstags 的七个键默认是 from / value / human / gpt / observation / function_call / system

覆盖链也是规格原文的描述:hf_hub_urlms_hub_url 指定后, 忽略 script_urlfile_namecloud_file_namescript_url 指定后,忽略 file_namecloud_file_namecloud_file_name 指定后,忽略 file_name; 以上都没指定时,file_name 必填。 页面顶部那个「生效来源字段」,就是按这条链推出来的。

本站没有跑过 LlamaFactory 的训练,所以这里不会出现任何实测数字、显存占用、 训练耗时或者「这样配效果更好」的说法。工具能说的只有一句:按官方规格,你这段描述哪里对不上。

怎么用

第一步,粘对东西。输入单位是某一个数据集对应的那个描述对象, 不是整个文件。你可以直接粘 { "file_name": "data.json", ... } 这个对象, 也可以粘 { "my_data": { ... } } 这样的片段——后者会取第一个值来校验。 如果一个文件里有十个数据集,就一段一段粘。

第二步,先看顶部两个推导值。「生效格式」和「生效来源字段」是最容易和预期不一致的两处。 如果你以为在读本地文件,结果生效来源字段显示的是 hf_hub_url, 那说明你的本地路径根本没被用上——这一条排在所有细节前面。

第三步,按三档处理。error 必须改;warn 多半是「你写的东西不会生效」, 删掉被忽略的字段能让配置和实际行为对上;info 只是告诉你某个默认值正在起作用, 确认一下是不是你想要的就行,不需要为了消灭 info 而把默认值全都显式写一遍。

第四步,拿示例当对照。不确定某个字段该怎么写时,点「载入示例」, 对照 alpaca 与 OpenAI 两份最小可用描述的结构,比对着改自己的。

它算不了什么

它不看你的数据文件。这是纯前端页面,你粘进来的文本留在浏览器里、不上传, 它也就没有办法知道你的 data.json 里有多少条、 描述里写的列名在文件里到底存不存在、内容有没有截断或者编码问题。 描述全绿,只代表字段组合符合规格,不代表训练跑得起来。

它不评价你的数据。样本够不够、质量高不高、要不要清洗、配比怎么调—— 这些页面一律不给判断。给了也是编的:它连你的文件都没读到。

它不给规格之外的建议。凡是报出来的每一条,背后都能在 data/README.md 里找到对应的一句话。规格里没写的,页面上就不会出现。 所以你不会在这里看到「建议加上 system 列」这种话——那是别人的偏好,不是官方规格。

它不校验多模态与工具调用的数据结构。 images / videos / audios / tools 这几个列名在不在规格里,它认; 但这些列指向的内容长什么样、路径对不对,它读不到,也就不管。

想把数据格式这条线从头理一遍,可以从 LlamaFactory 专题按顺序读。

常见问题

这个校验器的规则是从哪儿来的?是你们总结的经验吗?

不是经验,是照抄。规则全部来自 LlamaFactory 仓库 data/README.md 里那段 dataset_info.json 字段规格,以及同一篇里 Alpaca、ShareGPT、OpenAI 三节的格式说明。默认值也是照抄的:formatting 默认 alpaca,ranking 默认 false,split 默认 train,columns 的 prompt/query/response/messages 默认对应 instruction/input/output/conversations,tags 七个键默认 from/value/human/gpt/observation/function_call/system。页面上没有一条是我们自己加的「最佳实践」,也没有任何我们实测出来的数字——本站没有跑过 LlamaFactory 的训练。

error、warn、info 这三档分别代表什么?

error 是按官方规格必然出问题的:比如五个数据来源字段一个都没写(规格写明其余四个都不指定时 file_name 必填)、formatting 填了 alpaca 和 sharegpt 之外的值、ranking 开了但 columns 里缺 chosen 或 rejected。warn 是规格里明写会被忽略或覆盖、容易踩的:比如同时写了 hf_hub_url 和 file_name(前者生效、后者被忽略)、给 alpaca 格式配了 messages 列、tags 里出现了七个官方键之外的键名、顶层键拼错。info 不是问题,只是提醒你某个字段没写、正在走官方默认值,比如没写 split 就是 train。

为什么它不告诉我数据集有多少条、质量好不好?

因为它读不到你的数据文件。这个工具是纯前端的,你粘进来的只是 dataset_info.json 里的一段描述,浏览器里没有你的 data.json,也不会把任何内容传到服务器上。所以它不知道你有多少条样本、列名和文件里的字段对不对得上、内容有没有脏数据。它做的全部事情,是拿这段描述的字段组合去比对官方规格。字段组合全绿也不等于训练能跑通——这两件事是分开的。

我粘了整个 dataset_info.json,为什么只校验了一个数据集?

这个工具的输入单位是「某一个数据集对应的那个描述对象」。如果你粘的是 { "数据集名": { ... } } 这种片段,它会取第一个值当描述对象来校验;如果你粘的是整个文件、里面有十个数据集,它也只会看第一个。想逐个查就一段一段粘。判断依据是顶层键:只要顶层出现了规格里列出的键(file_name、formatting、columns、tags 这些),它就当成描述对象本身处理。

OpenAI 格式为什么示例里写的是 formatting: sharegpt?

因为按 data/README.md 的说明,OpenAI 格式是 ShareGPT 格式的一种特例,走的仍然是 sharegpt 那一套,靠 tags 把角色名和字段名映射过去:role_tag 映到 role、content_tag 映到 content、user_tag 映到 user、assistant_tag 映到 assistant、system_tag 映到 system。所以它不是第三种 formatting 取值——规格里 formatting 只允许 alpaca 和 sharegpt 两个值,填别的会被本工具报成 error。

想把 LlamaFactory 从装环境跑到出模型?

从安装、数据格式到 LoRA 参数与推理导出,奇连 AI 的 LlamaFactory 专题按顺序排好了。

进专题