什么是 聊天模板(Chat Template)?

聊天模板(Chat Template)是一种模型专属的序列化契约,用于把结构化消息、角色、工具交互和多模态内容转换为聊天模型实际接收的文本或 Token 序列。

快速了解

规范文档官方规范

工作原理

聊天模板也常称对话模板,它不决定应用要写什么指令、注入什么检索上下文或要求什么输出 Schema;这些应用层组合职责属于 Prompt Template。Chat Template 负责把结构化消息渲染为模型训练时使用的精确控制 Token 格式,包括角色标记、轮次边界、BOS/EOS、工具定义与结果、多模态占位符,以及开始 Assistant 回答的标记。

常见实现把 Jinja 模板保存在 Tokenizer 或多模态 Processor 中,但 Jinja 语法有效不等于与模型兼容。训练通常渲染完整对话,不追加 Generation Prompt;推理可能追加模型专属的 Assistant 起始标记,Prefill 则继续最后一条 Assistant 消息。Loss Mask 是独立训练策略,不属于 Chat Template 定义。

生产身份应联合绑定模型、Tokenizer/Processor、模板 Hash、Special Token Map、Message Content Schema、渲染模式、Stop 配置、Tool Parser 与 Runtime Renderer。发布前应使用 Golden Fixture 同时比较训练和服务路径的渲染文本与 Token ID。模板不是授权边界:应用仍需校验角色和内容结构、防止不可信控制 Token 注入、执行工具权限并测试安全行为。

主要特点

  • 把角色与内容记录序列化为模型训练时学习的专属控制 Token 序列
  • 将模型 Revision 与 Tokenizer/Processor、模板 Revision、Special Token Map、内容 Schema 和停止行为联合绑定
  • 为完整训练对话、Assistant 生成起始和 Assistant 消息 Prefill 使用不同渲染模式
  • 在模型格式支持时渲染工具定义、Tool Call、Tool Response 和多模态占位符
  • 使用文本与 Token ID Fixture 检测 Transformers、vLLM、llama.cpp 或其他服务 Runtime 之间的漂移
  • 不能替代 Loss Mask 策略、消息校验、角色授权、工具权限或输出校验

常见用途

  1. 使用目标模型的同一消息格式准备对话式 SFT 数据
  2. 把 Chat API 请求渲染为模型输入,同时保持角色边界与停止行为
  3. 为模型专属工具调用配置兼容的 Chat Template 与 Tool Parser
  4. 通过多模态 Processor 序列化图片、视频或带类型的内容片段
  5. 当训练和服务对黄金对话产生不同渲染文本或 Token ID 时阻断发布

示例

loading...
Loading code...

常见问题

Chat Template 和 Prompt Template 有什么区别?

Prompt Template 组合应用指令、变量、示例、检索上下文和输出约束;Chat Template 则把组合后的结构化消息序列化为模型专属文本或 Token 序列。两者可以同时使用,但解决的问题不同:前者管理应用提示内容,后者管理模型输入格式。

为什么训练和推理必须使用同一 Chat Template?

聊天模型学习的是特定角色标记、轮次边界、Special Token 和 EOS 行为。服务路径若渲染出不同序列,模型可能续写错误角色、异常停止、忽略工具或质量下降。应保持同一模板身份,按训练或生成场景选择正确模式,并在真实服务路径比较渲染文本与 Token ID Fixture。

add_generation_prompt 和 continue_final_message 分别做什么?

add_generation_prompt 通常追加开始新 Assistant 回答所需的控制 Token;continue_final_message 则让最后一条消息保持未结束,以便模型继续 Prefill 内容。具体行为取决于模板,互不兼容的模式不应组合。渲染完整训练对话时通常既不追加新的 Assistant 起始标记,也不继续未完成消息。

Chat Template 有效就能保证工具调用正常吗?

不能。模板必须按模型预期格式编码工具定义、调用与结果,服务 Runtime 还需要兼容的 Tool Parser 和 Stop 配置。JSON 可以解析只证明语法有效,不能证明模型选对工具、参数符合 Schema、权限受控或工具异常得到安全处理。

Chat Template 能防止 Prompt Injection 或非法角色切换吗?

不能。模板控制序列化,不决定信任关系。应用必须校验允许的角色与 Content Shape,按需要拒绝或转义保留控制 Token,避免用户控制 System 或 Tool 权限,并执行输出校验和对抗评测。安全研究表明格式错位会影响部分被测模型,但不能据此推导统一漏洞率或通用修复方案。

相关术语