如果你要学习 AI Agent 开发,第一步不是急着写代码,而是搞清楚你正在用的这个工具——大语言模型(LLM)——到底是怎么工作的。
这篇文章尽量不推公式,用直觉和具体例子帮你建立正确的认知。读完后你应该能回答这些问题:大模型到底在做什么?文字是怎么变成模型能处理的数字的?为什么有时候输出结果和你预期不一样?
大模型到底在做什么?
“大语言模型"这个名字包含两个关键词:
大(Large) 说的是参数量。一个 7B 模型有 70 亿个参数,70B 有 700 亿,GPT-4 级别的模型可能有数万亿。你可以把参数想象成大脑里的突触连接——连接越多,能记住和理解的"知识"就越丰富。
语言模型(Language Model) 说的是它做的事:预测下一个词(token)。
不管模型能写代码、能做数学题、能回答百科问题——底层机制都是同一件事:给定前面的文字,预测下一个 token 是什么。
举个例子。当你输入"今天天气真”,模型做的事情是:
输入: "今天天气真"
模型输出(下一个 token 的概率分布):
"好" → 0.35 (35% 概率)
"热" → 0.22 (22% 概率)
"不错" → 0.18 (18% 概率)
"冷" → 0.08 (8% 概率)
"奇怪" → 0.04 (4% 概率)
...其他几千个 token 共分剩下的 13%
模型选了"好"之后,再把"今天天气真好"当作新输入,继续预测下一个 token——这就是自回归生成(Autoregressive Generation)。
关键认知:LLM 不是"理解"了你的问题再给你一个经过深思熟虑的答案。它是一个概率机器,每次只预测一个 token,一步一步"走"出完整答案。这个认知非常重要——后面你会看到,很多 Agent 设计技巧都源于此。
Transformer 架构:不需要推公式的直觉理解
目前几乎所有主流 LLM(GPT-4、Claude、DeepSeek、Llama 等)都基于 Transformer 架构。你不需要手推矩阵乘法,但需要理解它的两个核心组件在做什么。
自注意力(Self-Attention):“每个词都在看其他所有词”
假设输入是:"小明 把 苹果 给了 小红,因为 她 饿了"
当模型处理"她"这个词时,自注意力机制让它"回头看"前面的所有词,并计算"她"和每个词的相关性:
"她" 的注意力权重(简化示意):
"小明" → 0.05 (不太相关)
"苹果" → 0.03 (不太相关)
"小红" → 0.72 (高度相关!"她"指的是小红)
"饿" → 0.15 (有一些相关)
...
通过这种方式,模型"知道"“她"指的是小红。自注意力让每个 token 都能动态地关注输入中最相关的部分,这是 Transformer 最核心的能力。
前馈网络(FFN):“存储知识的仓库”
如果说自注意力负责"理解上下文关系”,前馈网络就负责"存储学到的知识"。研究表明,模型在训练过程中学到的事实性知识(比如"巴黎是法国首都")主要存储在 FFN 层的权重中。
层叠(Layers):逐层抽象
一个 Transformer 模型由很多层堆叠而成。每一层都包含一个自注意力 + FFN 的组合:
- 浅层(前几层):处理语法、词法、局部模式
- 中间层:建立语义理解、实体关系
- 深层(后几层):形成高层推理、整合复杂信息
类比人类阅读:你也是先识别字词(浅层),再理解句意(中间层),最后把握全文含义(深层)。一个 7B 模型通常有 32 层,70B 模型有 80 层。层数越多,能处理的抽象层次越丰富。
Tokenization:文字怎么变成数字?
模型不认识文字,只认识数字。Tokenization 就是把文字转换成数字 ID 的过程。
什么是 Token?
Token 不等于字,也不等于词——它是介于两者之间的一个"片段"。主流方法是 BPE(Byte Pair Encoding)。
用一个英文例子说明 BPE 的工作方式。假设我们有文本:"low lower newest"
BPE 从单个字符开始,反复合并最高频的相邻字符对:
初始状态:l o w ▁ l o w e r ▁ n e w e s t
(▁ 表示空格,也是一个字符)
第 1 轮合并:lo w ▁ lo w e r ▁ n e w e s t
("l" 和 "o" 经常相邻,合并为 "lo")
第 2 轮合并:low ▁ low e r ▁ n e w e s t
("lo" 和 "w" 经常相邻,合并为 "low")
第 3 轮合并:low ▁ low er ▁ n e w e s t
("e" 和 "r" 合并为 "er")
...继续合并直到达到目标词表大小
在实际模型中,这个过程会迭代数万次,最终形成一个 50,000~100,000 个 token 的词表。
一个具体的 Tokenization 例子
以 GPT-4 的 tokenizer 为例,看同一句话怎么被切分:
英文: "I love machine learning"
切分: ["I", " love", " machine", " learning"]
Token IDs: [40, 2142, 5765, 4510]
→ 4 个 token
中文: "我喜欢机器学习"
切分: ["我", "喜", "欢", "机", "器", "学", "习"]
Token IDs: [10423, 4807, 13614, 7732, 3803, 25207, 6345]
→ 7 个 token
注意:同样含义的中文文本,token 数量大约是英文的 1.5~2 倍。这直接影响 API 使用成本(按 token 计费)和 Context Window 的使用效率。
Tokenization 的实际影响
Tokenization 不只是底层细节,它会直接影响你使用 LLM 的体验:
影响成本:API 按 token 计费。同样长度的中文 Prompt,token 数量更多,费用更高。
影响数字处理:模型把数字当文本 token 处理,不是当数值处理。比如 "12345" 可能被切分为 ["12", "34", "5"](3 个 token),模型做数学时需要"还原"这些片段,这就是 LLM 做算术容易出错的根本原因之一。
影响边界行为:有些"看似简单"的字符串操作(比如反转一个单词),模型表现不好,因为 token 边界和字符边界不对齐。
Context Window:模型一次能"看"多少内容?
Context Window 是模型在单次请求中能处理的最大 token 数量(输入 + 输出之和)。
你可以把它想象成模型的"工作记忆"——窗口越大,能同时看到的信息越多,但计算成本也越高。
常见模型的 Context Window 大小:
- GPT-4o:128K tokens
- Claude 3.5 Sonnet:200K tokens
- DeepSeek-V3:128K tokens
- Llama 3:128K tokens
128K tokens 大约等于 10 万个英文单词,或 5~7 万个中文字。
重要细节:Context Window 是输入和输出共用的。如果窗口是 128K,你的输入用了 120K tokens,模型最多只能输出 8K tokens。这对 Agent 开发尤其重要——工具调用结果、RAG 检索到的文档,都在消耗这个有限的窗口。
这也是为什么 Context Engineering(上下文工程)在 Agent 开发中如此关键:窗口有限,你必须精心管理放进去的信息。后面的第三阶段会专门讲这个话题。
自回归生成:LLM 是怎么"写"出一段文字的?
把前面的知识串起来,LLM 生成文本的完整流程是:
步骤 1: 把你的输入文字做 Tokenization → 得到一串 token IDs
步骤 2: 所有 token 并行通过 Transformer 的各层
→ 自注意力建立上下文理解
→ FFN 调用存储的知识
步骤 3: 最后一层输出一个概率分布(覆盖整个词表,比如 50000 个 token)
步骤 4: 根据概率采样一个 token
步骤 5: 把新 token 追加到输入末尾,回到步骤 2
步骤 6: 重复,直到生成结束符(