llama-factory加载sharegpt数据集失败,主因是数据结构不合规或dataset_info.json未正确配置;需校验system与conversations字段、配置formatting为"sharegpt"并映射tags、规范本地路径、处理嵌套system、精确指定split与subset。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在LLaMA-Factory中加载ShareGPT格式数据集时遇到解析失败、字段缺失或转换报错等问题,则很可能是由于数据结构不合规或dataset_info.json配置项未正确适配ShareGPT格式所致。以下是针对该问题的多种配置方法:
一、标准ShareGPT数据结构校验与补全
LLaMA-Factory要求ShareGPT格式数据必须包含conversations数组和system字段,二者缺一不可;缺失system将直接导致ValueError: Failed to convert pandas DataFrame to Arrow Table from file错误。需确保每条样本均为完整JSON对象,且conversations中至少含一对human/gpt消息。
1、打开原始data.json文件,逐条检查每个JSON对象是否含有system键;
2、对不含system字段的样本,统一补充默认系统提示,例如:"system": "You are a helpful, respectful assistant.";
3、确认conversations数组内每条消息均含from(值为human或gpt)和value两个键;
4、保存文件后,使用json.loads()在Python中验证文件可被无错加载。
二、dataset_info.json中ShareGPT格式的完整配置项
LLaMA-Factory通过dataset_info.json识别数据格式及字段映射关系。当使用ShareGPT格式时,必须显式指定formatting: "sharegpt",并准确声明tags子对象以匹配实际JSON键名,否则框架将按默认alpaca逻辑解析,引发字段错位。
1、在dataset_info.json的对应数据集条目中,设置"formatting": "sharegpt";
2、在"tags"对象内,明确定义"role_tag"为"from"、"content_tag"为"value";
3、若原始数据中角色标识为"user"与"assistant",则需将"user_tag"设为"user"、"assistant_tag"设为"assistant";
4、若数据中存在system字段但键名为"sys",须添加"system_tag": "sys";
5、完整示例配置如下:{"formatting":"sharegpt","tags":{"role_tag":"from","content_tag":"value","user_tag":"human","assistant_tag":"gpt","system_tag":"system"}}。
三、本地ShareGPT数据集的路径与加载方式配置
当数据集存放于本地而非Hugging Face或ModelScope平台时,必须通过file_name参数指向绝对或相对路径,并确保LLaMA-Factory启动时工作目录能正确解析该路径;若路径错误或权限受限,将出现“File not found”或空数据集列表。
1、将data.json置于data/your_dataset_name/目录下(如data/websec_sharegpt/data.json);
2、在dataset_info.json中,设置"file_name": "websec_sharegpt/data.json";
3、启动LLaMA-Factory前,确认当前终端所在路径为项目根目录(即含llamafactory-cli命令的路径);
4、若使用Web UI,需在Data dir输入框中填入data(而非完整绝对路径),且该路径需为相对于启动命令执行位置的路径;
5、验证方式:在Web UI的Dataset下拉菜单中可见your_dataset_name,且点击后显示样本数量非零。
四、多角色/嵌套system字段的兼容性处理
部分ShareGPT变体将system置于conversations首条消息中(如{"from":"system","value":"..."}),此结构不被LLaMA-Factory原生支持,会导致system内容被忽略或解析为普通对话轮次,从而破坏指令一致性。
1、遍历所有conversations数组,查找"from": "system"的消息;
2、提取其value内容,作为独立system字段插入同级;
3、从conversations中移除该条system消息;
4、确保剩余conversations中仅含human与gpt角色;
5、最终结构必须严格符合LLaMA-Factory文档定义:system字段与conversations字段同级,且conversations内不含from为system的条目。
五、ShareGPT数据集切分与子集控制配置
LLaMA-Factory默认加载split: "train",但若原始ShareGPT数据文件包含验证集或测试集字段(如test.json),需通过split与subset参数精确指定加载范围,否则可能误加载全部数据或报错找不到切分。
1、若数据文件为sharegpt_zh.json且内部已按train/test切分,需将其转为Hugging Face Dataset格式并上传,或改用script_url自定义加载器;
2、若单文件内含多个切分,应提前用脚本拆分为train.json、test.json等独立文件;
3、在dataset_info.json中,为训练集配置"split": "train",为测试集新建独立条目并设"split": "test";
4、若数据来自Hugging Face数据集仓库且含子集(如Open-Orca/Open-Orca的preference子集),需同时设置"subset": "preference"与"split": "train";
5、关键验证点:num_samples参数仅限制采样数量,不改变split语义;若split值不存在于数据中,将返回空数据集。











