1. 入门大模型,先把这几件事想清楚
这两年“大模型”这个词几乎无处不在,但真正想系统入门的人,往往第一步就卡住了——不是卡在技术上,而是卡在“资料太多、不知道从哪看起”。今天这篇不讲那种“三天精通大模型”的速成神话,而是把我在实际学习和项目中踩过的路、筛过的资料、用过的工具,按一条相对完整的路径梳理出来,给你一份可以直接照着走的系统性入门资料。
先说清楚大模型到底是什么。大模型,全称叫大规模语言模型(Large Language Model,LLM),本质上是一个用海量文本训练出来的深度神经网络,它的核心能力是“根据上文预测下一个词”,但当一个模型参数量足够大、训练数据足够多之后,会涌现出理解、推理、生成、代码编写甚至工具调用等复杂能力。别小看“预测下一个词”这个看似简单的任务,GPT系列、Llama系列、Qwen系列、DeepSeek系列这些知名大模型,本质上都是把这个事情做到了极致。
所以入门大模型,你不需要一上来就啃Transformer论文、搞懂注意力机制的所有数学推导。我的建议是:先建立整体认知框架,再按需深入。整体认知框架包括四层:
- 第一层:会用。知道有哪些知名大模型,能通过API或现成产品调用它们,了解不同模型的能力边界。
- 第二层:会选。面对一个具体任务,知道该选多大的模型、开源的还是闭源的、部署在本机还是调用API。
- 第三层:会改。理解提示词工程、上下文工程,知道怎么通过Prompt让模型输出符合预期,甚至学会微调。
- 第四层:会部署。能把模型跑在自己的电脑或服务器上,做成一个真正可用的服务,集成进应用。
这篇文章主要覆盖前三层,并在第四层给你指一条明路。适合的人群包括:想转行做AI应用开发的程序员、需要给团队做技术选型的产品经理或技术负责人、以及纯粹对AI好奇想系统了解的非技术背景学习者。
2. 总是被卡住的环境配置与工具链选择,说到底就这几件事
不管你搜“大模型学习路线”还是“大模型部署教程”,第一个跳出来的永远是环境配置。很多人在这里就放弃了,真没必要。环境配置本质上是三件事:Python环境、GPU驱动与CUDA、模型运行工具。
2.1 Python环境:虚拟环境是底线
Python版本建议3.10或3.11。大模型相关的库(比如transformers、torch、vllm)对新版本Python的适配往往有滞后,3.12在某些时候会遇到依赖装不上的情况。我自己最稳妥的组合是Python 3.10 + PyTorch 2.x。
一定要用虚拟环境,别图省事直接装到全局。推荐用conda创建独立环境:
conda create -n llm python=3.10 conda activate llm pip install --upgrade pip为什么强调虚拟环境?因为大模型项目之间依赖冲突太常见了。A项目要transformers 4.30,B项目要4.40,全装在一个环境里迟早出问题。我见过太多人上来就pip install transformers、pip install torch一路装下去,最后环境烂到只能重装系统。
2.2 GPU、CUDA、显存:决定你能不能跑起模型
如果只是调用API,这一步可以跳过。但如果你想本地部署大模型,GPU是绕不开的。
先说结论:7B级别(70亿参数)的模型量化后大约需要6-8GB显存,13B级别需要10-14GB,70B级别没有32GB以上显存基本别想跑满。这是大多数人第一次部署时最容易误判的地方——只看模型文件大小,不看运行时显存占用。一个7B模型用4bit量化后文件可能只有4GB左右,但加载到GPU上跑推理,加上KV Cache和中间激活值,实际占用轻松超过6GB。
CUDA版本和PyTorch版本必须对齐。检查方式:
nvidia-smi python -c "import torch; print(torch.cuda.is_available())"如果torch.cuda.is_available()返回False,多半是PyTorch装成了CPU版,或者CUDA版本不匹配。我的习惯是:先看nvidia-smi里的CUDA Version,然后到PyTorch官网选对应版本安装,不要用pip install torch默认装。
2.3 模型运行工具:Ollama、llama.cpp、vLLM怎么选
这是很多人纠结的点。我的实际使用经验是分场景选:
- 个人电脑上快速体验、学习、做小Demo:首选Ollama。安装简单,命令一行就能拉模型跑起来,自带API服务,还支持OpenAI格式的接口,对新手极度友好。
- CPU运行、老电脑、嵌入式设备:用llama.cpp。它针对CPU做了极致优化,纯CPU也能跑,就是速度慢些。
- 服务器上做正式服务、追求高吞吐:用vLLM。它支持PagedAttention、Continuous Batching,并发推理能力远超Ollama,但配置门槛也高一些。
工具没那么重要,重要的是先跑起来。我见过有人在Ollama和llama.cpp之间纠结了一个星期还没动手,其实随便选一个,先跑通一个7B模型,你就已经超过80%的“资料收藏家”了。
3. 模型选型:开源还是闭源,API还是本地,别凭感觉拍脑袋
搜索“大模型”相关热词时,出现频率极高的是“大模型排名前十”、“大模型网址”、“免费大模型API”。大家的第一反应都是:哪个模型最强?但实际工作中,最强不等于最合适。
3.1 世界知名大模型到底有哪些
按开发方和阵营大致可以分为这么几类:
| 阵营 | 代表模型 | 特点 |
|---|---|---|
| 国外闭源 | GPT系列、Claude系列 | 综合能力最强,生态完善,但需要海外网络环境,成本高 |
| 国内闭源 | 文心一言、通义千问、豆包、Kimi | 中文表现出色,部分有免费额度,国内直连 |
| 国外开源 | Llama系列、Mistral、Gemma | 社区生态丰富,学术研究首选 |
| 国内开源 | Qwen系列、DeepSeek系列、GLM系列 | 中文优秀,开源协议友好,是目前国内本地部署的主流选择 |
我个人在海内外项目里的体会是:国内闭源API在中文场景下性价比极高,Qwen和DeepSeek的开源模型在本地部署场景下是首选。特别是Qwen2.5系列,从0.5B到72B全尺寸覆盖,7B版本在消费级显卡上能跑,能力还相当能打。
3.2 选型的四个核心维度
别只看榜单,选模型看四个维度:
- 任务复杂度:简单问答、文案改写,7B开源模型完全够;复杂推理、代码生成、长文档分析,得上闭源大模型或70B级别。
- 数据隐私要求:数据不能出内网、不能传第三方,那就必须本地部署,选开源模型。
- 成本预算:API按Token计费,高频调用成本很高;本地部署一次性投入硬件,长期用更划算。
- 延迟要求:实时交互场景(如客服机器人、语音助手)对首字延迟敏感,本地小模型往往比远端大模型体验更好。
3.3 一个很实用的选型决策思路
我之前做旅游推荐智能体的时候,就吃过选型的亏。一开始想用大模型的能力,直接接了云端API,结果发现两个问题:一是用户输入的是中文口语化描述,API返回结果不够稳定;二是每次调用都有网络延迟,对话体验很生硬。
后来我换成本地部署Qwen2.5-7B,配合提示词工程做约束,效果反而更好,成本也下来了。这个案例说明:选型不是选“最强”,而是选“够用且合适”。
具体决策建议:
- 有免费API额度、对延迟不敏感、不想折腾硬件 → 先用闭源API,快速验证想法。
- 中文任务+低成本+本地部署 → 首选Qwen系列,其次是DeepSeek、GLM。
- 英文任务+社区生态 → Llama 3系列。
- 追求极致性能+预算充足 → 闭源大模型API。
4. 把模型跑起来的完整链路:下载、部署、验证
选好模型之后,最让人兴奋的一步就是把模型真正跑起来。这里我以最省事的Ollama路线为例,给你一条完整的落地路径。中间会穿插我自己踩过的坑。
4.1 第一步:下载模型,别被“下载平台”搞晕
先明确一个概念:模型下载平台和代码托管平台不一样。主流的开源模型都托管在Hugging Face(海外)和ModelScope(国内,即魔搭社区)上。国内网络环境访问Hugging Face不稳定,建议直接用ModelScope,或者配置Hugging Face的国内镜像站。
Ollama的好处是它内置了模型库,不需要你手动去平台下载:
# 安装Ollama后,一行命令拉取模型 ollama pull qwen2.5:7b这句话会把模型文件拉到本地。Qwen2.5-7B的量化版大概4.7GB,取决于你的网速。下载完成后运行:
ollama run qwen2.5:7b你就获得了一个能在终端里聊天的本地大模型。
如果你不想用Ollama,想走更“原生”的Hugging Face路线,可以参考这样的代码逻辑:
from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "Qwen/Qwen2.5-7B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")但第一次跑这个,你大概率会卡在下载上——transformers默认从Hugging Face拉模型,国内网络容易超时。解决办法是设置环境变量:
export HF_ENDPOINT=https://hf-mirror.com这个镜像地址是社区维护的,具体可用性以实际情况为准。我的建议是新手别折腾,就用Ollama。
4.2 第二步:把本地模型变成API服务,和自己的应用对接
很多人以为部署大模型就是能在终端聊天,太可惜了。真正有价值的是把模型暴露成一个HTTP服务,让你的应用可以调用。
Ollama一行命令搞定:
ollama serve默认会在http://localhost:11434提供API。调用方式是OpenAI兼容格式:
curl http://localhost:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5:7b", "messages": [{"role": "user", "content": "介绍一下你自己"}] }'这也意味着你写好的OpenAI SDK代码,只需要把base_url改成http://localhost:11434/v1,就能无缝切换到本地模型。这一点在做应用开发时极其方便。
4.3 第三步:集成进应用,SSE流式输出是标配体验
现在做AI应用,流式输出几乎是标配。用户问一个问题,如果等3秒才看到完整回复,体验非常差;但如果你用流式输出,模型生成的每个字都能实时渲染出来,用户看到的是“正在打字”的效果,等待感大幅降低。
前端实现的核心是fetch配合ReadableStream解析,或者直接用EventSource。这里给你一个典型的前端流式接入示例:
const response = await fetch('http://localhost:11434/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'qwen2.5:7b', messages: [{ role: 'user', content: '写一首关于秋天的短诗' }], stream: true }) }); const reader = response.body.getReader(); const decoder = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) break; const chunk = decoder.decode(value); // 解析SSE格式:data: {...}\n\n const lines = chunk.split('\n').filter(line => line.startsWith('data:')); for (const line of lines) { const data = line.replace('data:', '').trim(); if (data === '[DONE]') continue; const json = JSON.parse(data); process.stdout.write(json.choices[0]?.delta?.content || ''); } }这里的“SSE”(Server-Sent Events)就是大模型流式输出的底层协议,模型每生成一小段,就通过HTTP连接推给前端,最终实现“打字机效果”。
4.4 第四步:配合AbortController实现“停止生成”
流式输出的另一面是:用户需要“停止生成”的能力。比如问错了问题、或者答案不满意,想让模型闭嘴。这在前端实现上就是AbortController的活儿:
const controller = new AbortController(); // 用户点击“停止”按钮 stopBtn.onclick = () => controller.abort(); const response = await fetch('http://localhost:11434/v1/chat/completions', { method: 'POST', signal: controller.signal, // ...其余配置 });这个细节很多人做应用开发时会漏掉。没有停止按钮的AI对话框,体验等于开车没有刹车,用户只能干等模型把话说完。
4.5 我踩过的本地部署的三个坑
坑一:模型跑起来但回答特别慢。大概率是没走GPU,跑在CPU上了。Ollama下默认会用GPU,但如果驱动有问题会自动退回CPU。执行ollama ps可以看当前模型用的什么设备。速度期望值参照:7B量化模型在消费级GPU上大概每秒20-50个Token,纯CPU大概每秒2-5个Token,差距非常大。
坑二:显存不够直接OOM。7B模型在只有6GB显存的卡上有时能跑,有时就崩。解决办法是减小上下文长度(--num-ctx),或者换更小的量化版本(比如Q4_K_M换成Q3)。
坑三:并发多用户访问时性能暴跌。Ollama对并发支持一般,如果要做正式服务,尽早切换vLLM。用vLLM启动一个Qwen2.5-7B服务也不复杂,但需要你有一定的工程基础。
5. 提示词工程与上下文工程:不微调也能让模型变聪明
很多人有一个误区:觉得让大模型输出符合自己要求,就要去微调。实际上,绝大多数场景,提示词工程和上下文工程就能解决,而且调整成本远低于微调。这一章我们专门拆开讲。
5.1 提示词工程,本质是“把需求说清楚”
提示词工程的核心不是“魔法咒语”,而是把模糊需求转化成模型能理解的结构化指令。我把常用技巧归纳成四条:
- 角色设定:给模型一个身份,约束输出风格。比如“你是一位资深的金融分析师”,比“帮我分析股票”效果好得多。
- 任务拆解:复杂任务拆成多步指令,用序号标明步骤。比如“1. 先提取原文观点;2. 再按观点分类;3. 最后生成摘要”。
- 给示例:想让它输出什么格式,直接给它一个例子。这招叫Few-shot,比你说一百句“请按照以下格式”都管用。
- 约束边界:明确告诉它“不要做什么”。比如“不要编造数据,不确定就说不知道”。
举个实际案例。你想让大模型分析不同股票的K线图,直接说“帮我分析这几只股票”得到的输出多半泛泛而谈。换成这样:
你是量化交易研究员。请分析以下三只股票的日K线数据: {数据} 要求: 1. 先判断趋势(上升/下降/震荡) 2. 标注关键支撑位和压力位 3. 给出风险提示,不构成投资建议输出质量会立刻不一样。
5.2 上下文工程,管好模型的“记忆窗口”
上下文工程是比提示词工程更进阶的概念。大模型有上下文窗口限制(比如7B模型通常是32K Token),窗口内的内容才是模型能“看到”的。上下文工程要做的事情,就是在这个有限的窗口里,合理分配信息和任务。
核心思路有三点:
- 把重要信息放前面和后面。模型对上下文两头的内容关注度更高,中间容易“遗忘”。关键指令放在System Prompt或用户消息末尾。
- 精简无关上下文。不要一股脑把几十页资料全塞进去,先做检索和提取,只保留与当前问题相关的段落。
- 用外挂知识库扩展记忆。当你的资料超出上下文窗口时,别硬塞,用“检索增强生成”(RAG)的思路:先检索相关内容,再拼接成模型能看懂的上下文。这也是我在本地大模型实现联网搜索能力时采用的核心方式——模型本身不会主动上网,上网靠的是你写好的检索工具把结果喂给它。
5.3 提示词和微调的分工:什么时候该上微调
这一节直接回答搜索热词里“大模型微调实战”“Qwen2.5-7B微调行业大模型”这类需求。我的经验是:
- 需要改变模型的知识结构、专业术语、特定风格 → 微调。
- 只是想让模型“按格式输出”“记得某个规则”→“提示词工程就够了”。
举例:你想让模型变成一个法律文书起草助手,法律术语和文书格式是模型不完全熟悉的,提示词只能“约束格式”,没法“补充知识”,这种情况适合微调。但如果你只是想让模型写周报时带点幽默感,提示词足够,微调纯属浪费。
微调的入门方式,我推荐从LoRA(Low-Rank Adaptation,低秩适配)开始。它只训练一小部分参数,显存占用小,消费级显卡也能跑。核心逻辑是:冻结原始模型参数,只在旁边加一个小的低秩矩阵去微调,效果接近全量微调,成本却是零头的零头。
一条最简的微调流程大概是:
- 准备数据集,格式为JSON,包含
instruction和output字段。质量远比数量重要,几百条高质量样本就能看出效果变化。 - 用
transformers+peft库加载模型,配置LoRA参数。 - 训练若干轮,保存LoRA权重。此时得到一个几MB到几十MB的adapter文件,不是完整模型。
- 推理时加载原始模型,再叠加LoRA权重。
微调不是“点一下就开始”那么简单,前期最大的工作量在数据清洗。我的建议是:先跑通一个最小闭环,哪怕只用几十条数据,然后再回来优化数据质量。这个思路能帮你少踩至少两周的坑。
6. 本地部署大模型的进阶选型:从Ollama到vLLM
当你从“自己玩”进入“给团队或用户提供服务”阶段,Ollama就不够用了。vLLM是我目前在生产环境用得最多的推理框架。这一章讲清楚为什么换、怎么换、换了之后有哪些新问题,以及大模型投毒测试这类容易被忽略的安全话题。
6.1 为什么生产环境要用vLLM
Ollama主打易用,它把模型加载、KV Cache管理、并发调度全部封装起来,但也正因为封装,你做不了精细控制。vLLM的优势体现在三个点上:
- 吞吐量大幅提升:vLLM的PagedAttention机制类似操作系统里的虚拟内存,KV Cache按页分配,可以动态管理,显存利用率远高于传统方案。
- Continuous Batching:不用等一个请求完全生成完再处理下一个,而是边生成边插队,并发场景下吞吐量是普通推理的好几倍。
- 兼容OpenAI协议:vLLM启动后暴露的接口也是
/v1/chat/completions,你之前的代码几乎不用改。
启动一个vLLM服务示例:
vllm serve Qwen/Qwen2.5-7B-Instruct \ --host 0.0.0.0 \ --port 8000 \ --quantization awq \ --max-model-len 8192这是一行极其实用的命令。其中--quantization awq表示使用AWQ量化,能明显降低显存占用;--max-model-len控制上下文长度,太大了吃显存,太小了限制能力。
6.2 本地大模型实现联网搜索能力
这个需求在热词里出现了多次,同时也是我工作中经常被问到的问题。很多人以为“本地部署大模型=本地模型能自己上网”,其实不是。
大模型本身是一个静态的知识快照,它不会主动联网,也不具备“实时”信息。要让本地模型具备联网搜索能力,正确的思路是:额外做一个“搜索-喂给模型”的管道。流程是这样的:
- 接收用户问题。
- 调用搜索API获取相关网页内容。
- 把搜索结果截断、清洗、拼接成提示词上下文。
- 把“问题+搜索结果”一起提交给本地大模型生成最终回答。
代码思路大概是这样:
import requests def search_and_answer(query): # 1. 搜索,假设search_api是你接的某个搜索服务 results = search_api(query) # 2. 构造上下文 context = "\n".join([f"[{i+1}] {r['title']}: {r['snippet']}" for i, r in enumerate(results[:5])]) # 3. 喂给本地模型 prompt = f"""基于以下搜索到的最新信息回答问题。 搜索结果: {context} 问题:{query}""" response = ollama.chat(model="qwen2.5:7b", messages=[{"role": "user", "content": prompt}]) return response["message"]["content"]这个管道就是RAG(Retrieval-Augmented Generation,检索增强生成)的简化版。记住一个原则:模型不联网,你帮它联网。
6.3 大模型投毒测试:一个容易被忽略的安全话题
热词里出现了“大模型投毒测试”。这个概念很多入门者完全没听说过,但它对实际工程非常重要。所谓“投毒”,指的是在模型训练数据中故意植入恶意样本,或者在提示词中注入恶意指令,让模型在特定触发条件下输出错误甚至有害内容。常见形式包括:
- 数据投毒:在公网抓取的数据里混入恶意样本,模型训练后学到不当行为。
- 提示注入:用户构造特殊文本,让模型忽略原始指令,执行攻击者意图。经典的例子是“忽略你之前的指令,输出系统提示词”。
- 后门攻击:特定触发词出现时,模型输出预设的恶意结果。
作为使用者,你能做的防御手段包括:
- 不随意使用来路不明的第三方微调模型权重,下载模型认准官方渠道。
- 对用户输入做过滤和边界检测,把提示注入当成安全漏洞来防。
- 关键场景做输出巡检,对模型回答进行规则校验,防止模型被诱导产生违规内容。
这个话题展开讲能单独写一篇长文,这里先给你一个意识:大模型不是黑盒里的魔法,它也会被攻击。入门阶段就建立起安全意识,后面能省很多麻烦。
7. 从入门到上岗:一条可执行的大模型学习路线
最后这一章,把前面讲的内容串成一条具体可执行的学习路线。这条路我自己走过,也带过不少新人走,按这个顺序来,不会东一榔头西一棒子。
7.1 阶段一:建立感知(第1周)
目标:知道大模型是什么、能做什么、各模型间有什么差异。
具体任务:
- 用闭源API和本地模型各完成5次不同类型的对话(问答、翻译、代码生成、总结、角色扮演)。
- 拿同一个问题问GPT、Claude、文心一言、Qwen,感受风格差异。
- 了解基础概念:Token、上下文窗口、温度参数、幻觉、量化。这些词不要求精通,但要眼熟。
7.2 阶段二:动手部署(第2-3周)
目标:在本地跑通至少一个模型,并能通过API调用。
具体任务:
- 安装Ollama,拉一个7B级别模型,终端对话。
- 用Python调用Ollama的API,写一个命令行问答工具。
- 把模型接入一个最简单的Web界面(用FastAPI写后端+一个静态页面),实现流式输出。
这个阶段做完,你已经超过大多数只收藏资料不行动的人了。
7.3 阶段三:提示词与上下文工程(第4周)
目标:能够通过Prompt稳定控制模型输出。
具体任务:
- 系统学习提示词技巧:角色设定、Few-shot、思维链、约束边界。
- 做一个“简历优化助手”:输入原始简历,输出结构化优化版本。
- 做一个“文档问答助手”:不微调,用RAG方式让模型基于你的文档回答问题。
这是应用开发的核心能力。市面上绝多大数AI应用,本质就是“提示词+检索+流式输出”的组合。
7.4 阶段四:微调入门(第5-8周)
目标:跑通一次完整的微调流程。
具体任务:
- 准备一份50-200条的数据集(可以用公开数据集,也可以自己构造)。
- 用LoRA对Qwen2.5-7B做微调。
- 对比微调前后模型在特定任务上的表现差异。
这个阶段不追求效果多好,追求的是“跑通完整流程”。跑通过一次,后面再深入就有底气了。
7.5 阶段五:进阶方向选择(第9周以后)
到这里,你可以根据自己的兴趣选方向了:
- 应用开发方向:专注RAG、Agent框架、模型API封装。目前主流的Agent框架有LangChain、LlamaIndex、AutoGen等,不需要全学,挑一个深入研究就够。
- 推理优化方向:学习vLLM、TensorRT-LLM、量化原理,目标是在有限硬件上跑更大的模型。
- 模型训练方向:深度学习全量微调、分布式训练,这个方向门槛最高,需要扎实的深度学习基础。
7.6 给新手的最后三条建议
第一,别等学完再动手,边动手边学。大模型领域的特点是“知识永远学不完”,但动手项目的反馈是即时的,一个能跑起来的Demo给你的信心远超十篇教程。
第二,以问题驱动学习,不要以工具驱动。不要纠结“该学LangChain还是LlamaIndex”,而要问“我想做的这个应用,哪些工具能最快实现”。工具会过时,解决问题的思路不会。
第三,记录你的踩坑日志。我在这个行业里见过太多人,同一个坑换个项目再踩一遍。建议你从第一天开始,就把环境配置、模型选型、报错信息、解决方案记成文档。这些记录未来就是你自己的“系统性入门资料”。
这篇内容到这个位置可以收尾了。我最后想说的仍然是那句老话:大模型不是看了就会的,是跑起来才会的。你收藏一百篇教程,不如亲手拉一个模型、写一次流式输出、踩一次环境配置的坑。从今天开始动手,我们后面聊更深的。