一句话定义:Alpaca 数据格式(Alpaca data format)是一种用 instruction、input、output 三个字段描述单条微调">指令微调(instruction tuning)样本的 JSON 结构,最初由斯坦福的 Alpaca 项目提出,用来把“任务描述 + 材料 + 期望回答”打包成一条可直接用于训练的数据。
一条样本实际长这样:
```json
{
"instruction": "把下面这段话改写成正式邮件",
"input": "老板,明天我请假一天,家里有事。",
"output": "尊敬的领导:因家中有事,本人明日需请假一天,恳请批准。"
}
```
整个数据集就是一个 JSON 数组,每个元素都是上面这样的对象;工程中常见的 JSONL(每行一个 JSON 对象)只是同一结构在流式处理时的写法。
三个字段分工明确:
- instruction(指令):必填,说明模型要做什么。
- input(输入):可选,任务所需的材料;没有材料就留空字符串,而不是删掉这个字段。
- output(输出):期望模型生成的答案,也就是训练时的监督信号。
打个比方,这像一张外卖工单:instruction 是“做哪道菜”,input 是“顾客备注:不要辣”,output 是“出餐标准”。没有备注就空着,工单格式不用变。
它成为事实标准的原因
1. 结构极简,三个字段一看就懂,人工标注和脚本批量生成的成本都很低。
2. 同一套 schema 同时覆盖“带材料”和“不带材料”两类任务,不必维护两种格式。
3. 渲染成提示词时只要套一个固定模板:把 instruction 与 input 拼进用户消息,output 作为回答。主流训练框架普遍内置了这类模板,数据换框架基本不用改。
4. Alpaca 项目用强模型自动生成了数万条同格式数据并公开,社区随后大量复用和二次生成,形成了路径依赖。
和相邻格式的区别
| 格式 | 一条样本的结构 | 典型场景 |
|---|---|---|
| Alpaca | instruction / input / output | 单轮指令微调 |
| ShareGPT | conversations 数组,每轮带角色与内容 | 多轮对话 |
| OpenAI 微调格式 | messages 数组,角色为 system / user / assistant | 对话微调、带系统提示 |
Alpaca 的短板也在结构本身:它天然只能表达一问一答。社区常见补法是额外加 system 字段(系统提示)或 history 字段(历史轮次),这些属于事实上的扩展而非原始定义,跨框架迁移时以目标框架的文档为准。
实际意义
对从业者,Alpaca 更像是数据流水线里的“中间格式”:各种来源的数据先统一汇入这一结构,再转换成训练框架要求的形态;看到 instruction / input / output,映射关系几乎不用想。对普通职场人,它也是一个描述工作的最小模板——说清任务、给足材料、写明期望产出,比写一大段话让模型猜要有效得多。
