从Transformer到智能体:一套收藏级AI技术图解全拆解
直接说结论我花了两周时间把从 Transformer 到智能体设计这条技术线的图解重新整理了一遍现在这套图已经成了我日常沟通、写方案、带新人的“固定课件”。这篇文章就把这套“收藏级”AI 技术图解的核心思路、画图方法、踩坑记录全部拆给你适合刚入门 AI 的技术新人也适合要做技术分享、写架构文档、带团队评审的开发者。哪怕你只是对“Transformer 为什么能成为主流模型结构”“智能体到底在设计什么”感到好奇也能靠这套图解把概念拼图补完整。1. 先搞清楚这套“技术图解”到底解决什么问题1.1 为什么靠文字学 AI 结构总是学完就忘很多人学 Transformer第一反应是读论文、看公式、逐字逐句啃源码。但文字是线性的而模型的真实结构是并行的、循环的、有分支的。你读完了“由多头注意力层和前馈网络组成”也背下了“Q、K、V 分别代表 Query、Key、Value”但一旦让你画出整个模型的数据流大多数人会卡在“向量从哪来、到哪去、形状变成多少、为什么这里要残差连接”。图解解决的就是这个问题。一张好的架构图本质上是一张可导航的地图你把张量想象成快递包裹把层想象成处理站点把注意力机制想象成包裹之间的“关联扫描”。快递从哪里发出、经过哪些工作站、每个站点怎么加工、加工结果怎么合并一目了然。我常跟人说别把技术图当做“论文插图”它应该是你脑子里的那套“物流网络图”。1.2 这套图解适合谁三类人最需要第一类是初学者刚接触大语言模型需要一个从“注意力机制”到“智能体”的完整地图而不是零散的文章碎片。第二类是工程师或研究者要做技术方案、做代码走查、做实验记录需要一版能放进文档、能口头讲清、能指导代码落地的结构图。第三类是技术负责人或布道者要给团队做分享、给客户做演示需要把复杂概念降维同时不能丢失关键细节。我整理这套图的原则也很简单每一张图都要能回答三个问题——模块是什么、为什么需要它、数据在模块间怎么流动。如果一张图画完你不能对着它把整个过程讲给一个不太懂技术的人听那这张图就还需要改。1.3 整套图的整体分层思路我把整个知识体系分成四层。底层是基础组件层主要画嵌入、位置编码、注意力机制、前馈网络这是 Transformer 的最小积木。第二层是模型结构层把单层结构、多层堆叠、残差连接、层归一化组合起来画出完整的语言模型主干。第三层是训练与推理层区分预训练和推理阶段不同的数据流这部分很多图解都含糊。最上层是智能体设计层把模型放到一个更大的系统里画它如何感知环境、调用工具、维护记忆、规划动作。这四层并不割裂。你在画智能体主循环时随时要回到第二层去查“模型的输入格式长什么样”“上下文窗口怎么用”你在画第三层时也要理解第一层的注意力计算细节。图解的好处就是让这种“跨层回看”变得很自然。2. 图解 Transformer把“注意力”画成你能上手画的样子2.1 先从总览图开始一张图说清模型骨架我画 Transformer 结构图时第一版不会急着把 40 个箭头全部塞进去。先画一个只有六个模块的总览图输入序列、嵌入层、多头注意力、前馈网络、残差连接与层归一化、输出映射。每个模块旁边只标一行字说明职责然后画一条贯穿整张图的主线。这条主线就是张量流向。输入是一串 Token每个 Token 被查表映射成一个高维向量这一批向量同时进入多头注意力模块注意力按照“每个位置应该关注序列中哪些位置”来重写向量然后经过前馈网络做一次非线性变换再叠加残差输出到下一层。你把这个总览框画出来细节才有地方挂靠。需要特别注意的是输入 Token 的流向在图中是“并行”的。很多人第一次画会忍不住画成“第一个词算完再算第二个词”这是错的。实际计算是整段序列一次性进入矩阵运算图里应该用一叠向量或矩形块来表示“一批向量”而不是一个个圆圈排队。2.2 Q、K、V 怎么画才能一眼看懂注意力机制是 Transformer 图解里最容易画糊的部分。我用过一个比较顺手的画法是把 Q、K、V 比作一个大型文档检索系统的三个角色Q 是你手里的搜索词K 是文档柜里每个文件夹的标签V 是文件夹里面的内容。你要做的事情是拿搜索词去比对所有标签算出相似度再按相似度把内容取出来加权组合。画图上我习惯在多头注意力模块内部画三条平行输入分支标注 Q、K、V然后在中间画一个“缩放点积注意力”小方框。在这个小方框里画一个矩阵行是 Q 的各个位置列是 K 的各个位置格子颜色深浅表示注意力权重。旁边写一行公式先让 Q 和 K 做点积除以根号 d 做缩放再过 Softmax 归一化最后乘 V。这个矩阵图特别重要。因为它能直观解释“为什么叫注意力权重”深色格子代表模型在计算第 i 个词的时候格外关注了第 j 个词。如果你在图中同时标注了 mask 区域——比如把右上三角全部标记为“屏蔽”——读者就可以看到自回归解码时每个位置只能看到自己及之前的信息而不是偷看未来。2.3 位置编码和归一化两张不能省的小图位置编码是 Transformer 图解里经常被省略却极其致命的模块。因为注意力计算本身对位置不敏感你把这些向量随机打乱顺序结果可能一模一样。没有位置信息的模型就像一份把每句话的关键词都拆出来但丢了页码的档案。画位置编码时我建议画一个很小的“加和符号”图原始词向量和位置向量同时输入加法器输出作为实际进入注意力模块的向量然后再简单画一下不同位置向量的波形图说明同样是词向量位置不同会叠加不同模式。层归一化也要单独画清楚。它做的是把每个样本的特征维重新拉回到稳定的均值方差范围内避免深层网络训练时数值波动过大。图里只需要画出“沿着特征维度做归一化”的方向线并标注“对每个 Token 独立计算不跨 Token 统计”避免和 batch 归一化混淆。这里很多图解会画错把归一化方向画成横跨整个序列但实际 LayerNorm 是每个样本内部自己归一化不是查全局统计量。2.4 训练路径和推理路径必须分开画我见过很多结构图把训练和推理画在同一条直线上导致新人误以为两步只是“有没有标签”的区别。其实两条路径的差异非常大。训练阶段模型可以一次性看到完整的目标序列所有位置的预测同时计算并行度高在图中你可以画一个大的矩阵并行块标注“teacher forcing 方式用真实目标词作为下一步输入”。推理阶段则完全不同生成第一个词时只能看到起始符生成第二个词时要把第一个词拼到输入末尾再重新过一遍模型是典型的自回归循环。画推理路径时我建议画一个带反馈回路的图输出 Token 经过一个延迟单元再拼接到输入序列尾部形成“自己吃自己”的循环。这个反馈回路如果不画读者就很难理解为什么同样一个模型训练时那么快、推理时那么慢为什么 KV Cache 能省重复计算。我后文讲智能体的时候会再提这个回路因为智能体的目标很大程度就是围绕“如何高效地多次利用这个自回归循环”做设计。3. 从模型到系统图解智能体设计的关键主线3.1 智能体不是一个模型而是一套“人机协作系统”很多人以为智能体就是把一个强大的语言模型包装成自动问答程序这其实低估了智能体设计的复杂度。智能体是一个系统语言模型只是其中的“推理核心”。一个完整的智能体至少要包含感知模块负责接收用户输入、环境状态或反馈规划模块负责把大的复杂目标拆解成可执行的子步骤工具调用模块负责选择并调用外部 API、数据库、代码解释器或搜索接口记忆模块负责保存历史信息、长期知识和本次任务的临时上下文动作执行模块负责把模型决定转化为实际输出或操作。我画智能体架构图时第一张图通常画成五个模块围绕“推理核心”的分布图而不是线性流程。核心原因在于智能体的行为不是单向的。规划可能改变工具调用的顺序工具返回结果又会反过来影响下一步规划记忆则贯穿全局。把它画成“环”比画成“流水线”要准确得多。3.2 主循环图解观察、思考、行动、观察智能体最基础的运行模式是循环。这个循环长这样观察外部消息或系统状态调用模型进行思考根据思考结果选择并执行一个动作动作产生新观察然后再次进入思考。每一次循环模型都会基于新增的观察更新自己的判断。这其实很像一个飞行员看仪表盘、调整操作杆、再看仪表盘确认效果的过程。画这个主循环时我踩过一个坑就是一开始只画了“观察-思考-行动”三个节点导致别人问我“如果行动失败怎么办”时我在图上找不到失败分支。后来改成四个节点观察、规划、行动、反思。在行动旁边画两个出口一个通往“更新记忆并继续”一个通往“触发异常处理”。反思节点专门负责比较预期结果和实际结果把差距转化为下一轮规划的依据。这样一改整张图就把“智能”体现在“反馈回路”里而不是一个单方向的问答流。3.3 工具调用和“记忆分层”的图解细节工具调用是智能体设计的重头戏。模型本身并不直接操作外部系统它只输出一个“工具调用请求”由执行模块去真正执行。我画工具调用时会画三个纵向层模型层、接口协议层、资源层。模型层决定“现在应该调用哪个工具、传什么参数”接口协议层负责把模型输出解析成结构化指令比如函数名和参数列表资源层代表实际运行的数据库、搜索引擎、代码环境。这个三层图能帮你看清很多问题模型输出的格式错了是协议层解析失败工具执行超时了是资源层问题上下文里没有可用工具描述是系统提示词没写好。排查问题时按层定位效率极高。记忆模块我则习惯画一张分层表。最底层是长期记忆比如用户的偏好、历史项目知识通常用向量数据库存储需要检索才能拿回来。中间层是工作记忆包括当前任务相关的中间结果、临时变量。最顶层是短期交互上下文也就是模型当前这次请求里携带的全量文本。三者不是一回事。长期记忆不能全部塞进上下文窗口否则令牌开销会爆炸短期上下文则有长度上限超出后必须做压缩或丢弃决策。3.4 思维链和任务规划怎么画不玄乎思维链这个概念经常被画得很玄其实本质就是“把复杂问题拆解成一系列中间推理步骤”。我在画它时会画一条时间轴从上到下依次列出子步骤。每个子步骤框里只保留“输入、决策依据、输出”三个要素。这样一来读者就能直观看到模型如何把“制定一个旅行计划”拆解成“查航班、查酒店、排日程、做预算”四个子任务又如何在子任务之间传递信息。需要补充的一点是思维链和前一节的主循环并不冲突。思维链可以看作“规划模块的内部推理过程”而主循环是“智能体与外界的交互过程”。一张图从里往外画另一张图从外往里画它们构成互补视角。在把智能体图解整理给团队时我通常先画主循环图再补充一张思维链时间轴图这样大家既能理解宏观循环又能理解单次规划的内部逻辑。4. 图解方法论工具、颗粒度、标注规范4.1 架构图、数据流图、时序图不是一回事我自己最初绘图时最大的问题是把所有信息塞进一张架构图。后来发现合理的方式是先判断这个知识点最需要表达什么维度再选择图的类型。模块组成和层级关系用架构图适合展示智能体有哪些模块、模型内部有哪些层。数据怎么在模块间流转用数据流图适合展示张量形状变化、循环路径、缓存流向。调用先后顺序用时序图适合展示一次任务从用户输入到工具调用再到结果返回的完整交互过程。还有一类是状态图适合展示智能体在不同阶段之间的转换条件编码运行时切换很实用。选错图的后果非常现实。我在讲缓存机制的时候一开始用架构图硬画结果出来的图被箭头填满越看越乱。换成横向时间轴的调用序列图后问题立刻清晰第一次请求计算完整结果后续请求复用缓存序列图上两条时间线一对比节省的计算一目了然。所以你先问自己“我到底想让读者理解结构、流程还是状态”然后再决定画哪种图。4.2 颗粒度控制给初学者和工程师的画法截然不同图解最容易犯的错是“试图覆盖所有细节”。给初学者的图应该隐藏公式突出直觉。比如画注意力机制可以只画检索类比图搜索词、标签、内容、加权取回。给工程师的图则必须保留维度标注、mask 标记、缓存位置。我的经验是分版本维护。手头保留一份“讲解版”用类比和简单图标适合会议分享、新人培训再维护一份“实现版”用精确的张量形状和函数名适合编码对照、代码走查。两份图共享同一套模块命名切换不混乱。还有一个比较实用的技巧在实现版图里每个模块上用标签标出对应代码文件或函数名。我在图上写过“在 xx 模块的 attention.py 中类名为 MultiHeadAttentionforward 入口参数是 hidden_states、attention_mask”。这样工程师拿到图后能直接定位代码不用翻跳跃式文档。4.3 标注张量形状和关键超参数让图变成“解题线索”标注是技术图最容易被低估的部分。虚线加文字“这里是残差连接输入输出维度不变”和标注“(batch8, seq_len512, hidden768) 经过残差连接输出同维度”引导效果完全不同。我会在每个关键节点旁边标注张量形状用简写约定B 表示批量大小、S 表示序列长度、H 表示隐藏维度。当形状发生变化时在箭头旁边标出是哪里改变了比如投影矩阵 W_Q 把 H 维度变成注意力头数乘以头维度。超参数也要标。层的数量、注意力头数、dropout 比例、激活函数类型这些信息决定读者能否从图反推出模型的规模。我用过一个小习惯在模型总览图的角落加一张小表列出“参数规模估算”比如 hidden768、12 层、12 头然后粗略给出参数量级帮助读者建立“维度大小与计算消耗”的直觉。4.4 绘图工具与图层管理经验工具选择本身不是重点重点是图层管理。我在画复杂系统图时一定会分图层底层放背景色和基础框中间层放模块框和连接线顶层放标注文本和超参数标签。这样修改时不会误删连接线也能快速切换“只显示框架”和“显示全部细节”两种视图。图层命名的规范也很简单主线层、模块层、数据流层、标注层、异常分支层。每次画完一张图我会反选检查一遍图层内容确保没有箭头被其他矩形块遮挡没有标注文字悬空没有参考对象。绘制连接线时尽量统一用正交折线而不是随意弯曲的曲线正交折线在复杂结构里更阅读友好视觉噪声也小。5. 实测排查与常见误区速查5.1 图解与代码不一致最隐蔽的信息腐坏技术图解有一个特殊问题代码在持续迭代图往往停留在某个时点时间一长两者就出现了偏差。比如代码里已经改成 Flash Attention 实现但图里还画着标准多头注意力流。这种不一致最坑人因为看的人会拿着过期的图去理解新代码怎么都对不上。我在维护图解时定了一条规则任何图都必须标注“版本快照”信息至少包括对应代码版本号、绘制日期、主要假设。每次改动代码后必须检查相关图是否需要更新。这项工作不能靠记忆要在项目计划里安排固定评审项否则拖两周后一定有人拿着旧图讨论新设计。5.2 常见错误模式箭头乱穿、循环不清、信息过载箭头乱穿指连接线交叉过多或横跨多个模块读者视线被切割得支离破碎。解决方案是引入必要的“数据总线”画法用一条主干线贯穿全图分支用短连接接入主干。循环不清指反馈回路没有明确起点和终点读者看不出循环边界。画循环路径时一定要在回路上加箭头方向并配上文字说明“此路径在推理阶段每生成一个 Token 执行一次”。信息过载指在一张图里同时画了模块结构、超参数、代码引用、训练技巧任何一张图承载超过一个主题就会变成“圣诞树”。我检查信息过载的方法很简单能不能用一句话说出这张图想传达什么如果说不出来拆图。5.3 概念混淆重灾区LayerNorm 与 BatchNorm、多头注意力与多轮循环最后汇总三个最容易在图解中混淆的概念。第一LayerNorm 和 BatchNorm。LayerNorm 是对每个独立样本的特征维度做归一化与 batch 里其他样本无关BatchNorm 是在每个特征维度上跨 batch 做统计。图中最好用不同方向的矩形条区分前者横向窄条后者纵向窄条。第二多头注意力的“头”不是模型层数。多头是把维度切分成多个子空间并行计算注意力最后拼接层数则是模型堆叠的次数。这两个如果画成含混的嵌套结构会误导读者把注意力头理解为模型的纵向深度。第三自回归生成是“循环执行”不是“执行一次”。训练时并行计算容易让人忽略这一点但推理时每生成一个 Token 都要把新 Token 拼回去重新过一遍。图里如果有“Token 生成过程”一定加反馈回路否则漏掉这个循环后续理解 KV Cache 和智能体任务规划都会出现断层。5.4 我的实操习惯与一个小技巧最后分享一个实操习惯。我每次画完一套技术图解后会专门做一次“白板讲解测试”不在图上做任何标注直接拿白板笔把图的核心结构讲给另一个人听尽量脱离原图复述。如果哪个模块讲不清就说明那个模块的图需要改。这个测试帮我抓出过很多“画得很漂亮但逻辑不通”的问题。还有一个很常用的小技巧给每个模块起一个“行动代号”。比如把多头注意力叫做“多视角检索器”把前馈网络叫做“记忆精炼器”把残差连接叫做“安全直通车道”。图里用正式名称注释和讲解里用行动代号。这样讲的人有抓手听的人有类比整个讲解效果会好很多。这套图解整理下来我最大的体会是技术图不是论文的附属品而是一个独立的知识表达系统。从 Transformer 到智能体设计路径很长但只要每一层的图都扎实你能在任何一层停下来把一个概念讲明白也能在任意两层之间建立联系。图解的价值不在于它多好看而在于它能不能帮你和同伴快速建立共同语言在讨论模型架构或者智能体系统时不用再用手比划半天。