Appearance
一句话总结:微调解决行为/能力问题(格式、风格、工具调用),不解决知识问题(知识走 RAG);升级顺序 prompt → RAG → 微调,微调是最后手段。
什么时候该微调(vs Prompt vs RAG)
| 手段 | 解决的问题 | 成本 | 何时用 |
|---|---|---|---|
| Prompt Engineering | 80% 场景 | 小时级、近零 | 先从这里开始:角色/工具/输出格式/行为边界 |
| RAG | 知识新、可追溯 | 天级 | 知识密集型、需引用文档 |
| 微调 | 风格/格式/行为固化、窄域技能 | 周级 | prompt 到 95% 但 5% 失败致命;格式零变化需求 |
- 微调典型场景:工具调用(Function Calling)准确率、固定 JSON Schema、特定语气、窄域技能
- 微调灌知识是"大炮打蚊子":知识更新一次就要重训,RAG 随时可改
- 风险:灾难性遗忘(特定领域微调导致通用任务退化)、过拟合训练集、局部指标提升但别处退化
三种微调方案选型
| 方案 | 原理 | 显存 | 适用 |
|---|---|---|---|
| 全参数微调 | 所有权重更新 | 高 | 数据>10k、显存充裕 |
| LoRA | 冻结原权重,加低秩适配器 | 7B 可 16GB 卡 | 中等数据、性价比 |
| QLoRA | LoRA + 4bit NF4 量化 | 7B 约 10-14GB(单 3090/4090) | 数据不大、单卡 |
LoRA 三大优势:不破坏原模型(摘掉适配器即恢复通用能力)、显存低、多业务可切换(金融/医疗/客服 LoRA 像插件一样加载卸载)。
数据准备(成败关键)
- 去重:精确去重(MD5/SHA256)+ 模糊去重(MinHash/SimHash)
- 脱敏:隐私数据过滤(PII filter)
- 质量检查:system prompt 是否误写进 output、同一指令是否自相矛盾、脏数据(截断/乱码/HTML 标签)
- 数据量:数百到数千条高质量示例即可;工具调用数据集常见 1-2k 合成样例
工具调用(FC)微调数据
- 三类情景都要覆盖:① 信息足够→调用工具;② 缺参数→先澄清;③ 有害/越界→拒绝
- 数据来源:真实对话日志 + 规则硬例(跨月日期/拼写错误/缺参/schema 边界)+ 错误驱动 bad case(每次工具调用失败转成纠正样例,闭环改进)
- 构造流程:schema 当"蓝图" → 每工具 10-20 条手工种子 → LLM 生成 50-200 条自然语言变体
- 格式校验(OpenAI 微调格式):assistant tool_calls 必须有同 tool_call_id 的 tool 消息配对;arguments 必须是 JSON 字符串;顺序 user → assistant(tool_calls) → tool(result) → assistant(处理结果)
训练与评估
- QLoRA 参数高效微调;超参(temperature/重试策略)与训练超参同等对待;数据少建议早停
- 先建评估 Harness 再微调:固定测试集 + 基线模型 + 业务指标 + 自动评分 + 人工复核 + 错误分类 + 版本对比
- DPO:教判断类行为(SFT 表达不了的取舍)
面试要点
- 升级顺序:prompt → RAG → 微调;微调治行为不治知识
- 全参/LoRA/QLoRA 选型与显存量级(7B QLoRA 单卡 10-14GB)
- 数据三查:去重、脱敏、质量(角色混淆/矛盾/脏数据)
- 工具调用数据集:三类情景 + 错误驱动闭环 + tool_call_id 配对格式校验
- 微调前先建评估 Harness,警惕灾难性遗忘与过拟合