当前位置: 首页 > article >正文

GLM-4-9B-Chat-1M函数调用实战:自定义工具集成指南

GLM-4-9B-Chat-1M函数调用实战自定义工具集成指南想让你的AI助手不仅能聊天还能帮你查天气、订餐、分析数据吗GLM-4-9B-Chat-1M的函数调用功能就是为此而生1. 什么是函数调用为什么你需要它想象一下你有个超级聪明的助手但它只会回答问题不会实际操作。你说帮我查下北京明天的天气它只能告诉你应该上网查天气而不是直接给你结果。函数调用就是让这个助手真正动手的能力。GLM-4-9B-Chat-1M的函数调用功能让模型不仅能理解你的需求还能调用外部工具和API来完成任务。这就像给AI装上了手和脚让它从理论派变成了实干家。函数调用的核心价值能力扩展突破模型的知识截止日期获取实时信息任务自动化自动执行重复性操作提高效率系统集成连接现有业务系统打造智能工作流个性化定制根据特定需求开发专属功能2. 环境准备与快速部署2.1 基础环境要求在开始之前确保你的环境满足以下要求# 系统要求 Python 3.10 内存 32GB推荐64GB GPU显存 16GB推荐24GB # 安装核心依赖 pip install transformers4.44.0 pip install torch2.0.0 pip install accelerate pip install tiktoken2.2 模型下载与加载GLM-4-9B-Chat-1M模型文件较大约18GB建议使用git-lfs进行下载# 安装git-lfs如果尚未安装 git lfs install # 克隆模型仓库 git clone https://www.modelscope.cn/ZhipuAI/glm-4-9b-chat-1m.git # 如果下载中断可以使用以下命令继续 cd glm-4-9b-chat-1m git lfs pull2.3 快速验证安装创建一个简单的测试脚本来验证环境是否正常# test_setup.py import torch from transformers import AutoModelForCausalLM, AutoTokenizer # 加载模型和分词器 model_path ./glm-4-9b-chat-1m # 修改为你的实际路径 tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.bfloat16, device_mapauto, trust_remote_codeTrue ) print( 环境验证通过模型加载成功)3. 函数调用基础概念3.1 函数调用的工作原理函数调用其实很简单就像点外卖你告诉助手想吃什么用户提出需求助手确认订单细节模型理解需求并生成函数调用助手联系餐厅下单系统执行函数助手把餐食交给你返回结果给用户3.2 核心组件介绍函数定义告诉模型这个工具能做什么# 这是一个获取天气的函数定义 weather_function { name: get_weather, description: 获取指定城市的天气信息, parameters: { type: object, properties: { city: { type: string, description: 城市名称如北京、上海 }, date: { type: string, description: 日期格式为YYYY-MM-DD默认为今天 } }, required: [city] } }函数实现实际执行操作的代码def get_weather(city: str, date: str None): 实际获取天气的函数实现 # 这里应该是调用天气API的代码 # 为了演示我们返回模拟数据 return { city: city, date: date or 2024-01-01, weather: 晴, temperature: 25°C, humidity: 45% }4. 第一个函数调用示例让我们从一个简单的例子开始创建一个人工智能助手它可以帮你查询天气。4.1 定义天气查询函数首先我们定义天气查询的工具# weather_tool.py import json import requests def get_weather(city: str, date: str None): 获取指定城市的天气信息 实际项目中应该调用真实的天气API # 模拟API调用返回结果 weather_data { 北京: {weather: 晴, temp: 25°C, humidity: 45%}, 上海: {weather: 多云, temp: 23°C, humidity: 65%}, 广州: {weather: 雨, temp: 28°C, humidity: 85%} } if city in weather_data: result weather_data[city] return json.dumps({ city: city, date: date or 2024-01-01, weather: result[weather], temperature: result[temp], humidity: result[humidity] }) else: return json.dumps({error: f找不到城市 {city} 的天气信息}) # 函数定义供模型使用 weather_function { name: get_weather, description: 获取指定城市的天气信息, parameters: { type: object, properties: { city: { type: string, description: 城市名称如北京、上海 }, date: { type: string, description: 日期格式为YYYY-MM-DD默认为今天 } }, required: [city] } }4.2 创建函数调用对话现在让我们创建一个完整的对话示例# function_call_demo.py import torch from transformers import AutoModelForCausalLM, AutoTokenizer import json # 加载模型 model_path ./glm-4-9b-chat-1m tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.bfloat16, device_mapauto, trust_remote_codeTrue ) # 定义可用函数 functions [weather_function] def chat_with_function_call(user_input): 与模型对话支持函数调用 # 构建对话历史 messages [ {role: user, content: user_input} ] # 将函数定义传递给模型 response model.chat( tokenizer, messages, functionsfunctions, max_length2048, do_sampleTrue ) return response # 测试函数调用 if __name__ __main__: # 测试查询天气 user_query 北京今天天气怎么样 print(f用户: {user_query}) response chat_with_function_call(user_query) print(f助手: {response}) # 如果响应包含函数调用执行相应的函数 if hasattr(response, function_call) and response.function_call: func_name response.function_call[name] func_args json.loads(response.function_call[arguments]) if func_name get_weather: from weather_tool import get_weather result get_weather(**func_args) print(f函数执行结果: {result})5. 实际应用场景示例5.1 电商价格监控工具让我们创建一个更实用的例子电商价格监控工具。# price_monitor.py import json import time from datetime import datetime # 价格监控函数定义 price_monitor_function { name: monitor_product_price, description: 监控指定商品的价格变化, parameters: { type: object, properties: { product_url: { type: string, description: 商品链接URL }, target_price: { type: number, description: 目标价格当商品价格低于此价格时通知 }, check_interval: { type: integer, description: 检查间隔分钟默认30分钟 } }, required: [product_url, target_price] } } def monitor_product_price(product_url: str, target_price: float, check_interval: int 30): 监控商品价格函数 # 模拟价格获取逻辑 current_price 299.0 # 实际项目中应该从网页抓取 result { product_url: product_url, current_price: current_price, target_price: target_price, status: 监控中 if current_price target_price else 达到目标价格, next_check: f{check_interval}分钟后, timestamp: datetime.now().isoformat() } return json.dumps(result) # 添加到函数列表 functions.append(price_monitor_function)5.2 智能日程管理再创建一个日程管理功能的例子# calendar_tool.py import json from datetime import datetime, timedelta # 日程管理函数定义 calendar_function { name: manage_calendar, description: 管理个人日程安排, parameters: { type: object, properties: { action: { type: string, description: 操作类型add添加、view查看、delete删除, enum: [add, view, delete] }, event_title: { type: string, description: 事件标题 }, event_time: { type: string, description: 事件时间格式为YYYY-MM-DD HH:MM }, event_duration: { type: integer, description: 事件持续时间分钟 } }, required: [action] } } def manage_calendar(action: str, event_title: str None, event_time: str None, event_duration: int 60): 日程管理函数 # 简单的内存中日程管理实际项目应该用数据库 events [] if action add and event_title and event_time: new_event { title: event_title, time: event_time, duration: event_duration, created_at: datetime.now().isoformat() } events.append(new_event) return json.dumps({status: added, event: new_event}) elif action view: return json.dumps({status: success, events: events}) else: return json.dumps({status: error, message: 无效操作}) # 添加到函数列表 functions.append(calendar_function)6. 高级功能与最佳实践6.1 函数调用权限控制在实际应用中你可能需要对函数调用进行权限控制# permission_control.py class FunctionPermission: 函数调用权限控制类 def __init__(self): self.allowed_functions { get_weather: [public], monitor_product_price: [vip_user, admin], manage_calendar: [authenticated_user] } def check_permission(self, function_name: str, user_role: str) - bool: 检查用户是否有权限调用指定函数 if function_name not in self.allowed_functions: return False allowed_roles self.allowed_functions[function_name] return user_role in allowed_roles or public in allowed_roles # 使用示例 permission_checker FunctionPermission() user_role vip_user if permission_checker.check_permission(monitor_product_price, user_role): print(有权限调用价格监控功能) else: print(无权限调用该功能)6.2 错误处理与重试机制健壮的错误处理是生产环境的关键# error_handling.py import logging from tenacity import retry, stop_after_attempt, wait_exponential # 配置日志 logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) class FunctionCallExecutor: 函数调用执行器包含错误处理和重试机制 def __init__(self, max_retries3): self.max_retries max_retries retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def execute_function(self, func_name: str, func_args: dict): 执行函数调用包含重试机制 try: # 根据函数名找到对应的函数并执行 if func_name get_weather: from weather_tool import get_weather result get_weather(**func_args) elif func_name monitor_product_price: from price_monitor import monitor_product_price result monitor_product_price(**func_args) else: raise ValueError(f未知函数: {func_name}) return result except Exception as e: logger.error(f函数调用失败: {func_name}, 错误: {str(e)}) raise # 使用示例 executor FunctionCallExecutor() try: result executor.execute_function( get_weather, {city: 北京, date: 2024-01-01} ) print(f执行结果: {result}) except Exception as e: print(f执行失败: {str(e)})6.3 性能优化建议对于生产环境考虑以下优化策略# performance_optimization.py import asyncio from functools import lru_cache class OptimizedFunctionCall: 优化后的函数调用管理器 def __init__(self): self.function_cache {} lru_cache(maxsize100) def cached_weather(self, city: str, date: str): 带缓存的天气查询函数 # 实际实现应该调用真实的API return f{city}在{date}的天气信息 async def async_function_call(self, func_name: str, func_args: dict): 异步函数调用提高并发性能 if func_name get_weather: # 模拟异步操作 await asyncio.sleep(0.1) return self.cached_weather(func_args[city], func_args.get(date)) return None # 使用示例 async def main(): optimizer OptimizedFunctionCall() result await optimizer.async_function_call( get_weather, {city: 北京, date: 2024-01-01} ) print(result) # asyncio.run(main())7. 常见问题与解决方案在实际使用过程中你可能会遇到一些常见问题问题1模型不调用函数原因函数描述不够清晰或者模型认为不需要调用函数解决优化函数描述确保准确描述函数的功能和适用场景问题2函数参数解析错误原因参数定义不够明确或者模型理解有偏差解决提供更详细的参数描述和示例值问题3权限控制复杂原因不同用户需要不同的函数调用权限解决实现基于角色的权限控制系统问题4性能瓶颈原因函数执行时间过长或者并发请求太多解决实现缓存机制、异步处理和限流策略8. 总结通过这篇指南你应该已经掌握了GLM-4-9B-Chat-1M函数调用的核心概念和实践方法。函数调用功能真正让AI模型从知道分子变成了实干家能够真正帮你完成实际任务。实际使用中建议从小功能开始尝试逐步构建复杂的工具生态系统。记得做好错误处理和权限控制特别是在生产环境中。函数调用的可能性是无限的只要你能想到的需求几乎都可以通过合适的函数来实现。如果你在实践过程中遇到问题不妨先从简单的天气查询开始逐步扩展到更复杂的业务场景。最重要的是多动手尝试实际运行代码观察模型的行为不断调整和优化你的函数定义。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

