领域大模型微调数据集构建实战

引言

你搭好了客服机器人,接了GPT-4或者DeepSeek的API,Prompt调了好几版,RAG也接上了。试了试,用户问"订单怎么还没到",它能回答出来。用户问"产品怎么用",它也能答个七七八八。

能用,但有几个绕不过去的问题。

第一是数据合规。企业客户的数据不能出内网,不能交给第三方API。尤其金融、医疗、政务这些行业,监管明确要求数据不出域。API这条路,合规上就走不通。

第二是成本控制。API调用是按token收费的,每天几千次对话,账单跑起来很快。日活上去之后,这个成本会越来越高。

所以不是API模型不够强,Prompt和RAG也确实能解决大部分问题。但合规和成本这两个硬约束,把很多企业推向了微调这条路。自己微调一个7B的模型部署在内网,数据不出域,合规过关。前期有训练成本,但跑起来之后,边际成本远低于按量计费的API。用量越大,省得越多。

解决了"为什么微调"之后,下一个问题是:数据从哪来?

微调的效果,70%取决于数据质量。模型权重是公开的,算法是现成的,算力租得到。唯独数据,得自己搞定。

下面讲三种获取数据的方式。

场景设定

假设你在一家电商平台做AI客服。用户问题五花八门,有查订单的、问产品的、投诉售后的、报技术故障的。对话有长有短,用户可能一句话说清楚,也可能绕了半天才说到正题。

你需要一份覆盖这些场景的数据集去微调模型。

历史客服对话记录

如果你所在的公司已经跑了一段时间的客服业务,聊天记录、工单、邮件里躺着大量真实对话。这些是最值钱的东西。

真实用户怎么问、真实客服怎么答、对话怎么推进、有哪些坑------合成数据永远给不了你这些。

拿到数据之后,要做几件事。

脱敏。把姓名、手机号、订单号、身份证号全部替换掉,不然合规这关就过不去。

切分。一个会话可能聊了十几轮,中间用户可能换话题。你要把完整的对话轮次切出来,保持上下文连贯。

去重和过滤。纯表情、乱码、单方面辱骂、客服只会说"稍等"------这些没用,筛掉。

聚一下类。用户问"东西在哪"、"快递怎么还没到"、"什么时候送来",其实是同一个意思。把这类意图归拢,能让数据覆盖更均衡。

这条路适合手里已经有数据的人。成本最低,因为数据是现成的,只需要投入清洗的人力。长期运营中,这是最稳定可靠的数据来源。

Dify RAG 系统临时采集

如果你没有历史数据,但有文档------产品手册、FAQ、技术说明------那可以走这条路。

思路很简单:先用最好的模型搭一个RAG系统,放出去跑一段时间,收集用户的问题和这个高级模型给出的答案。

Dify是个现成的工具,模型管理、知识库、RAG流水线都给你配好了,你只需要把文档导进去,接上GPT-4或者DeepSeek-V3的API,上线跑一两周。

跑完之后你会得到一批东西:真实用户问的问题(这个你自己造不出来),以及当前最好的模型给出来的高质量回答(这个普通模型也写不出来)。

然后把这些数据格式化成微调需要的格式,拿去训练你自己的小模型。

这条路的核心成本是API调用费。你相当于花钱买了一批高质量的训练数据,同时验证了业务流程的可行性。适合预算允许、需要快速拿到高质量数据的团队。

Easy Dataset 文档生成

前两种都走不通的话,还有一种兜底方案:完全靠合成。

Easy Dataset 是一个图形化的数据生成工具。你把产品文档、技术手册、FAQ之类的文件丢进去,它会自动分段,调用大模型从每个段落里抽问题、抽答案,最后给你导出一份完整的微调数据集。

整个过程点鼠标就能完成,不需要写代码。

安装完之后创建一个项目,配置一下模型API,上传文档,点击自动提取问题,再点击自动生成数据集,最后导出JSON文件。没了。

这条路成本最低,只需要付一点API调用费就能跑出大批量数据。最快几小时就能从零拿到一批可用数据。缺点是合成数据终究不如真实对话来得自然,有些边缘情况可能覆盖不到。但作为冷启动阶段的方案,够用了。

Alpaca 与 ShareGPT 数据格式

