教程人工智能大模型NLP微调【免费下载链接】smol-courseA course on aligning smol models.项目地址https://gitcode.com/gh_mirrors/smo/smol-course点击查看免费下载本指南以 smol-course 仓库中《Modelos de bate-papo聊天模板》章节v1/pt-br/1_instruction_tuning/chat_templates.md为骨架系统讲解聊天模板Chat Templates如何把普通文本预测模型转变为可对话的指令模型。你将掌握 ChatML 模板的完整格式、系统消息与多轮对话的结构化写法、基于transformers的apply_chat_template实战用法以及如何把数据集批量转换为模型可用的聊天格式为下一步监督微调SFT打下基础。聊天模板Chat Templates是连接基础模型与指令模型的语法层它用一致的格式告诉模型谁在说话、这句话属于什么角色、接下来该由谁回应。理解并正确使用聊天模板是进行任何形式的指令微调Instruction Tuning与偏好对齐Preference Alignment的前提。基础模型Base Model与指令模型Instruct Model的区别要理解聊天模板为何存在必须先分清两类模型的本质差异基础模型Base Model仅在原始文本数据上训练目标是预测下一个 token。例如仓库中反复使用的SmolLM2-135M给它一段文字它只会继续生成看起来合理的后续文本并不知道什么是回答用户问题。指令模型Instruct Model在基础模型之上经过指令微调专门学习遵循指令、参与对话。例如SmolLM2-135M-Instruct就是SmolLM2-135M的指令微调变体它能识别用户提问→模型回答的交互模式。配套练习 notebookv1/pt-br/1_instruction_tuning/notebooks/chat_templates_example.ipynb中演示的正是这条路径先加载基础模型HuggingFaceTB/SmolLM2-135M再用 TRL 的setup_chat_format为它装配聊天格式使其具备对话能力。这印证了文档中的核心观点——基础模型本身不具备对话能力聊天模板负责把原始文本预测格式化为对话。因此当你在使用一个指令模型时必须确保你使用的聊天模板与该模型微调时使用的模板完全一致。同一个基础模型可能被不同的团队用不同的模板微调模板不匹配轻则输出混乱重则生成不可用的回复。理解聊天模板ChatML 格式剖析聊天模板的核心作用是把系统级指令、用户消息和助手回复组织成模型可以理解的结构化格式。这种结构保证了跨交互的一致性也让模型能针对不同类型的输入做出恰当回应。SmolLM 系列采用业界标准的ChatMLChat Markup Language格式。其核心是一对特殊 token|im_start|标记一条消息的开始后跟角色名system/user/assistant|im_end|标记一条消息的结束。文档中给出的 ChatML 示例去除多余的|im_start|起始行后实际等价于|im_start|system You are a helpful assistant focused on technical topics.|im_end| |im_start|user Hi there!|im_end| |im_start|assistant Nice to meet you!|im_end| |im_start|user Can I ask a question?|im_end| |im_start|assistant注意最后一条|im_start|assistant之后没有|im_end|——这表示轮到助手说话了请从这里开始生成。这正是生成提示generation prompt的标记位置。在transformers中你不需要手工拼写这些特殊 token。transformers会根据模型 tokenizer 中保存的模板自动完成格式化你需要做的只是按标准结构组织消息列表。下面是一个基础示例messages [ {role: system, content: You are a helpful assistant focused on technical topics.}, {role: user, content: Can you explain what a chat template is?}, {role: assistant, content: A chat template structures conversations between users and AI models...} ]这条消息列表会精确映射到上面的 ChatML 格式system角色映射为|im_start|system ... |im_end|user与assistant同理。你负责的是内容与角色语义tokenizer 负责的是格式与 token 化。系统消息System Messages设定模型行为基线系统消息为整个对话设定行为基调。它像一条持久生效的指令影响后续所有交互。注意系统消息通常只出现在对话最开头用来全局约束模型的语气、身份和行为边界system_message { role: system, content: You are a professional customer service agent. Always be polite, clear, and helpful. }在实践中系统消息适合承载角色设定如你是一名专业客服行为约束如始终礼貌、清晰、乐于助人输出格式要求如用 JSON 返回结果知识边界如只依据给定文档回答。对话历史Conversation History维持多轮上下文聊天模板通过保存用户↔助手的过往轮次来维持上下文使多轮对话保持连贯。对话历史本质上是若干条交替出现的user/assistant消息conversation [ {role: user, content: I need help with my order}, {role: assistant, content: Id be happy to help. Could you provide your order number?}, {role: user, content: Its ORDER-123}, ]每次调用模型时都要把完整的历史而非仅最新一条消息传给 tokenizer模型才能记得前面的对话内容。用 transformers 实现聊天模板transformers库对聊天模板提供内建支持核心 API 是tokenizer.apply_chat_template。文档中的标准用法from transformers import AutoTokenizer tokenizer AutoTokenizer.from_pretrained(HuggingFaceTB/SmolLM2-135M-Instruct) messages [ {role: system, content: You are a helpful coding assistant.}, {role: user, content: Write a Python function to sort a list}, ] # Apply the chat template formatted_chat tokenizer.apply_chat_template( messages, tokenizeFalse, add_generation_promptTrue )三个关键参数的作用tokenizeFalse只返回格式化后的字符串含 ChatML 特殊 token便于肉眼检查模板是否拼接正确tokenizeTrue默认直接返回token ID 列表省去手动tokenizer(...)的步骤可一步到位输入模型add_generation_promptTrue在消息末尾追加|im_start|assistant\n这样的生成起始标记告诉模型从现在开始生成助手回复。做推理时必须开启做训练样本构造时通常关闭。配合练习 notebookv1/pt-br/1_instruction_tuning/notebooks/chat_templates_example.ipynb中的完整链路可以看到模板应用的三种形态from transformers import AutoModelForCausalLM, AutoTokenizer from trl import setup_chat_format import torch # 动态选择设备CUDA → MPS → CPU device ( cuda if torch.cuda.is_available() else mps if torch.backends.mps.is_available() else cpu ) model_name HuggingFaceTB/SmolLM2-135M model AutoModelForCausalLM.from_pretrained( pretrained_model_name_or_pathmodel_name ).to(device) tokenizer AutoTokenizer.from_pretrained(pretrained_model_name_or_pathmodel_name) # 为基础模型装配聊天格式ChatML 模板 补齐特殊 token model, tokenizer setup_chat_format(modelmodel, tokenizertokenizer) messages [ {role: user, content: Hello, how are you?}, { role: assistant, content: Im doing well, thank you! How can I assist you today?, }, ] # 1) 仅格式化字符串形态 input_text tokenizer.apply_chat_template(messages, tokenizeFalse) # 输出形如 # |im_start|user # Hello, how are you?|im_end| # |im_start|assistant # Im doing well, thank you! How can I assist you today?|im_end| # 2) 格式化并直接 token 化含生成提示token ID 形态 input_ids tokenizer.apply_chat_template( messages, tokenizeTrue, add_generation_promptTrue ) # 输出形如[1, 4093, 198, 19556, 28, ...]其中 1 等 ID 对应 |im_start| 等特殊 token # 3) 反向验证把 token ID 解码回可读文本 print(tokenizer.decode(token_idsinput_ids))notebook 的实测输出展示了一个值得注意的细节apply_chat_template的生成提示会追加一段空的|im_start|assistant\n因此在解码后对话末尾会出现一个额外的assistant 起始标记——这正是留给模型续写的位置属于预期行为而非 bug。此外notebook 中通过setup_chat_format来自trl仓库依赖版本为 trl0.12.1见 requirements.txt为基础模型装配模板说明即使模型没有自带模板你也能在代码里显式指定 ChatML 格式——这在自定义微调场景中尤为重要。自定义格式化Custom Formatting当你需要自己定义一个简单模板时可以使用 Jinja2 风格的占位符语法transformers底层就是用 Jinja2 渲染模板仓库依赖中锁定 jinja23.1.4见 requirements.txttemplate |system|{system_message} |user|{user_message} |assistant|{assistant_message} .lstrip()需要强调的是在实际项目中优先使用模型官方维护的模板通过tokenizer.apply_chat_template或tokenizer.chat_template获取而不是手写模板。原因有三官方模板与模型的微调数据完全对齐手写模板极易引入角色标记或换行格式差异官方模板经过充分测试能正确处理工具调用、生成提示等边界情况手写模板需要额外管理特殊 token 的 ID 映射容易在 token 化环节出错。多轮对话Multi-Turn支持聊天模板天然支持复杂的多轮对话。关键是把整个历史含系统消息按时间顺序全部放入消息列表messages [ {role: system, content: You are a math tutor.}, {role: user, content: What is calculus?}, {role: assistant, content: Calculus is a branch of mathematics...}, {role: user, content: Can you give me an example?}, ]这样模型在生成第二轮回答时能看到提问→回答→追问的完整轨迹。英文课程单元units/en/unit1/2.md中的高级用法还展示了如何通过把上轮generated_text追加回 conversation 列表再继续调用的方式实现持续对话同时用generation_config精细控制生成参数如max_new_tokens、temperature、top_p、repetition_penalty等。这些做法与本文的消息列表结构完全兼容。实战练习把数据集批量转换为 ChatML 格式理解模板的最终目的是服务训练。配套 notebook 的练习要求把 Hugging Face 数据集转换为 ChatML 格式为 SFT 准备输入。核心模式如下来自 v1/pt-br/1_instruction_tuning/notebooks/chat_templates_example.ipynbfrom datasets import load_dataset ds load_dataset(HuggingFaceTB/smoltalk, everyday-conversations) def process_dataset(sample): # 1. 把样本组织成 role/content 消息列表 messages [ {role: user, content: sample[input]}, {role: assistant, content: sample[output]}, ] # 2. 用 tokenizer 的 apply_chat_template 套用模板 sample[text] tokenizer.apply_chat_template(messages, tokenizeFalse) return sample ds ds.map(process_dataset)练习按难度分级入门把HuggingFaceTB/smoltalk数据集转换为 ChatML 格式可直接参考上述代码进阶把openai/gsm8k数据集转换为 ChatML 格式——该数据集是问题→答案结构需要先自行构造消息列表再套用模板notebook 中留有两个 TODO 提示先创建 role/content 消息再调用 tokenizer 方法。正如 notebook 结论部分所指出的实际训练中 TRL 的setup_chat_format会自动替你完成这些转换但亲手走一遍转换流程才能真正理解模板在训练数据与模型之间扮演的角色——这也是本项目把这个练习放在 SFT 之前的用意。环境准备与运行前提本指南涉及transformers、trl、datasets、torch等库仓库已通过 pyproject.tomlrequires-python 3.11和 requirements.txt 锁定依赖版本transformers4.46.3、trl0.12.1、datasets3.1.0、torch2.5.1、huggingface-hub0.26.3、jinja23.1.4。在本地运行 notebook 前建议按requirements.txt安装依赖notebook 亦可在 Colab 中运行其首个 cell 给出了pip install transformers datasets trl huggingface_hub的安装命令与huggingface_hub.login()登录提示。运行注意点首次加载SmolLM2-135M等模型需联网从 Hugging Face Hub 下载权重并建议配置HF_TOKEN环境变量推理设备可按 notebook 中的方式动态选择 CUDA / MPS / CPU若要查看某个模型实际使用的模板可直接打印tokenizer.chat_templateJinja2 字符串或tokenizer.apply_chat_template(messages, tokenizeFalse)的产物。小结从模板到微调的完整链路在本项目的学习路径v1/1_instruction_tuning/README.md中聊天模板与监督微调SFT是同一枚硬币的两面模板负责格式化把原始对话数据转换成模型认识的结构化文本SFT 负责学习让模型在格式化后的数据上学会按此格式继续生成。下一篇文档 v1/pt-br/1_instruction_tuning/supervised_fine_tuning.md 将讲解如何用SFTTrainer在smoltalk等数据集上微调SmolLM2。届时你会发现训练样本正是本节练习中用apply_chat_template转换出来的text字段。因此熟练掌握聊天模板就等于掌握了通往指令微调的第一把钥匙。赞分享教程人工智能大模型NLP微调【免费下载链接】smol-courseA course on aligning smol models.项目地址https://gitcode.com/gh_mirrors/smo/smol-course点击查看免费下载相关推荐smol-course 指令微调入门用 ChatML 与 Transformers 彻底掌握 Chat Templatessmol course 指令微调入门用 ChatML 与 Transformers 彻底掌握 Chat Templates Chat Templates聊天教程人工智能大模型NLP微调smol-course 指令微调实战指南从 Chat Templates 到 SFTTrainer 微调 SmolLM2smol course 指令微调实战指南从 Chat Templates 到 SFTTrainer 微调 SmolLM2 导读 本文基于 smol cours教程人工智能大模型NLP微调smol-course 实战指南用 Chat Templates 与 ChatML 结构化 SmolLM2 对话smol course 实战指南用 Chat Templates 与 ChatML 结构化 SmolLM2 对话 Chat Template聊天模板是连接教程人工智能大模型NLP微调上一篇FitGirl游戏启动器完整指南3分钟搭建你的专属游戏库下一篇iPhone激活锁难题技术爱好者如何用applera1n实现iOS 15-16设备绕过创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考