GLM-4-9B-Chat-1M函数调用实战:自定义工具集成指南

GLM-4-9B-Chat-1M函数调用实战:自定义工具集成指南 想让你的AI助手不仅能聊天,还能帮你查天气、订餐、分析数据吗?GLM-4-9B-Chat-1M的函数调用功能就是为此而生! 1. 什么是函数调用,为什么你需要它 想象一下&#xff…...

SAP PS实战入门:从零构建你的第一个项目与WBS

1. SAP PS模块入门:为什么你需要掌握项目与WBS构建 刚接触SAP PS模块时,我完全理解那种面对复杂系统的茫然感。记得第一次接手公司ERP升级项目时,领导丢给我一句"在SAP里把项目框架搭起来",我盯着屏幕上的CJ20N事务码发…...

gte-base-zh模型服务效能报告:P99延迟<200ms、吞吐量>1200 QPS实测

gte-base-zh模型服务效能报告&#xff1a;P99延迟<200ms、吞吐量>1200 QPS实测 最近在折腾文本嵌入模型&#xff0c;想找一个既快又准的中文模型来支撑一些实时应用。试了一圈&#xff0c;发现阿里巴巴达摩院开源的gte-base-zh模型&#xff0c;配合Xinference部署&#…...

PS4存档管理终极指南:如何使用Apollo Save Tool轻松管理游戏进度

