2280 字
约 7 分钟
12
S20-A04 · 训练与微调机制:预训练、Chat Template、SFT 与幻觉治理

适用读者:要判断"该微调还是该改提示词/上 RAG"的人;把基座模型当成品直接接业务的人。
前置:S20-B02(分块与 Embedding)、B03(检索与重排)、B04(幻觉与冲突)、J05(上下文工程)。
覆盖旧文:4605(大模型基础原理:训练数据与 PreTraining)、4606(同文重复)、4608(Chat Template + SFT)、4609(幻觉四种方法)、4633(Contextual Retrieval)→ 5 篇 / 约 1.6 万字符。
扩展点:E-S20-024(预训练目标与"能力从哪来"的三层归因)、E-S20-025(Chat Template 与 SFT 的最小机制、以及模板不匹配的故障)、E-S20-026(幻觉四路径与 Contextual Retrieval 的取舍)。
上一篇:S20-J05 · 上下文工程:压缩、记忆与漂移对抗
下一篇:S20-X02 · 规则资产与杂项登记。


1. 一句话结论

能力分层归因决定你该动哪一层:世界知识与语言能力来自预训练(改不了,只能换模型或补检索);指令遵循与输出格式来自 SFT/对齐(可微调);本次任务的正确性来自上下文与工具(改提示词/加检索)。用微调去补"模型不知道的公司内部事实",是最常见的浪费。

出处:A-4605(预训练)、A-4608(Chat Template + SFT)、A-4609(幻觉)、A-4633(Contextual Retrieval)。


2. 预训练在学什么(E-S20-024)

目标:给定前 n 个 token,预测下一个 token 的概率分布(next-token prediction)
数据:网页、书籍、代码、论文 → 清洗、去重、质量过滤
产物:基座模型(会续写,但不懂得"回答问题")

三层归因:

层 来源 改法 不可改的部分
语言与通用知识 预训练语料 换更大/更新的模型 训练截止日期之后的事实
指令遵循、格式、拒答风格 SFT + 偏好对齐(RLHF/DPO) 微调(LoRA/全参) 基座能力的上限
本次任务正确性 上下文、检索、工具、校验 提示词、RAG、代码校验 模型无法验证的东西(需外部工具)

判据:先问"这个错误属于哪一层"——

模型不知道某内部流程 → 第三层(RAG/上下文),不是微调
模型不肯按 JSON 输出 → 第二层(提示词约束/结构化输出/SFT)
模型基础推理能力不足 → 第一层(换模型),微调救不回来

3. Chat Template 与 SFT:从"续写器"到"助手"(E-S20-025)

Chat Template = 把 [system, user, assistant] 消息列表渲染成模型训练时见过的特殊标记格式。

基座模型看到的是纯文本续写;不做模板包裹,模型会把你的"问题"当成"文本的一部分"继续写下去
不同模型的模板不同(`<|im_start|>`、`[INST]`、`<start_of_turn>` 等)
→ 用错模板 = 输出格式崩坏、角色混淆、无故续写

最小对照(模拟,非实测数字):

输入方式 典型输出
直接把问题文本喂给基座 续写更多问题/无关文本
套正确 Chat Template(含 system 与 assistant 起始标记) 按助手角色回答
套错模板(别人家的标记) 角色混乱、提前截断、复读

SFT(监督微调)在做什么:

数据:指令-回答对(高质量、覆盖目标任务分布)
损失:通常只在 assistant 段计算(prompt 段 mask 掉)
效果:学会"按这个格式、这个风格、这类任务"回答
不做:注入新知识(脆弱、易幻觉)、提升推理上限

判据:微调的收益在"格式与风格的一致性",不在"知识"——想让模型记住 500 条产品参数,用 RAG;想让模型稳定输出你们公司的 JSON schema 与话术,用 SFT 或结构化输出约束。

版本与坑:

□ 训练用模板与推理用模板必须完全一致(含空格、换行、特殊 token)
□ SFT 数据里若混入错误示范,模型会稳定地学错
□ LoRA 的 rank/alpha 影响容量与过拟合,需留验证集
□ 微调后要回归通用能力(防止灾难性遗忘)

4. 幻觉的四种治理路径(E-S20-026,4609 的重写)

