GLM-4-9B-Chat-1M代码实例:Python调用Function Call执行Shell命令实测

张开发
2026/4/13 16:19:17 15 分钟阅读

分享文章

GLM-4-9B-Chat-1M代码实例:Python调用Function Call执行Shell命令实测
GLM-4-9B-Chat-1M代码实例Python调用Function Call执行Shell命令实测1. 引言当AI模型学会执行系统命令想象一下你有一个AI助手不仅能理解你的问题还能直接帮你执行系统命令、处理文件、分析数据。这不再是科幻电影的场景而是GLM-4-9B-Chat-1M模型带来的现实能力。GLM-4-9B-Chat-1M是智谱AI推出的超长上下文对话模型拥有90亿参数和惊人的100万token上下文长度约200万汉字。这意味着它可以一次性处理整本《战争与和平》这样的长篇著作同时保持对话连贯性和精准理解。最令人兴奋的是这个模型支持Function Call功能可以直接调用Python代码执行系统命令。本文将带你一步步实现这个功能让你亲眼看到AI如何成为你的命令行助手。2. 环境准备与模型部署2.1 硬件要求与选择GLM-4-9B-Chat-1M对硬件要求相对友好提供了多种部署选项FP16精度需要约18GB显存适合RTX 4090、A100等高端显卡INT4量化仅需9GB显存RTX 3090/4090即可流畅运行CPU推理支持llama.cpp的GGUF格式适合没有高端显卡的用户对于大多数开发者建议使用INT4量化版本在性能和资源消耗之间取得最佳平衡。2.2 快速安装与启动使用vLLM进行部署是最简单的方式只需几条命令# 安装vLLM pip install vllm # 启动模型服务 python -m vllm.entrypoints.openai.api_server \ --model THUDM/glm-4-9b-chat-1m \ --dtype auto \ --gpu-memory-utilization 0.9 \ --max-model-len 1048576 \ --enable-chunked-prefill \ --max-num-batched-tokens 8192等待几分钟后模型服务就会在本地8000端口启动。你可以通过API调用来与模型交互。3. Function Call功能详解3.1 什么是Function CallFunction Call是GLM-4-9B-Chat-1M的核心功能之一它允许模型在对话过程中调用预定义的外部函数。当模型识别到用户请求需要执行特定操作时它会生成相应的函数调用请求而不是直接给出回答。这种机制的好处很明显保持对话的自然流畅确保系统操作的安全性只执行预定义的函数结合AI的理解能力和程序的执行能力3.2 支持的操作类型GLM-4-9B-Chat-1M通过Function Call可以支持多种系统操作文件操作创建、读取、写入、删除文件系统命令执行Shell命令获取执行结果数据处理运行Python代码处理数据网络请求调用API获取外部信息自定义工具任何可以通过Python函数实现的操作4. Python调用Function Call实战4.1 基础API调用设置首先我们需要设置Python环境来调用GLM-4-9B-Chat-1M的APIimport openai import json import subprocess import os # 设置API基础信息 client openai.OpenAI( api_keyEMPTY, base_urlhttp://localhost:8000/v1 ) # 定义可用的函数工具 tools [ { type: function, function: { name: execute_shell_command, description: 执行Shell命令并返回结果, parameters: { type: object, properties: { command: { type: string, description: 要执行的Shell命令 } }, required: [command] } } } ]4.2 实现Shell命令执行函数接下来我们实现具体的命令执行函数def execute_shell_command(command): 执行Shell命令的安全封装函数 try: # 安全检查禁止执行危险命令 dangerous_commands [rm -rf, mkfs, dd, chmod, /dev, |] for dangerous in dangerous_commands: if dangerous in command: return 错误禁止执行危险命令 # 执行命令 result subprocess.run( command, shellTrue, capture_outputTrue, textTrue, timeout30 ) # 返回执行结果 if result.returncode 0: return result.stdout else: return f命令执行失败{result.stderr} except subprocess.TimeoutExpired: return 错误命令执行超时 except Exception as e: return f错误{str(e)}4.3 完整的对话处理流程现在我们创建一个完整的对话处理函数def chat_with_glm4(message): 与GLM-4-9B-Chat-1M进行对话支持Function Call # 发送用户消息 response client.chat.completions.create( modelglm-4-9b-chat-1m, messages[{role: user, content: message}], toolstools, tool_choiceauto, max_tokens4096 ) # 检查是否需要执行函数 response_message response.choices[0].message tool_calls response_message.tool_calls if tool_calls: # 处理函数调用 for tool_call in tool_calls: function_name tool_call.function.name function_args json.loads(tool_call.function.arguments) if function_name execute_shell_command: # 执行Shell命令 command function_args[command] print(f执行命令: {command}) # 调用执行函数 result execute_shell_command(command) # 将结果发送回模型 second_response client.chat.completions.create( modelglm-4-9b-chat-1m, messages[ {role: user, content: message}, response_message, { role: tool, tool_call_id: tool_call.id, content: result } ], toolstools ) return second_response.choices[0].message.content else: # 直接返回模型响应 return response_message.content5. 实际应用案例演示5.1 文件操作示例让我们试试让AI帮我们查看当前目录的文件# 查看当前目录文件 response chat_with_glm4(请帮我列出当前目录下的所有Python文件) print(AI响应:, response)模型可能会返回类似这样的结果执行命令: ls *.py 当前目录下的Python文件有test.py, main.py, utils.py5.2 系统信息查询查询系统信息也是一个常见需求# 查看系统信息 response chat_with_glm4(我想知道当前系统的内存使用情况) print(AI响应:, response)可能的执行过程执行命令: free -h total used free shared buff/cache available Mem: 62Gi 5.2Gi 54Gi 0.0Ki 2.8Gi 56Gi Swap: 2.0Gi 0.0Ki 2.0Gi5.3 数据处理与分析AI还可以帮我们处理数据# 数据处理示例 response chat_with_glm4(请帮我统计当前目录下所有文件的行数总和) print(AI响应:, response)模型可能会执行执行命令: wc -l $(find . -type f -name *.py) | tail -1 总行数: 15426. 安全注意事项与最佳实践6.1 安全限制措施在使用Function Call执行Shell命令时安全是首要考虑因素# 增强的安全检查函数 def safe_command_check(command): 增强的命令安全检查 # 黑名单绝对禁止的命令 blacklist [ rm -rf, mkfs, dd if, chmod, /dev/, |, , sudo, su -, passwd, shutdown, reboot ] # 白名单相对安全的命令 whitelist [ ls, cat, grep, find, wc, echo, pwd, df, free, ps, top, du, head, tail ] # 检查黑名单 for dangerous in blacklist: if dangerous in command: return False, 包含危险命令 # 检查是否在白名单中可选根据需求开启 # safe_command False # for safe in whitelist: # if command.startswith(safe): # safe_command True # break # # if not safe_command: # return False, 不在白名单中的命令 return True, 安全6.2 执行环境隔离为了进一步保证安全建议在隔离环境中执行命令def execute_in_sandbox(command): 在沙箱环境中执行命令 # 使用docker容器执行命令需要提前准备沙箱镜像 sandbox_command fdocker run --rm -v $(pwd):/workspace sandbox-image {command} try: result subprocess.run( sandbox_command, shellTrue, capture_outputTrue, textTrue, timeout60 ) return result.stdout except Exception as e: return f沙箱执行错误: {str(e)}7. 性能优化建议7.1 批量处理优化如果需要处理多个命令建议使用批量处理def batch_process_commands(commands): 批量处理多个命令 results [] for command in commands: response chat_with_glm4(f请执行命令: {command}) results.append(response) return results # 示例批量获取系统信息 commands [ 查看当前时间, 查看磁盘使用情况, 查看运行进程, 查看网络连接 ] results batch_process_commands(commands) for i, result in enumerate(results): print(f命令 {i1} 结果: {result})7.2 缓存常用结果对于频繁查询的信息可以添加缓存机制from functools import lru_cache lru_cache(maxsize100) def cached_command_execution(command): 带缓存的命令执行 return execute_shell_command(command) # 在chat_with_glm4函数中使用缓存版本 # 替换 execute_shell_command(command) 为 cached_command_execution(command)8. 总结通过本文的实践我们看到了GLM-4-9B-Chat-1M模型在Function Call方面的强大能力。这个90亿参数的模型不仅能够处理长达100万token的上下文还能智能地调用外部函数执行实际任务。关键收获部署简单使用vLLM可以快速部署模型服务功能强大通过Function Call可以执行各种系统命令安全可控通过适当的限制措施确保系统安全实用性强可以应用于文件操作、系统监控、数据处理等多个场景下一步建议尝试扩展更多类型的工具函数如文件编辑、API调用等探索在特定领域的应用如运维自动化、数据分析等考虑结合其他AI服务创建更复杂的工作流GLM-4-9B-Chat-1M的出现让单卡运行超长上下文模型成为现实为开发者提供了强大的AI助手解决方案。无论是处理长文档还是执行系统任务这个模型都展现出了令人印象深刻的能力。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章