无论数据从哪来,最后都得喂给训练框架。LLaMA Factory是目前最主流的微调框架之一,它支持两种数据格式:Alpaca和ShareGPT。

Alpaca 格式

Alpaca格式结构简单,适合单轮问答场景。

json 复制代码
[
  {
    "instruction": "用户说:我的订单怎么还没到?请以客服身份回应。",
    "input": "订单号:ORD20240815001",
    "output": "您好,非常抱歉给您带来不便。正在为您查询......您的订单已于今日上午10:30由快递员派送,预计今天内送达。",
    "system": "你是一个专业、礼貌的电商平台AI客服助手。"
  }
]

字段就四个:instruction是指令,input是额外信息,output是预期回答,system是系统提示词。

如果你的数据都是单轮问答,用这个格式就够。

ShareGPT 格式

ShareGPT格式支持多轮对话,靠conversations列表来记录完整的对话轮次。

json 复制代码
[
  {
    "conversations": [
      {"from": "human", "value": "我的订单怎么还没到?"},
      {"from": "gpt", "value": "请问您的订单号是多少?"},
      {"from": "human", "value": "ORD20240815001"},
      {"from": "gpt", "value": "您的订单已于今日上午派送,预计今天内送达。"}
    ],
    "system": "你是一个专业、礼貌的电商平台AI客服助手。"
  }
]

human是用户,gpt是助手,按顺序排下去就行。

如果你的场景大量涉及多轮沟通,用ShareGPT更合适。单轮为主的话,Alpaca就够。

LLaMA Factory 配置

数据准备好之后,在data/dataset_info.json里加一条配置。

Alpaca格式这样配:

json 复制代码
{
  "web_customer_alpaca": {
    "file_name": "web_customer_alpaca.json",
    "formatting": "alpaca"
  }
}

ShareGPT格式这样配:

json 复制代码
{
  "web_customer_sharegpt": {
    "file_name": "web_customer_sharegpt.json",
    "formatting": "sharegpt",
    "tags": {
      "role_tag": "from",
      "content_tag": "value",
      "user_tag": "human",
      "assistant_tag": "gpt"
    }
  }
}

然后启动训练时加上--dataset web_customer_alpaca就行了。

怎么选

维度 历史对话 Dify RAG采集 Easy Dataset
数据真实性 最高 问题真实,答案合成 完全合成
数据质量 依赖清洗 最高 取决于文档质量
金钱成本
人力成本
时间效率
隐私风险

起步阶段先用Easy Dataset跑一批基础数据出来,让模型快速具备领域常识。然后搭Dify跑一两周,用高质量问题答案补充数据集。长期的话,持续积累真实客服对话,那才是最好的数据来源。

总结

微调这件事,算法和算力都不是瓶颈,数据才是。

三种数据来源,各有用处。有历史对话就用历史对话,有文档就上Dify采集,什么都没有就靠Easy Dataset合成。格式方面,单轮用Alpaca,多轮用ShareGPT。

最终目标是一样的:在满足数据合规要求的前提下,用可控的成本,让模型从"通用工具"变成"你的人"。

相关推荐
极客互动API1 小时前
企业微信 iPad 协议服务搭建与 AI 回调实战
网络·汇编·人工智能·微信·企业微信·ipad
空堂与归1 小时前
token畅享?FreeToken单卡5090跑满血DeepSeek_V4Flash
人工智能·free token
AI码农小姐姐1 小时前
AI漫剧用什么软件制作?知漫剧小说导入成片教程
人工智能
ycjunhua1 小时前
Spring AI 2.0 GA:ToolCallingAdvisor 重构与 Java Agent 新范式
java·人工智能·spring
二川bro2 小时前
零门槛上手DeepSeek Harness,从零自制arxiv搜索插件
人工智能
cxr8282 小时前
数学的本质:关系、模式与不变量的结构世界
人工智能·算法·机器学习
东莞和裕包装2 小时前
如何管控广州定制纸箱生产中的啤切精度与印刷色差质量问题
大数据·运维·网络·人工智能
AIDANHANG2 小时前
放开靠时间戳对日志前先核请求ID跨服务传播与采样关联
前端·人工智能
牛肉胡辣汤2 小时前
手握实战经验,分享AI工程落地的踩坑与收获
人工智能