大模型用起来很简单:一个输入框,一段回答。真要上线跑业务,问题立刻变成一堆——为什么它记不住上一轮定下的约定?为什么同一个问题问两次答案不一样?为什么加个检索突然就准了,加错了又悄悄变差?

这些答案不在 API 文档里,在它的内部实现里。这个系列把它拆开,一个零件一个零件看:它怎么读、怎么记、怎么忘、怎么伸手调工具。你不需要机器学习背景,但得写过业务代码、知道接口和索引是什么。十三篇读完,这三个问题会有答案:这个需求该不该用大模型、该在哪一层解决、出了问题该往哪儿查。

大模型这一路是怎么长过来的,决定了它为什么会记不住、会编、两次答得不一样。

一、五跃:每解决一个旧问题,就暴露一个新问题

大模型这九年(2017–2026),是五次「解决旧问题、暴露新问题」的接力。 每一跃解决的,都是上一跃留下的麻烦。

但:光有架构,参数还太小

但:一件事一套模型,太碎

但:会续写,不会回答问题

但:答得更自信,也编得更自信

2017 Transformer
解决:RNN 只能串行,模型堆不大

2018-2020 预训练 + 微调
解决:每件事都要从头训

2020 GPT-3
解决:一套模型干多件事

2022 RLHF
解决:学会好好回答问题

2023-2026
多模态 · 长上下文 · 推理 · Agent
解决:只会读文本、记不住、不会想、不会动手

第一跃|2017,Transformer。

在这之前,模型读文本是「一个字一个字念」的——RNN(循环神经网络)每读一个词,就把当前的理解压成一个状态,和下一个词一起送进下一步。这带来两个死结:只能串行计算,GPU 闲着;句子一长,前面的信息就衰减没了。Transformer 是 2017 年提出的一种新的模型结构,专治这两个死结:它把「按顺序读」换成「同时看全部,再决定该关注谁」,一次并行计算处理整段文字。它真正的意义在于让并行成为可能;而只有能并行,模型才堆得大。

第二跃|2018–2020,预训练 + 微调。

以前工程师每做一个功能,都要一份标注数据、从零训一个模型:做情感分析训一个,做问答再训一个。到这一代,做法变了:先用海量没标注过的原始文本预训练一个「懂语言」的底座,再拿少量标注数据微调,把它调到能干这件事。从此模型可以复用了,不必每次都从零训。

这里有个常被忽略的分岔。2018 年前后同时起步了两条路线:Google 的 BERT 走「双向理解」,把一句话挖空让模型填;OpenAI 的 GPT 走「单向生成」,永远接着往下写。当时 BERT 在榜单上更风光,但最后赢的是生成路线。原因很简单:能生成,就能把「判断」改写成「续写」;只会理解,变不出生成能力。

原版 Transformer 是为翻译设计的,两个半边分工明确:编码器先把整句英文读完,压成一串数字;解码器拿着这串数字,一个词一个词写出中文。

生成路线把编码器整个去掉了,那输入怎么办?输入不再被「读懂」,而是直接被当成前文——你的 prompt 因此只是一段「已经写了一半的文本」,模型接着往下写。所以今天几乎所有大模型都只有这一半,叫 decoder-only(只有解码器)。

问答只是其中一种用法。你让它判断一句评论是好评还是差评,它同样是接着往下写:第一个词写「好评」,这句评论就被判成了好评;第一个词写「差评」,就判成差评。判断结果不是一个额外的动作,它就是那个词本身。

第三跃|2020,做大就变强。

微调范式留下了新问题:一件事一套模型,太碎。 而把模型做得更大、喂的文本更多之后,出现了意外收获:**不用微调,只在输入里给几个例子(few-shot),它就能干没训过的事。**这一跃把「一件事一套模型」变成了「一套模型干好几件事」。

第四跃|2022,RLHF 对齐。

模型够大了,但它仍然是个「接龙选手」:你问它问题,它可能接着你的话往下编,而不是回答你。RLHF(基于人类反馈的强化学习)的解法是让人来当裁判:同一个问题给几个回答,人来排好坏,再拿这个排序去调模型。「续得像」就这样被掰成「答得让人满意」。

ChatGPT 是分水岭的真正原因:它终于肯好好回答问题了。

