首页 / 资讯中心 / 文章详情

大模型零基础实战:从API、RAG到微调的完整指南

大模型零基础实战:从API、RAG到微调的完整指南 ★ FEATURED ARTICLE
1. 先搞清楚大模型到底是什么再去动手我一直觉得很多初学者一上来就被“大模型”这三个字吓住了。打开各种文章满屏都是“Transformer”“自注意力机制”“预训练”“对齐”这些词看了三分钟就头晕然后干脆放弃。其实回到本质上大模型没有那么神秘。它做的核心事情只有一件根据你给的上一段文本预测下一个最合理的“词”。我给你打个比方。你在微信里聊天打了一半“今天中午去吃……”输入法会给你弹出来“火锅”“面条”“食堂”几个候选词。大模型干的事情本质上就是这件事只不过它预测的不是一个词而是几百上千个词而且它见过的文本量是你这辈子都读不完的。它把这些海量文本里的语言规律、知识结构、推理模式全部编码在网络参数里。所以你问它“太阳能发电的原理是什么”它能顺着你给的这半句话一个词一个词地往后推推出一个完整答案。这就是它最底层的运作方式也是一个比较靠谱的“第一性原理”。把这个本质搞明白后面所有操作你都能理解为什么大模型会有“幻觉”因为它本质是在做概率性的文字接龙不是在查数据库。为什么会有“上下文窗口”因为它每次能“看”的就是你塞进去的那段文本超出窗口就像人记不住太久以前的事。为什么调整“温度”参数会影响回答风格因为温度控制的正是它对那些“候选词”的概率分布做不做差异化放大。1.1 核心概念Token、上下文窗口、温度既然要从零基础到实战这几个概念绕不开。先说Token。大模型不是按字读文本而是把文本切分成单元这个单元就叫Token。中文场景下一个汉字可能对应一个Token也可能一个词对应两三个Token英文更明显一个单词可能被切成词根和前后缀。你调用API计费的时候按Token计费你本地跑模型的时候显存占用也跟Token数强相关。所以先有这个概念Token是模型处理文本的基本计算单位。然后是上下文窗口。你可以把它理解成模型一次性能看到的文本长度常见的范围从几千Token到几万Token不等。窗口越大它能记住你前面讨论过的内容越多。但它不是越大越好因为窗口越长推理时的计算代价越大速度越慢显存占用越高。我在实际项目里见过不少新手一上来就追求超长上下文结果还没跑起来机器先卡死了。普通任务一个2千到8千Token的窗口完全够用真遇到超长文档需求应该优先想RAG方案而不是硬塞进上下文这个后面章节细说。温度是最容易被忽略但又很关键的推理参数。取值为0到2之间常见默认是1。温度越低模型越倾向于选概率最高的那个词输出更确定、更稳适合写代码、做数据抽取。温度越高模型越倾向于“冒险”去选概率低一点的词输出更多样、更有创造性像人聊天更有随机感。我给个非常实用的经验值做工具调用和JSON输出温度设0到0.2做头脑风暴和文案写作设0.7到0.9不要再高了高于1.5的回复经常开始胡说八道。1.2 幻觉问题别把大模型当数据库用“幻觉”指的是模型一本正经地编造不存在的事实。这不是Bug而是它的生成机制天然导致的。因为它不是在检索你的问题而是顺着概率把最像样的答案推出来。你问它“某本不存在的书讲了什么”它可能会很认真地把一本虚构的书描述得有模有样。这个特性意味着任何要求“绝对准确”的场景都不能直接依赖模型裸答。怎么治两条路。第一给它检索工具也就是后面要讲的RAG让它在回答前先去查资料把查到的内容放进上下文再基于这些内容作答。第二在提示词里明确要求“如果信息不在给定资料中请直接回答不知道”同时配合较低的温度参数。至少要意识到大模型不是搜索引擎更不是数据库它更像一个“读过很多书但偶尔会编故事的助手”。把预期管理好后面做项目才不会翻车。2. 动手前的准备环境搭建和模型选型理解了原理接下来就是把代码跑起来。很多人卡在这一步不是不会写代码而是不知道自己要用哪条技术路线。我根据自己带人和做项目的经验把当下最常见的学习路径分成两种一种是API路线适合想快速做产品验证、没有独立显卡、不想处理模型权重文件的同学另一种是本地模型路线适合对隐私敏感、想省钱、或者想深入研究推理细节的同学。我的建议是第一轮学习两种都碰一下。先用API把“提示词工程、结构化输出、多轮对话”这些逻辑练熟再花一个周末在本地跑一个中小规模的模型把“部署、量化、推理”这条链路走通。两条路线都过一遍之后你对大模型的认知就会明显厚实起来。2.1 API路线选什么、在哪注册API路线的核心优势是零部署成本。你只需要注册一个服务平台、拿一个Key、安装一个Python库就能开始调用。当下主流的大模型平台基本都提供兼容接口统一用“客户端.聊天补全(消息)”这种模式调用。我用过多家之后最推荐新手关注工作流而不必一开始纠结选哪家。我指的“工作流”是模型服务商帮你封装好的推理接口、负载均衡、安全审查你只要关心你的Prompt和业务逻辑。需要避开的坑注册之后一定要先看计费规则。不同模型价格差距可以到几十倍同一个平台的小型号和旗舰型价格差异巨大。学习阶段用小模型完全够甚至效果更好。我见过有人拿最贵的旗舰模型跑“你好”这种测试一个下午烧掉几十块完全没必要。建议先设置好费用上限并且把“测试环境”和“生产环境”的Key分开防止哪天被人刷爆。2.2 本地模型路线显卡要求什么、量化是什么如果你没有API预算或者数据完全不能出内网那就走本地模型路线。本地路线最重要的硬件指标是显存。模型权重以参数个数计量FP16精度下大约每1B参数需要2GB显存。也就是说一个7B模型在FP16下大约需要14GB显存8B模型大约16GB。你要是手里只有一块8GB显存的消费级显卡就需要用“量化”技术把模型压缩一下用4-bit精度跑。量化之后7B模型大约只需要4到6GB就能在一张中低端显卡上跑起来。我知道看到这里你可能有点晕帮你梳理一个选型表格新手照着选就行你的显卡/预算建议初始模型规模推荐精度说明8GB显存3B-8B4-bit量化可跑小型模型速度尚可适合学习12-16GB显存7B-14B4-bit量化或8-bit性价比较高大多数实验够用24GB及以上14B-30B8-bit或FP16较好的消费级体验可探索复杂任务无显卡纯CPU1B-3B4-bit量化速度较慢但能跑通流程纯API预算任意服务端托管最简单适合无硬件条件本地跑模型这块我比较推荐新手从“GGUF量化格式 轻量推理引擎”入手。GGUF是类似量化模型通用文件格式可以直接把模型文件下载到本地不需要转格式推理引擎能直接读取并运行。你可以把它理解成模型的一种“压缩打包格式”专门为CPU和低显存环境优化过。相应的推理引擎启动之后会提供一个本地接口完全兼容前面提到的API调用方式这样你本地跑的和云端调用的代码逻辑几乎一致切换起来非常平滑。2.3 必装工具清单不管走哪条路线有几样东西是绕不开的。Python肯定要装建议3.10或3.11版本太老的版本很多新库不再支持。然后建议建一个独立的虚拟环境别直接装到系统Python里。我用虚拟环境管项目已经好几年了最大的感受就是不同项目依赖版本打架的问题几乎绝迹。主要会用到的Python库我列一个常备清单大模型SDK用于调用各类模型接口向量数据库与文档工具后面做RAG会用到解析库处理PDF、Word等格式交互工具用来搭简单的问答界面安装命令很简单在一个终端里执行两条命令就能把核心依赖装好。对于新手来说如果解决不了网络问题记得配置国内镜像源安装速度会快很多。这一步是纯粹的体力活安装完之后用一行测试代码确认环境没坏就可以进入真正的实战环节了。3. 第一次实战让大模型真正干一件活环境弄好后不要急着读各种源码先干一件有反馈的事。我的建议是做一个“多轮对话 结构化信息提取”的小工具。为什么要选这个任务因为多轮对话让你感受模型的记忆机制结构化输出让你掌握“如何约束模型生成可解析内容”这个核心技能这两点几乎是大模型应用开发的基本功。3.1 用API实现多轮对话与JSON输出以下代码是一个标准的API调用示例就是一个聊天助手骨架from openai import OpenAI # 这里改成你的API地址和Key client OpenAI( api_key你的API密钥, base_urlhttps://你的服务地址/v1 ) # 维护一个消息队列模拟多轮对话 messages [ {role: system, content: 你是一个简洁、严谨的AI助手。}, {role: user, content: 请帮我推荐一个适合新手的编程语言。} ] resp client.chat.completions.create( model你选择的模型名称, messagesmessages, temperature0.3 ) print(resp.choices[0].message.content)这个代码的核心逻辑就两步把历史消息列表发给模型然后取出模型返回的内容。多轮对话的秘诀就在于那个“消息队列”你每一轮都要把之前的问题和回答都追加进去模型才能记得上下文。很多新手困惑“为什么对话不连贯”就是因为只传了当前问题没传历史。下面是结构化输出的关键操作。如果你希望模型返回JSON而不是自然语言可以在消息里加一个明确的格式限定messages [ {role: system, content: 你是信息抽取助手。请从用户输入中抽取事件并以JSON格式返回字段为event_type, description, date。}, {role: user, content: 上周五我参加了公司组织的安全培训讲座强调了数据备份的重要性。} ]输出可能会是{ event_type: 培训, description: 公司组织安全培训强调数据备份重要性, date: 上周五 }看到差别了吧通过把“要求和格式”写在System消息里模型就会照着你的框框走。实际项目中我建议你在代码里加一层校验用json.loads()去解析返回内容每解析失败就提示模型“你刚才的输出无法解析请重新输出严格JSON”。这个小技巧能极大提升系统稳定性因为我实测过偶尔模型会多输出一句解释性的废话导致整个解析崩溃。3.2 本地部署跑通私有对话跑完API接下来尝试本地推理。如果你已经有量化格式的模型文件配合一个推理框架启动本地服务整个过程其实非常顺。先下载对应模型文件然后在终端里用命令启动一个服务进程指定模型文件路径、端口号和上下文长度。启动成功后本地接口会把模型包装成一个兼容API的服务你的调用代码几乎不用改只需要把base_url改成http://localhost:11434/v1就行。这个方案极其适合内网部署、数据敏感场景。我帮某实验室做过一个内部知识库问答系统所有模型都在一台带24GB显存的机器上跑数据完全不出内网推理速度也还能接受。唯一要提醒的是本地模型回答质量通常弱于云端旗舰模型所以对提示词、上下文安排的要求更高。你在本地跑模型时要把System提示词写得更加具体把任务步骤拆开比如“第一步做什么第二步做什么”输出的可用性会明显提升。3.3 关于上下文长度的实操经验本地跑模型最容易翻车的点就是上下文长度。我见过有人把上下文长度直接设成显卡支持的上限结果推理速度掉到惨不忍睹。原因是注意力机制的计算量大概随着上下文长度呈平方级增长你窗口翻一倍推理时间可能变成四倍。我在工程上一般按任务类型分配短问答用2048就够代码生成或文档总结用4096只有处理长报告才开8192以上。不要盲信“越大越好”要选择够用的最小窗口。4. 进阶实战给模型装一个外挂知识库RAG到这一步你已经能独立跑通一个完整的对话系统了。但很快你可能会遇到一个新的瓶颈问模型关于你自己业务的问题它答非所问。这就是大模型的一个天然边界它的知识截止于训练数据。如果你问某个公司内部流程、某个私有系统的操作手册它根本没见过当然答不出来。解决办法有两条路一是微调改变模型本身的权重代价大、周期长二是检索增强生成也就是RAG。我的建议是绝大多数业务场景先用RAG别一上来微调。RAG的核心思路四个字就能讲完先查后答。你在让模型回答之前先去一个“资料库”里把相关内容检索出来把它当作参考资料塞进Prompt模型再基于这些资料生成答案。这样模型不需要“背”你的业务知识只需要学会“阅读理解”。4.1 RAG的构成和选用场景RAG系统一般由三个部分组成。第一部分是文档处理管线把PDF、Word、网页等原始文档切成小段每段变成向量嵌入。第二部分是向量数据库负责存储这些向量并在查询时按语义相似度返回最相关的内容。第三部分是生成模块也就是拿检索结果补充上下文并调用大模型。什么时候需要RAG常见场景包括企业内部的规章制度问答、产品使用手册客服、个人知识库的智能搜索、法律/医疗类资料的归纳总结。这类场景的特点是知识相对稳定、覆盖范围较窄、对正确性要求较高。RAG非常适合。反过来如果场景要求模型从根本上改变回答风格、学会某种特定技能那才考虑微调这个区别一定要分清。4.2 最小可运行的RAG示例关于RAG的新手实现核心代码逻辑并不复杂。先把文档分块做嵌入并存入向量库然后根据用户问题做相似度检索最后把检索到的内容拼进Prompt再调用模型生成最终答案。下面我用伪代码加中文注释的方式拆解一遍# 1. 把本地文本拆成小段 text 你的业务文档内容…… chunks [text[i:i800] for i in range(0, len(text), 800)] # 2. 对每个chunk生成向量并存储 # 这里关键是选一个embedding模型 # 生成向量之后存到向量数据库形成索引 # 3. 用户提问时先对query生成向量做相似度检索 query 请假审批流程是什么 # results vector_db.search(query_vector, top_k3) # 4. 把检索到的内容拼进prompt context \n.join([r.content for r in results]) prompt f 基于以下资料回答问题。如果资料中没有答案请直接说不知道。 资料 {context} 问题{query} # 5. 最后调用大模型 answer client.chat.completions.create( model你的模型名称, messages[{role: user, content: prompt}], temperature0.1 ) print(answer.choices[0].message.content)这个示例虽然简化但结构就是完整RAG的精髓。我在做真实项目时一定要强调分块策略。不要按固定字符数硬切而尽量按章节、段落边界切每块保持两三百字并且块与块之间保留少量重叠这样能避免一个完整知识点被拦腰切断导致检索不到。这个坑我踩过好几次处理PDF尤其明显。我曾经做过一个项目因为直接把每页所有内容当成一个整段结果很多查询查不到有效内容后来改成按小节切块并做重叠窗口回答准确率立刻上了一个台阶。4.3 选向量模型的注意事项向量化嵌入的模型选择直接影响检索质量。我建议从小选择两三百MB规模的嵌入模型中文场景优先找中文语料训练的模型。判别标准很朴素把几段相似但不同主题的句子放进去看返回的向量距离是否符合预期。还有一个小技巧检索结果的召回率不足时可以先调高返回条数让模型在更多资料里面找答案再通过Prompt要求模型必须明确引用哪段资料。这样既提升准确率又方便溯源。你自己用的时候可以把“引用了哪份文件”加在回答末尾方便验证正确性。5. 再进一步微调什么时候做怎么做取舍说到微调我先泼一盆冷水绝大多数应用场景不需要微调。我见过太多人把RAG能解决的问题花大成本去做微调结果模型没调好原有能力还退化了。什么时候值得微调大概只有这三类情况第一需要学习某种固定的、难以用语言描述的写作风格第二需要让模型按严格的格式输出且通过Prompt约束不稳定第三需要让模型掌握某个垂直领域的特殊概念和术语体系。5.1 让模型学习固定格式与风格举个例子比如你要做一个面向某个行业客户的技术报告生成器报告要求开头有摘要、中间有数据分析、结尾有风险提示并且语气非常官方。这些规则你用Prompt描述也能做但模型经常“发挥不稳定”有时候会漏掉某个环节。这种情况下你收集几十到几百份历史报告作为训练样本用LoRA做微调让模型内部参数适应这种输出格式效果会显著提升。5.2 LoRA和QLoRA怎么选微调不是把整个模型几十亿参数全重训那需要多卡集群普通人根本跑不动。现在主流做法是“参数高效微调”。其中LoRA的原理是冻结原始模型的大部分参数只额外训练一小部分“低秩适配矩阵”训练成本大幅下降。QLoRA则更进一步把原始模型先用4-bit量化加载到显存里再在其上加LoRA适配器。这样下来单张消费级显卡也能微调7B到8B级别的模型。我用一个公式帮你估算显存QLoRA微调一个7B模型训练时的显存占用大概在10GB到14GB之间如果你的卡有16GB就基本能跑14B模型上限建议24GB以上。如果你只有8GB建议从3B或4B模型练手不要一开始就盯着大模型。实操层面微调流程一般分成四步准备数据集每一条是“输入-输出”对用加载器加载基座模型和量化配置配置训练参数包括学习率、步数、批次大小训练完成后合并LoRA权重导出新模型。我用下来最推荐的模型学习率是1e-4到2e-4之间批次大小根据显存调整总训练步数几百到几千就够。不要训练太多轮反而容易过拟合输出开始变得机械复读。5.3 微调数据集与提示词模板准备微调数据时有一个容易被忽略的坑你给模型看的训练样本格式必须和推理时的格式保持高度一致。如果训练时的问题格式是“请生成一份报告”推理时你换成了别的问法模型的表现会有明显下降。所以建议提前固定一种提示词模板并给每一条训练样本都套上这个模板让模型在重复中学会。数据质量比数量更重要。我用过一个具体项目只用800条精心整理的样本效果比另一组用了5000条噪声样本的微调模型好得多。整理数据时要清洗掉标点错误、截断句、重复内容一条脏数据就可能让模型学会一个坏习惯。6. 常见问题与排查速查表最后这部分我汇总一下新手阶段最常遇到的几个“拦路虎”和对应的排查思路。很多问题不是代码写错而是对原理理解不到位。6.1 显存不足与推理速度慢本地跑模型最常见的一句话就是“CUDA Out of Memory”明显显存超了。排查思路先用工具看当前显存占用确认是不是有别的进程占着再检查量化和上下文长度尤其是上下文长度很多人以为是自己模型下太大了其实是上下文开太长。一般做法是先把上下文调小一半再重试多半能跑起来。如果你的机器确实显存太小就换更小的模型。推理速度很慢首先看输入Token长度超过4096了速度会肉眼可见下降。其次看系统内存和硬盘吞吐模型文件如果放在机械硬盘启动速度会慢到怀疑人生建议用固态硬盘。6.2 输出质量差、格式不稳定如果模型答非所问第一嫌疑是上下文里的噪声。你给了一堆无关的检索结果模型就会被干扰。解决方法是把检索代码里相似度阈值调高宁可少返回也别返回垃圾。如果输出格式不稳定除了加上“必须输出严格JSON”这类约束还可以在后处理时做一个容错把不标准输出解析出关键字段重新拼装。这个小机制能救回不少生产事故。6.3 关于模型选择的一句话建议我不建议新手一开始追逐“最强模型”。选模型的原则应该是参数规模适中、本地能跑或API价格便宜、社区资料多。你先用小模型把整套链路跑通再逐步升级。很多任务小模型加好Prompt方案的效果已经接近大模型裸答的水平而推理成本和延迟会便宜很多。写在最后的一点个人经验带过很多新手从零开始接触大模型之后我发现最能拉开差距的不是聪明程度而是敢不敢动手。所有看过的原理都不如自己跑通一次记忆深刻。第一次把本地模型拉起来、看到终端里一个陌生模型开始回答自己问题时那个体验比读十篇教程都来得实在。踩坑也没关系显存炸了、输出乱码、检索不到内容……这些都是必经之路。保持“先跑通再调优”的心态你很快就会发现所谓大模型开发核心技能其实还是拆解问题、设计流程、处理异常——那些工程师本来就会的事情。祝你在动手折腾的路上少走一些我走过的弯路。
阅读完成 · 觉得有帮助?
咨询建站