上一课,我们从符号主义一路聊到神经网络、大规模预训练、ChatGPT 和现代 Agent。
这一课,我们终于开始拆 LLM 本身。
但还是不打算背公式。
我们只想回答一个问题:
一句话进入大模型以后,它到底看见了什么,又是怎么一步步生成回答的?
模型看到的不是“字”,而是一串关系#
一句话先会被切成 Token。
Token 再变成向量,也就是 Embedding。
很多人第一次理解 Embedding,会把它想成“每个词有一个坐标”。这个比喻不算错,但更重要的是:
意义不是写在一个词内部的,而是体现在它与其他东西的关系中。
“猫”和“狗”可能比较近,“猫”和“微波炉”可能更远。
于是模型理解语言的第一步,就不是查字典,而是进入一个巨大的关系空间。
这已经和人类传统的符号表示很不一样。
Attention:一句话里,我现在该听谁的?#
有了向量还不够。
一句话里,每个词的意义都会受其他词影响。
例如:
小王把杯子递给小李,因为他手里没东西。
“他”到底指谁?
模型不能只看“他”自己,而要判断整句话里哪些位置和它最相关。
这就是 Attention 最直观的意义:
每个 token 都在问:为了理解我自己,我现在最该关注谁?
这比“注意力机制”四个字好懂得多。
Q、K、V 其实一点都不神秘#
很多教材一讲 Attention,就直接扔出 Q、K、V 和矩阵公式。
但它们其实对应三个很自然的问题:
- Q,Query:我现在想找什么?
- K,Key:你有什么特征,凭什么值得我注意?
- V,Value:如果我真的注意你,你能提供什么信息?
可以把它想成搜索。
你提出一个问题,这是 Query。
每个候选对象都带着一组可匹配特征,这是 Key。
匹配到以后真正读出来的内容,是 Value。
于是 Attention 就变成一句非常朴素的话:
拿问题去匹配线索,再读取最相关的信息。
QKV 不是什么咒语,它只是把“查找关系”这件事形式化了。
为什么还要多头?#
因为一句话里的关系不止一种。
同一句话里,模型可能同时关心:
- 谁是主语;
- 动作是什么;
- 指代关系是什么;
- 时间在哪里;
- 哪些词属于同一个语义结构。
所以 Multi-Head Attention 可以粗略理解成:
让多个不同视角同时看一句话。
不是一个人在读,而是一桌不同专长的人一起读,最后汇总结果。
这也是一个很典型的 AI 设计思路:
一个表示解决不了,那就换成更有表达力的表示。
我们聊天时,Tomz 总结得更直接:
“解决不了一个问题就升一个维。”
严格说不一定真是数学意义上的升维,但这个直觉非常好。
XOR 一条线分不开,就加隐藏层重新表示。
一个 Attention 视角不够,就用多个头。
Attention 不知道顺序,就补位置信息。
网络太深难训练,就加残差连接,让旧信息有一条高速公路。
AI 很多突破,本质上不是死磕旧表示,而是重新表示问题。
Transformer 最后到底怎么“说话”?#
模型经过很多层 Transformer 后,并不会突然在脑子里形成一整句话。
它最后得到的是:
下一个 Token 的概率分布。
例如:
今天天气很好,我准备出去——
模型可能认为:
- 散步:35%
- 玩:18%
- 吃饭:9%
- 跑步:7%
然后选一个 Token。
假设选了“散步”。
新的上下文就变成:
今天天气很好,我准备出去散步
接着模型再计算一次下一个 Token。
所以一整段回答,本质上是:
算一次 → 生成一个 Token → 把这个 Token 放回上下文 → 再算一次。
一个 Token,一个 Token 地往前长。
生成出来的 Token,本身也参与了推演#
这是我们这一课里最重要的一个点。
模型不是先在内部想好整篇答案,再把它打印出来。
前面已经生成出来的内容,会直接参与后面的计算。
例如模型先写:
已知 A = 3。
这句话一旦生成,它就成了后续上下文的一部分。
下一步模型可以继续写:
所以 B = A × 2 = 6。
于是 B = 6 又变成后续推理的新依据。
这就是为什么 Chain of Thought、scratchpad、step by step 曾经会明显提升一些任务的表现。
不是因为某句提示词有魔法。
而是因为:
把中间状态外显成 Token,本身就为后续计算提供了临时工作记忆。
Tomz 提到自己见过一种 Thinking 模型:
做 RP 时,它会先内部推演剧情,打一个草稿,看看满不满意,再决定最终发什么。
这类模型更明显地把“内部工作区”和“最终输出区”拆开了。
普通模型更像边写边想。
Thinking 模型会先在内部多走几步。
Agent 则更进一步:不仅内部想,还能出去调用工具,再根据结果回来继续想。
这三者其实是一条连续谱。
为什么同一个模型每次回答都不一样?#
因为最后不是永远选择概率最高的 Token。
模型先给出可能性分布,采样策略再决定走哪条路。
Temperature 并不是简单的“创造力旋钮”。
它更像是在控制:
模型愿不愿意偏离最可能的路径。
温度低,概率分布更尖,模型更稳定、更保守。
温度高,低概率候选也更容易被选中,结果更有变化,也更容易跑偏。
所以:
模型负责给可能性,采样参数负责决定走哪条路。
高 Temperature 不会让一个不懂数学的模型突然悟道。
它只会让它更有创造力地答错。
为什么早期 LLM 数学和空间题很笨?#
这是我们对话里一个很好的问题。
早期 LLM 很擅长:
“这个答案看起来应该长什么样。”
但数学和空间推理要求另一种能力:
稳定维护状态,并严格执行多步算法。
例如数学题需要:
- 维护中间变量;
- 每一步都不能漂;
- 错一个数字,后面可能全错。
空间关系题也一样。
如果题目说:
A 在 B 东北,C 在 A 西边,那么 C 在 B 什么位置?
最稳的方法其实是显式维护一个坐标状态。
但早期 LLM 没有一个真正的内部坐标板。
它更容易依赖语言模式去猜。
所以:
见过很多数学文本,不等于拥有一个可靠计算器。
见过很多空间描述,也不等于真的维护了一个稳定空间模型。
这也是后来为什么 Reasoning、草稿纸、代码执行、外部工具会如此重要。
那为什么代码能力却很早就显得靠谱?#
这个现象看起来有点反常。
早期 LLM 数学不稳定,空间推理也不稳定,但代码补全和短函数生成却很早就“像回事”。
原因之一是:
代码特别适合 Next Token Prediction。
代码是一种高度规律、高度重复、上下文约束极强的语言。
你写出:
for (后面的可能性已经被大幅缩小。
再加上互联网上有海量重复的程序设计模式:
- HTTP 请求怎么写;
- React 组件怎么写;
- 数组怎么排序;
- 数据库怎么查询;
- 一个 API Handler 通常长什么样。
所以早期 LLM 即使没有很强的复杂推理,也能靠:
模式记忆 + 结构泛化
写出非常像样的代码。
但这并不意味着它已经能维护一个十万行项目。
写 20 行函数和理解整个代码库,是完全不同级别的问题。
后者要求:
- 跨文件状态;
- 长期规划;
- 工具调用;
- 测试验证;
- 错误恢复;
- 持续修正。
这正是后来 Coding Agent 爆发的原因。
代码世界甚至可以看成 LLM Agent 最理想的实验场:
目标相对明确,状态可以读取,动作可以执行,结果可以测试,错误会直接报出来。
这和早期符号主义为什么特别适合几何世界,有一种有趣的历史对应。
这个话题值得以后单独做一篇专题:
为什么 Coding Agent 比通用 Agent 更早成熟?
这里先不展开。
Context:模型所谓的“记得”,很多时候只是还摆在眼前#
LLM 的 Context Window,可以先理解成:
这一轮推理时,桌面上能摊开多少东西。
系统提示词、用户问题、前面对话、工具结果、模型刚刚生成的 Token,只要还在 Context 里,就会参与后续计算。
所以模型很多时候所谓“记得我们之前说过什么”,并不意味着它真的写入了长期记忆。
只是那些内容还摆在它眼前。
但上下文越长,不代表模型一定越聪明。
信息太多,也可能出现:
- 重点模糊;
- 证据被淹没;
- 目标漂移;
- 无关信息干扰判断。
于是问题从:
我能塞多少?
逐渐变成:
这一轮到底该让模型看见什么?
这就是 Context Engineering 开始真正变得重要的地方。
Prompt Engineering 没完全错,只是名字显得太玄#
早年“提示词工程师”流行时,确实很容易让人产生一种赛博玄学感:
你是世界顶级专家。
请一步一步思考。
回答得好奖励你 200 美元。
很多所谓万能 Prompt,看起来像是在给模型念咒。
但回头看,其中真正有价值的种子是:
上下文本身就是程序的一部分。
后来这个概念慢慢升级:
Prompt Engineering:研究怎么说。
Context Engineering:研究让模型看见什么。
Agent Engineering:进一步研究它看见以后怎么行动、怎么回来、怎么继续。
到了 Mira 这种真实 Agent 系统里,问题已经不是一句 Prompt 怎么写得漂亮。
而是:
- Planner 这一轮该看什么?
- Evidence 怎么进入上下文?
- 工具描述给多少?
- 失败历史保留多少?
- Global Goal 怎么不被长上下文淹没?
这才是真正的工程问题。
这一课真正想留下的一句话#
LLM 并不是先“想完”,再“说出来”。
它很多时候是在:
一边生成,一边利用自己刚刚生成的东西继续推演。
语言在这里不只是交流介质。
它本身也成了某种计算介质和临时工作区。
而现代 Agent 又进一步把这个工作区扩展到了外部世界:
模型生成 Action → 工具改变世界 → Observation 回到上下文 → 下一轮推理重新开始。
所以从 Transformer 到 Agent,中间其实没有一道神秘断层。
它更像是一条很自然的演化线:
模型先学会表示关系,再学会生成语言;生成的语言开始参与推演;外部工具再成为新的“可写入上下文的现实”。
理解了这一点,后面再学 Context、Reasoning、Memory、Tool、Agent Loop,就不会只剩下一堆名词。
你会看到它们一直在解决同一件事:
怎样给模型一个更好的“当前世界”,让下一步判断更可靠。
