ChatGLM工具调用参数完整编写指南与常见错误规避
时间:2026-07-25 | 作者:318050 | 阅读:0ChatGLM模型的工具调用,格式上是有严格要求的——不是随便写个JSON就能用。你需要先定义一个JSON Schema格式的工具描述,包含name、description和parameters这三个字段,参数类型只能支持string、number、integer、boolean和array这五种。然后,用<|tool_start|>和<|tool_end|>把工具数组包裹起来,放在用户提问之前。最后,模型输出中会包含<|tool_call|>块,用正则提取出来解析即可。
要在Python中调用ChatGLM模型并实现工具调用(Tool Calling),必须显式构造符合其tokenizer要求的工具描述格式,并在prompt中嵌入特殊token来标识工具区域。否则模型根本识别不到工具意图,要么直接忽略,要么胡乱生成一通。
准备工具定义结构
ChatGLM系列(比如ChatGLM3-6B)要求工具以标准JSON Schema格式声明,字段名必须是name、description、parameters,一个都不能少。参数类型只支持string、number、integer、boolean、array这五种,如果你写成int或float,解析就会直接挂掉。
举个例子,定义一个查询天气的工具:
{ "name": "get_weather", "description": "根据城市名称获取当前天气信息", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称,如北京、上海" } }, "required": ["city"] } }
构造带工具标识的输入prompt
ChatGLM3使用<|tool_start|>和<|tool_end|>来标记工具定义区块,这两个token必须严格存在,而且中间不能换行、不能加空格,否则模型无法正确切分工具上下文。
把工具定义插入prompt开头,格式是这样的:
<|tool_start|>[{"name":"get_weather","description":"根据城市名称获取当前天气信息","parameters":{"type":"object","properties":{"city":{"type":"string","description":"城市名称,如北京、上海"}},"required":["city"]}}]<|tool_end|>用户:今天杭州天气怎么样?
注意:工具数组必须是合法的JSON字符串,不能用Python dict字面量;【工具定义必须放在用户提问之前,且紧贴<|tool_start|>,中间无换行】。
调用模型并解析响应
有两种方式可以处理。
方法一:使用chatglm3-6b最新推理脚本
加载模型后,传入上述完整prompt,设置tools参数为空列表(因为工具已经硬编码进prompt了),然后调用model.chat()即可。
方法二:手动tokenizer处理(更可控)
第一步:用tokenizer.encode()对完整prompt编码,确保<|tool_start|>等特殊token被正确映射为单个id(验证方式:打印tokenizer.convert_ids_to_tokens([token_id]))。
第二步:设置generate_kwargs = {"max_new_tokens": 512, "do_sample": False, "temperature": 0.1}——温度设为0.1可以抑制无关发散,但不能为0,否则工具调用概率会坍缩为0。
第三步:捕获输出文本,用正则r'<|tool_call|>(.*)<|tool_end|>'提取工具调用块,再用json.loads()解析内部JSON。如果没匹配到这个模式,说明模型没有触发工具调用,这时候需要检查prompt中是否漏掉了<|tool_start|>,或者工具schema格式是否有误。
来源:整理自互联网
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- CodeGeeX代码补全Tab键采纳使用方法
- 时间:2026-07-25
-
- 年菲尔兹奖得主揭晓 邓煜王虹等四位数学家获奖
- 时间:2026-07-25
-
- 高德开放平台世界地图升级有哪些新变化
- 时间:2026-07-25
-
- AgentScope Java新手村16 从RAG到多路检索
- 时间:2026-07-25
-
- 转炉炼钢终点静态控制预测模型概述
- 时间:2026-07-25
-
- CSS 3D从布局到立方体实现技巧全解析
- 时间:2026-07-25
-
- Starlette版本过高导致Jinja2 500错误与unhashable dict
- 时间:2026-07-25
-
- LangGraph边详解:智能体图道路系统
- 时间:2026-07-25
精选合集
更多大家都在玩
热门话题
大家都在看
更多-
- iOS 13.5.1电池续航差是电池耗电问题吗
- 时间:2026-07-25
-
- 苹果教育优惠开启 附购买攻略
- 时间:2026-07-25
-
- 苹果iOS 14 beta 2 测试版主要更新内容:除细节变化外修复多项Bug
- 时间:2026-07-25
-
- iOS 14 beta 2 是否解决内存占用过多问题?
- 时间:2026-07-25
-
- 受欢迎的奥特曼游戏有哪些
- 时间:2026-07-25
-
- iOS 14信息应用5大更新变化
- 时间:2026-07-25
-
- iOS 14正式版上线时间公布 官方全新介绍
- 时间:2026-07-25
-
- 最新苹果iOS 14 Beta 2版本更新内容全解析与升级教程
- 时间:2026-07-25
