GLM-5.3工具调用与Chat Template全解析:XML函数调用格式深度揭秘
【免费下载链接】GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。项目地址: https://ai.gitcode.com/zai-org/GLM-5.3
GLM-5.3 是 Z.ai 最新的旗舰开源权重模型,其 Chat Template 采用独特的XML 函数调用格式,专为可靠的 Agent 工具调用而设计。本文带你逐层拆解 GLM-5.3 的对话模板结构:从四大角色标记、 思考标签,到...的完整调用链路,并给出接入 GLM-5.3 工具调用的关键参数清单。
🧭 先认识 GLM-5.3:同基座、更强后训练
GLM-5.3 与 GLM-5.2 使用相同的基座模型,所有能力提升均来自后训练,在复杂编程与长程 Agent 任务上表现显著增强(详见 README.md)。
核心架构参数(摘自 config.json):
| 参数 | 值 | 说明 |
|---|---|---|
| model_type | glm_moe_dsa | 稀疏注意力 MoE 架构 |
| 层数 | 78 | Transformer 层 |
| 路由专家 | 256 + 1 共享 | 每 token 激活 8 个专家 |
| 最大上下文 | 1,048,576 | 原生 1M token 长上下文 |
| 量化 | FP8 (e4m3) | 128×128 分块量化权重 |
💡 1M 上下文 + 工具调用能力,使 GLM-5.3 天然适合长程 Agent 场景(如 Terminal-Bench、DeepSWE 等评测中均位列开源第一梯队)。
🏗️ Chat Template 结构:四大角色标记
GLM-5.3 的对话模板定义在 chat_template.jinja(Jinja2 模板,由推理框架在 tokenize 前自动渲染)。所有消息通过 4 个特殊 token 区分角色:
| 特殊 token | 角色 | 用途 |
|---|---|---|
<\|system\|> | 系统 | 系统指令、工具定义注入区 |
<\|user\|> | 用户 | 用户输入 |
<\|assistant\|> | 助手 | 模型输出(含思考与工具调用) |
<\|observation\|> | 观测 | 工具执行结果的返回通道 |
这些 token 均在 tokenizer_config.json 的extra_special_tokens中注册,模型最大长度在 tokenizer_config.json 中设为 1048576。
整个提示词以[gMASK]<sop>开头(chat_template.jinja),这是 GLM 系列的标志性起始符,紧随其后可选注入思考预算声明:
[gMASK]<sop> </think> Reasoning Effort: Max <|system|> # Tools ...📌
Reasoning Effort行来自reasoning_effort参数,模板在 chat_template.jinja 中按low/high/max三档渲染,未传时默认max。
🛠️ XML 函数调用格式深度揭秘(核心)
与 GPT 系模型常用的 JSON 参数格式不同,GLM-5.3 使用一套自研的 XML 风格标记,共涉及三个部分:
1️⃣ 工具定义注入:<tools>块
当推理框架传入tools参数时,模板会在 system 区最前面自动生成一段工具说明(chat_template.jinja):
You are provided with function signatures within <tools></tools> XML tags: <tools> {"name": "get_weather", "description": "获取城市天气", "parameters": {...}} </tools> For each function call, output the function name and arguments within the following XML format: _每个工具以JSON 单行形式列在<tools></tools>中,函数名、描述、参数 schema 保持标准结构,模型据此学习调用约定。
2️⃣ 模型输出:`
函数名 + 键值对
模型决定调用工具时,输出格式为(chat_template.jinja):
get_weather<arg_key>city</arg_key><arg_value>北京</arg_value> </tool_call>特点一目了然:
- ✅流式友好: 标签一出现,解析器即可开始提取函数名;
- ✅无转义负担:参数值原样输出(非字符串值会被序列化为 JSON,见 chat_template.jinja),避免 JSON 引号嵌套导致的解析失败;
- ✅支持并行调用:一条 assistant 消息可连续输出多组
...,每组对应一次函数调用。
3️⃣ 工具返回:`
包裹 +<|observation|>` 通道
工具执行结果通过<|observation|>标记写回对话(chat_template.jinja),内部再用...包裹正文:
<|observation|> {"city": "北京", "weather": "晴", "temperature": 26}完整的一次调用链渲染示意如下:
<|user|>北京今天天气怎么样? <|assistant|> 我来帮你查一下。 get_weather<arg_key>city</arg_key><arg_value>北京</arg_value> </tool_call> <|observation|> {"city": "北京", "weather": "晴", "temperature": 26} <|assistant|> 北京今天晴,气温 26℃。🧠 一个巧妙细节:模型每轮输出都先经
...思考段(chat_template.jinja)再给出正式回复或工具调用,"先想后做"的结构显著提升了复杂任务的成功率。
⚙️ 三个必须知道的控制参数
| 参数 | 取值 | 作用 |
|---|---|---|
reasoning_effort | low/high/max(默认max) | 思考预算档位,复现评测结果请保持默认max |
clear_thinking | false(默认)/true | 多轮对话中是否清空历史轮次的思考内容 |
add_generation_prompt | 默认true | 在末尾补上 `<|assistant|> |
| ` 引导模型开始思考 |
clear_thinking的实现很见功力(chat_template.jinja):模板先定位最后一条 user 消息的位置(chat_template.jinja),只有该位置之后的 assistant 消息才保留完整思考内容,更早的历史轮次一律替换为空标签</think>,从而在保持当前推理能力的同时大幅节省多轮对话的 token 消耗。
📌 官方建议(README.md):聊天场景请显式传
clear_thinking=true。
🚀 进阶机制:工具延迟加载与结果智能排序
defer_loading 延迟加载— 当工具数量极多(如接入大量 MCP 服务)时,可在工具定义中设置defer_loading: true,模板将跳过该工具的初始渲染(chat_template.jinja);当需要其完整定义时,通过tool_reference类型的工具结果按需展开为<tools>{...}</tools>(chat_template.jinja)。相当于给上下文窗口做"分页",避免长系统提示稀释注意力。
并行结果自动排序— 多个工具并行执行后,返回顺序可能与模型发起调用的顺序不一致。模板内置了严格的校验逻辑(chat_template.jinja、chat_template.jinja):通过tool_call_id比对,将 结果重排为与调用发起顺序一致;一旦发现 ID 缺失或重复则自动降级为原始顺序,确保任何异常输入都不会渲染出错。
💡 此外,模板对非文本内容做了防御处理:若消息中出现 image/video/audio 等多模态片段,会替换为一条"模型无法处理该模态"的提示语(chat_template.jinja),因为 GLM-5.3 是纯文本模型。
📝 GLM-5.3 工具调用接入速查
- ✅ 使用 SGLang、vLLM、Transformers、KTransformers 等主流推理框架部署,由框架自动应用 chat_template.jinja,切勿手写提示词拼接;
- ✅ 采样参数按 generation_config.json:
temperature=1.0、top_p=0.95; - ✅ Agent/工具场景保持
reasoning_effort=max,多轮聊天场景加clear_thinking=true; - ✅ 解析模型输出时,按 → 函数名 →
<arg_key>/<arg_value>键值对 → 的顺序做流式解析即可稳定拿到调用参数。
📂 关键文件清单
| 文件 | 作用 |
|---|---|
| chat_template.jinja | Chat Template 完整定义(工具调用、思考控制、结果排序全部在此) |
| config.json | 模型架构配置:MoE、1M 上下文、FP8 量化 |
| generation_config.json | 推荐采样参数与 EOS token |
| tokenizer_config.json | 特殊 token 注册与最大长度 |
| tokenizer.json | 分词器词表(约 20MB,Git LFS 管理) |
| README.md | 能力评测基准与部署框架指引 |
【免费下载链接】GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。项目地址: https://ai.gitcode.com/zai-org/GLM-5.3
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考