327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token

2026.07.26

·agentx

素材

  • 《大模型应用开发极简入门》
    • 以前的笔记
    • PDF 1.1 节
    • 原书插图等
  • 当前官方资料、本地 Agent/FDE 岗位要求和上一篇 Token 笔记。

先说结论

LLM 可以先理解成一个“IDE 的超级代码补全”:它根据当前上下文猜下一个 Token,把结果追加回去,再继续猜。

js
let context = 用户输入;
let answer = "";

while (回答还没结束) {
  const nextToken = 模型(context);
  answer += nextToken;
  context += nextToken;
}

return answer;

真实 API 不一定每次只返回一个 Token,但理解 LLM 的最小模型就是:生成一个,追加回去,再接着生成。

先把几个名词对上号

AI、机器学习、深度学习与 Transformer 的关系|512

  • AI:人工智能的总称。
  • 机器学习:不把所有规则写死,而是让机器从数据里学规律。
  • 深度学习:机器学习的一种,主要使用多层神经网络。
  • NLP:让计算机处理和生成人类语言的应用领域。
  • Transformer:一种神经网络架构,擅长处理上下文中不同位置之间的关系。
  • LLM:用大量语言数据训练出来的大语言模型,核心任务是根据上下文预测下一个 Token。
  • GPT:一类使用 Transformer、擅长沿着已有内容继续生成的模型。

它们不是一回事:Transformer 是架构,LLM 是训练出来的模型,GPT 是其中一类生成模型。

模型预测的单位是 Token,不是固定的字或词。Token 的细节见 模型眼里的文字。

Transformer 当时解决了什么问题

Transformer 之前常用的 RNN,很像排队传话:前一个词处理完,才能把信息交给后一个词。

这会带来两个问题:

  • 后面的计算必须等前面,不容易一起处理。
  • 信息传得越远,前面的细节越容易丢。

例如:

我把昨天在上海买的、里面装着合同和电脑的黑色背包,落在出租车上了。

读到“落在出租车上”时,模型还要记得前面的主角是“黑色背包”。RNN 需要把这个信息一站一站传到句尾。

Transformer 换了一种方式:把整段内容摊开,处理当前位置时,直接去找最相关的位置。

327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token 图表 1

我只需要记住三点:

  • RNN 像排队传话;Transformer 像把全文摊开后直接找线索。
  • Transformer 读一段已有输入时,很多位置可以一起计算。
    • 所以,算法复杂度就是 O1
  • 它写回答时仍然要逐个 Token 生成;长文本也仍然会增加成本,并不等于什么都不会忘。

注意力、自注意力和交叉注意力

先只看一个翻译案例:

中文:小红把雨伞递给小李,因为他要出门。

英文:Xiaohong handed the umbrella to Xiaoli because he was going out.

什么是注意力机制

模型处理一个位置时,不会把前面所有内容都当成同样重要,而是会找出当前最值得参考的信息。

比如

  • 理解“他要出门”时,“小李”比“雨伞”更重要;
  • 翻译“雨伞”时,“递给”和“小李”也能帮助模型理解它在句子里的作用。

所以注意力机制的大白话就是:

处理当前内容时,看看其它内容里谁和我最相关。

什么是自注意力

模型在读中文原句时,“他”会回头找同一句话里的“小李”,从而理解“他”指的是谁。

查找的人和被查找的内容,都在同一段话里,这就叫自注意力。

自注意力:同一段内容内部,大家互相找线索。

什么是交叉注意力

模型开始写英文译文以后,写到 umbrella 时,需要回头看中文原句里的“雨伞”;写到 he 时,也要回头看中文里的“他”和“小李”。

当前正在写的是英文,查找信息的地方是另一段中文。信息跨过了两段内容,这就叫交叉注意力。

交叉注意力:正在处理一段内容时,去另一段内容里找线索。

把这个案例里的关系画出来,会更直观:

327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token 图表 2

327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token 图表 3

不是所有生成模型都有交叉注意力,只有架构中确实需要让一段信息去读取另一段信息时才会用到。

Encoder、Decoder 和 GPT

继续用翻译来理解:

  • Encoder(编码器)负责读
    • 把中文原句完整读一遍,整理出上下文。
  • Decoder(解码器)负责写
    • 一边参考中文,一边逐个 Token 写出英文。

327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token 图表 4

常见架构只需要知道三类:

  • Encoder-only
    • 重点是读懂一段内容,典型代表是 BERT,例如文本分类和语义理解。
  • Encoder-Decoder
    • 先读一段,再写出另一段,典型代表是原始 Transformer、T5,例如翻译和改写
  • Decoder-only
    • 看着前面已有的内容继续写,典型代表是 GPT,例如聊天和代码补全。

327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token 图表 5

GPT 不需要单独的 Encoder,是因为提示词和已经生成的回答都放在同一条序列里。它像 IDE 代码补全,只要沿着当前内容继续往后生成。

为了保证训练和生成规则一致,GPT 处理当前位置时只能看已经出现的 Token,不能偷看未来。这叫因果掩码(causal mask)

“GPT 是 Decoder-only”是理解经典文本主干的最小模型。现代多模态产品还可能包含视觉编码器等其它组件,具体架构要以公开资料为准。

