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 代码迁移成本不高;中文参数描述的理解是它相对顺手的场景。把工具定义和系统提示词当代码来维护、写测试用例验证触发准确率,是这类功能稳定上线的前提。

本文为使用方法整理,内容选自网上公开资料,供参考;本站为非官方资讯站,产品能力以官方页面为准。