GLM Function Calling 完整示例与提示词模板
2026-11-09 · 提示词教程
Function Calling 是把 GLM 从「会聊天」变成「能干活」的关键开关。本文基于 BigModel API 平台的工具调用机制,给出可直接复制的定义模板和调用流程,帮你少走弯路。
一、GLM 工具调用的基本机制
GLM 系列(含 GLM-5 等推理向模型)在 Chat Completions 接口中通过 tools 参数声明工具,模型返回 tool_calls 后,由你的代码执行真实函数并把结果以 role="tool" 消息回传。注意几点:
- 模型本身不执行函数,只决定「调不调、调哪个、传什么参数」;
tool_choice="auto"让模型自行判断,设为具体函数名可强制调用;- 工具结果必须带对应的
tool_call_id,否则下一轮会报错。
参数 schema 建议用 JSON Schema 严格描述,GLM 对字段描述的遵循度直接取决于你写得多清楚。
二、工具定义模板(可直接复制)
json
{
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市当前天气。当用户询问天气、气温、降水、穿衣建议时调用。",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市中文名,如:北京"
},
"date": {
"type": "string",
"description": "查询日期,格式 YYYY-MM-DD,不填默认今天"
}
},
"required": ["city"]
}
}
}
],
"tool_choice": "auto"
}
description 是最容易偷懒也最影响效果的字段。写清「什么时候该调用」,GLM 的触发准确率会明显提升。
三、完整调用流程与系统提示词
配合上面的工具,系统提示词这样写:
你是一个天气助手,可调用 get_weather 工具查询实时天气。 规则: 1. 用户问到天气相关问题时必须调用工具,不要凭记忆编造数据; 2. 用户未指明城市时先追问,不要猜测; 3. 工具返回失败时如实告知,不要生成假数据; 4. 回答用简体中文,只报告工具返回的字段。
Python 侧的调用骨架:
python
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="你的KEY")
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": "北京今天适合跑步吗?"}
]
resp = client.chat.completions.create(
model="glm-4-plus", # 以 BigModel 官方页面提供的可用模型为准
messages=messages,
tools=tools,
tool_choice="auto",
)
msg = resp.choices[0].message
if msg.tool_calls:
for tc in msg.tool_calls:
result = execute(tc.function.name, tc.function.arguments)
messages.append(msg)
messages.append({
"role": "tool",
"tool_call_id": tc.id,
"content": result
})
final = client.chat.completions.create(
model="glm-4-plus", messages=messages, tools=tools)
print(final.choices[0].message.content)
四、多工具与并行调用
复杂场景可以声明多个工具,GLM 会根据语义自动路由。比如同时挂 get_weather 和 search_poems,问「下雨天读什么诗」时,模型可能先查天气再推荐内容,一次响应里返回多个 tool_calls。你的执行器应该支持循环处理每个 tool_call,逐条回传结果。
五、常见坑位
1. arguments 是 JSON 字符串:需要 json.loads 后再执行,别直接当对象用; 2. 开启 thinking 深度思考模式时,注意解析返回结构中的思考内容字段与最终答案字段,具体字段名以官方文档为准; 3. 工具描述冲突:两个工具 description 语义重叠会导致随机调用,尽量让职责互斥; 4. 参数幻觉:required 字段务必列全,并在 description 里写明取值格式; 5. 流式输出下 tool_calls 是分片到达的,需要拼接 delta。
对比 GPT、Claude 或 DeepSeek 的函数调用,GLM 的协议结构基本对齐 OpenAI 风格,已有 OpenAI SDK 代码迁移成本不高;中文参数描述的理解是它相对顺手的场景。把工具定义和系统提示词当代码来维护、写测试用例验证触发准确率,是这类功能稳定上线的前提。
本文为使用方法整理,内容选自网上公开资料,供参考;本站为非官方资讯站,产品能力以官方页面为准。