第 21 讲:采样策略——temperature/top-p/top-k

模型每一步输出的是一个概率分布,不是一个词。从分布里挑出一个词,这一步不属于模型,是模型外面一段独立的、不需要训练的小算法——同一个模型,换一种挑法,行为可以判若两人。这一讲从最朴素的「永远挑最大的」讲起,手算它为什么会错过整体概率更高的句子;再看「完全按概率随机抽」为什么几乎一定会抽到奇怪的词;然后讲温度、top-k、top-p 三个旋钮各自在修什么问题。前几讲反复预告的「同一个模型为什么能给出不同回答」,答案就在这一步。

2026-09-23 · ifcalm

第 22 讲:KV Cache、量化、批处理

生成一段 500 个 token 的回答,要把模型完整跑 500 遍。这一讲讲三件让它变便宜的事:KV Cache 利用因果掩码的一个性质——旧位置永远看不到新来的词,所以它们的 K、V 算一次就可以一直复用;然后揭示逐词生成阶段真正的瓶颈不是算得慢,而是每生成一个词都要把全部权重从显存里读一遍;量化和批处理正是针对这个瓶颈的两种办法,一个让要读的东西变少,一个让读一次服务更多人。全程手算,包括一次 4 位量化,以及一个离群值怎么把它毁掉。

2026-09-23 · ifcalm

第 23 讲:上下文长度——工程瓶颈

上下文窗口是一个人人都看得到的数字,把它调大看起来只是改个参数。这一讲把前面八讲埋下的伏笔收拢成一个完整的论证:长上下文同时撞上四堵墙——预填充时注意力的平方级计算、解码时随长度线性膨胀并且每一步都要读一遍的 KV Cache、训练时没见过的位置、以及放得进去却用不好。其中前三堵可以靠工程手段推远,最后一堵有一个可以手算的数学原因:softmax 的权重总和固定为 1,候选越多,关键信息分到的越少。最后回到第 2 讲留下的旧账:为了绕开这些墙,固定大小的状态又被请了回来。

2026-09-23 · ifcalm

第 24 讲:测试时计算的代价——延迟与成本

第 19 讲说,回答前多想一会儿能换来更好的结果。这一讲给它开账单:沿用第 22 讲的示意参数,对同一个问题手算三种回答方式——直接回答、先写几千个 token 的推理再回答、并行生成 8 个答案再投票——各自要等多久、花多少、占多少显存。结论有一个反直觉的地方:推理模式的 token 数是直接回答的 21 倍,占用服务器容量却是 250 倍。然后讨论这笔钱什么时候值得花,以及第 15 讲留下的那笔账:训练时最省的模型,为什么往往不是部署时最省的模型。

2026-09-23 · ifcalm

第 25 讲:RAG 原理——模型知道的为什么不够

模型的知识存在参数里,而参数里的知识有四个硬伤:会过期、覆盖不到私有资料、对见得少的事实记得模糊、说不出出处。RAG 换了一个存放知识的地方——不指望模型记住,而是在回答之前,先从外部资料里把相关的几段找出来,放进上下文让模型读。这一讲讲清楚为什么「读」比「回忆」可靠得多,用一个四段公司制度的小知识库手算整个检索和拼接过程,再演示检索出错时会发生什么:模型会给出一个有出处、却是错的答案。

2026-09-23 · ifcalm

第 26 讲:Embedding 与向量检索

第 25 讲的关键词检索比的是字形,「带薪假」和「年假」字面不同就找不到,「年假」和「病假」共享一个「假」字反而被当成相关。这一讲把第 3 讲的「意思相近就是向量接近」从一个词推广到一整段文字:用一个模型把每段文字变成一个向量,检索就变成在空间里找离问题最近的点。讲清楚这种模型是怎么被训练出「意思」的,复用第 25 讲的四段知识库手算检索结果,再算一笔大规模检索的账:一千万段文字,怎么在不逐一比较的前提下找到最近的几个,以及怎么把 30 GB 的向量压到 1 GB。

2026-09-23 · ifcalm

第 27 讲:Function calling——工具调用机制

模型只能生成文字,它从来不会真的调用任何东西。所谓工具调用,是模型生成一段约定格式的文字,由模型外面的程序截获、执行、再把结果写回上下文。这一讲拆开这个循环的四步,复用第 25 讲的制度知识库演示一次完整的调用;讲清楚模型怎么被训练出这种能力——以及为什么训练时绝不能让模型学着写「工具结果」;再用第 11 讲的掩码技巧手算怎么保证生成的调用格式一定合法,最后讲清楚一条原则:能做什么,应该由门外的程序决定,而不是靠模型自觉。

2026-09-23 · ifcalm

第 28 讲:多步推理与规划——ReAct 等范式

第 27 讲讲了一次工具调用。真实的任务常常要连续调用好几次,而且下一步查什么,取决于上一步查到了什么——事先没法把整条路线写好。这一讲把一次调用扩展成一个循环:想一步、做一步、看结果、再想下一步,这种写法叫 ReAct。用第 25 讲那个「先查上级、再查部门、再查标准」的问题手算一条完整的执行轨迹,然后算三笔账:每一步都可能出错,成功率会连乘下降,能否察觉并重试决定了长任务的成败;每一步的结果都堆进上下文,撞上第 23 讲的墙;以及循环什么时候该停,由谁来决定。

2026-09-23 · ifcalm

第 29 讲:幻觉的机制性成因

第 1 讲许下过一个承诺:证明幻觉不是模型坏了,而是目标函数从一开始就只承诺了「看起来合理」。这一讲兑现它。幻觉不是一个原因造成的,这一讲把它拆成五个来源——不知道却必须说、被训练成了爱猜、说出口就收不回、被错误的前提带偏、读到了错的资料——每一个都能追溯到前面某几讲的机制,并尽量手算:一句只赌对了一个关键数字的话,困惑度依然低得像正确答案;在答错不扣分的打分规则下,猜永远比说「不知道」划算。最后讲清楚现有的缓解手段各自能做到哪一步,以及为什么没有一种能根除它。

2026-09-23 · ifcalm

第 30 讲:Prompt injection、越狱

两类攻击,一个根源。越狱是用户自己想让模型说出对齐压下去的内容;提示注入是第三方把指令藏进模型会读到的网页、邮件、检索文档和工具结果里,受害的是毫不知情的用户。它们共同的根源是:对模型来说,指令和数据走的是同一条通道——一串 token。这一讲用第 20 讲的公式手算,换一个上下文能把一个被压到 0.37% 的回答重新抬到 26%;再用第 24 讲的「至少成功一次」反过来算,一个单次只有 1% 成功率的攻击,换 100 种说法就有 63% 的机会得手。结论是:概率性的防御挡不住反复尝试,真正的保证只能来自门外的程序。

2026-09-23 · ifcalm