智谱 GLM Function Calling 怎么用?声明工具、执行函数并提交结果

使用智谱 GLM tools 与 tool_calls 声明工具、解析参数、执行白名单函数并按调用 ID 提交结果;补充权限、幂等和失败状态。

智谱 GLM 的 Function Calling 也采用“模型提出工具调用,程序执行,再回传结果”的流程。模型不会替你安全地访问数据库或外部 API;执行权限、参数校验、幂等和失败状态都由业务程序负责。

工具调用包含哪些关键字段

智谱官方工具调用文档说明:用 tools 声明函数列表,tool_choice 当前默认且仅支持 auto;响应中的 tool_calls 包含函数名、JSON 字符串参数和调用 ID。程序必须保留这个 ID,回传工具结果时用于对应原调用。

智谱 GLM Function Calling 怎么用?声明工具、执行函数并提交结果

最小 Python 示例

安装 zai-sdk,把 ZAI_API_KEY 放进环境变量。示例函数只返回固定演示数据,没有请求真实天气服务。

import json, os
from zai import ZhipuAiClient

client = ZhipuAiClient(api_key=os.environ["ZAI_API_KEY"])
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "返回指定城市的演示天气",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
            "additionalProperties": False
        }
    }
}]
messages = [{"role": "user", "content": "北京天气怎样?"}]

first = client.chat.completions.create(
    model="glm-5.3", messages=messages,
    tools=tools, tool_choice="auto"
)
message = first.choices[0].message
messages.append(message.model_dump())

for call in message.tool_calls or []:
    if call.function.name != "get_weather":
        raise ValueError("工具不在白名单")
    args = json.loads(call.function.arguments)
    if args.get("city") != "北京":
        raise ValueError("参数未通过校验")
    demo = {"city": "北京", "temperature": "22℃", "source": "demo"}
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps(demo, ensure_ascii=False)
    })

final = client.chat.completions.create(
    model="glm-5.3", messages=messages, tools=tools
)
print(final.choices[0].message.content)

模型名、SDK 版本和返回对象应以当前官方页面为准。固定的 22℃ 是演示值,不能作为天气事实。

验证四个节点

  1. 模型决定:第一轮是否真的返回 tool_calls;没有就不能假装函数已执行。
  2. 参数:arguments 能否解析为 JSON,字段和类型是否符合 schema。
  3. 执行:业务日志是否记录调用 ID、工具名、脱敏参数和真实成功或失败状态。
  4. 回传:最终回答是否忠实使用工具结果,且 tool_call_id 与原调用一致。

测试时可让模拟函数返回错误对象,确认模型不会把失败解释成成功。一次返回多个工具调用时,要逐个校验和处理,不能只取数组第一项。

真实业务的安全门槛

  • 函数名映射到固定代码,禁止拼接执行任意命令。
  • 参数做长度、枚举、格式、租户归属和权限检查。
  • 付款、发送、删除等操作要二次确认、幂等和审计。
  • 外部调用超时记为未知或失败,先查询真实状态,再决定是否重试。

失败边界与未实测说明

模型可能选择不调用、返回错误函数名、生成无效 JSON 或省略必填参数。Function Calling 只是结构化建议,并不保证参数可信。本文依据 2026-10-01 的智谱官方文档整理,未用你的 Key 调用 GLM,也未接真实天气服务;请先通过无副作用模拟,再接生产资源。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32934.html

赞 (0)
AI小管家的头像AI小管家
豆包怎么上传文件并提问?从添加附件到核对回答依据
上一篇 1小时前
智谱文件解析怎么用?上传 PDF、获取结果并处理解析失败
下一篇 1小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部