LLM-01 · LLM 原理

资料核验日期:2026-10-10。公开版保留整理正文与必要证据;原始资料通过来源链接回查。验证范围在正文中分别说明。

LLM 怎样理解输入并生成输出

整理与核验日期:2026-10-10。对象是以 Transformer 为基础的自回归语言模型;具体产品可能增加多模态编码、检索和其他结构。读完后应能解释一次回答经过的主要计算,以及哪些信息需要自己提供。

1. 从一个材质脚本问题出发

假设你要解释资产命名检查器。只问“这个脚本做什么”时,模型没有脚本,就只能请求更多信息或按常见做法猜测。提供 lab.py 后,才能据实际 inspect_csv 分析字段、规则和错误路径;再提供 assets.csv,才能指出第 3 行前缀不符合规则、第 4 行名称重复、第 5 行两个字段为空。

用户看到的对话框只是输入入口。系统实际提交的上下文还可能包含产品指令、历史消息、项目规则、工具描述和文件片段。模型不能凭文件路径自动取得文件;宿主必须读取并把内容交给模型。某些编程产品会自动完成这一步,仍应检查它实际读了什么。

本章架构图把一次文本计算展开。工具读取文件属于图外的宿主行为;模型输出工具参数后,也要由执行器真正运行工具。

输入到生成的逻辑架构图

2. 文字先变成 Token

分词器把文本映射为词表中的整数 ID。一个 Token 可能表示一个词、部分词、符号或字节片段。中文字符、英文单词和代码变量的切分都依赖具体分词器,因此“100 个字一定等于 100 Token”没有通用依据。

可以把流程理解为“文本 → 切分 → ID 序列”。Token ID 是索引,不是该词的意义分数。解码把 ID 序列还原为文本;单独显示某个 Token 时可能出现不完整字节,因此检查整体解码是否等于原输入比逐个显示更可靠。

本版本的 分词实验 使用已有 Whisper multilingual 文本分词器,保存配置、哈希、中文/英文/代码三组实际 ID 与数量。它用于展示切分差异,不代表 Claude、GPT 或 Gemini 的分词与计费。Whisper 是语音模型;这里只使用其文本分词器,不做语音推理。不同产品应使用各自官方计数方式。

实际输入 字符数 此分词器的 Token 数 整体解码回原文
材质检查 4 7 是
material check 14 3 是
name.startswith(prefix) 23 10 是

词表和实际 ID 见 分词结果。其中字节片段的单项显示可能不是可读汉字;整体解码保持输入一致。

为什么这影响使用?文件内容、聊天记录、工具返回都占上下文。重复粘贴、长日志和无关文件会消耗空间;删掉变量定义或业务约束又会失去必要条件。选信息时应根据任务相关性,而不是只追求最少字数。

3. ID 怎样变为向量

嵌入层把每个 ID 查成一个数值向量。如果序列有 N 个 Token、表示宽度为 D,序列表示可以示意为 N×D 的矩阵。D 是模型结构参数;这里的字母是形状示意,不是某个商业模型的公开尺寸。

向量通过训练形成,能支持后续计算。不能把第 17 维解释成“红色程度”、第 28 维解释成“是不是建筑”:通常没有这种固定、可读的单维语义。模型是在许多数值关系中表示模式。

位置也有意义。a-b 和 b-a 的 Token 集合接近,但结果不同;变量定义在何处、引用在何处也需要区分。位置表示或位置相关计算为序列顺序提供线索。原始 Transformer 的位置编码与许多现代模型的旋转位置表示并非同一实现,不应把一种方式说成所有模型的唯一方式。

4. 注意力连接上下文中的信息

设脚本先定义 prefix = 'T_',后面调用 name.startswith(prefix)。解释后一句需要利用前面的定义。自注意力允许每个位置根据当前表示,对其他允许访问的位置计算相关权重,再组合信息。常用 Q、K、V 分别表示用于查询、匹配和被组合的表示;这些也是计算表示,不是人工标注的问答库。

因果语言模型在预测后续 Token 时不能读取尚未出现的未来答案。因果掩码限制这种访问。多头让不同投影同时处理关系,多层让表示反复变换。它们提供计算能力,但不能保证每个相关事实都会被正确利用,更不能把注意力权重直接当成可信的解释证据。

