三种主流LoRA微调数据集格式通俗详解 一、先把你遇到的2种对话格式完整举例格式1conversations复数from/value——你现在val.jsonl在用的格式全网Qwen通义千问、Llama中文社区、AutoDL大量教程最常用{conversations:[{from:human,value:import导入几种写法},{from:gpt,value:import 模块from 模块 import 函数/类from 模块 import *不推荐污染命名空间。}]}{conversations:[{from:human,value:filter函数作用},{from:gpt,value:filter(判断函数,可迭代对象)过滤保留返回True的元素生成过滤后的迭代器。}]}关键词外层键conversations复数角色键from内容键value角色固定两种human用户提问 /gptAI回答注意一个 conversations 放在一行 不要换行。格式2conversation单数role/content——HuggingFace官方标准格式transformers/peft/trl原生支持国外Llama、Mistral原版通用{conversation:[{role:user,content:Python多进程如何传递数据},{role:assistant,content:使用multiprocessing.Queue管道、Manager共享容器...},{role:user,content:那跨机器呢},{role:assistant,content:跨机器用RPC、Redis队列或者Celery}]}{conversation:[{role:user,content:venv创建虚拟环境命令},{role:assistant,content:python3 -m venv xxx}]}关键词外层键conversation单数角色键role内容键content角色固定两种user用户提问 /assistantAI回答注意一个 conversation 放在一行 不要换行。格式3单轮指令格式 instruction/input/output补充单轮问答专用{instruction:Python多进程如何传递数据,input:,output:使用multiprocessing.Queue管道、Manager共享容器...}{instruction:Python多进程如何传递数据,input:,output:使用multiprocessing.Queue管道、Manager共享容器...}3种 jsonl 格式统一校验importjsonimportsysdefcheck_all_format_jsonl(file_path):total_lines0json_syntax_err[]# JSON语法错误行invalid_data_lines[]# 字段/内容无效行valid_samples[]withopen(file_path,r,encodingutf-8)asf:forline_num,raw_textinenumerate(f,start1):total_lines1lineraw_text.strip()# 跳过纯空行ifnotline:continue# 第一步校验单行JSON语法是否合法try:datajson.loads(line)exceptExceptionase:# 区分典型json数组报错给用户提示格式混淆问题err_strstr(e)tipifExtra datainerr_strorExpecting valueinerr_str:tip【提示疑似写成普通JSON数组JSONL要求一行一条完整对话对象不能多行拆分单个JSON】json_syntax_err.append((line_num,f{err_str}{tip},line[:120]))continueformat_okFalse# 格式1国内Qwen conversations复数 from/value ifconversationsindataandisinstance(data[conversations],list):conv_listdata[conversations]iflen(conv_list)0:invalid_data_lines.append((line_num,【格式1】conversations对话数组为空))continueturn_validTrueforturninconv_list:iffromnotinturnorvaluenotinturn:turn_validFalsebreakifturn_valid:format_okTrue# 格式2HF国际标准 conversation单数 role/content elifconversationindataandisinstance(data[conversation],list):conv_listdata[conversation]iflen(conv_list)0:invalid_data_lines.append((line_num,【格式2】conversation对话数组为空))continueturn_validTrueforturninconv_list:ifrolenotinturnorcontentnotinturn:turn_validFalsebreakifturn_valid:format_okTrue# 格式3单轮指令 instruction output elifinstructionindataandoutputindata:ins_textstr(data.get(instruction,)).strip()out_textstr(data.get(output,)).strip()iflen(ins_text)0andlen(out_text)0:invalid_data_lines.append((line_num,【格式3】instruction和output全部为空))continueformat_okTrue# 三种格式都不匹配ifnotformat_ok:invalid_data_lines.append((line_num,不匹配任意支持格式支持1.conversations(from/value) 2.conversation(role/content) 3.instructionoutput))continue# 校验整体文本不能全为空full_text.join(str(v)forvindata.values()).strip()iflen(full_text)3:invalid_data_lines.append((line_num,样本有效文本太短无训练价值))continue# 全部校验通过存入合格列表valid_samples.append(data)# 输出校验汇总报告 print(*70)print(f校验文件{file_path})print(f文件总行数{total_lines})print(f✅ 完全合格样本{len(valid_samples)})print(f❌ JSON语法错误行数{len(json_syntax_err)})print(f⚠️ 字段/内容无效行数{len(invalid_data_lines)})print(*70)# 打印JSON语法错误详情ifjson_syntax_err:print(\n【JSON语法错误必须修复否则无法训练】)foridx,err_msg,snippetinjson_syntax_err:print(f行{idx}报错{err_msg})print(f片段预览{snippet}\n)# 打印无效样本详情ifinvalid_data_lines:print(\n【无效样本建议修改/删除】)foridx,reasonininvalid_data_lines:print(f行{idx}问题{reason})# 导出清洗后的纯合格数据output_fileclean_valid_data.jsonlwithopen(output_file,w,encodingutf-8)asfw:foriteminvalid_samples:fw.write(json.dumps(item,ensure_asciiFalse)\n)print(f\n✅ 校验结束干净数据集已输出至{output_file})if__name____main__:# 命令行传参用法python check_all_format_jsonl.py val.jsonliflen(sys.argv)1:target_filesys.argv[1]# 默认读取train.jsonlelse:target_filetrain.jsonlcheck_all_format_jsonl(target_file)二、实际微调场景哪个用的最多国内中文模型Qwen、通义、Baichuan、Yi第一名conversations 复数 from/value你现在的格式90%国内云教程、AutoDL、开源中文微调项目全是这套专门适配阿里Qwen系列开箱即用。国外英文模型Llama2/3、Mistral、Phi第一名conversation 单数 role/contentHugging Face、peft、trl库原生默认解析这套国外开源项目统一标准。单轮简单问答小任务、分类、翻译instruction单轮格式用得多不需要多轮对话场景。三、两种对话格式优缺点大白话无专业黑话1. conversations复数 from/value【国内中文首选】优点适配所有国产大模型Qwen、百川、Yi、GLM网上现成训练脚本直接跑不用改代码社区中文数据集几乎全是这个格式下载开源数据不用转换多轮对话天然适配支持来回多轮聊天工具、角色扮演微调兼容性拉满大部分中文QLoRA/LoRA训练脚本写死解析conversations拿来就能训练。缺点国外库原生不识别直接拿海外Llama训练脚本跑会报字段找不到需要改代码适配没有行业国际统一标准不同小众项目偶尔会乱改关键词比如有人写bot代替gpt容易踩坑如果你后续想做英文模型微调必须全部转成role/content格式。2. conversation单数 role/content【国际通用标准】优点Hugging官方原生标准transformers、peft、accelerate、trl全部内置支持不用自己写解析逻辑全球统一规范不管Llama、Mistral、GPT类模型全部通用换模型不用改数据工具生态完善数据集可视化、清洗、拆分工具默认识别这套格式兼容性最强官方文档、原版开源代码全基于这套出问题更容易搜到解决方案。缺点国产中文模型很多训练脚本不兼容直接导入Qwen训练会提示找不到conversation字段要改数据或代码国内开源中文数据集很少是这个格式下载后需要批量转换字段名。四、实操建议训练Qwen2系列保留你现有的conversations复数格式不用转换国内所有Qwen微调教程、AutoDL脚本都是这套减少改代码踩坑我刚给你更新后的校验脚本已经兼容该格式不会再判定数据错误。未来如果要微调海外Llama/Mistral再写一段简单代码批量转换格式把外层键conversations→conversationfrom: human→role: userfrom: gpt→role: assistantvalue→content区分使用场景多轮聊天、角色扮演、工具调用 → 两种对话格式二选一单轮问答、摘要、翻译、分类 → 用 instruction 单轮格式更简单