在 LLaMA-Factory 进行 SFT(Directive supervision fine-tuning 指令监督微调)时,训练数据的格式 非常重要,因为大模型依赖标准化的数据结构来学习 指令-响应 模式。
identity.json
文件的数据采用了 “instruction”、“input”、“output” 这三个 key,它们的作用如下:
Key | 作用 | 示例 |
---|---|---|
“instruction” | 代表用户给 AI 的指令(问题或任务描述)。 | "instruction": "Who are you?" |
“input” | 可选,表示提供给 AI 的额外输入信息。 | "input": "" (如果不需要额外输入,可以留空) |
“output” | 期望 AI 生成的回答(AI 的理想输出)。 | "output": "I am {{name}}, an AI assistant developed by {{author}}." |
如果你要换用自己的数据集,格式应该符合 以下 JSON 结构:
identity.json文件
[
{
"instruction": "请介绍一下你自己。",
"input": "",
"output": "我是Llama-Chinese,由LLaMA Factory开发。我可以帮助您回答问题、提供信息和进行对话。"
},
{
"instruction": "翻译下面的句子:",
"input": "Hello, how are you?",
"output": "你好,你怎么样?"
},
{
"instruction": "请用Python写一个计算斐波那契数列的函数。",
"input": "",
"output": "```python\ndef fibonacci(n):\n if n <= 1:\n return n\n return fibonacci(n-1) + fibonacci(n-2)\n```"
}
]
{}
。instruction
和 output
,input
可选。instruction
是给 AI 的指令,output
是期望的 AI 输出。input
只有在额外信息需要提供时才填(例如机器翻译任务)。{
"instruction": "请翻译这句话:",
"input": "The weather is great today.",
"output": "今天天气很好。"
}
instruction
和 output
input
:{
"instruction": "写一个Python函数,计算平方数。",
"output": "```python\ndef square(x):\n return x * x\n```"
}
input
和 output
(极少数情况)instruction
可以省略:{
"input": "What is the capital of France?",
"output": "Paris"
}
instruction
是必须的,所以不建议这么做。如果你想改 key 的名字,比如你想用 "query"
代替 "instruction"
,那你需要 在 LLaMA-Factory
里修改解析代码,否则模型不会正确识别你的数据。
但最简单的做法 是 保持 instruction
、input
、output
这三个 key,因为 LLaMA-Factory 默认支持这种格式,不需要额外修改代码。
在 训练之前,可以用 Python 代码检查 JSON 格式:
import json
with open("your_dataset.json", "r", encoding="utf-8") as f:
dataset = json.load(f)
for sample in dataset[:3]: # 只检查前3条数据
assert "instruction" in sample, "数据缺少 instruction 字段"
assert "output" in sample, "数据缺少 output 字段"
print(sample)
如果没有报错,说明格式正确。
[
{
"instruction": "请把以下文本翻译成法语。",
"input": "Hello, how are you?",
"output": "Bonjour, comment ça va?"
}
]
适用于 机器翻译微调。
[
{
"instruction": "写一个 Python 函数,判断一个数是否是素数。",
"input": "",
"output": "```python\ndef is_prime(n):\n if n < 2:\n return False\n for i in range(2, int(n ** 0.5) + 1):\n if n % i == 0:\n return False\n return True```"
}
]
适用于 代码生成模型微调。
[
{
"instruction": "请总结以下文章的主要内容。",
"input": "最近人工智能技术取得了重大突破,许多公司开始投入大规模模型的研究。",
"output": "人工智能技术发展迅速,公司纷纷加大对大模型的投入。"
}
]
适用于 文本摘要微调。
✅ LLaMA-Factory 训练数据默认使用 instruction
、input
、output
三个 key。
✅ 确保 JSON 格式正确,否则模型无法正确学习。
✅ 如果要自定义 key,建议修改 LLaMA-Factory 的代码(不推荐),或保持默认格式。
✅ 数据结构要根据任务类型调整,比如:
instruction
+ output
instruction
+ input
+ output
instruction
+ output
instruction
+ input
+ output
结论:如果你想换数据集,只需要用 instruction
、input
、output
结构组织数据,并替换内容,就可以直接用于 LLaMA-Factory 训练!