过去,微调意味着昂贵的 GPU 集群与数百万条样本。如今,一份精心准备、仅数千条样本的数据集,加上一块消费级 GPU,就能把一个小型语言模型(SLM)适配到你的具体任务上。这正是我们在 Code Language Hub 用来交付生产级智能体的工作流程。
什么才算「小型」语言模型?
我们说的「小型」大致指 0.5B–8B 参数量 的模型 —— 例如 Llama 3 8B、Qwen 2.5 7B、Gemma 2、Mistral 7B 或 Phi-3。这些模型足够大,能真正派上用场;又足够小,可用参数高效方法微调,并以低成本、低延迟运行,甚至可本地部署。
对多数企业而言,一个专注于 单一 任务的 SLM —— 例如给工单分类、从发票中抽取字段、以固定语气回答问题 —— 在该任务上会胜过庞大的通用模型,而运行成本只是其零头。
第 1 步 —— 先判断你是否真的需要微调
微调适合用来教「行为」:一致的格式、语气或任务。它不适合用来注入「会变化的事实」—— 那是检索增强生成(RAG)该做的事。
| 什么时候用微调…… | 什么时候用 RAG…… |
|---|---|
| 你需要一致的风格、语气或输出格式 | 你的知识每周都在变,或必须可溯源引用 |
| 任务范围窄且可重复 | 你有庞大且不断增长的文档库 |
| 你想要更低延迟 / 更短提示 | 你需要答案可追溯到来源 |
实践中我们常常两者并用:用微调塑造行为,再用 RAG 提供最新事实。可参阅姊妹文章 RAG 还是微调:何时用哪个。
第 2 步 —— 准备数据集(这占了 80% 的工作)
模型质量取决于数据质量。对指令式微调,把每条样本组织成一个消息三元组 —— 系统指令、用户输入、以及理想的助手回复:
# 每行一条样本(JSONL) {"messages": [ {"role":"system", "content":"你是 CLH 的客服,请用两句话回答。"}, {"role":"user", "content":"一个网站项目需要多久?"}, {"role":"assistant", "content":"多数网站视范围需 3–6 周。我们会在免费咨询后确认时间线。"} ]}
- 质量重于数量。几百条干净、一致的样本胜过几万条含噪声的样本。
- 覆盖边缘情况。把刁钻输入、拒答、以及你真正想要的「我不知道」情形都纳入。
- 留出 10–15% 作为验证集,模型永不在其上训练。
- 去重并检查训练集与验证集之间是否泄漏。
第 3 步 —— 用 LoRA / QLoRA 高效训练
你几乎从不需要更新模型的全部权重。LoRA(低秩适配)在冻结基座模型的同时,只训练一小组适配器权重。QLoRA 再加上 4-bit 量化,使 7B–8B 模型能在单块 16–24GB 显存的 GPU 上从容微调。
- 从较小的学习率开始(例如 LoRA 用
2e-4),训练 1–3 个 epoch。 - 盯住验证 loss —— 当它趋平或回升(过拟合)时就停止。
- 让适配器与基座模型分离,方便随时替换或回滚。
第 4 步 —— 用任务本身评估,而非只看 loss
训练 loss 只能说明模型在学「某些东西」,并不能说明模型「好用」。构建一个贴近真实使用、诚实的小型评测集并打分:
- 任务指标 —— 抽取用 exact-match / F1,分类用准确率。
- LLM 当评审 —— 用更强的模型评估有用性与格式遵循度。
- 人工抽查 —— 上线前务必看 20–30 条真实输出。
第 5 步 —— 部署与监控
用 vLLM、Ollama 或托管端点等推理服务来部署合并后的模型(或基座 + 适配器)。然后闭环:记录真实的输入与输出、标记失败案例,并把它们并入下一版数据集。微调不是一次性的 —— 它是一个循环。
想让我们帮你做?Code Language Hub 端到端设计、微调并部署生产级 AI 智能体。告诉我们你的使用场景 →
关键要点
- SLM(0.5B–8B)是成本、延迟与专精之间的甜蜜点。
- 用微调塑造 行为;用 RAG 提供 事实。
- 数据集质量决定一切 —— 先投资于此。
- LoRA/QLoRA 让单 GPU 微调成为现实。
- 用真实任务评估,并持续迭代。
Raphael Ting