适用读者:要判断"该微调还是该改提示词/上 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. 自测
- 三层归因?各层"该动谁"?
- Chat Template 为什么必须与训练时一致?
- SFT 能不能注入新知识?为什么?
- 幻觉四路径与生产标准组合?
- Contextual Retrieval 的前提与成本?
答案
- 预训练(换模型)/ SFT 与对齐(微调)/ 上下文与工具(RAG、提示词、校验)。
- 模板决定角色标记与截断点,不一致会导致角色混淆、复读、提前结束。
- 不能——知识注入脆弱且易幻觉;微调改的是格式与风格。
- RAG/工具/结构化输出/自检;组合为"依据→字段→数值→不确定标注→明示缺失"。
- 文档长且切分碎、依赖"属于谁"的语义;成本是索引期每 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。模型机制描述按公开论文口径,具体版本行为随厂商实现变化。