PS4存档管理终极指南&#xff1a;如何使用Apollo Save Tool轻松管理游戏进度 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 如果你是一位PlayStation 4玩家&#xff0c;一定体验过游戏存档丢失的烦恼&am…...

若依框架注册功能实战:从关闭到开启,再到自动分配房东/租客角色(Spring Boot + Vue)

若依框架注册功能深度定制&#xff1a;动态角色分配与安全配置实战 在房屋租赁系统的开发中&#xff0c;用户注册功能往往需要根据业务需求进行深度定制。若依框架作为一款优秀的权限管理系统&#xff0c;默认关闭了注册功能&#xff0c;这为开发者提供了安全基础&#xff0c;同…...

DSGE_mod开源项目深度解析:从理论模型到政策实践的高效转化工具

DSGE_mod开源项目深度解析&#xff1a;从理论模型到政策实践的高效转化工具 【免费下载链接】DSGE_mod A collection of Dynare models 项目地址: https://gitcode.com/gh_mirrors/ds/DSGE_mod 价值定位&#xff1a;重新定义宏观经济研究的生产方式 为何选择DSGE_mod而…...

WuliArt Qwen-Image Turbo入门实战:用Qwen-Image Turbo生成LOGO初稿

WuliArt Qwen-Image Turbo入门实战&#xff1a;用Qwen-Image Turbo生成LOGO初稿 想快速设计一个LOGO&#xff0c;但没灵感、没时间、也没预算请设计师&#xff1f;今天&#xff0c;我们来试试一个全新的解决方案&#xff1a;用AI文生图模型&#xff0c;几分钟内生成高质量的LO…...

