ShareGPT数据集格式详解:JSON对话结构字段含义
准备为大型语言模型进行多轮对话数据的微调时,ShareGPT格式几乎是绕不开的关卡。坦白讲,这个格式的JSON结构与字段定义并不复杂,但很多人在字段命名、嵌套层级或角色语义上踩过坑。今天就把这套格式的完整逻辑拆解清楚,确保你拿到的数据规范稳定,训练过程不出异常。
以下七点,逐一讲透。
一、核心结构:conversations 数组
ShareGPT格式的骨架就是顶层字段conversations,它必须存在且值为消息对象数组,按时间顺序排列,每条消息代表一次发言,构成完整的对话流。这是模型学习上下文连贯性的基础。
1、先确认数据根对象里包含"conversations"键,且值是一个JSON数组。
2、再检查数组每个元素是否都包含"from"和"value"两个键。
3、特别注意"from"字段的取值——只允许"human"、"gpt"、"function_call"或"observation"四种。不要写成"user"或"assistant"(除非在dataset_info.json中已做显式映射)。
二、发言者标识:from 字段的语义规则
from字段定义谁在说话,直接影响模型对对话逻辑的建模方式。不同角色触发不同的处理路径:例如function_call必须配合tools字段才能启用工具调用能力。
1、"human"代表真实用户的输入,必须出现在每轮对话的起始位置,或者上一轮"gpt"响应之后。
2、"gpt"代表模型生成的自然语言回复,必须紧跟在"human"或"observation"之后。
3、"function_call"表示模型决定调用外部工具,其value必须是合法JSON字符串,且字段名必须与tools中声明的name严格一致。
4、"observation"表示工具执行返回的原始结果,value就是工具输出的原始JSON或文本,模型不能自行改写这部分内容。
三、内容承载:value 字段的格式约束
value字段存的是实际内容,格式必须与from角色语义匹配。格式出错时,微调阶段要么tokenization异常,要么直接训练崩溃。
1、当from为"human"或"gpt"时,value应为纯UTF-8文本,禁止包含未转义的双引号、换行符或控制字符。
2、当from为"function_call"时,value必须是单行JSON字符串,且符合对应tool的parameters schema。例如{"name": "get_weather", "arguments": {"location": "北京"}}。
3、当from为"observation"时,value应为工具返回的原始响应体,如果是JSON则保持原样,不要添加任何额外说明文字。
四、可选系统指令:system 字段的作用范围
system字段是字符串类型,用于设定全局对话背景或行为约束,只在当前样本内生效,不影响其他样本。它不参与对话轮次序列,但在模型输入拼接时通常放在conversations之前。
1、确认system字段是顶层键,与conversations同级,而不是嵌套在某个conversations项内部。
2、确保system值为非空字符串,长度建议控制在512字符以内,避免截断或attention稀释。
3、如果想禁用system提示,直接省略该字段即可,不要设成空字符串或null。
五、工具描述声明:tools 字段的结构要求
tools字段是字符串类型,其值为一个JSON数组的字符串化表示,用来向模型声明可用工具集合及其调用规范。只有当消息中包含"function_call"或"observation"时才必需。
1、验证tools值能否被json.loads()成功解析为Python列表,且列表中每个元素都是字典。
2、检查每个tool字典是否包含"name"(字符串)、"description"(字符串)和"parameters"(字典)三个必需键。
3、确认"parameters"字典中"properties"的每个子字段的"type"值属于"string"、"number"、"boolean"、"object"或"array"之一。
六、数据集注册:dataset_info.json 中的字段映射
在LLaMA-Factory这类训练框架中,dataset_info.json必须明确定义ShareGPT格式各字段与框架内部列名的映射关系,否则加载时会报“column not found”错误。
1、确认"formatting"字段值为"sharegpt",而不是"alpaca"或"plain_text"。
2、检查"columns"对象中"messages"键指向"conversations","system"键指向"system","tools"键指向"tools"。
3、验证"tags"对象中"role_tag"为"from","content_tag"为"value","user_tag"为"human","assistant_tag"为"gpt"。
七、典型错误示例与修正
常见格式错误会导致数据加载失败或训练异常,以下高频问题及对应修正动作,逐一核对即可。
1、错误:conversations数组中某条消息缺失value字段——立即补全该消息的"value": "",不可留空或删除整条消息。
2、错误:system字段值为null而非字符串——将"system": null改为"system": ""或直接移除该键。
3、错误:tools字段为JSON对象而非JSON字符串——将"tools": [{...}]改为"tools": "[{...}]",确保其为字符串类型。
4、错误:from字段使用"user"而非"human"——全局替换所有"from": "user"为"from": "human",并同步更新dataset_info.json中的"user_tag"值。
