GLM-4工具调用微调数据构建指南
2025-06-03 15:37:43作者:瞿蔚英Wynne
在GLM-4项目中,工具调用(Tool Calling)是一项重要功能,它允许模型根据用户需求动态调用外部工具并返回结果。本文将详细介绍如何构建工具调用的微调数据,帮助开发者更好地理解和应用这一功能。
工具调用微调数据的基本结构
工具调用的微调数据采用JSON格式,主要包含以下几个部分:
- 系统消息(system):定义可用的工具列表及其参数规范
 - 用户消息(user):用户的输入或问题
 - 助手响应(assistant):模型生成的工具调用请求
 - 观察结果(observation):工具执行后返回的结果
 - 最终响应(assistant):模型基于工具结果生成的最终回答
 
单工具调用示例
以下是一个天气查询工具的完整微调数据示例:
{
    "messages":[
        {
            "role": "system",
            "content": null,
            "tools": [
                {
                    "type": "function",
                    "function": {
                        "name": "weather",
                        "description": "该工具只能得到指定城市的天气信息",
                        "parameters": {
                            "type": "object",
                            "properties": {
                                "city": {
                                    "description": "城市名称",
                                    "type": "string"
                                }
                            },
                            "required": ["city"]
                        }
                    }
                }
            ]
        },
        {
            "role": "user",
            "content": "今天深圳天气怎么样"
        },
        {
            "role": "assistant",
            "content": 'weather\n{"city": "深圳"}'
        },
        {
            "role": "observation",
            "content": "city: 深圳, weather: 晴 temperature: 17.0℃,humidity: 49.0%,winddirection: 北,windpower: ≤3"
        },
        {
            "role": "assistant",
            "content": "今天深圳的天气预报显示为晴,气温约为17.0℃,相对湿度为49.0%,风向为北风,风力较小,不超过3级。"
        }
    ]
}
多工具调用的处理
当系统中有多个工具时,微调数据的构建需要注意以下几点:
- 工具列表定义:在system消息中列出所有可用工具及其参数规范
 - 工具选择逻辑:根据用户问题选择最合适的工具进行调用
 - 结果整合:可能需要组合多个工具的结果来回答复杂问题
 
多工具场景下的微调数据示例如下:
{
    "messages":[
        {
            "role": "system",
            "content": null,
            "tools": [
                {
                    "type": "function",
                    "function": {
                        "name": "weather",
                        "description": "获取城市天气信息",
                        "parameters": {...}
                    }
                },
                {
                    "type": "function",
                    "function": {
                        "name": "purchase_order",
                        "description": "解析采购订单信息",
                        "parameters": {...}
                    }
                }
            ]
        },
        {
            "role": "user",
            "content": "深圳今天的天气如何?另外请帮我解析这个采购订单..."
        },
        {
            "role": "assistant",
            "content": 'weather\n{"city": "深圳"}\npurchase_order\n{...}'
        },
        {
            "role": "observation",
            "content": "weather_result:..., purchase_order_result:..."
        },
        {
            "role": "assistant",
            "content": "深圳今天的天气...关于采购订单..."
        }
    ]
}
微调数据构建的最佳实践
- 工具描述清晰:确保每个工具的描述准确说明其功能和限制
 - 参数规范完整:明确定义每个参数的名称、类型、描述和是否必需
 - 结果格式统一:工具返回的结果应采用一致的格式,便于模型解析
 - 对话流程完整:确保从用户问题到最终回答的完整对话流程
 - 错误处理考虑:考虑工具调用失败时的处理方式
 
总结
GLM-4的工具调用功能为模型赋予了更强的实用能力。通过精心构建微调数据,开发者可以训练出能够准确理解用户意图、正确调用工具并生成有用回答的模型。本文提供的示例和最佳实践将帮助开发者更好地应用这一功能,构建更强大的AI应用。
登录后查看全文 
热门项目推荐
相关项目推荐
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00- DDeepSeek-OCRDeepSeek-OCR是一款以大语言模型为核心的开源工具,从LLM视角出发,探索视觉文本压缩的极限。Python00
 
MiniCPM-V-4_5MiniCPM-V 4.5 是 MiniCPM-V 系列中最新且功能最强的模型。该模型基于 Qwen3-8B 和 SigLIP2-400M 构建,总参数量为 80 亿。与之前的 MiniCPM-V 和 MiniCPM-o 模型相比,它在性能上有显著提升,并引入了新的实用功能Python00
HunyuanWorld-Mirror混元3D世界重建模型,支持多模态先验注入和多任务统一输出Python00
MiniMax-M2MiniMax-M2是MiniMaxAI开源的高效MoE模型,2300亿总参数中仅激活100亿,却在编码和智能体任务上表现卓越。它支持多文件编辑、终端操作和复杂工具链调用Jinja00
Spark-Scilit-X1-13B科大讯飞Spark Scilit-X1-13B基于最新一代科大讯飞基础模型,并针对源自科学文献的多项核心任务进行了训练。作为一款专为学术研究场景打造的大型语言模型,它在论文辅助阅读、学术翻译、英语润色和评论生成等方面均表现出色,旨在为研究人员、教师和学生提供高效、精准的智能辅助。Python00
GOT-OCR-2.0-hf阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00- HHowToCook程序员在家做饭方法指南。Programmer's guide about how to cook at home (Chinese only).Dockerfile014
 
Spark-Chemistry-X1-13B科大讯飞星火化学-X1-13B (iFLYTEK Spark Chemistry-X1-13B) 是一款专为化学领域优化的大语言模型。它由星火-X1 (Spark-X1) 基础模型微调而来,在化学知识问答、分子性质预测、化学名称转换和科学推理方面展现出强大的能力,同时保持了强大的通用语言理解与生成能力。Python00- PpathwayPathway is an open framework for high-throughput and low-latency real-time data processing.Python00
 
项目优选
收起
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
278
2.57 K
deepin linux kernel
C
24
6
React Native鸿蒙化仓库
JavaScript
223
302
Ascend Extension for PyTorch
Python
105
135
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
599
164
暂无简介
Dart
568
127
一个用于服务器应用开发的综合工具库。
- 零配置文件
- 环境变量和命令行参数配置
- 约定优于配置
- 深刻利用仓颉语言特性
- 只需要开发动态链接库,fboot负责加载、初始化并运行。
Cangjie
261
24
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.03 K
607
仓颉编译器源码及 cjdb 调试工具。
C++
119
103
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.02 K
447