电视直播3 1.0 | 流畅好用的电视直播应用,内置多种频道,包括央视、卫视、地方台、斗鱼轮播和电影轮播

电视直播3是一款流畅好用的电视直播应用&#xff0c;内置多种频道&#xff0c;涵盖央视、卫视、地方电视台、斗鱼轮播和电影轮播。该应用具备高清画质&#xff0c;能让用户享受稳定且高质量的观看体验。其特点为&#xff1a;拥有多种内置频道&#xff0c;满足不同用户的观看需求…...

springboot+nodejs+vue3的社区桶装饮用水预购管理系统的设计与实现

目录技术栈选型与分工系统模块划分开发阶段安排部署与运维方案项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选型与分工 后端采用Spring Boot框架&#xff0c;负责用户认证、订单管理、支付接口对接等核心业务逻辑。数…...

springboot+nodejs+vue3的社区外来人员登记管理系统 流动人口管理系统

目录技术栈选型与分工系统模块划分关键实现步骤安全防护措施扩展性设计项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选型与分工 后端框架&#xff1a;Spring Boot 3.x&#xff08;Java 17&#xff09;提供RESTful API…...

AI人脸隐私卫士解决社交照片隐私泄露:自动识别打码实战

AI人脸隐私卫士解决社交照片隐私泄露&#xff1a;自动识别打码实战 关键词&#xff1a;AI人脸打码、MediaPipe、隐私保护、图像脱敏、本地离线处理、动态模糊、WebUI 摘要&#xff1a;在社交媒体分享、家庭相册整理、公共场合照片发布时&#xff0c;你是否担心照片中的人脸信…...

YOLOv5训练时卡在下载Arial.ttf字体?手把手教你两种快速修复方法(附代码)

YOLOv5训练卡在Arial.ttf下载&#xff1f;两种高效解决方案深度解析 当你满怀期待地启动YOLOv5训练脚本&#xff0c;却在控制台看到"Arial.ttf下载失败"的报错时&#xff0c;那种感觉就像赛车手在起跑线上突然发现油箱漏油。这个问题看似微不足道&#xff0c;却能让…...

