04 深入理解大语言模型

知识图解
先观察各环节之间的关系,再阅读下面的详细解释。

LLM 的核心任务
大语言模型最基础的训练任务,是根据前文预测下一个 Token。规模扩大后,模型从海量例子中学到语言、知识关联、代码模式和一定的推理能力。
#mermaid-svg-40QQDX7IBMfrD9pe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-40QQDX7IBMfrD9pe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-40QQDX7IBMfrD9pe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-40QQDX7IBMfrD9pe .error-icon{fill:#552222;}#mermaid-svg-40QQDX7IBMfrD9pe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-40QQDX7IBMfrD9pe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-40QQDX7IBMfrD9pe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-40QQDX7IBMfrD9pe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-40QQDX7IBMfrD9pe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-40QQDX7IBMfrD9pe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-40QQDX7IBMfrD9pe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-40QQDX7IBMfrD9pe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-40QQDX7IBMfrD9pe .marker.cross{stroke:#333333;}#mermaid-svg-40QQDX7IBMfrD9pe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-40QQDX7IBMfrD9pe p{margin:0;}#mermaid-svg-40QQDX7IBMfrD9pe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-40QQDX7IBMfrD9pe .cluster-label text{fill:#333;}#mermaid-svg-40QQDX7IBMfrD9pe .cluster-label span{color:#333;}#mermaid-svg-40QQDX7IBMfrD9pe .cluster-label span p{background-color:transparent;}#mermaid-svg-40QQDX7IBMfrD9pe .label text,#mermaid-svg-40QQDX7IBMfrD9pe span{fill:#333;color:#333;}#mermaid-svg-40QQDX7IBMfrD9pe .node rect,#mermaid-svg-40QQDX7IBMfrD9pe .node circle,#mermaid-svg-40QQDX7IBMfrD9pe .node ellipse,#mermaid-svg-40QQDX7IBMfrD9pe .node polygon,#mermaid-svg-40QQDX7IBMfrD9pe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-40QQDX7IBMfrD9pe .rough-node .label text,#mermaid-svg-40QQDX7IBMfrD9pe .node .label text,#mermaid-svg-40QQDX7IBMfrD9pe .image-shape .label,#mermaid-svg-40QQDX7IBMfrD9pe .icon-shape .label{text-anchor:middle;}#mermaid-svg-40QQDX7IBMfrD9pe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-40QQDX7IBMfrD9pe .rough-node .label,#mermaid-svg-40QQDX7IBMfrD9pe .node .label,#mermaid-svg-40QQDX7IBMfrD9pe .image-shape .label,#mermaid-svg-40QQDX7IBMfrD9pe .icon-shape .label{text-align:center;}#mermaid-svg-40QQDX7IBMfrD9pe .node.clickable{cursor:pointer;}#mermaid-svg-40QQDX7IBMfrD9pe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-40QQDX7IBMfrD9pe .arrowheadPath{fill:#333333;}#mermaid-svg-40QQDX7IBMfrD9pe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-40QQDX7IBMfrD9pe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-40QQDX7IBMfrD9pe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-40QQDX7IBMfrD9pe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-40QQDX7IBMfrD9pe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-40QQDX7IBMfrD9pe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-40QQDX7IBMfrD9pe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-40QQDX7IBMfrD9pe .cluster text{fill:#333;}#mermaid-svg-40QQDX7IBMfrD9pe .cluster span{color:#333;}#mermaid-svg-40QQDX7IBMfrD9pe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-40QQDX7IBMfrD9pe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-40QQDX7IBMfrD9pe rect.text{fill:none;stroke-width:0;}#mermaid-svg-40QQDX7IBMfrD9pe .icon-shape,#mermaid-svg-40QQDX7IBMfrD9pe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-40QQDX7IBMfrD9pe .icon-shape p,#mermaid-svg-40QQDX7IBMfrD9pe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-40QQDX7IBMfrD9pe .icon-shape .label rect,#mermaid-svg-40QQDX7IBMfrD9pe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-40QQDX7IBMfrD9pe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-40QQDX7IBMfrD9pe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-40QQDX7IBMfrD9pe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 文本
Tokenizer
切成 Token
Embedding
变成向量
Transformer
计算上下文关系
预测下一个 Token 的概率
选择一个 Token
五个必须理解的概念
- Token:模型处理文本的基本单位,不完全等于汉字或单词。
- 上下文窗口:一次请求中模型能看到的 Token 总量。
- Attention:让模型判断当前内容应该关注上下文中的哪些部分。
- 参数:训练形成的内部数值,保存模型学到的模式。
- 推理:模型根据当前输入逐 Token 生成结果的过程。
详见 \[Token 与上下文窗口] 与 \[LLM 工作原理]。
为什么会产生幻觉
模型的直接目标是生成符合上下文的内容,而不是自动访问真实世界验证事实。当信息不足、问题包含错误前提或训练数据缺失时,模型仍可能生成流畅答案。
降低幻觉的方法:
- 给出可靠上下文并要求依据材料回答;
- 使用 RAG、搜索或业务 API 获取事实;
- 要求给出证据并由程序验证;
- 信息不足时允许模型明确说不知道;
- 高风险结果必须人工复核。
上下文工程
模型本身不等于应用。真正影响应用效果的是它在当前请求中看到了什么:
text
系统指令 + 用户任务 + 对话历史 + 检索资料 + 工具说明 + 工具结果
上下文并非越长越好。应保留与当前决策相关的信息,删除重复、过期和相互冲突的内容。
推理模型与普通生成模型
- 简单改写、提取和分类优先选择快速低成本模型;
- 多约束规划、复杂代码和数学问题可选择更强推理模型;
- 模型越大不代表每个任务的投入产出比越高;
- 应使用真实任务集比较正确率、延迟和成本。
继续学习:\[模型选型指南]、\[示例 - 推理模型 vs GPT 模型]。
本章深入:LLM 从训练到回答的完整过程
1. Tokenizer:模型看到的不是文字
模型先通过 Tokenizer 把文本切成 Token,再将 Token 转成整数 ID。中文字符、英文单词、标点和代码片段的切分方式可能不同。
text
"人工智能很好用"
→ [人工] [智能] [很] [好用] (仅作示意)
→ [10231, 8842, 317, 9901]
Token 数量直接影响:
- 上下文能放多少内容;
- 请求成本;
- 生成速度;
- 长文档切分策略;
- 历史对话保留范围。
不要用字符数简单估算 Token。不同模型的 Tokenizer 可能不同,生产系统应使用对应模型的计数工具。
2. Embedding:把离散符号放进语义空间
Token ID 本身没有"意义"。Embedding 层把每个 Token 映射为一个高维向量。训练过程中,语义和使用方式相近的内容会形成可利用的向量关系。
Embedding 还可以单独用于:
- 语义搜索;
- 文档相似度;
- 聚类;
- 推荐;
- RAG 检索。
生成模型使用的内部表示与对外提供的 Embedding API 不必完全相同,但思想相通:把内容转换为可计算的向量。
3. Transformer 内部发生了什么
一个 Transformer Block 通常包含:
- Self-Attention:不同 Token 交换信息;
- 前馈网络:对每个位置的表示进一步变换;
- 残差连接:保留原始信息并帮助深层训练;
- 归一化:稳定数值和训练过程。
多个 Block 堆叠后,表示从局部文字逐步融合为更复杂的上下文关系。
Q、K、V 的直觉
- Query:当前位置想找什么;
- Key:每个位置可以被怎样匹配;
- Value:匹配后真正取回的信息。
Attention 权重由 Query 和 Key 的匹配程度决定,再对 Value 做加权汇总。
Attention 权重并不自动等于"模型解释"。它只是内部计算的一部分,不能简单当作可靠因果依据。
4. 位置和顺序
Attention 本身同时看一组 Token,因此模型还需要位置信息来区分:
text
狗咬人
人咬狗
词相同,顺序不同,含义完全不同。现代模型可能采用旋转位置编码等方法表达相对位置,并扩展长上下文能力。
5. 预训练、指令训练和对齐
预训练
在海量数据上学习预测 Token,获得通用语言和知识能力。
指令训练
使用"指令---回答"样本,让模型学会遵循任务要求,而不是只续写文本。
偏好优化与安全对齐
根据人类或规则反馈,让模型更倾向于有帮助、可靠并符合安全边界的回答。
text
预训练:学会语言和知识模式
指令训练:学会完成任务
偏好/安全训练:学会怎样更合适地回答
6. 推理阶段怎样生成
模型每轮输出所有候选 Token 的概率分布,再通过解码策略选择一个 Token,追加到上下文后继续计算。
常见控制:
- Temperature:调整概率分布的平滑程度;
- Top-p:只在累计概率达到阈值的候选中选择;
- 最大输出 Token:限制生成长度;
- Stop:遇到指定序列停止;
- Seed:某些接口用于提高复现性,但不保证所有环境完全确定。
事实问答和结构化输出通常需要较稳定的采样;创意写作可以保留更多多样性。
7. KV Cache 为什么重要
逐 Token 生成时,前文不会变化。KV Cache 保存之前 Token 的 Key/Value,避免每次从头重复计算。它提高速度,但会随着上下文变长占用更多显存。
这解释了为什么:
- 超长上下文成本和内存压力更高;
- 多用户并发需要管理缓存;
- 上下文长度会影响首字延迟和生成速度。
8. 上下文窗口不是长期记忆
上下文窗口只是当前请求中可见的信息。对话结束或历史被截断后,模型不一定还记得。
长期记忆通常由应用实现:
text
对话/事件 → 提取值得保存的信息 → 数据库存储
新会话 → 按用户和任务检索 → 注入当前上下文
记忆必须处理真实性、过期、权限、更正和删除请求,不能把所有对话永久保存后全部塞回模型。
9. 幻觉的类型
| 类型 | 表现 | 主要改进方式 |
|---|---|---|
| 知识幻觉 | 编造事实、日期和来源 | 搜索/RAG、引用校验 |
| 上下文幻觉 | 与提供材料不一致 | 限定依据、忠实度评估 |
| 工具幻觉 | 编造工具或参数 | Schema、白名单、程序校验 |
| 推理错误 | 中间逻辑或计算错误 | 工具计算、测试、结果验证 |
| 引用幻觉 | 来源存在但不支持结论 | 逐条引用对齐检查 |
10. 模型能力与应用能力
模型很强,不代表应用自然可靠。应用还要补足:
- 正确上下文;
- 实时数据;
- 工具权限;
- 结构化输入输出;
- 事实与业务规则校验;
- 日志、评估和人工复核。