实际长上下文可能遗漏中间信息、混淆类似函数或采用过时定义。可把关键约束放在任务说明中,给出准确符号和版本,并用工具检查产物。窗口够大与稳定利用全部内容,是两项不同能力。

5. Transformer 层还有哪些组成

注意力不是整个模型。前馈网络进一步变换每个位置的表示;残差连接让前后层信息可以相加;归一化帮助控制数值尺度。典型解码器堆叠这些模块,再用输出层得到词表上的分数。

Attention Is All You Need 提出 Transformer,原论文任务是机器翻译,含编码器与解码器。这里面向语言模型讲解因果解码部分,不把原论文完整结构直接套在每个 LLM 上。可对照作者实现 nanoGPT/model.py 的 CausalSelfAttention、MLP、Block 与输出层;它是教学实现,不是当期商业模型源码。

6. 从分数到下一个 Token

输出分数通常称为 logits。将分数经 softmax 转成分布,就可以选择下一 Token。选择最大分数、按概率采样,以及限制候选集合,会产生不同生成行为。

温度调节分布的集中程度。本教材设三项 教学 logits = [3,2,1],离线计算结果如下。候选 A/B/C 是抽象候选,不是一次模型实际输出,也没有事实正确率含义。

温度 A B C
0.5 0.866813 0.117310 0.015876
1.0 0.665241 0.244728 0.090031
2.0 0.506480 0.307196 0.186324

计算见 学习实验结果。温度较低时分布更集中;这不能推出答案更真实。错误 API 名称也可能在某个上下文下获得很高分数。产品即使设置低温度,也可能受版本、并发实现和其他设置影响,不应承诺每次完全相同。

7. 一段回答怎样逐步完成

模型先处理已有上下文,产生第一项新 Token,再把它纳入后续生成条件,继续预测。这解释了自回归生成。终止标记、长度限制、工具调用边界或宿主取消都可能结束当前输出。

流式显示只是宿主把已经到达的内容陆续展示;它不意味着模型在你屏幕上执行了代码。模型可以生成一段正确程序,但是否运行、是否读到真实资产、是否保存报告,都需要另外的执行证据。

KV cache 可以复用已计算位置的部分注意力表示,减少重复计算;它不是项目知识库,也不会使模型永久学会用户的代码。缓存具体实现、上下文裁剪和持久策略属于产品与运行时条件,见 LLM-02 和 CAP-01。

8. 三组上下文怎样比较

实验记录 保留三组输入:仅问题;问题加实际函数;问题加函数和清单。本次没有调用模型,因此没有补写模型响应或“准确率提升”数字。已经实测的是程序对 CSV 的四项问题检查。

自己实验时,为同一模型固定版本和设置,对每组保存完整响应,用事先确定的四项问题评分。另记它是否虚构了存在性检查、自动重命名或未实现的规则。说明更长不等于更准确;重点是是否引用了真实信息、是否保留约束、是否区分确定事实与假设。

一个可直接使用的 TA 请求是:

解释 lab.py 中 inspect_csv 的输入、规则和输出。
以 assets.csv 为样本,逐行列出实际问题和对应条件。
区分空字段、名称重复与前缀错误;不要推断文件在磁盘上是否存在。
输出一张问题表,并指出代码没有实现的检查。禁止修改输入资产。

9. 常见混淆与练习

概念 准确理解 需要避免的推断
Token 数 某分词器的切分结果 字符数就是 Token 数
生成概率 给定上下文的候选分布 概率高就是事实正确
上下文 本次计算可访问的信息 模型永久更新了参数
工具请求 模型提出结构化动作 动作已经执行成功
流式输出 逐步展示已到达内容 输出代码等于已运行代码

练习:画出脚本解释请求中的文本计算和文件读取两个流程;说明 Token、嵌入、注意力、采样各负责什么;运行分词与温度实验;对三组上下文自己保存模型记录。

验收:至少解释上述三个区别;分词数来自结果文件;示意分布明确写为教学数据;任何模型效果结论能回到实际响应。

本章思维导图

来源与衔接

机制参考:原始 Transformer 论文、nanoGPT 教学实现,2026-10-10 读取页面与相关结构。实践材料:Karpathy 本地英文讲座,本地 00:00:00~00:06:22 的上下文讨论。图表与 TA 案例由本教材归纳。所有来源状态见 来源索引。接着读 LLM-02。