HelloDrum:嵌入式电子鼓高精度压电传感库

1. HelloDrum 库概述&#xff1a;面向嵌入式电子鼓开发的高精度压电传感框架 HelloDrum 是一个专为 Arduino 生态设计的开源压电传感库&#xff08;MIT 许可&#xff09;&#xff0c;其核心目标是将物理敲击动作可靠、低延迟地转化为标准 MIDI 事件&#xff0c;从而构建功能完…...

嵌入式Bug响应系统:硬件化调试反馈设计

1. 项目概述“当程序员听到Bug后……”并非一个传统意义上的嵌入式硬件功能项目&#xff0c;而是一类以工程师文化为内核、以硬件为表达载体的趣味性技术实践。它不追求性能指标或商用落地&#xff0c;而是通过具象化的电路行为——如LED爆闪、蜂鸣器急促鸣响、LCD显示夸张文案…...

Qwen-Image镜像惊艳表现:手写公式图像识别→LaTeX代码+解题思路双输出

Qwen-Image镜像惊艳表现&#xff1a;手写公式图像识别→LaTeX代码解题思路双输出 1. 开箱即用的专业级AI环境 当我在RTX 4090D上首次启动这个定制镜像时&#xff0c;最直观的感受就是"专业"二字。这个基于Qwen-Image优化的环境&#xff0c;预装了完整的CUDA 12.4工…...

造相-Z-Image实战:GitHub开源项目协作开发指南

造相-Z-Image实战&#xff1a;GitHub开源项目协作开发指南 1. 开源协作第一步&#xff1a;理解Z-Image的GitHub生态 Z-Image作为通义实验室推出的开源图像生成模型&#xff0c;其GitHub生态远不止于一个代码仓库。当你打开Tongyi-MAI/Z-Image这个仓库时&#xff0c;看到的是一…...

Node.js v16 版本安装

查看自己电脑上有没有node.js 1.打开命令提示符或终端窗口(windows上是cmd,macOS和Linux上是终端)。 2.在命令提示符或终端窗口中输入以下命令&#xff1a;node -v 3.如果你已经安装了Node.js,你将看到一个版本号&#xff0c;例如v14.15.4。 4.如果你看到一个错误消息或者什么…...

AI驱动的企业创新项目组合管理:风险平衡与资源优化

AI驱动的企业创新项目组合管理&#xff1a;风险平衡与资源优化关键词&#xff1a;AI、企业创新项目组合管理、风险平衡、资源优化、项目评估摘要&#xff1a;本文聚焦于AI驱动下的企业创新项目组合管理&#xff0c;深入探讨如何实现风险平衡与资源优化。首先介绍了相关背景知识…...

自动化推理路径评估:减少人工干预的新方法

自动化推理路径评估:减少人工干预的新方法关键词&#xff1a;自动化推理路径评估、人工干预、新方法、推理算法、应用场景摘要&#xff1a;本文聚焦于自动化推理路径评估这一关键领域&#xff0c;旨在探讨减少人工干预的新方法。首先介绍了研究的背景&#xff0c;包括目的、预期…...

GLM-Image文生图新手教程:5个高质量提示词模板(含中英文双语示例)

GLM-Image文生图新手教程&#xff1a;5个高质量提示词模板&#xff08;含中英文双语示例&#xff09; 你是不是也遇到过这样的情况&#xff1a;打开GLM-Image的Web界面&#xff0c;输入“一只猫”&#xff0c;结果生成了一只看起来像外星生物的奇怪东西&#xff1f;或者输入“…...

深入解析nn.Linear():二维与三维张量的高效处理

1. 揭开nn.Linear()的神秘面纱 第一次接触PyTorch的nn.Linear()时&#xff0c;我完全被这个看似简单的函数搞懵了。官方文档只说它是"对输入数据做线性变换"&#xff0c;但具体怎么变换、能处理哪些数据却语焉不详。直到在实际项目中踩了几个坑&#xff0c;我才真正理…...

知识博主看过来:用AIVideo将复杂概念变成生动解说视频

