news 2026/10/14 18:22:15

GLM-5.3工具调用与Chat Template全解析:XML函数调用格式深度揭秘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GLM-5.3工具调用与Chat Template全解析:XML函数调用格式深度揭秘

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_typeglm_moe_dsa稀疏注意力 MoE 架构
层数78Transformer 层
路由专家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_effortlow/high/max(默认max)思考预算档位,复现评测结果请保持默认max
clear_thinkingfalse(默认)/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.jinjaChat 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 18:22:02

从压缩包到可演示项目:青训营实战环境搭建与避坑指南

简介&#xff1a;字节跳动青训营项目实战.zip 是一套面向IT初学者与求职者的实战演练资料&#xff0c;围绕字节跳动青训营的真实项目场景&#xff0c;帮助学习者提升编程、项目管理与团队协作能力。压缩包共65个文件&#xff0c;以45个JavaScript文件为主&#xff0c;辅以CSS、…

作者头像 李华
网站建设 2026/10/14 18:21:53

51单片机红外遥控解码指南:用波形显示吃透NEC协议

简介&#xff1a;一套基于51单片机红外遥控解码与波形显示的实战项目资料包&#xff0c;源自毕业设计&#xff0c;面向电子爱好者、单片机初学者及嵌入式设计人员&#xff0c;解决红外信号接收、解码和波形可视化的关键问题。压缩包共38个文件&#xff0c;涵盖C语言源程序、Pro…

作者头像 李华
网站建设 2026/10/14 18:21:52

乘法溢出预判与边界处理:AtCoder ABC169 B题深度解析

最近在带一个学弟刷 AtCoder Beginner Contest 的套题&#xff0c;发现很多新手在 B 题这种看似简单的乘法题上栽跟头。虽然 B 题定位是“轻松签到”&#xff0c;但一旦涉及大数边界和溢出判断&#xff0c;AC 率其实并没有想象中那么高。正好借 AtCoder Beginner Contest 169 …

作者头像 李华
网站建设 2026/10/14 18:20:41

快速阅读不靠眼快:筛选与理解的实用框架

经常有人问我&#xff1a;“你读书怎么那么快&#xff1f;是不是一目十行、走马观花&#xff1f;”说实话&#xff0c;我刚开始试水快速阅读的时候也踩过不少坑&#xff0c;最典型的表现是字都看完了&#xff0c;合上书一问三不知。后来我花了很长时间去拆解“快速阅读”和“快…

作者头像 李华
网站建设 2026/10/14 18:20:40

留学生赶Due自救攻略:10家英文论文/期刊辅导机构怎么选?

现阶段&#xff0c;各大高校对Turnitin系统的AI检测算法再次升级&#xff0c;无论你是正准备投递核心期刊的科研新人&#xff0c;还是面临Due期压力的留学生&#xff0c;一篇优秀流畅的英文Paper永远是过关的底气。 很多同学遇到写作瓶颈时&#xff0c;可能会盲目寻找英文论文…

作者头像 李华
网站建设 2026/10/14 18:20:11

MinGW-w64离线安装包详解:从选型到环境配置避坑指南

简介&#xff1a;mingw-w64-x86-64-V8.1.0-win32-seh离线安装包是一套面向Windows平台的GNU工具链&#xff0c;专为需要编译C/C程序的开发者设计&#xff0c;支持32位与64位目标架构&#xff0c;采用SEH结构化异常处理&#xff0c;并兼容TLS多线程模型。该包适合无网络或网络受…

作者头像 李华