准备 DeepSeek 类聊天模型的监督微调数据时,先按 messages JSONL 保存角色和内容,再用目标模型自己的 tokenizer 与 chat template 生成训练文本。不能把某个模型的特殊标记手工复制给所有 DeepSeek 版本。
推荐的样例结构
{"messages":[{"role":"user","content":"把 2 米换算成厘米"},{"role":"assistant","content":"2 米等于 200 厘米。"}]}
每行一个样例;system 是否需要、工具调用怎样编码、是否添加生成提示,均以具体模型卡和 tokenizer 配置为准。

标题结论:DeepSeek 微调数据应先校验 messages 的角色顺序、非空内容、重复样本和实际模板编码后的 token 长度。
结构校验
import json, hashlib
ALLOWED = {"system", "user", "assistant"}
seen = set()
with open("train.jsonl", encoding="utf-8") as f:
for line_no, line in enumerate(f, 1):
row = json.loads(line); messages = row.get("messages")
assert isinstance(messages, list) and messages, line_no
assert all(m.get("role") in ALLOWED and
isinstance(m.get("content"), str) and m["content"].strip()
for m in messages), line_no
assert any(m["role"] == "user" for m in messages), line_no
assert messages[-1]["role"] == "assistant", line_no
key = hashlib.sha256(json.dumps(messages, ensure_ascii=False,
sort_keys=True).encode()).hexdigest()
assert key not in seen, f"duplicate line {line_no}"
seen.add(key)
print("valid_conversations", len(seen))
读者下一步:先运行结构校验,再加载你实际下载的 DeepSeek 模型 tokenizer,对每条 messages 调用 apply_chat_template 统计长度。
长度与标签还要再查
结果验证:随机解码模板化后的三条样例,确认角色边界、结束标记和中文内容完整;统计超出训练 max_length 的样例 ID,而不是静默截断。
训练损失是否只作用于 assistant 内容取决于训练器和数据整理器配置,必须查看实际标签 mask,不能因数据长得像对话就假定已正确屏蔽用户文本。
限制
失败边界:示例只验证数据结构,没有运行 DeepSeek 微调,也没有给出通用 max_length、学习率、显存需求或模型许可结论。
依据与核验日期
- Transformers 聊天模板文档:说明不同聊天模型控制 token 不同,应使用模型模板
- TRL SFTTrainer 文档:说明 conversational dataset 与 messages 格式及训练接口
以上页面于 2026-10-01 核验。版本更新后,应重新查看参数含义和默认值。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31230.html