1. 先想清楚:大模型入门到底要学什么
很多同学一上来就问"大模型用哪本书""Transformer源码要不要读",其实这是把入门顺序搞反了。大模型这个词,现在往小了说是神经网络的一种架构,往大了说是一条从数据清洗、训练调优到部署上线的完整技术链路。你在网上看到的各种刷榜模型、爆款AI应用,背后都是这条链路在运转。所以入门的第一步不是找资料,而是先建立全局视图,知道自己要学的东西长什么样。
1.1 大模型不是"一个模型",而是一条完整的技术链路
先给一个最简化的理解框架。大模型之所以叫"大",核心在于两个特征:一是参数量大,动辄几十亿上百亿;二是训练数据量大,基本是把互联网级别的文本都过了一遍。有了这两个"大",模型才表现出所谓的涌现能力——小模型学不会的推理、上下文理解、指令跟随,大模型能学会。
完整技术链路大致分成五块:
- 数据工程:原始语料清洗、去重、质量过滤、配比。决定模型的天花板。
- 预训练:用海量文本做自监督学习,让模型学会"接话"和"理解"。
- 对齐与微调:让模型学会听指令、说人话、拒绝坏请求。SFT、RLHF、DPO都在这一层。
- 推理与部署:把训练好的模型跑起来,做加速、量化、并发管理。
- 应用开发:围绕模型做提示词工程、检索增强、Agent 工具调用、业务逻辑封装。
对入门者来说,你不用从预训练开始啃。大多数人走的是"应用开发+微调"这条线:先会用模型,再学会怎么把模型接到业务里,最后按需做定制化训练。这个顺序最符合认知规律,也不会一上来就被损失函数和分布式训练劝退。
1.2 给零基础同学的阶段式学习路线
我不太建议一上来就啃《深度学习》和原版Transformer论文,那相当于还没学会开车就先学发动机原理。比较务实的节奏是四步走:
- 工具期(第1-2周):学会调用别人的模型。用几行代码跑通一个开源模型,或者调一次API,对"模型能做什么、不能做什么"建立体感。
- 原理期(第3-6周):补深度学习基础。重点理解神经网络、梯度下降、损失函数,然后精读Transformer的Attention机制。这个阶段不需要推公式推到底,但要知道"模型为什么能理解文字"。
- 进阶期(第7-12周):做实战项目。微调一个模型、搭一套RAG问答系统、写一个Agent工具调用。把前面学的工具和原理串起来。
- 深耕期(半年以后):往细分方向走。想搞训练就学分布式并行,想搞推理就学CUDA和量化,想搞应用就学工程架构和产品设计。
这条路线最大的价值是"每两周都有反馈"。你不会处在"学了三个月还在看理论"的焦虑里,而是早早动手,用项目倒逼理解。
2. 从零搭建一套能跑大模型的学习环境
很多人卡在入门第一步,不是不想学,而是觉得自己电脑配置不够。我先说一个反直觉的结论:大模型入门阶段,对硬件的要求远没有你想象中那么高。真正需要高端显卡的是预训练和全参微调,而这些并非入门必修。
2.1 硬件不达标也能学的三种方式
如果你的电脑没有独立显卡,或者显存只有8G,下面三条路任选一条:
方式一:用云端GPU平台。现在国内有不少按小时计费的GPU租用平台,几十块钱就能跑一天。选那种已经装好PyTorch和CUDA的镜像,启动后直接用,省去配置环境的痛苦。适合做微调和推理实验。
方式二:用免费API额度。国内外主流大模型厂商基本都会给新用户赠送调用额度,或者提供免费的小规格模型。这类方式适合练习提示词工程、搭建应用逻辑,不用关心显存和模型文件。
方式三:用本地CPU跑小模型。现在很多1B-3B参数的小模型经过量化后,CPU也能出结果,只是速度慢一点。你可以体验完整的"下载模型-加载-推理"流程,对工程细节的理解一点不会少。
我的建议是:本地跑小模型作为日常练手,云端GPU作为微调和较大模型的试验场,两者结合性价比最高。
2.2 本地安装 Ollama,跑通你的第一个模型
我在不少实操里发现,Ollama是目前对新手最友好的本地模型运行工具,没有之一。它把模型文件下载、依赖管理、API服务全部封装好了,你把模型名字告诉它,剩下的事它自己干。
以我自己实测过的安装流程为例:
# 安装Ollama后,拉取一个1.5B的小模型 ollama pull qwen2.5:1.5b # 启动交互式对话 ollama run qwen2.5:1.5b就这么两行命令,一个能聊天的模型就跑起来了。整个过程不需要你手动配置Python环境,也不会有依赖冲突的问题。
Ollama还有一层价值是它自带了OpenAI兼容的API接口。启动服务后,你在代码里只需要把API地址指向http://localhost:11434/v1,就能用标准的OpenAI SDK调用本地模型。这意味着你写的应用代码可以无缝切换云端大模型和本地模型,这在开发和调试阶段实在太方便了。
2.3 用Transformers加载模型的最小代码
如果你想更底层地理解模型推理,就要接触HuggingFace Transformers。这套库是当前大模型生态的事实标准,几乎所有开源模型都提供Transformers版本。下面这段代码是你能写出来的最小推理程序:
from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "Qwen/Qwen2.5-1.5B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) prompt = "用一句话解释什么是大模型" messages = [{"role": "user", "content": prompt}] text = tokenizer.apply_chat_template(messages, tokenize=False) inputs = tokenizer(text, return_tensors="pt") output = model.generate(**inputs, max_new_tokens=128) print(tokenizer.decode(output[0], skip_special_tokens=True))这里有几个容易踩的坑,我提前给你排掉:
- 首次运行会下载模型文件。建议先确认一下网络条件,或者优先选择国内可访问的模型仓库。
- 显存不足时优先用半精度加载(
torch_dtype=torch.float16),能把显存占用降低一半。 - 推理时一定要设
max_new_tokens。不设的话模型可能无限生成,把显存跑爆。
跑通这段代码,你对"模型是怎么工作的"就有了第一个具象认知:先把文本变成token序列,再token序列变成模型能处理的向量,最后逐字预测下一个token,直到满足停止条件。
3. 模型从训练到微调:关键环节必须弄明白
用现成的模型做推理,只是大模型应用的冰山一角。真正让你和普通用户拉开差距的,是理解模型是怎么训练出来的,以及如何在保留通用能力的前提下,把它改造成适合你业务的样子。
3.1 预训练、SFT、RLHF 的阶段划分
整个训练流程可以类比成"上学":
- 预训练 = 通识教育。模型在浩如烟海的文本里学习语言规律、常识知识和推理模式。这个过程消耗的算力最大,普通团队根本做不了。
- SFT(监督微调)= 专业培训。用一批人工编写的高质量"指令-回答"样例,教模型学会听指令、按要求的格式输出。比如教它"你是客服,请礼貌回答",本质上就是让模型在特定对话分布上继续学习。
- RLHF/DPO = 价值观塑造。让模型知道哪些回答是好的、哪些是危险的,学会拒绝不当请求,保持稳定可靠。这也解释了为什么很多模型"知识面"其实差不多,但在使用体验上差距明显——差异主要来自对齐阶段。
对入门者来说,SFT是你最需要掌握的一环,因为绝大多数业务定制需求都用SFT解决。你不需要去动预训练的底座,只需要在一个通用模型基础上做微调。
3.2 微调不是"重新训练",LoRA 的原理与实操
很多新手误以为微调就是把模型整个重新训练一遍。实际上,现在95%以上的微调场景都用的是LoRA(Low-Rank Adaptation)这类参数高效微调技术。
LoRA的核心思想很巧妙:它冻结原始模型的所有参数,不改变模型本身,而是在模型的线性层旁边加一个小型的低秩矩阵,这两个矩阵就是"可训练的适配器"。训练时只更新适配器的参数,原始模型参数保持不动。
这意味着什么?全参微调要更新十几亿个参数,LoRA只需要更新几十万到几百万个参数。普通显卡就能跑,训练时间大幅缩短,而且原始模型能力基本不被破坏。训练完成后,适配器文件往往只有几十MB,部署时可以随时拆卸和替换。
用PEFT库做LoRA微调的核心代码长这样:
from peft import LoraConfig, get_peft_model from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B-Instruct") lora_config = LoraConfig( r=8, lora_alpha=16, target_modules=["q_proj", "k_proj", "v_proj", "o_proj"], lora_dropout=0.1, bias="none", task_type="CAUSAL_LM", ) model = get_peft_model(model, lora_config) model.print_trainable_parameters() # 输出:trainable params: 约8M,只占全部参数的0.1%这里r是低秩矩阵的秩,lora_alpha是缩放系数。我的经验是:r取8-16在大多数场景下已经够用,不是越大越好;target_modules要选对,不同模型的线性层命名不同,可以参考模型的配置文件确定。
微调阶段还有一个容易被忽略的点:学习率。LoRA训练的学习率一般设在1e-4到5e-5之间,比全参训练大一些,但如果你直接用1e-4跑出灾难性loss,先降一半试试。
3.3 数据质量才是微调的生命线
我见过不少同学花大价钱租GPU跑微调,效果却不理想,最后发现问题是出在数据上。模型训练领域有句话叫"垃圾进,垃圾出",在大模型时代这句话依然成立,甚至更加成立——因为模型足够聪明,你给它的数据质量直接决定它学成什么样。
SFT数据的基本格式是:
[ { "instruction": "解释什么是人工智能", "output": "人工智能是研究如何让机器模拟人类智能行为的学科……" }, { "instruction": "帮我写一封请假邮件", "output": "尊敬的领导:您好!因……特此请假。" } ]写训练数据时三个原则最重要:
- 质量优于数量。几百条精心设计的高质量数据,往往好过几万条从网上乱抓的文本。模型要的是"范例",不是"信息垃圾"。
- 多样性要足够。指令的表述方式、难度层级、场景覆盖面都要丰富,否则模型只会机械模仿某一种模板。
- 格式要绝对一致。每条数据都要有统一的字段结构,对话类和问答类数据不要混在一起。
一个实操技巧:微调之前,先把你准备的数据中抽取20%作为验证集。如果模型在验证集上的效果比训练集差很多,说明过拟合了,需要增加数据量或减小LoRA的秩。
4. 真正高频的落地场景:RAG、Agent 与流式输出
学大模型不能只停留在"跑通Demo"的水平,更关键的是把模型接入真实业务。在我接触的落地项目里,最常用的三个技术栈就是RAG、Agent和流式输出。这三个场景几乎是任何AI应用都逃不开的组合拳。
4.1 RAG 解决"模型不知道新知识"的问题
大模型有个天然的短板:训练数据有截止日期,它不知道你的内部文档、最新产品、私有数据。一种思路是微调让模型把这些知识背下来,但成本高、更新难。更务实的方案是RAG(Retrieval-Augmented Generation,检索增强生成)。
RAG的流程可以用一句大白话概括:先查文档,再写答案。
具体拆开是四步:
- 切分:把知识文档切成小块(比如按512个token切分),每块带上下文。
- 向量化:用Embedding模型把每一块文本变成一个向量。
- 检索:用户提问时,把问题也向量化,然后用余弦相似度找到最相关的几个文本块。
- 生成:把这些文本块拼到提示词里,连同问题一起交给大模型生成回答。
我实测下来的RAG项目里,最大的坑不在模型,而在切分策略。切得太碎,上下文丢失,模型只能看到碎片;切得太整,检索结果不精准,还浪费上下文窗口。最稳妥的做法是保留两层结构:一级是大章节切片,二级是小段落切片,检索时优先匹配小段落,然后带上所属的大章节一起喂给模型。
RAG的进阶玩法还包括:给文本块加元数据过滤、做混合检索(关键词+向量)、对检索结果重排。入门阶段先把基础链路跑通,再去优化检索精度。
4.2 Agent 让模型能调用工具
RAG让模型学会了查资料,Agent则让模型学会了"干活"。所谓Agent,本质上是给大模型配了一套使用外部工具的能力,让它能自己决定"什么时候查天气、什么时候查数据库、什么时候调用计算器"。
举个例子,用户问"北京明天会不会下雨",模型本身不知道。但如果你在提示词里告诉它"有一个函数叫query_weather(city, date),你可以调用它获取天气",模型就会输出一个特殊格式的调用请求,你的程序拦截这个请求、执行工具、把结果返回给模型,模型再据此生成最终回答。
这个"模型决定调用-程序执行工具-结果回传给模型"的循环,就是Agent的核心机制。业界常用的协议是OpenAI Function Calling格式,以及Anthropic的Tool Use格式。
入门时我不建议一上来就上LangChain这类重框架,而是先用原生代码实现一个工具调用:
tools = [ { "type": "function", "function": { "name": "get_weather", "description": "查询指定城市未来几天的天气", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名"}, "days": {"type": "integer", "description": "查询天数"} }, "required": ["city"] } } } ] response = client.chat.completions.create( model="your-model", messages=[{"role": "user", "content": "北京明天天气如何"}], tools=tools, )如果你能看懂这个函数定义结构,再去看LangChain这类框架的源码,会清晰很多。工具定义的本质就是"你用一段JSON描述了一个函数的输入输出格式,然后告诉模型:需要的时候调用它"。
4.3 流式输出:让回答"逐字出现"
做过Web应用的同学都知道,用户点击按钮后如果等好几秒才看到完整回答,体验是非常糟糕的。大模型的生成是逐token的,一个长回答可能要生成几十秒,如果全部生成完再返回,用户早跑了。
业界标准方案是SSE(Server-Sent Events)流式输出。核心思路是:后端一旦生成了第一个token,就立刻推给前端,前端逐字渲染在页面上。用户看到的效果就是"模型在打字",等待焦虑大幅降低。
前端配合的另一个关键技术是AbortController——用户点击"停止生成"按钮时,前端发起中断请求,后端停止生成。这两个技术配合,是AI交互体验的基本功。
我自己在实际开发中建议的顺序是:先在终端用命令行测试流式输出,确认token是逐步打印的;再写一个最简单的Flask或FastAPI接口做SSE转发;最后才接入前端框架。每层都验证通了再往上叠,排查问题时能少走很多弯路。
5. 入门阶段的自我检查:做一个小项目,而不是攒一堆资料
课程和资料是学不完的,真正能证明你学会的,只有亲手做出来的东西。我见过太多同学收藏了几百G的教程,最后卡在"什么都懂一点,什么都没跑通"的状态。要突破这个状态,最好的办法是给自己规定一个截止日期,做一个必须交付的完整项目。
5.1 推荐三个不同难度的小项目
项目一:个人知识库问答(适合学完RAG后做)把你平时的工作文档、学习笔记导入向量数据库,做一个能回答"我上周写的总结里提到了哪些结论"这类问题的网页应用。这个项目会让你完整经历:文档切分、Embedding、向量检索、Prompt拼接、流式渲染。难度适中,做完会很有成就感。
项目二:领域客服机器人(适合学完SFT微调后做)自己构造几百条某个垂直领域(比如宠物医疗、装修咨询)的问答数据,用LoRA微调一个小模型,再部署成对话接口。这个项目会逼你认真思考数据质量,也会让你体会到"模型从通用到定制"是怎么发生的。
项目三:能自主上网查信息的Agent(适合学完Agent后做)给大模型配一个搜索函数和一个网页抓取函数,让它能回答"当前AI领域发布了哪些新模型"这类需要实时信息的问题。这个项目的重点不是代码有多复杂,而是"模型判断该调用哪个工具"的提示词设计是否合理。
5.2 如何评估你的模型效果
入门阶段很多人最容易犯的错,是"跑通就结束"。跑通了只能说明代码没报错,不代表模型效果好。我建议至少从三个维度做评估:
- 准确率:对于有标准答案的任务,算一下回答正确的比例。
- 忠实度:模型有没有编造知识库里不存在的内容?这在RAG场景尤其重要,幻觉是RAG的头号敌人。
- 指令遵循度:模型是否按照你要求的格式回答?比如要求JSON输出,是否真的输出了合法JSON。
实操技巧是建一个固定的评测集,包含50-100条代表性问题。每次改动提示词、切分策略、微调参数后,用同一套评测集跑一遍,对比前后差异。没有评测集就盲目调参,等于闭着眼睛开车。
5.3 我给入门者的最后几条实操建议
经过这些年自己的学习和带人经验,有几条心得想特别分享给刚起步的同学:
第一,不要迷信"最强模型"。入门阶段拿官方最强模型练手其实是件坏事,因为模型太聪明了,什么错误都能自己纠正,你反而感知不到工程设计的价值。用小模型练手,暴露的问题更多,成长反而更快。
第二,日志和中间结果是你最好的老师。跑RAG时把检索到的每个文本块打出来看,跑Agent时把模型的每一步推理打出来看,跑微调时把loss曲线画出来看。大多数问题通过观察中间过程就能定位,不需要问任何人。
第三,一定要建立自己的"模型工具箱"。定期记录你用过的每个模型的特点、适合场景、显存占用、部署难度。几个月后你回头翻这份记录,会比任何课程笔记都有价值。
最后,大模型这个领域变化快,但底层逻辑其实很稳定。Transformer、Attention、tokenizer、微调、推理加速,这些内核知识扎实了,外面换什么模型框架都不慌。从现在开始动手跑通第一个模型吧,剩下的路会越走越清晰。