---
title: "对话模板（chat template）是什么"
description: "对话模板决定 messages 怎么变成模型认识的 token 序列；模板用错，模型不会报错，回答质量却会明显下降。角色映射、工具调用块的排法与本地部署常踩的坑，都值得逐个过一遍。"
updated: 2026-11-13
canonical: https://docai.cc/concepts/chat-template/
markdown_mirror: https://docai.cc/concepts/chat-template.md
---
## 它是什么

你在 API 里发的是结构化的消息数组：system 定规则，user 提问，assistant 回答。模型实际吃进去的却是一串 token。对话模板就是两者之间的翻译规则：用哪些特殊 token 标记角色、角色名写在哪、助手回复在哪结束、工具调用用什么块包起来。

模板不是给人看的排版，而是模型在训练时见过的格式。训练和推理必须用同一套格式，否则等于用另一种方言跟它说话。

## 怎么工作

对话模板通常以模板字符串的形式随[分词器](/concepts/tokenizer/)发布，推理框架调用时把消息数组逐条套进去，拼成完整文本，再转成 token。

角色映射有几个细节：

- system 消息通常只在开头出现一次。有的模型没有独立的 system 角色，框架会把它并入第一条 user 消息。
- user 与 assistant 交替出现。如果历史里连续两条同角色，很多模板会合并，或者直接报错。
- 生成前要在末尾加上 assistant 的起始标记，模型才知道轮到自己说话。

工具调用块另有一套标记：工具定义怎么描述、模型请求调用时输出什么、执行结果怎么回填，顺序与标签都由模板规定。接[工具调用](/concepts/tool-use/)时，模板不对，模型可能永远不触发工具，或者把参数写成普通文本。

## 常见坑

- **官方 API 正常、自己部署变差**：先把两边实际拼出的文本打印出来逐字对比，通常是模板版本不同。
- **手工拼字符串**：漏特殊 token、多一个空格、重复加起始标记，都会让效果下降且不报错。
- **依赖框架默认模板**：推理框架与模型版本的默认值可能不一致，部署时显式指定模板。
- **微调与推理不一致**：训练时用的模板必须和线上推理完全一致，包括系统提示的位置。
- **量化后模板丢失**：部分转换流程会丢掉模板配置，部署前检查是否还在。

## 和提示模板的区别

[提示模板](/concepts/prompt-template/)是你写在应用里的文字模板，决定问什么；对话模板是模型要求的消息格式，决定怎么把问的话交过去。前者由你设计，后者由模型决定，两者不能互相替代。

## 常见误解

- **「模板只是格式装饰」**：它决定模型看到的结构，直接影响输出质量与工具触发。
- **「所有模型共用一套模板」**：每个模型有自己的格式，混用等于换了一种训练分布。
- **「拼错了会报错」**：多数情况不会报错，只是答得更差，所以问题很难被发现。
- **「模板不影响 token 计数」**：特殊 token 与角色标记都算数，估算成本时要算进去。