路径 机制 适用 局限
检索增强(RAG) 把可信资料放进上下文,要求"仅依据资料回答" 事实型问答、内部知识 检索不到就仍会编;chunk 缺语境易误检
工具校验 让模型调用计算/查询/代码执行得到真实值 数值、日期、状态类 需工具与权限;不能覆盖开放事实
约束解码/结构化输出 JSON Schema、枚举、正则约束 格式与字段级正确 不解决内容真假
自检/多轮验证 生成后让模型标注"哪句无依据",或多次采样比对 长文、报告 成本翻倍;模型自查也会漏

标准组合(生产推荐):

RAG 提供依据 → 结构化输出保证字段 → 工具校验关键数值 → 自检标注不确定项 → 前端明示"未找到依据"

"仅依据资料回答"的正确写法(含失败出口):

只使用 <资料> 中的信息回答。
若资料不含答案,回答"资料中未提及",并列出你检索过的关键词。
不得使用资料之外的常识补全数字、日期、人名。
每条结论后标注依据的段落编号。

5. Contextual Retrieval:给 chunk 补语境(4633)

问题:chunk 被切出来后丢失上下文——

原文:……(前文说"2024 年 Q3 财报")…… "营收同比增长 12%"
chunk: "营收同比增长 12%"     ← 谁的营收?哪一年?哪个季度?检索时无法匹配"2024 Q3 营收"

做法:索引前让模型为每个 chunk 生成一句"语境前缀",再连同原文一起 embedding:

chunk 原文:营收同比增长 12%
补语境后:  [2024 年 Q3 财报 · 公司 A · 营收] 营收同比增长 12%

收益与成本(口径必须写清):

项 说明
收益 检索召回提升(原文章称"检索失败率降低约三分之二"——原文数字,未复现,待核)
成本 索引阶段每 chunk 一次 LLM 调用(一次性);存储增大(前缀+原文)
前提 文档有稳定结构(标题/章节/时间),否则生成的语境质量不稳定
风险 语境由模型生成 → 可能引入错误语境,需抽样校验

判据:文档越长、切分越碎、越依赖"这段属于谁"的语义,Contextual Retrieval 收益越大;短文档/结构化字段明确的场景,直接给 chunk 加 metadata 更省。


6. 反例:六种"选错层"

现象 错在哪层 正确做法
内部制度答不出 第三层 RAG / 上下文注入
微调后仍答不出新知识 第三层(知识不在权重里) RAG
JSON 字段时有时无 第二层 结构化输出 + 校验重试
数学算错 第三层 工具计算
输出风格忽变 第二层 固定 system + few-shot + 低温度
用了别人模板导致复读 第二层(模板不匹配) 用模型自带 chat template

7. 自测

  1. 三层归因?各层"该动谁"?
  2. Chat Template 为什么必须与训练时一致?
  3. SFT 能不能注入新知识?为什么?
  4. 幻觉四路径与生产标准组合?
  5. Contextual Retrieval 的前提与成本?
答案
  1. 预训练(换模型)/ SFT 与对齐(微调)/ 上下文与工具(RAG、提示词、校验)。
  2. 模板决定角色标记与截断点,不一致会导致角色混淆、复读、提前结束。
  3. 不能——知识注入脆弱且易幻觉;微调改的是格式与风格。
  4. RAG/工具/结构化输出/自检;组合为"依据→字段→数值→不确定标注→明示缺失"。
  5. 文档长且切分碎、依赖"属于谁"的语义;成本是索引期每 chunk 一次 LLM 调用与存储增大。

8. 下一篇

S20-X02 · 规则资产与杂项登记 —— 12 篇 Vibe Coding 规则系列、成本优化五层、ChatGLM 部署、前端组件治理等,与 S24/S23/S14 的主讲篇对照结论。


本篇属于系列《S20 · AI 应用与工程》。旧文来源:A-4605/4606/4608/4609/4633;扩展点 E-S20-024/025/026。模型机制描述按公开论文口径,具体版本行为随厂商实现变化。

S20-A04 · 训练与微调机制:预训练、Chat Template、SFT 与幻觉治理
https://www.clxhxhhr.top/posts/5476/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。