第五跃|2023–2026,多模态、长上下文、推理模型、Agent 化。

对齐解决的只是「不肯好好回答」,没解决「答得对不对」。奖励来自人的偏好,而人偏爱流畅、笃定的回答,于是「听起来有把握」也被一起强化了:它开始自信地编。 后面几项改进补的就是这个洞:能看图(信息不只来自文字)、能装更长的上下文(少忘事)、会先想再答(推理模型把思考过程也写成一串文字,先写出来再回答)、能调工具(不确定的事去查、去算、去做)。它们补的都不是知识,是「说得好听、不管真假」这个毛病。

没有哪一跃是凭空的灵感,每一跃都是被上一跃的问题逼出来的。 五次接力下来,能力换了一整套,可它干的那件事九年没变:拿到前文,猜下一个词。 下一节就拆这一句。

二、一句话本质:它在猜下一个 token

大模型是一个函数:给定前面的所有 token,输出下一个 token 的概率分布。 它做的是续写。推理引擎、查询引擎,都是后来贴上去的叫法。

Token 是分词器切出来的文本碎片,大致相当于一个词,或者半个词。概率分布也好理解:给每个候选词都标一个「有多可能」——比如下一个词是「猫」的可能性 0.6、「狗」0.2、「鱼」0.1,剩下的分给别的词。

从这句话出发,能直接推出三件事:

  • 它没有「腹稿」。 输出是边算边吐的,第一个字吐出来时,后面的还没定。所以它会「说着说着改口」,也会在算一道要好几步的题时中途跑偏。
  • 它的知识是压进参数的规律。 训练时把海量文本压进参数,压的过程必然会丢细节、也会把不常见的组合「抹平」,这就是幻觉的来源(第 04 篇)。
  • 它的输出是抽签,不是标准答案。 每个候选词的可能性都摆在那儿,最后选哪个,由 temperature/top-p 这类抽签规则决定(第 01 篇)。同一问题两次回答不同,不是它心情变了。

「续写」这个定位解释了很多被误传的事:它没有在回答前偷偷搜索数据库,也没有一个「想好了再开口」的内部独白。你想让它知道训练之后发生的事,只能把资料塞进上下文(第 08 篇,RAG),或者让它去调工具(第 07 篇)。

知道它在算什么,下一个问题就具体了:它的哪些部分你能改,哪些改不了。

三、三层:你站在哪一层,决定你能改什么

初学者最容易犯的错,是把三层的边界搅在一起——在 prompt 里写「请使用 2026 年最新数据」,指望它突破知识截止日期。问题出在层次错配:知识截止日期长在模型层,prompt 够不着。

层里面有什么你能改什么你改不了什么
模型层闭源 API(GPT / Claude / DeepSeek 等)、开源权重(Qwen / Llama 等)选哪一个;调 temperature / top-p;在支持的前提下做微调参数量、训练数据、知识截止日期
服务层部署和跑模型的服务、向量库、网关、缓存、监控、限流部署形态、并发与成本策略、检索方案模型本身的行为倾向
应用层Prompt、RAG、Function Calling、结构化输出、Agent几乎全部模型能力的上限

两个方向上的错配,各有一个典型:

  • 拿应用层的话术去解模型层的约束:知识过期、算不准数、没有你的私有数据,这些在 prompt 里怎么强调都没用,只能外挂检索或工具。
  • 拿模型层的手段去解应用层的问题:检索召回不准、输出格式不稳,去微调是杀鸡用牛刀,先改切块策略和 Schema 约束。

判断口诀:先问「这个约束长在模型身上,还是长在你的代码里」。长在模型身上的(知识截止、上下文长度、不会算数),只能绕过;长在代码里的(检索、格式、权限),可以直接改。

层次分清了,剩下就是四条具体的坑——它们在写方案时最先撞上。

四、四条约束:你会在哪儿撞上它

约束你会撞上的现象工程上怎么办专题
会续写,不会查证关键数字、法规条款、接口签名,它给得很顺,但可能是编的允许它说不知道;关键结论必须能溯源04
有知识,但没有「你的」知识问内部制度、问昨天刚改的接口,它答得像模像样却是旧版本私有/易变的事实走检索,不进参数08 / 09
上下文有限,而且会忘长文档问答答漏中间段;多轮对话忘了开头定的规则关键信息放首尾;长文档先切块再检索02
不会「想好了再说」多步计算、多条件判断,第一步错就一路错下去复杂任务拆成小步骤;或换推理模型,让它先把草稿写出来再作答01 / 03

