如果是刚开始接触大模型微调实战,不知道你是否会和我一样,第一步就被数据格式给拦住了。😨
我遇到的场景是这样的:
我想学习微调一个法律垂直领域的Qwen模型。起初,我以为这很简单:准备好问答对,喂给模型不就好了吗?但现实却不是这样:
- LLaMA-Factory 说:你要把数据转成ShareGPT格式的JSON。
- PyTorch原生代码 说:你要自己写一个Template把它们拼成字符串。
我看着满屏的System、User、Assistant...标签,心中满是疑惑:😶🌫️
模型真正“见”到的数据,到底是什么样的呢?
这篇文章,是我把同一个Qwen法律大模型微调项目,由浅入深跑了三遍之后的数据格式复盘:
- 第一遍:WebUI模式(完全按教程点点点,先跑通)
- 第二遍:CLI Notebook模式(把点击变成代码,实现工程复现)
- 第三遍:无框架模式(拆掉 LLaMA-Factory 黑盒,自己拼数据流)
案例可能比较简单,但这个小案例帮助我理清了关于微调数据的流转过程,之后再去深入学习微调的时候,思路更清晰了些,希望这篇文章也可以同样帮助到你~
Web UI模式:模板是这样生效的
第一遍,目标非常简单:跑通。
这个法律大模型项目是使用LoRA指令微调,数据是开源社区的DISC-Law-SFT法律数据集,目标是微调 Qwen-3/2.5 模型,让它从一个通用助手变成一个懂法的「法律顾问」。
1、数据变身
原始的法律数据如下图。👇
这是一个标准的 JSONL 文件,每一行有一个input(用户的问题)和一个output(法律依据和回答)。
但是对于使用 LLaMA-Factory 框架来说,不能直接给模型喂这种格式的数据进行微调。必须写一个脚本,把它转换成框架喜欢的ShareGPT格式:
[ { "conversations": [ { "from": "human", "value": "user instruction" }, { "from": "gpt", "value": "model response" } ], "system": "system prompt (optional)", "tools": "tool description (optional)" } ]比如上述法律数据的会被转换成这样:
此时input变成了human的value,output变成了gpt的value
当时我只是觉得这是多此一举:为什么不直接读 input/output?非要包一层conversations列表呢?
2、下拉框里的秘密
接着,我在 WebUI 界面上进行配置的时候。最让我困惑的一步来了:
在Chat Template(对话模板)这一栏,项目要求必须要选择qwen。
我当时想:“这个选项是啥意义呢?我不是已经转换好数据了吗?
但我还是先照做了。点击开始训练,Loss下降,模型训练成功。
这一遍跑完,虽然做出了模型,但对于数据,我的心里还是个黑盒:我输入的数据是 json 对象,模型见到的数据就是这样的吗?刚刚选择的Chat Template是什么意思呢?
CLI Notebook模式:拥抱工程化
于是我想着是不是用代码跑一遍会更清晰一点,并且第一遍的 WebUI 虽然直观,但有一个致命缺点:不可复现。
过了两天,我可能就会忘了当时学习率是填了5e-5还是2e-4。😶🌫️
于是,我决定用 LLaMA-Factory CLI 把流程重写一遍。
这一遍,不再依赖UI界面的选择、点击,而是把所有配置写进了yaml文件。👇
我发现,WebUI里的那个Chat Template下拉框,在代码里变成了一行参数:
template: qwen dataset_formatting: sharegpt这一遍最大的收获是「工程复现能力」。
- 把数据处理脚本集成到了Notebook里,一键运行就能生成 train.json并能逐步查看中间产物。
- 把训练参数固化成了代码。能更清楚知道各个参数的真面目,无论之后换哪台服务器,只要运行这个Notebook,结果都是一样的,并且方便项目迁移。
但这依然没有解决我最开始的疑问:模型到底“见”到的是什么样的数据?
CLI 依然在调用 LLaMA-Factory 的内部函数,template: qwen依然是个黑盒在后台悄悄工作。👤
无框架模式:看见本质
于是我决定不用LLaMA-Factory,从另一个手写微调逻辑的Notebook项目迁移到这个项目中。
这一步是揭开秘密的时刻。我发现,之前以为的清洗数据,仅仅是冰山一角。
要想真正理解模型是怎么学习的,需要看清数据从「文本到**向量」**的每一步转变。👇
1、并没有「神秘模板」,只有「字符串拼接」
我查找了关于Qwen的Chat Template原型资料。原来,当我在 WebUI 里选择qwen时,框架在后台偷偷帮我把 ShareGPT 里的 Json 列表,拼接成了一个超长的字符串:
<|im_start|>user 请解释什么是合同的要约与承诺?<|im_end|> <|im_start|>assistant 要约是……承诺是……<|im_end|><|endoftext|>其中,<|im_start|>和<|im_end|>只是特殊的占位符,告诉模型这句话哪里开始、哪里结束。
👉 模型根本看不懂 JSON 对象,也看不懂from: human这种 Key。它只认识这一长串拼好的纯文本。
2、Tokenizer:人类语言与机器语言的「翻译官」
但是,显卡是不认识中文汉字的,也不认识<|im_start|>这种符号。 这时候,Tokenizer(分词器)就起到作用了。😎
这也是我在 WebUI 模式下完全忽略的一步。在代码中,它长这样:
input_ids = tokenizer.encode(text)它把上面的长文本切碎,并在字典里查找对应的编号(ID)。比如:
- “请解释”变成了 ID
10567 - 特殊的
<|im_start|>变成了 ID151644
最终,数据变成了这样一串整数列表:[151644, 872, 356, ... 151645]
但,模型真的只看数字吗?
在工程代码里,数据处理到「整数列表」这一步确实就结束了。但在模型内部,还有一个极其迅速的转换过程:Embedding(词向量化)。
模型手里拿着这些 ID(比如151644),去查一张巨大的字典表,把每个 ID 换成了一组包含几千个浮点数的向量(比如[0.012, -0.98, 0.33...])。
- ID只是索引(像图书馆的索书号)。
- Embedding才是内容(像书本里的知识)。
但对于做微调数据处理来说,只要把数据正确变成了ID,剩下的查表工作交给显卡自动完成就好了~
3、如果想换一个“花样”呢?
既然看透了本质:模型只关心它见到的「Token序列」是否符合预测规律,那是不是意味着,我可以完全抛弃Qwen的官方模板,自己造一种格式呢?🤔
当然可以~只要保证「训练时喂给它的格式」和「推理时问它的格式」保持一致就行。在无框架模式下,我尝试抛弃了所有模板库,手写一个最朴素的拼接函数formatting_func:
def formatting_func(example): # 手动定义一种简单的 "指令-回复" 格式,完全不用 Qwen 的特殊符号 text = f"### Instruction:\n{example['instruction']}\n\n### Response:\n{example['output']}" return text这里没有复杂的<|im_start|>,只有很直白的### Instruction:,比如可以是如下模版所示:
那么模型认识这个吗?它当然认识。
只要把这串文本Token化,再告诉模型“### Response:后面的是要学习的答案”,它就能照样学会。
这就像教鹦鹉说话,你可以教它“Hello”,也可以教它“你好”,只要你重复的次数够多,规则够统一,它都能学会。
总结一下~数据的三层模型:👇
第一层:数据的语义形态 (Human Readable)
👉 ShareGPT / Messages
[{"from": "user", "value": "..."}]- 本质:这是给人看的,也是给框架看的。它定义了“谁说了什么”,但还没有定义“怎么拼成字符串”。
第二层:渲染层
👉 Apply Chat Template
核心逻辑:Jinja2模板引擎。
- 本质:这是一个翻译官。
- 如果用LLaMA-Factory,那么框架就是这个翻译官(根据所选的
qwen选项)。 - 如果用原生Trainer,那么手写代码的人就是翻译官(
formatting_func函数代码)。
第三层:数据的物理形态 (Model Readable)
👉Raw Text / Token IDs
<|im_start|>user\n你好<|im_end|>\n... [151644, 872, 356, ... 151645]- 本质:这是模型真正看进去的东西。模型不关心你用什么框架,它只关心它收到的 Token 序列长什么样。
既然手写也能跑,为什么还要用LLaMA-Factory?
1、Mask机制
在 SFT(有监督微调)中,有一个核心原则:模型不应该学习「用户的提问」,只应该学习「助手的回答」。
这意味着,我们给模型的虽然是一整段对话,但在计算Loss时,必须把User部分遮住。
在代码层面,这需要生成一个和input_ids等长的labels列表,把不需要学习的 Token 位置全部填为-100(PyTorch 中忽略计算的标记)。👇
{ "input_ids": [151644, 101, ... (用户问题) ... 151645, 151644, 202 ... (模型回答) ... 151645], "labels": [-100, -100, ... (-100) ... -100, 151644, 202 ... (模型回答) ... 151645] }用户提问区:Label全被设为**-100**。在PyTorch计算Loss时,-100会被自动忽略。
模型回答区:Label对应原本的Token ID。
想象一下多轮对话(User -> Bot -> User -> Bot)中,需要精准计算每一个字符的起止索引:第 0 到 50 个token是提问(设为 -100),第 51 到 120 个是回答(保留),第 121 到 150 个又是提问(设为 -100)……只要算错一个索引,模型就会把用户的指令当成答案背诵下来,导致逻辑错乱。
👉 LLaMA-Factory 会自动解析ShareGPT中的from: human和from: gpt标签。它在拼接字符串的同时,自动生成了完美的 Mask 掩码。我们只需要关注内容本身,不需要关心索引。
2、避免模型停不下来
每个模型都有自己的结束符(EOS Token)。
- Qwen的结束符是
<|im_end|> - Llama 3的结束符是
<|eot_id|>
如果在手动拼接字符串时,不小心漏掉了结尾的这个特殊符号,或者用错了符号,训练出来的模型就会变成一个话痨。😂
因为它微调时没学到“什么时候该闭嘴”,所以在推理时,它说完答案后会继续自言自语,直到显存爆掉或达到最大生成长度。
👉 框架会自动读取tokenizer_config.json中的配置,保证每一个样本的末尾都正确添加了该模型的专属停止符。
3、数据与模型的解耦
这是工程化思维的体现。
- ShareGPT (JSON)保存的是数据逻辑:定义了“谁说了什么”。
- Template (Jinja2)保存的是模型实现:定义了“这句话怎么拼”。
使用框架的最大意义在于解耦。
比如今天用Qwen,明天想换Llama 3试试效果。
手写模式需要去代码里把所有的<|im_start|>替换成<|begin_of_text|>,甚至要重写整个拼接逻辑,改动量大且容易遗漏。
👉 框架可以让数据文件(JSON)一行都不用动。你只需要在训练参数里把template: qwen改成template: llama3。
最后
写到这里,觉得好像所谓的黑科技,拆解到最后,往往都是最朴素的字符串拼接和矩阵运算。🤔
想到一句古话:“万物之始,大道至简,衍化至繁。”
好像确实如此。
想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享!
👇👇扫码免费领取全部内容👇👇
一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势
想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI:
1. 100+本大模型方向电子书
2. 26 份行业研究报告:覆盖多领域实践与趋势
报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:
- 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
- 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
- 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
- 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。
3. 600+套技术大会 PPT:听行业大咖讲实战
PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:
- 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
- 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
- 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
- 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。
二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走
想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!
1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位
面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析:
2. 102 道 AI 大模型真题:直击大模型核心考点
针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:
3. 97 道 LLMs 真题:聚焦大型语言模型高频问题
专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:
![]()
三、路线必明: AI 大模型学习路线图,1 张图理清核心内容
刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!
路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。
L1阶段:启航篇丨极速破界AI新时代
L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。
L2阶段:攻坚篇丨RAG开发实战工坊
L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。
L3阶段:跃迁篇丨Agent智能体架构设计
L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。
L4阶段:精进篇丨模型微调与私有化部署
L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。
L5阶段:专题集丨特训篇 【录播课】
![]()
四、资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇
2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!