大模型系统学习笔记:从 Transformer 到应用落地
大模型系统学习笔记:从 Transformer 到应用落地
背景
这篇文章是一份面向入门到进阶阶段的系统笔记,目标不是把每个公式都推导到极致,而是先建立一张清晰的知识地图:大模型为什么能工作,训练过程在优化什么,推理部署为什么会变慢,以及应用层应该怎样把模型能力稳定地接入真实业务。
如果你已经会使用 ChatGPT、Claude 或本地开源模型,但还不清楚 Transformer、预训练、微调、RAG、Agent、推理优化之间的关系,可以从这篇开始。后续再把每一节拆成独立文章,会更容易形成自己的学习路线。
大模型到底是什么
大模型通常指参数规模很大、训练语料很广、能够完成多种语言和推理任务的神经网络模型。它不是一个单独算法,而是一整套工程系统:数据、模型结构、训练框架、推理服务、评估体系和应用编排都在里面。
从语言模型开始理解
最基础的语言模型任务可以写成:给定前面的文本,预测下一个 token。
例如输入:
大模型的核心能力来自模型需要预测后面可能出现的 token,比如“数据”“训练”“参数”“注意力机制”等。看起来只是续写,但当训练数据足够大、模型容量足够大时,这个简单目标会迫使模型学习语言结构、常识关联、代码模式、数学符号、对话风格和任务指令。
这也是为什么现代大模型常被称为“通用模型”。它并不是被单独训练成翻译器、问答器或代码助手,而是在大量文本中学到一种可迁移的表示能力。
Token 是模型真正处理的单位
模型并不是直接读“字”或“词”,而是先通过 tokenizer 把文本切成 token。中文里一个 token 可能是一个字,也可能是一个词的一部分;英文里一个单词也可能被切成多个 token。
token 设计会影响几个重要问题:
- 上下文窗口能放多少内容
- 中文、英文、代码的压缩效率
- 训练和推理时的计算量
- 长文本任务的成本
所以当我们说一个模型支持 128K 上下文时,本质上说的是支持 128K 个 token,而不是 128K 个汉字。
Transformer 的核心结构
现代大模型主要建立在 Transformer 架构之上。Transformer 的关键贡献是用注意力机制替代传统循环结构,让模型能并行处理序列,并在长距离依赖上表现更好。
Embedding:把 token 变成向量
token 本身只是编号,模型不能直接理解编号的语义。Embedding 层会把每个 token id 映射成一个高维向量。
可以把向量理解成模型内部的“语义坐标”。相似含义的 token 往往会在向量空间里更接近,但这个空间不是人手工设计的,而是在训练中自动学出来的。
Attention:决定该看哪里
Self-Attention 是 Transformer 的核心。它让序列里的每个位置都能根据当前任务,动态关注其他位置的信息。
一个简化理解是:
- Query 表示“我现在想找什么信息”
- Key 表示“我这里有什么特征可以被别人匹配”
- Value 表示“如果别人关注我,我能提供什么内容”
注意力权重来自 Query 和 Key 的匹配程度,然后用这些权重汇总 Value。这样模型在生成某个 token 时,可以关注前文中最相关的部分。
Multi-Head Attention:从多个角度看文本
单个注意力头只能学习一种关注模式,多头注意力则允许模型同时从多个角度理解文本。
有的头可能关注语法关系,有的头关注实体指代,有的头关注代码缩进,有的头关注段落主题。多头机制不是显式规定的,但训练后常常会形成类似分工。
Feed Forward:逐位置加工信息
注意力层负责信息交互,前馈网络负责对每个位置的表示进行非线性变换。很多大模型的参数其实主要集中在前馈网络部分。
这部分可以理解为模型对已经汇总的信息做进一步抽象、压缩和重组。
Residual 和 LayerNorm:让深层网络稳定训练
大模型往往有几十层甚至上百层 Transformer block。如果没有残差连接和归一化,梯度传播会很不稳定。
Residual connection 让每一层可以在原始表示上做增量修改,而不是完全重写表示。LayerNorm 则让每层输入分布更稳定。
预训练阶段学到了什么
预训练是大模型能力的根基。模型在海量文本上反复预测下一个 token,从中学习语言规律和世界知识。
数据规模很重要,但不是越多越好
训练数据通常来自网页、书籍、论文、代码、问答社区和多语言文本。数据量越大,模型越有机会看到更多知识和表达方式,但低质量数据也会带来噪声。
高质量数据处理包括:
- 去重,减少模型记忆重复内容
- 过滤垃圾文本和乱码
- 清理隐私和敏感信息
- 平衡不同语言和领域
- 保留高质量代码、数学和专业文本
很多时候,数据质量对模型效果的影响不亚于参数规模。
预训练目标很简单
自回归语言模型的目标是最大化下一个 token 的概率。训练时模型会看到一段文本的前半部分,然后预测后面的 token。
简化伪代码如下:
for batch in dataset: input_ids = batch[:, :-1] labels = batch[:, 1:] logits = model(input_ids) loss = cross_entropy(logits, labels) loss.backward() optimizer.step()真实训练会复杂得多,包括分布式并行、混合精度、梯度累积、学习率调度、checkpoint 管理和容错恢复。但核心目标仍然是预测下一个 token。
参数规模带来容量
参数越多,模型通常越能拟合复杂模式,也更容易在多任务上表现出泛化能力。但参数越多也意味着训练成本、推理成本和部署难度上升。
常见规模可以粗略理解为:
- 小模型:1B 到 7B,适合本地部署和低成本任务
- 中等模型:13B 到 70B,综合能力更强
- 超大模型:百 B 以上,能力更强但成本明显提高
选择模型时不应该只看参数量,还要看训练数据、上下文长度、推理速度、工具调用能力和中文能力。
指令微调与对齐
预训练模型只会续写文本,不一定会听懂用户指令。要让模型像助手一样回答问题,还需要指令微调和偏好对齐。
SFT:让模型学会按指令回答
SFT 是 supervised fine-tuning,也就是监督微调。训练数据通常是“指令 -> 高质量回答”的格式。
例如:
{ "instruction": "用三句话解释什么是注意力机制", "response": "注意力机制是一种让模型在处理当前 token 时动态选择相关上下文的方法。它会计算不同位置之间的相关性,并根据权重汇总信息。这样模型可以更好地处理长距离依赖和复杂语义关系。"}SFT 之后,模型会更愿意遵循用户请求,也更适合聊天、写作、总结和代码解释。
偏好对齐:让回答更符合人类期待
只靠 SFT 还不够。模型可能啰嗦、答非所问,或者在不确定时编造。偏好对齐会通过人类反馈或 AI 反馈,让模型学会区分更好的回答。
常见方法包括 RLHF、DPO、IPO 等。不同方法细节不同,但目标相似:让模型输出更有帮助、更安全、更符合指令。
对齐不是万能的
对齐能改善行为风格,但不能凭空补齐模型没有学过的知识,也不能保证所有事实都正确。对于知识密集任务,仍然需要检索、工具调用、结构化数据和人工校验。
这也是 RAG 和 Agent 系统存在的原因。
RAG:让模型接入外部知识
RAG 是 Retrieval-Augmented Generation,即检索增强生成。它通过先检索相关文档,再把文档片段放进 prompt,让模型基于资料回答。
为什么需要 RAG
大模型参数里的知识有几个问题:
- 可能过时
- 难以追溯来源
- 对私有数据一无所知
- 容易在细节上幻觉
RAG 可以把知识从模型参数中解耦出来。模型负责理解和生成,知识库负责提供事实依据。
一个典型 RAG 流程
RAG 系统通常包含以下步骤:
- 文档切分:把长文档切成合适片段。
- 向量化:用 embedding 模型把片段转成向量。
- 建索引:把向量写入向量数据库。
- 检索:用户提问后检索相似片段。
- 重排:用 reranker 重新排序候选片段。
- 生成:把最相关片段放进 prompt,让大模型回答。
- 引用:返回答案时附带来源。
RAG 最容易踩的坑
RAG 不是把文档扔进向量库就能做好。常见问题包括:
- 切分太粗,检索片段包含大量无关内容
- 切分太细,单个片段缺少上下文
- embedding 模型和业务语言不匹配
- 只做向量检索,忽略关键词检索
- prompt 没要求模型基于资料回答
- 没有引用来源,答案无法验证
一个可用的 RAG 系统,往往需要 hybrid search、rerank、元数据过滤和答案校验。
Agent:让模型从回答走向行动
Agent 可以理解为具备规划、工具调用和状态管理能力的大模型应用。它不仅回答问题,还能调用搜索、数据库、代码执行器、浏览器或业务 API。
Agent 的基本循环
一个常见 Agent 循环是:
- 理解任务目标
- 制定下一步计划
- 选择工具
- 执行工具调用
- 观察结果
- 更新计划
- 输出最终答案
这个循环看起来简单,但工程上很容易失控。模型可能调用错误工具、陷入循环、忽略工具结果,或者把中间错误继续放大。
工具设计比模型更重要
给 Agent 设计工具时,应该让工具职责清晰、参数明确、返回结果结构化。
不好的工具:
search(anything)更好的工具:
{ "name": "search_docs", "description": "Search internal product documentation", "parameters": { "query": "string", "limit": "number", "product": "string" }}工具越清晰,模型越容易做出稳定选择。
Agent 需要边界
真实业务里不能让 Agent 无限行动。需要限制最大步骤数、工具权限、花费预算、超时时间和高风险操作确认。
对于写入数据库、发送邮件、执行交易、删除文件这类操作,应该要求人工确认或增加权限校验。
推理优化为什么重要
训练完成后,模型还需要被部署成服务。推理阶段的核心问题是:如何在可接受成本下,让模型更快、更稳定地输出结果。
Prefill 和 Decode
大模型推理通常分成两个阶段:
- Prefill:处理用户输入的 prompt,一次性计算上下文。
- Decode:逐 token 生成回答,每次生成一个新 token。
长 prompt 会让 prefill 变慢,长回答会让 decode 变慢。聊天应用里,用户最关心的是首 token 延迟和整体生成速度。
KV Cache
自回归生成每一步都依赖前文。如果每生成一个 token 都重新计算全部上下文,成本会非常高。KV Cache 会缓存已经计算过的 Key 和 Value,避免重复计算。
KV Cache 能显著加速生成,但也占用显存。上下文越长、并发越高,KV Cache 压力越大。
量化
量化是把模型权重从高精度转换成低精度,比如 FP16 转 INT8 或 INT4。这样可以减少显存占用并提升推理速度。
但量化可能损失精度,尤其是数学、代码和复杂推理任务。实际选择时要在效果和成本之间平衡。
批处理与并发
服务端通常会把多个请求合并成 batch,提高 GPU 利用率。问题是用户请求长度不一、生成长度不一,如果调度不好,会导致延迟波动。
优秀的推理服务需要处理动态批处理、请求排队、超时取消、流式输出和资源隔离。
应用落地的工程框架
大模型应用不是简单调用一次 API。一个稳定系统至少需要输入处理、上下文构建、模型调用、结果校验、日志监控和反馈闭环。
Prompt 是接口,不是魔法
Prompt 本质上是人和模型之间的接口设计。好的 prompt 应该明确角色、任务、输入、输出格式和约束。
例如:
你是一个技术博客助手。请根据给定资料回答问题。如果资料不足,请明确说明不知道,不要编造。输出结构:1. 结论2. 依据3. 需要确认的问题越是复杂任务,越应该把输出格式结构化,比如 JSON、表格或固定段落。
评估要提前设计
很多团队先做 demo,后面才发现无法判断模型改动是否变好。评估应该从一开始就设计。
常见评估维度:
- 准确性:事实是否正确
- 完整性:是否覆盖关键点
- 可追溯性:是否有来源
- 格式稳定性:是否符合输出结构
- 安全性:是否拒绝危险请求
- 成本:token 和推理时间是否可接受
对于知识库问答,可以构建一批标准问题和参考答案,每次更换模型、prompt 或检索策略后跑一遍。
日志与观测
线上系统必须记录关键链路:
- 用户问题
- 检索到的文档
- 最终 prompt
- 模型输出
- token 消耗
- 响应时间
- 错误类型
这些日志用于排查问题、优化召回、评估成本,也能帮助发现模型幻觉和用户真实需求。
学习路线建议
大模型知识很多,建议按层次推进,不要一开始就陷入细节。
第一阶段:使用和概念
先熟悉模型 API、本地模型部署、prompt 基础、token、上下文窗口、temperature、top_p、流式输出等概念。
这个阶段的目标是能独立做一个小工具,比如文章摘要、问答助手或代码解释器。
第二阶段:Transformer 和训练
开始学习 Transformer、attention、embedding、loss、优化器、预训练、SFT 和对齐。可以不急着训练大模型,但要理解训练过程在优化什么。
这个阶段建议结合小模型实验,比如用一个小型 GPT 结构在玩具数据上训练,观察 loss 变化和生成结果。
第三阶段:RAG 和工程应用
学习文档切分、embedding、向量数据库、rerank、prompt 拼接、引用来源和评估集。这个阶段最贴近真实应用,也最容易产生可展示项目。
第四阶段:推理部署和优化
学习 vLLM、TensorRT-LLM、llama.cpp、量化、KV Cache、批处理、并发控制和监控。这个阶段更偏工程,需要结合服务器资源实践。
第五阶段:Agent 和复杂系统
最后再进入 Agent、工具调用、多轮规划、权限控制、记忆系统和工作流编排。Agent 看起来酷,但没有前面的基础,很容易做成不稳定的演示。
常见误区
误区一:参数越大越适合所有任务
大模型不是越大越好。简单分类、固定格式抽取、轻量客服等任务,小模型加好数据可能更便宜、更快、更稳定。
误区二:RAG 可以解决所有幻觉
RAG 能降低幻觉,但不能彻底消除。检索结果错误、上下文不足、prompt 约束弱,都会导致模型继续胡说。
误区三:Prompt 写得长就一定更好
长 prompt 会增加成本和延迟,也可能引入冲突指令。好的 prompt 是清晰而不是冗长。
误区四:上线后不需要评估
模型应用上线后会遇到真实用户输入,分布和测试集完全不同。没有日志、评估和反馈,系统会很难持续优化。
一个最小可行的大模型应用架构
如果从零做一个知识库问答应用,可以先用下面这个结构:
用户问题 ↓问题改写与意图识别 ↓混合检索:关键词 + 向量 ↓Rerank 重排 ↓构造带引用的 Prompt ↓大模型生成答案 ↓格式校验与引用校验 ↓返回答案并记录日志这个结构不复杂,但已经覆盖了真实项目中的关键环节。后续可以逐步加入缓存、权限、反馈、评估和多模型路由。
总结
大模型不是单点技术,而是从数据、模型、训练、推理到应用工程的一整套系统。Transformer 提供了基础结构,预训练带来通用能力,指令微调让模型能对话,RAG 让模型接入外部知识,Agent 让模型调用工具,而推理优化决定系统能否以合理成本运行。
学习时建议先建立全局框架,再逐步深入每个模块。对于个人博客来说,可以把这个主题拆成系列文章:Transformer 基础、Attention 机制、RAG 实战、Prompt 设计、推理优化和 Agent 工具调用。每一篇都能独立成文,也能组合成完整的大模型学习路线。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!