这四条是设计约束,不是待修的 bug。把它们当物理定律,方案会稳很多——你不会指望一把锤子拧螺丝,也不该指望模型的参数里装着你昨天刚改的接口文档。

小结

  • 九年五跃,每一跃都在补上一跃暴露的洞
  • 本质就一句:给定前文,猜下一个 token
  • 东西分三层(模型 / 服务 / 应用),改错了层,努力全白费
  • 四条约束是设计约束:只能绕过,不能对抗

思考题

  1. 如果有人说「我们换个更强的模型,这个幻觉问题就解决了」,你会怎么回应?(提示:先分辨是它根本不知道、检索没找对,还是抽签随机让两次说法不一样——三种情况解法完全不同。)
  2. 你所在团队如果要做第一个 LLM 功能,会落在三层中的哪一层?哪些东西是你能改的,哪些是必须绕开的?(提示:把需求拆成「要它知道什么」和「要它输出成什么样」两部分。)

高频面试题

Q1:为什么 Transformer 取代了 RNN?

A:核心是并行性。RNN 必须按时间步串行计算,句子一长不仅慢,前面信息还会经多次传递衰减。Transformer 的自注意力让任意两个词直接互相看见(不再层层传递),训练可以完全并行。并行 → 模型能堆大 → 能力才涌现,这是它真正的历史意义。

Q2:预训练、微调、对齐,三者分别解决什么问题?

A:预训练学「语言与知识」(海量无标注文本,目标是接下一个 token);微调学「任务形式」(少量标注数据,让它按特定格式干活);对齐学「人类偏好」(用排序反馈让它答得有用、无害、诚实)。顺序不能颠倒:没有预训练的语言能力,后两步无从谈起。

Q3:RLHF 之后模型变强了吗?

A:模型的知识容量没变,变的是它挑下一个词时的偏向。RLHF 把偏向从「接得像」挪到「答得让人满意」。副作用同样明显:它会更倾向给出听起来完整的答案,包括在不确定时也如此。听起来更有把握,不代表真的更准,这是线上事故的常见来源。

Q4:闭源 API 和开源权重,工程上怎么选?

A:先看三样东西:数据能不能出内网、调用量对应的成本、要不要改模型行为。数据敏感或要私有化部署 → 开源权重;只是调用、追求效果上限 → 闭源 API;需要稳定格式和低延迟且量极大 → 小参数开源模型 + 约束解码往往更划算。能用应用层解决的(检索、约束、编排),别急着动模型层。

附录:术语速查

这张表不用从头读:遇到不熟的词查一行,第三列是它的出处,需要展开就翻那一篇。

词一句话篇
Token分词器切出的碎片,模型处理文本的最小单位01
参数模型里可调整的数值,「知识」就存在这里04
上下文窗口一次能看的 Token 上限,输入输出共享配额02
训练用海量文本调整参数,把语言规律压进去04
推理拿训练好的模型算一次输出,生成 Token01
微调在已有参数上再训一小轮,让它适配特定任务04
对齐(RLHF)用人类偏好排序,把「续写」掰成「按你的要求回答」04
temperature采样温度,调高发散、调低稳定01
top-p只从累计概率达 p 的头部候选里采样01
Embedding把语义变成向量坐标,用于「按意思找」05
RAG先检索资料塞进上下文,再让模型基于资料回答08
Function Calling模型输出结构化意图,执行权在你手里07

不想从头读到尾,读这四篇:01 生成循环 → 02 上下文窗口 → 04 训练三阶段 → 12 全链路。一条线下来:它怎么一个字一个字往外吐、一次能记多长、这些能力是怎么练出来的、一个请求从进门到出口经过哪些环节。这四件清楚,其余篇目用到时再查。

下一篇 01《一个字一个字蹦出来的回答》:它到底怎么一个字一个字往外蹦,以及 temperature、top-p 这两个旋钮在拧什么。

Logo

更多推荐