01 / 先明确模型会什么
预测下一个字符,不等于已经会可靠答题
第十二节的小模型只在四句短语上训练了 18 个字符。它学到的是“给定前缀,哪个字符可能接在后面”。真实大语言模型同样要处理 Token 序列,但训练数据、规模和后续训练会复杂得多。会续写文本,并不自动等于知道事实、能遵循指令或会承认不知道。
02 / 参数怎样逐阶段变化
预训练、指令微调、偏好对齐解决不同问题
选择阶段看“训练数据是什么、优化什么、得到什么”。以下以自回归 decoder-only 模型为主线,不表示所有大模型必须采用完全相同的训练流水线。
预训练和 SFT 在这里都能写成 Token 预测的交叉熵,但数据组织方式不同:SFT 让模型在“用户问题 → 期望回答”样例中练习回应。偏好数据常给同一问题的较好与较差回答;可用 RLHF 或 DPO 等方法利用这类反馈。它们是例子,不是唯一做法。指令训练论文 · DPO 论文。
03 / 真实模型的一步预测
温度改变分布,Top-k 限制候选;两者都不补知识
下面的 18 个 logits 来自第十二节已训练模型,对前缀“春天来了,”预测下一字符。调温度会改变概率的尖锐程度;Top-k 只保留最高的 k 个候选并重新归一化。点击“抽取一次”会按当前分布随机抽一个字符。
尚未抽取。
不同抽样可能得到不同字符;一旦 Top-k=1,只剩一个候选,温度再高也不会随机出其他字符。
这里展示单个字符的一步预测,不代表完整回答的质量。温度高低只改输出选择分布,不会让不存在的事实突然进入模型参数。
04 / 窗口装的是输入加输出
检索到了,也要放得进上下文
把用户问题、指令、检索到的短文和要生成的回答都放进同一个预算里。真实模型通常按 Token 计窗口;为方便手算,本页小实验用字符槽位作为示意,数值不能当成任何真实模型的 Token 上限。
正确证据根本不存在:再调窗口也装不出答案。
正确证据存在,却没有进入 Top-k:先改检索。
证据进入 Top-k,却因预算不够被丢掉:检查窗口与排序。
下面的实验会同时显示“检索到”和“真正进入上下文”的文档,避免把它们混成一步。
05 / 把故障定位到具体一层
本地 RAG 诊断台
这个演示有 5 段短文。检索器只计算问题与短文共有多少种连续两个汉字,按分数排序;同分按文档原顺序。它故意很简单,便于看见词面相似不等于包含答案。问答输出由教学脚本控制,能演示“证据足够仍答错”。
这是可检查的故障演示,不是对真实 LLM 做性能评估。实际 RAG 还需要处理分段、召回、重排、来源可信度和答案核验。RAG 原始论文。
06 / 回答流畅不等于有证据
把“幻觉”拆成可检查的环节
模型生成的是输出 Token 的分布,而不是一个内置的事实证明器。错误答案可能来自缺少相关资料、检索没找对、窗口漏掉证据,也可能是在证据已提供时仍推断或表述错误。高温可能增加输出变化,但低温和贪心选择也可能稳定地产生错误。
没有可信资料支持时,正确做法通常是承认无法据此回答,而不是编一个具体数字。
即使检索到了相关段落,也要对照原文检查事实、条件、范围和引用是否相符。
本节诊断标签采用优先顺序:资料缺失 → 检索失败 → 上下文丢失 → 有证据但回答错误。它帮助定位最早断掉的一环,并不声称涵盖所有模型错误原因。
07 / 两种常见改进手段
微调与 RAG 改的不是同一个部位
| 需求 | 更先考虑 | 理由 |
|---|---|---|
| 让回答长期遵循固定格式或行业术语 | 指令微调 / SFT | 通过示例更新模型参数,学习输出方式。 |
| 让模型依据经常更新的手册、私有文档答题 | RAG | 推理时找外部资料并放进上下文,不必为每次文档更新重训生成模型。 |
| 既要固定格式,也要引用更新的资料 | 可以结合 | 微调负责行为格式,检索负责提供当次证据;仍需验证答案。 |
| 检索器总把错误段落排第一 | 先改检索与重排 | 仅调整生成模型的回答风格,不能让遗漏的证据进入上下文。 |
“微调”也不是自动灌入可逐条核验的新知识;RAG 也不是答对的保证。决定方案时先找瓶颈:行为、检索、上下文,还是答案使用证据的能力。
08 / 本地练习
把概率与证据链都走一遍
配套代码读取第十二节已保存的 CPU 模型权重,计算温度分布,并执行本地检索、预算装箱与故障分类。不下载模型或外部资料;无需启动服务。
uv run python lessons/lesson-13-llm-use.py- 对同一组 logits 手算两个候选在 T=0.5 与 T=2 时的概率比,解释为什么温度改变相对差距。
- 解释 Top-k=1 为什么不受温度变化影响,并在页面多抽几次核对。
- 用海豚问题依次制造检索失败、上下文丢失和有证据的情况,记录 Top-k、窗口与输出预留。
- 用蓝鲸问题在已有正确证据时切换“故意给错误答案”,指出错误位于哪一层。
- 给五段短文加一段企鹅寿命资料,再运行代码,预测“资料缺失”的诊断如何改变。
09 / 自测