知识全景图/ 软件工程与系统/ 人工智能全景图/ Chat Template / Message Serialization

Chat Template、Message Serialization 与角色协议底层图谱

把 system / user / assistant / tool 消息序列化成模型真正看到的 token 序列,解释角色、特殊 token、工具调用和训练推理一致性

阅读定位: Tokenizer回答文本怎样变成 token id, Batch / Mask / Packing回答 token 序列怎样进入张量, Prompt / 上下文工程回答上下文怎样设计。 本页专门讲中间的协议层:多轮消息、角色标签、工具调用、停止符和 generation prompt 怎样被序列化成模型能理解的文本或特殊 token。
一、模型看到的不是 messages,而是序列化后的 token
Messages
role / content
Chat Template
角色协议
Serialized Text
特殊标记
Token IDs
tokenizer
Generation
assistant 续写
它是什么例子常见误解
message object应用层结构化消息role=user, content=...以为模型原生理解 JSON 消息数组
chat template把 messages 渲染成模型训练时见过的格式<|user|>...<|assistant|>所有模型的 role 标签都一样
special tokensBOS、EOS、role token、tool token、stop token<s>、</s>、<|im_end|>特殊 token 可以随便换成普通文本
generation prompt告诉模型从 assistant 位置开始续写最后追加 assistant header把最后一个 user 消息直接丢给模型就够了
stop rule生成何时结束的协议EOS、stop sequence、tool_call_end停不下来一定是解码参数问题
二、角色协议:system / user / assistant / tool 各自承担什么
角色作用序列化要点错了会怎样
system定义全局行为、边界、风格和优先级通常放在最前,并用模型专属 system 标记包住模型把系统约束当普通用户内容,安全边界变弱
user表达用户请求和上下文输入需要清楚闭合,避免用户内容吞掉后续 role 标记提示注入更容易伪造 assistant / tool 消息
assistant模型历史回答或当前要生成的位置训练时通常对 assistant 内容算 loss,推理时追加 assistant header模型不知道该从哪个角色继续说话
tool工具返回结果或外部执行证据要区分 tool call 请求、tool result 和普通自然语言模型把工具结果当用户指令或把工具参数当文本答案
developer / policy部分系统中的中间优先级指令必须映射到模型支持的角色或模板扩展优先级丢失,线上行为和预期不一致
三、Chat Template 里最关键的字段
字段 / 规则回答的问题检查点
BOS / EOS序列从哪里开始,哪些位置代表结束是否重复添加 BOS,EOS 是否和 stop rule 一致
role header当前片段属于哪个说话者system / user / assistant / tool 是否有稳定边界
message separator多轮消息之间怎样隔开换行、特殊 token、结束标记是否和训练模板一致
assistant generation prompt模型应该从哪里开始生成最后是否追加 assistant 起始标记而不是完整 assistant 消息
tool schema block工具定义怎样提供给模型工具名、参数 schema、描述和权限提示是否被稳定序列化
tool call format模型怎样表达“我要调用工具”JSON、XML、special token、function_call 字段是否和解析器一致
stop tokens生成遇到什么就停止stop sequence 是否会误伤正常文本,是否覆盖 tool call 结束
四、训练模板和推理模板必须对齐
SFT 训练时
样本通常会被渲染成完整对话,user 和 system 作为上下文,assistant 回复作为主要 loss 区域。模板决定模型学会在哪个标记后开始回答。
推理上线时
应用把历史 messages、RAG 片段、工具定义和用户输入渲染成 prompt,再追加 assistant generation prompt。任何格式差异都可能变成行为差异。
评测回放时
Eval 必须记录 template version、rendered prompt hash 和 stop rule,否则同一个样本换模板后分数不可比。
不一致点表现根因
训练用 A 模板,推理用 B 模板模型不按角色回答、格式漂移role token、分隔符、assistant 起始标记不同
训练时算错 loss mask模型复述用户问题或学会生成 role 标签user / assistant 区域没有正确区分
缺少 generation prompt模型继续补全用户消息,而不是回答没有给出 assistant 起始位置
stop rule 和模板冲突回答截断、工具调用 JSON 不完整stop sequence 命中了普通内容或工具字段
工具调用格式和解析器不一致模型看似调用了工具,但运行时解析失败模板、schema、parser、tool runtime 没有同一版本
五、工具调用不是“多写一段 Prompt”
对象应该序列化什么为什么重要
tool registry工具名、描述、参数 schema、返回类型、风险等级模型需要知道可用动作,运行时需要知道权限边界
tool call模型选择的工具名、参数、调用 id便于 parser、审批、执行和审计追踪
tool result工具返回内容、错误、截断、证据 id模型后续回答要区分真实工具结果和用户文本
tool error错误类型、是否可重试、用户可见信息避免模型把系统错误编造成事实答案
approval state是否人工确认、权限快照、执行状态高风险工具调用必须保留责任链
六、安全边界:用户内容不能伪造角色
风险:角色注入
用户输入如果包含类似 system / assistant / tool 的标记,而模板没有转义或隔离,模型可能把用户内容误当成更高优先级消息。
风险:工具结果注入
网页、文档、RAG chunk 或工具返回值里可能包含伪指令。序列化时要保留“这是证据 / 数据,不是指令”的边界。
风险:模板热改
线上直接修改模板,会同时改变安全边界、工具调用、格式输出和 token 成本。模板应该像 prompt artifact 一样版本化和回归。
七、排查时先看这张表
症状先看什么常见修复方向
模型回答里出现 role 标签rendered prompt、labels、loss mask修正训练模板和 response-only loss
模型不听 system promptsystem 是否被正确放入模板、是否被用户内容覆盖修正角色边界、上下文优先级和指令层级
同一问题单轮正常,多轮异常history serialization、message separator、truncation统一多轮拼接规则,记录被截断消息
工具调用经常解析失败tool call serialization、parser、stop tokens让模板、schema、parser 和运行时共用版本
开源模型部署后行为变差tokenizer_config、chat_template、BOS/EOS、stop rule使用模型官方模板,避免跨模型复用模板
评测分数突然变化template version、rendered prompt hash、generation prompt把模板纳入 eval artifact 和 release bundle
7.1 Message Serialization 证据包:messages 怎样变成 rendered prompt
序列化节点必须记录的字段判断重点
消息输入conversation_id、message_ids、role_map、source_type、trusted_boundary哪些内容是系统规则、用户输入、工具观察或外部证据?
模板渲染template_version、template_hash、rendered_prompt_hash、generation_prompt线上行为变化是否来自模板、assistant header 或 stop rule 改动?
角色边界system_span、user_spans、assistant_spans、tool_spans、escaped_user_content用户内容是否伪造了 role 标签,工具结果是否混进控制区?
工具协议tool_schema_version、tool_call_format、tool_result_format、parser_version工具调用失败是模型问题、模板问题、schema 问题还是解析器问题?
训练 / 推理对齐model_template_family、tokenizer_version、stop_tokens、loss_mask_assumption开源模型部署后多轮、工具调用或 system 服从为什么退化?
八、和相邻页面怎么接
相邻页它回答什么本页补什么
Tokenizer / 词表文字、特殊 token 和 chat template 怎样进入 token id多轮 message 怎样先被模板序列化,再交给 tokenizer
Batch / Mask / Packingtoken 序列怎样进入 batch 张量哪些 token 属于 user / assistant / tool,如何影响 loss mask 和 stop
Prompt / 上下文工程上下文如何设计和拼装把上下文设计落到可复现的模板、角色和序列化协议
指令层级 / 上下文可信度不同来源指令的优先级如何判断角色协议怎样承载 system、user、tool、RAG 证据的可信边界
Tool Calling / 执行协议工具调用怎样被解析、授权和执行工具定义、调用和结果怎样序列化给模型
Artifact RegistryAI 资产怎样版本化、追溯和回滚把 chat template 作为 prompt / tool / release artifact 的一部分登记
九、回到 AI 主干
AI 全景 AI 阅读路线 Tokenizer Chat Template Batch / Mask Prompt / 上下文 Tool Calling Artifact Registry