知识博主看过来&#xff1a;用AIVideo将复杂概念变成生动解说视频 你是不是经常遇到这样的困扰&#xff1a;精心准备的知识点&#xff0c;用文字写出来总觉得不够直观&#xff0c;想做成视频又卡在了脚本、画面、配音、剪辑这些专业门槛上&#xff1f;一个复杂的科学原理、一个…...

pgpool-II配置避坑指南:从健康检查失败到节点恢复的完整排错流程

pgpool-II实战排错手册&#xff1a;从健康检查到节点恢复的深度解析 1. 健康检查失败的典型场景与诊断方法 健康检查是pgpool-II维持高可用的核心机制&#xff0c;但也是最容易出错的环节之一。在实际运维中&#xff0c;我们经常遇到health_check_timeout报错&#xff0c;这背后…...

UE4开发者必备:这些Console命令让你的渲染调试效率翻倍(附快捷键大全)

UE4渲染调试实战&#xff1a;Console命令与快捷键的高效组合指南 在虚幻引擎4的开发过程中&#xff0c;渲染调试往往是项目优化的关键环节。每当画面出现异常或性能骤降时&#xff0c;开发者需要快速定位问题根源。传统的手动排查方式不仅耗时费力&#xff0c;还容易遗漏关键细…...

从Bhattacharyya距离到ProbIoU:深入解析YOLOv8-OBB中的旋转框相似度度量

1. 旋转框检测的挑战与度量标准演进 在目标检测领域&#xff0c;旋转框&#xff08;Oriented Bounding Box, OBB&#xff09;相比水平框能更精确地描述物体的空间位置和姿态。但旋转框的相似度度量一直是技术难点&#xff0c;传统IoU&#xff08;交并比&#xff09;在旋转框场景…...

【物联网】电子元器件实战指南:电阻、电容、电感、二极管在智能硬件中的关键应用

1. 电阻在物联网设备中的关键作用 第一次接触电阻是在大学电子实验课上&#xff0c;当时用面包板搭建LED电路时&#xff0c;老师反复强调"一定要串联电阻"。结果我偷懒直接接了5V电源&#xff0c;瞬间"啪"的一声&#xff0c;价值20元的LED就冒烟了——这个…...

ROS2性能优化指南:从Fast DDS切换到Cyclone DDS的完整流程与避坑技巧

ROS2性能跃迁实战&#xff1a;从Fast DDS到Cyclone DDS的深度迁移指南 当机器人操作系统从ROS1演进到ROS2时&#xff0c;数据分发服务&#xff08;DDS&#xff09;作为核心通信中间件成为性能优化的关键战场。在经历了Fast DDS的稳定运行后&#xff0c;越来越多的开发者发现当系…...

WSL2 子系统 SSH 连接终极指南:从零配置到 MobaXterm 完美适配

WSL2 子系统 SSH 连接终极指南&#xff1a;从零配置到 MobaXterm 完美适配 对于开发者而言&#xff0c;Windows Subsystem for Linux 2&#xff08;WSL2&#xff09;已经成为日常开发不可或缺的工具。它提供了接近原生Linux的性能&#xff0c;同时又能与Windows系统无缝集成。然…...

Sap2000——Edit Frame:框架编辑功能实战解析

1. Sap2000框架编辑功能入门指南 第一次打开Sap2000的框架编辑功能时&#xff0c;我完全被那些专业术语搞懵了。什么分割、延长、合并、修剪&#xff0c;听起来像是木工活而不是结构分析。但经过几个项目的实战&#xff0c;我发现这些功能简直是建模神器&#xff0c;能帮我们节…...

ESP32/ESP8266轻量WiFi配置管理器(支持OLED反馈)

1. 项目概述 WiFiConnect 是一款专为 ESP8266 和 ESP32 系统设计的轻量级、可扩展式 WiFi 配置管理器&#xff08;WiFi Manager&#xff09;&#xff0c;其核心目标是解决嵌入式设备在无预置网络环境下的首次联网与参数持久化问题。与通用型 WiFiManager 库不同&#xff0c;Wi…...