模型怎样选出下一个 Token

开头伪代码里的 模型(context),内部可以先理解成四步:

  1. Tokenizer 把文字转换成 Token ID。
  2. Transformer 根据当前上下文计算接下来可能是什么。
  3. 模型给所有候选 Token 打分。
  4. 采样策略从候选中选出一个。

逐 Token 生成文本的完整循环|832

还是用 IDE 代码补全来理解。输入 console. 后,模型可能得到下面这组候选概率:

text
log     0.72
error   0.18
warn    0.07
table   0.03

模型选出 log 后,把它追加回上下文,当前内容就变成了 console.log。接着模型可能继续预测 (,再继续预测括号里的内容。它不是一次想好整行代码,而是一步一步补出来的。

327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token 图表 6

转换成概率之前的原始分数常叫 logit

模型可以总选第一名,也可以按照候选概率采样,所以同一个问题不一定每次都得到完全相同的回答。

温度决定模型选得有多保守

温度 temperature 不会给模型增加知识,它只影响模型怎样从候选中选择。

  • 低温度:更容易选第一名,结果通常更稳定。
  • 高温度:第二名、第三名也有更多机会,结果通常更多样,也更容易跑偏。

它像一个抽签箱:低温度几乎只留下第一名,高温度会把更多候选放进来。

327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token 图表 7

  • 抽取字段、生成结构化结果时,通常更需要稳定。
  • 头脑风暴、生成文案变体时,可以允许更多变化。

低温度不等于正确,高温度也不等于有创造力。如果模型的候选本身就错了,怎么选都可能错。实际接 API 时,还要查看当前模型是否支持这个参数以及推荐用法。

图片也要先变成数字,模型才能计算

文字要先变成 Token,图片也要先变成模型能够计算的数字表示

一种常见方式是先缩放图片,再把它切成许多小块,例如 PatchTile,然后通过视觉编码把这些区域变成向量。具体模型的内部实现可能不同,我只需要先理解:模型不是直接“看见”图片,而是把图片转换成数字以后再计算。

图像被切成固定大小的图像块|824

用我修改前端页面的场景来理解

比如页面上有一个按钮没有圆角。我会:

  1. 给当前页面截一张图。
  2. 用红框或箭头圈出某个按钮。
  3. 告诉 CodeX :“这个按钮没有圆角,改成有圆角。”

模型会把文字和图片都转换成数字表示,再把两者联系起来:

  • 从文字里知道,我要修改的是按钮的圆角。
  • 从截图和红框里找到,我说的是哪个按钮。
  • 从按钮四个尖角的形状,判断它现在没有圆角。

327. AgentX:《大模型应用开发极简入门》:LLM 为什么能根据上下文逐个生成 Token 图表 8

如果只发截图,模型只能告诉我“可以加 border-radius”。Coding Agent 还能读取代码仓库,找到对应的组件或样式,真正修改代码,再运行页面检查按钮是不是已经有圆角。

对 Agent 开发来说,记住三个结果就够了:

  • 模型可以把截图中的按钮和我的文字要求联系起来。
  • 截图只能告诉它页面看起来怎样;要真正修改,还需要代码仓库和工具。
  • 图片不是“免费附件”,会占输入预算、延迟和费用。

对 Agent 开发和 FDE,我需要掌握到什么程度

我不需要先学会训练大模型,也不需要背注意力公式。当前的完成标准是:

  • 能用大白话讲清 LLM 为什么逐 Token 生成。
  • 知道 Transformer、注意力、Encoder、Decoder 和温度分别在做什么。
  • 知道这些概念会影响 Context、输出稳定性、延迟、费用和多模态效果。
  • 排查问题时,能提出下一步应该查什么,而不是只说“模型不聪明”。

知道这些以后,我能继续问什么

  • 上下文很长时模型为什么会漏掉信息?可以继续问注意力、Context Engineering 和 RAG。
  • 为什么回答生成得慢?可以继续问逐 Token 生成、KV Cache 和推理延迟。
  • 为什么同一个问题每次答案不同?可以继续问采样、温度、top_p 和评测。
  • 为什么截图里的小字总看错?可以继续问图片缩放、detail、视觉 Token 和模型能力边界。
  • 某个模型内部到底是什么架构?先看官方公开资料;没有公开,就不要靠教学图猜。

一分钟怎么讲清楚

LLM 可以先理解成一个超级代码补全。它根据当前上下文给下一个 Token 排出候选,选出一个追加回去,再继续生成。

Transformer 让模型可以直接寻找上下文里最相关的信息,注意力负责判断当前应该重点参考谁。GPT 使用 Decoder-only 主干,只能根据已经出现的内容继续往后写。

温度决定选择候选时有多保守。图片也要先转换成数字表示才能进入模型,而且会占用输入预算、时间和费用。

考考你

LLM 为什么能根据上下文逐个生成 Token,Transformer、注意力和采样策略分别负责什么?

文字或图片先被变成模型能计算的数字。Transformer 负责联系上下文,注意力负责找出当前最该参考的信息。模型给下一个 Token 排出候选,采样策略选出一个,再把它追加回上下文。这个循环不断重复,直到回答结束。

参考

上一篇:前言 下一篇:待下一个主题完成后决定