在准备大语言模型微调的多轮对话数据时,许多工程师都会接触到 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 字符以内,避免截断或注意力稀释。
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" 值。
