原文: 大模型原理图解,从Prompt到第一个Token
xhs · xhs博主 · 2026-04-27

摘要: 用大白话图解LLM推理全流程,从用户Prompt文本到生成第一个Token,拆解为预处理→Embedding→Transformer前向→LM Head→解码决策五阶段,配9张详细图解。


详细图解LLM推理流程,从Prompt到第一个Token🚀🚀

今天用大白话拆解,0技术门槛也能看懂✅

📚📚先划重点:LLM生成不是“一次性写完”,而是从左到右逐Token生成,第一个Token的诞生,就是整个推理流程的“第一步关键操作”!

📌全程拆解(从Prompt到第一个Token,共4步

[一R]Step1:Prompt输入 → 模型“接收指令”

你输入的每一句话,对LLM来说都是“待处理的指令”,这一步就像你跟朋友说话,对方先听清你要干嘛~

但LLM看不懂人类语言,所以第一步要做“翻译”

[二R]Step2:预处理|把Prompt变成模型“能懂的语言”

这是最关键的前置步骤!主要做2件事:

① Tokenize编码:用模型自带的“翻译器”(Tokenizer),把你的Prompt拆成一个个Token,每个Token对应一个唯一的数字ID;

② 张量转换:把这些数字ID转换成模型能计算的“向量”,还会加上注意力掩码,标记哪些是有效内容

简单说:把“人类话”翻译成“机器的数字密码”,方便后续计算~

[三R]Step3:初始化|模型“热身准备”

预处理完成后,模型不会直接生成Token,还要做2个准备工作:

① 初始化KVCache:创建一个“空缓存”,用来存储后续计算的关键信息,避免重复计算,节省时间

② 加载生成参数:确定生成规则,比如温度(控制随机性)、Top-P采样(控制token选择范围)

[四R]Step4:计算+采样|诞生第一个Token✨

这是最核心的一步,也是第一个Token的“诞生时刻”,分3小步:

1. 前向计算:模型把预处理后的向量,传入多层Transformer结构,计算每个可能Token的“出现概率”(logits),这个概率分布覆盖了模型的整个词汇表(可能有十几万种选择);

2. 概率调整:根据之前加载的参数(温度、Top-P),调整概率分布,比如降低温度会让选择更确定,Top-P会筛选出累计概率达标的Token集合;

3. 采样选择:从调整后的概率集合里,选出概率最高的那个Token

总结一下:Prompt→预处理→初始化→计算采样→第一个Token🚀

#agent开发[话题]# #大模型学习[话题]# #大模型面试[话题]# #ai[话题]# #大模型应用[话题]# #ai人工智能[话题]# #Agent[话题]# #大模型[话题]#

需求 # 目的 作用
输入 实质 形式 类型 变量名 来源
实现 外部工具 动作 指令 配置 运行 备注 逻辑控制 特性
输出 实质 形式 类型 变量名 去处
高亮推断 点击列名 ↔ 显示/隐藏 · 点击组名 ↔ 整组切换 · 「推」角标 hover 看推断理由
工序 LLM推理_从Prompt到第一个Token #目的: 给定用户Prompt,经分词→Embedding→Transformer多层前向→LM Head→解码采样,生成第一个输出Token 类别: 学习 #平台: xhs · #作者: xhs博主 · case: C_xhs_69ee4674
输入
程序控制类型/指令/提示词 用户Prompt — 用户输入的自然语言指令文本
资源 (跨 case 长期资产)
程序控制类型/参数/模型权重 LLM模型参数 — Transformer各层权重矩阵(Wq/Wk/Wv/Wo/MLP权重)+W_vocab+可学习位置嵌入参数
词表 Tokenizer词表 — Token字符串到整数ID的双向映射,共vocab_size条
返回
输出Token — 第一个生成Token的字符/子词形式,可继续自回归循环
需求 输入 实现 输出
# 目的 作用 实质 形式 类型 变量名 来源 外部工具 动作 指令 配置 运行 备注 逻辑控制 特性 实质 形式 类型 变量名 去处
s1
<tokenizer>提示词 切分为 Token序列
预处理/理念/知识/商业/前沿技术/AI智能/AI应用/架构/叙事/叙事体裁/演说交流/科普教学程序控制类型/指令/提示词用户Prompt详细图解LLM推理流程,从Prompt到第一个Token(用户输入的完整自然语言文本,如问题、指令等)← 工序输入<tokenizer>提取/化学提取/识别
将Prompt文本按Tokenizer规则切分为token字符串序列
tokens=[t0,t1,...,tn-1];切分规则由模型/词表决定(BPE/WordPiece等);类比把一段话拆成一块块可拼装的乐高零件
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举Token序列tokens<Prompt文本切分后的字符串token列表,如['今天','天气','很','好'],长度n取决于Prompt和词表粒度>→ s2
s2
词表查询把 Token序列 映射为 Token_ID序列
预处理/理念/知识/商业/前沿技术/AI智能/机器学习/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举Token序列tokens<Prompt文本切分后的字符串token列表,如['今天','天气','很','好'],长度n取决于Prompt和词表粒度>← s1.tokens<tokenizer>修改/变/转换
在Tokenizer词表中查找每个token对应的整数ID
token_ids=[id0,id1,...,idn-1];目的:把符号映射成整数索引,便于embedding table以O(1)查表;类比把单词换成字典里的页码/编号
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举Token_ID序列token_ids<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>→ s3 / s4
s3
批处理填充对齐 Token_ID序列 生成 注意力掩码
预处理/理念/知识/商业/前沿技术/AI智能/机器学习Token_ID序列token_ids<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>← s2.token_ids<tokenizer>生成/元素生成
对batch内多条序列进行padding对齐,生成attention_mask标记有效位置
可选步骤:单序列推理时可省略;用途:并行计算多个样本+防止padding位置参与注意力计算;padding位置填特殊PAD_ID;类比把不同长度积木墙用同样盒子装,周围堆起空位占位但不影响
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习Token_ID序列padded_token_ids<padding后的token_ids,形状[batch_size,max_seq_len],PAD位置填充特殊PAD_ID>→ s4
/理念/知识/商业/前沿技术/AI智能/机器学习注意力掩码attention_mask<与padded_token_ids同形状的二元mask,有效token=1,padding=0;用于标记哪些位置参与注意力计算>→ s6.4
s4
查表把 Token_ID序列 映射为连续 嵌入矩阵
预处理/理念/知识/商业/前沿技术/AI智能/机器学习Token_ID序列token_ids<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>← s2.token_ids<llm>提取/化学提取/反推
查embedding table,将token_ids映射到连续向量空间X矩阵
X=Embedding(token_ids);形状[n,d_model];目的:把离散ID映射到连续向量空间;embedding权重是模型可学习参数;类比把编号变成坐标,在地图上更易处理
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习嵌入矩阵X<每个token_id对应的embedding向量堆叠,形状[n,d_model](如d_model=4096);每行是该token在语义空间的连续浮点表示>→ s5
s5
注入位置信息到 嵌入矩阵 得带位置的 隐状态矩阵
预处理/理念/知识/商业/前沿技术/AI智能/机器学习嵌入矩阵X<每个token_id对应的embedding向量堆叠,形状[n,d_model](如d_model=4096);每行是该token在语义空间的连续浮点表示>← s4.X<llm>修改/增/添加
方式A(绝对/可学习位置嵌入):X = X + PosEmbed(positions),将位置向量叠加到token embedding上
方式A:X=X+PosEmbed(positions),位置嵌入是可学习参数或正弦编码;方式B(RoPE/ALiBi):不在此处处理,在每层Attention子层内部对Q/K施加位置相关旋转变换(见s6.3);两方案区别:绝对位置告诉模型你在第几位,相对位置告诉模型你们相距多远
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵X<加入位置信息后的输入矩阵,形状[n,d_model];若方式A则X+=PosEmbed;若方式B(RoPE)则X不变,位置编码在s6.3对Q/K旋转注入>→ s6
s6
遍历 L个Transformer层做前向计算,逐层更新隐状态建立跨位置依赖
主体生成/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵X<加入位置信息后的输入矩阵,形状[n,d_model];若方式A则X+=PosEmbed;若方式B(RoPE)则X不变,位置编码在s6.3对Q/K旋转注入>← s5.X-生成/元素生成遍历-/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵XL<经L层Transformer前向计算后的最终隐状态,形状[n,d_model];XL[n-1]代表读完整段prompt后的当前上下文状态>→ s7
└ s6.1
Pre-Norm后线性投影 隐状态矩阵QKV矩阵组
预处理/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵X<当前层l的输入隐状态,形状[n,d_model]>← s6.X[l]<llm>提取/化学提取/反推
Pre-Norm:H=Norm(X)(RMSNorm/LayerNorm);线性投影:Q=H*Wq, K=H*Wk, V=H*Wv
Pre-Norm稳定数值尺度,降低激活异常风险;Q/K/V把同一隐状态映射到查询/键/值三个子空间;类比名片(Q)/目录索引(K)/具体内容(V)三件事分开做
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习QKV矩阵组Q_K_V<Q/K/V各形状[n,d_model];H分别右乘Wq/Wk/Wv线性变换得到;Q负责查询匹配,K负责键索引,V负责值聚合>→ s6.2
└ s6.2
reshape QKV矩阵组多头QKV 准备并行注意力
预处理/理念/知识/商业/前沿技术/AI智能/机器学习QKV矩阵组Q_K_V<Q/K/V各形状[n,d_model];H分别右乘Wq/Wk/Wv线性变换得到;Q负责查询匹配,K负责键索引,V负责值聚合>← s6.1.Q_K_V<llm>修改/变/转换
将Q/K/V从[n,d_model]reshape为[n,n_heads,d_head],拆分为多个注意力头
d_head=d_model/n_heads;目的:让不同head学到不同关系子空间,并行建模多种依赖;类比同一段话同时从语法、指代、主题等多个角度去读
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习多头QKVQ_K_V_heads<Q/K/V各reshape为[n,n_heads,d_head];Head 1关注语法关系,Head 2关注指代,Head h关注主题等,并行计算>→ s6.3
└ s6.3
多头QKV 的Q/K施加RoPE旋转注入相对位置信息
预处理/理念/知识/商业/前沿技术/AI智能/机器学习多头QKVQ_K_V_heads<Q/K/V各reshape为[n,n_heads,d_head];Head 1关注语法关系,Head 2关注指代,Head h关注主题等,并行计算>← s6.2.Q_K_V_heads<llm>修改/变/调整
若使用RoPE:对每个head的Q/K应用旋转位置编码(旋转矩阵依赖token相对位置),V不做位置编码
RoPE目的:以相对关系形式将位置信息注入注意力匹配,保持相对距离语义;类比把相对距离编码进匹配规则里;若已在s5使用绝对位置嵌入,此步可跳过;ALiBi是另一种方案:在attention score上直接加偏置
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习多头QKVQ_K_V_pos<Q'/K'已施加RoPE旋转携带相对位置信息,V不变;可进行位置感知的注意力计算>→ s6.4
└ s6.4
点积计算并施加Causal Mask得 注意力分数矩阵
预处理/理念/知识/商业/前沿技术/AI智能/机器学习多头QKVQ_K_V_pos<Q'/K'已施加RoPE旋转携带相对位置信息,V不变;可进行位置感知的注意力计算>← s6.3.Q_K_V_pos<llm>生成/元素生成
计算注意力分数S=QK^T/sqrt(d_head);施加因果mask(Causal Mask)将未来位置设为-∞,并结合padding mask
Causal Mask确保当前位置不能看未来信息(自回归语义正确性);-∞经softmax后→0;padding mask防止填充位置参与计算;类比读书时把后面的内容遮住
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习注意力分数矩阵S_masked<形状[n_heads,n,n];未来位置=-∞(mask后),历史/当前位置=有效QK点积分数/sqrt(d_head)>→ s6.5
/理念/知识/商业/前沿技术/AI智能/机器学习注意力掩码attention_mask<与padded_token_ids同形状的二元mask,有效token=1,padding=0;用于标记哪些位置参与注意力计算>← s3.attention_mask
└ s6.5
Softmax归一化后加权聚合V得 注意力输出矩阵
主体生成/理念/知识/商业/前沿技术/AI智能/机器学习注意力分数矩阵S_masked<形状[n_heads,n,n];未来位置=-∞(mask后),历史/当前位置=有效QK点积分数/sqrt(d_head)>← s6.4.S_masked<llm>生成/元素生成
对S_masked最后一维做softmax归一化得注意力权重A=softmax(S);加权求和O=AV
Softmax把分数归一化为概率分布(和=1),便于加权求和;O=AV,每个位置的输出是所有历史V的注意力加权平均;类比把多个小组意见按权重相加得一份摘要
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习注意力输出矩阵O_heads<形状[n,n_heads,d_head];每个位置的O是历史V向量的注意力加权平均;A=softmax(S),O=AV>→ s6.6
└ s6.6
输出投影+残差连接完成Attention子层输出 隐状态矩阵
主体生成/理念/知识/商业/前沿技术/AI智能/机器学习注意力输出矩阵O_heads<形状[n,n_heads,d_head];每个位置的O是历史V向量的注意力加权平均;A=softmax(S),O=AV>← s6.5.O_heads<llm>修改/增/添加
输出投影:O=concat(all_heads)*Wo,将多头结果投影回d_model;残差连接1:X'=X+O
输出投影concat各head后经Wo线性变换回d_model;残差连接让深层网络更易梯度传播;类比在改稿时保留原稿主线再叠加补充内容
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵X_prime<Attention子层完成后的中间隐状态,形状[n,d_model];X'=X+O*Wo,已融合多头注意力信息>→ s6.7
/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵X<当前层l的输入隐状态,形状[n,d_model]>← s6.1.X
└ s6.7
MLP/FFN非线性变换+残差连接得更新后的 隐状态矩阵
主体生成/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵X_prime<Attention子层完成后的中间隐状态,形状[n,d_model];X'=X+O*Wo,已融合多头注意力信息>← s6.6.X_prime<llm>修改/增/添加
FFN/MLP子层:M=MLP(Norm(X')),两层线性+激活(SwiGLU/GEGLU/GELU);残差连接2:X=X'+M
MLP:Norm(X')→Linear(d_model→4d_model)→激活→Linear(4d_model→d_model);提供每个token位置的非线性变换与通道混合能力,补足注意力的表达能力;类比对每个位置做一次本地加工/润色
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵X_updated<当前Transformer层最终输出,形状[n,d_model];X=X'+M,经Attention+MLP两个子层处理,传入下一层>→ s6[i+1] / → s6.8
└ s6.8
将当前层K/V写入 KV缓存 供decode阶段复用
预处理/理念/知识/商业/前沿技术/AI智能/机器学习QKV矩阵组K_V_current<当前层l的K和V矩阵,各形状[n,n_heads,d_head],将被缓存供后续decode阶段复用>← s6.1.Q_K_V<llm>存储/暂存/缓存
将当前层l的K和V矩阵(按head)写入KV Cache存储
KV Cache作用:后续每生成新token时不必重新计算整段prompt的K/V,解码复杂度从O(T²)降至近似O(T);存储结构:每层[2,n_heads,seq_len,d_head];类比做题时把已读材料做成笔记后面不必从头翻
-写外部/理念/知识/商业/前沿技术/AI智能/机器学习KV缓存kv_cache<按层和head组织的K/V缓存;prefill阶段写满所有n个位置;每层形状[2,n_heads,n,d_head](2=K+V);供后续续token生成的decode阶段读取>→ 返回 KV缓存
s7
隐状态矩阵 最后位置得 位置向量 x_last
预处理/理念/知识/商业/前沿技术/AI智能/机器学习隐状态矩阵XL<经L层Transformer前向计算后的最终隐状态,形状[n,d_model];XL[n-1]代表读完整段prompt后的当前上下文状态>← s6.XL<llm>提取/物理提取/裁切
从最终隐状态XL中取最后一个序列位置:x_last=XL[n-1]
Prefill阶段对prompt每个位置都有隐状态输出,但只需最后位置x_last生成第一个token;x_last代表读完整段prompt后的当前上下文压缩表示
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习位置向量x_last<XL最后一行XL[n-1],形状[d_model,];代表模型读完整段prompt后的当前上下文压缩状态>→ s8
s8
FinalNorm归一化 位置向量 得对齐尺度的 归一化向量 h
预处理/理念/知识/商业/前沿技术/AI智能/机器学习位置向量x_last<XL最后一行XL[n-1],形状[d_model,];代表模型读完整段prompt后的当前上下文压缩状态>← s7.x_last<llm>修改/变/增强
Final Norm:h=FinalNorm(x_last),常见为RMSNorm/LayerNorm
目的:把最终表征对齐到LM Head期望的数值尺度;类比出门前把指南针校准;取决于具体模型结构是否有FinalNorm(部分模型有,部分没有)
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习归一化向量h<经FinalNorm处理后的最终表征,形状[d_model,];数值尺度对齐到LM Head期望范围>→ s9
s9
LM Head矩阵乘法得覆盖全词表的 logits向量
主体生成/理念/知识/商业/前沿技术/AI智能/机器学习归一化向量h<经FinalNorm处理后的最终表征,形状[d_model,];数值尺度对齐到LM Head期望范围>← s8.h<llm>生成/元素生成
LM Head矩阵乘法:logits=h*W_vocab,W_vocab形状[d_model,vocab_size]
logits是未归一化原始分数,形状[vocab_size,];代表第一个输出token的候选得分,覆盖整个词表;还未经softmax不是概率;类比把当前想法翻译成一张候选词得分榜
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习logits向量logits<形状[vocab_size,]的未归一化原始分数,如[3.2,2.8,1.5,...,-0.3];每个位置对应词表一个token的预测得分;还未经softmax不是概率>→ s10
s10
解码配置logits向量 做Temperature等调整
预处理/理念/知识/商业/前沿技术/AI智能/机器学习logits向量logits<形状[vocab_size,]的未归一化原始分数,如[3.2,2.8,1.5,...,-0.3];每个位置对应词表一个token的预测得分;还未经softmax不是概率>← s9.logits<llm>修改/变/调整
可选:Temperature缩放(logits/T)+Logits bias(特定token加减分)+重复惩罚(降低已出现token分数)+Bad words mask(直接屏蔽某些token)
可选步骤:目的是把基础模型偏好对齐到产品目标与可控性要求;T越低越确定,T越高越发散;Logits bias用于安全/风格控制;类比在出答案前调一调说话风格/谨慎程度旋钮
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习logits向量adjusted_logits<经Temperature缩放+偏置+惩罚+屏蔽处理后的logits,形状仍[vocab_size,];不期望token得分被调整或置为-∞>→ s11
/理念/知识/商业/前沿技术/AI智能/AI应用解码配置decoding_params<解码参数配置:temperature(如1.0),logits_bias(token级加减分词典),repetition_penalty(重复惩罚系数),bad_words_ids(屏蔽token列表)>← 工序输入
s11
Top-k/Top-p截断 logits向量 得精简 候选Token列表
预处理/理念/知识/商业/前沿技术/AI智能/机器学习logits向量adjusted_logits<经Temperature缩放+偏置+惩罚+屏蔽处理后的logits,形状仍[vocab_size,];不期望token得分被调整或置为-∞>← s10.adjusted_logits<llm>提取/物理提取/裁切
可选截断:Top-k(只保留前k个分数最高的token)/ Top-p(累积概率达p截断)/ Min-p(低于阈值全过滤)/ Typical(保留类型性制的)
可选步骤:降低长尾噪声,提升可读性/一致性;先列候选短名单再做决定;Top-k和Top-p常组合使用
-幂等/理念/知识/商业/前沿技术/AI智能/机器学习/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举候选Token列表candidate_logits<经Top-k/Top-p截断后的候选token子集,其余位置logits置为-∞;形状仍[vocab_size,]但有效候选数远小于vocab_size>→ s12
s12
采样/贪心从 候选Token列表 选出并Detokenize为 输出Token
交付/理念/知识/商业/前沿技术/AI智能/机器学习/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举候选Token列表candidate_logits<经Top-k/Top-p截断后的候选token子集,其余位置logits置为-∞;形状仍[vocab_size,]但有效候选数远小于vocab_size>← s11.candidate_logits<llm>生成/元素生成
Sampling:softmax(candidate_logits)得概率分布→随机按概率采样;Greedy:argmax(candidate_logits)直接选最高分;得到next_token_id后Detokenize为字符/子词
Sampling目的:多样性;Greedy目的:确定性可复现;两者选择取决于应用场景;Detokenize把整数ID还原为用户可见文本;第一个token产出后进入自回归循环
-随机/理念/知识/商业/前沿技术/AI智能/AI应用输出Tokenfirst_token<第一个生成Token,如next_token_id=1234对应'的';Detokenize后为字符或子词(如'##子'前缀);后续进入自回归循环续token生成>→ 返回 first_token
返回 输出Token 第一个生成Token(字符/子词,可继续自回归循环)