ChatGLM3-6B实战教程:本地部署+工具调用+代码执行

张开发
2026/4/10 7:20:41 15 分钟阅读

分享文章

ChatGLM3-6B实战教程:本地部署+工具调用+代码执行
ChatGLM3-6B实战教程本地部署工具调用代码执行1. 引言想不想在本地电脑上拥有一个属于自己的、功能强大的AI助手它能和你流畅对话帮你写代码、分析文档甚至还能调用工具、执行代码来帮你解决复杂问题。今天我们就来手把手教你部署和玩转ChatGLM3-6B特别是它最酷的工具调用和代码执行功能。ChatGLM3-6B是智谱AI和清华大学联合推出的新一代开源对话模型。相比前代它最大的亮点就是原生支持了工具调用Function Call和代码解释器Code Interpreter。这意味着它不再只是一个“聊天机器人”而是一个能真正“动手”帮你干活的智能体。本教程将带你从零开始在本地环境或云端服务器上部署一个基于Streamlit重构的、稳定高效的ChatGLM3-6B对话系统。你将学会如何让它帮你查询天气、计算数学题、分析数据图表甚至运行Python代码来解决实际问题。整个过程清晰明了即使你是AI部署的新手也能跟着一步步搞定。2. 环境准备与快速部署在开始之前我们先明确目标部署一个集成了对话、工具调用和代码执行功能的ChatGLM3-6B Web应用。我们将使用一个经过深度优化、基于Streamlit的镜像它解决了常见的环境冲突问题部署起来更简单、运行更稳定。2.1 核心优势为什么选择这个方案在深入部署步骤前我们先看看这个方案解决了哪些痛点零依赖冲突传统部署常因transformers、torch等库版本不匹配而报错。本方案锁定了transformers4.40.2等核心组件的“黄金版本”确保开箱即用一次成功。极速交互体验弃用了相对笨重的Gradio改用轻量级的Streamlit框架。界面加载和响应速度大幅提升对话体验如丝般顺滑。模型常驻内存通过st.cache_resource技术模型只需在首次启动时加载一次之后刷新页面或进行多轮对话都无需重新加载真正做到“即开即聊”。超长上下文基于ChatGLM3-6B-32K版本拥有32K的上下文长度。这意味着它可以处理非常长的文档、代码文件或多轮深度对话不会出现“健忘”的情况。数据完全私有所有计算都在你的本地或服务器上进行对话内容、上传的文件、生成的代码绝不会上传到云端隐私安全有保障。2.2 一键启动最简单的部署方式如果你使用的是提供了预置镜像的环境例如一些云服务平台部署会变得异常简单。通常只需要以下几个步骤获取镜像在对应的平台找到名为ChatGLM3-6B或类似描述的镜像。创建实例选择该镜像并创建一个新的计算实例。建议配置至少16GB显存的GPU如RTX 4090、V100等以获得流畅体验。启动应用实例创建成功后在应用管理或服务页面找到启动入口。通常点击一个“HTTP访问”或“打开WebUI”的按钮即可。开始对话浏览器会自动打开一个Web界面这就是你的ChatGLM3-6B助手了。这种方式省去了手动安装环境、下载模型、配置依赖的所有步骤是上手最快的方法。2.3 手动部署从零开始搭建如果你想在自己的Linux服务器或本地有GPU的机器上部署可以按照以下步骤操作。我们将使用conda来管理Python环境。步骤一准备Python环境# 1. 创建并激活一个新的conda环境Python 3.10是一个稳定的选择 conda create -n chatglm3-demo python3.10 -y conda activate chatglm3-demo # 2. 安装PyTorch请根据你的CUDA版本到PyTorch官网选择对应命令 # 例如对于CUDA 11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118步骤二下载项目代码与模型# 1. 克隆本项目代码仓库使用国内镜像加速 git clone https://gitee.com/aqua/ChatGLM3-streamlit-optimized.git cd ChatGLM3-streamlit-optimized # 2. 下载ChatGLM3-6B-32K模型从ModelScope镜像站速度较快 # 确保已安装git-lfs (git lfs install) git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b-32k.git ./model步骤三安装项目依赖关键的一步是安装锁定版本的依赖这是稳定运行的保证。pip install -r requirements.txt # requirements.txt 核心内容示例 # streamlit1.28.0 # transformers4.40.2 # torch2.0.0 # sentencepiece # protobuf # jupyter-client # 用于代码执行功能步骤四启动Web应用# 确保在项目根目录下且conda环境已激活 streamlit run app/main.py --server.port 7860 --server.address 0.0.0.0启动后终端会显示一个本地URL如http://localhost:7860。在浏览器中打开它你就能看到ChatGLM3-6B的交互界面了。3. 功能详解与上手实战部署成功后我们来看看这个强大的助手具体能做什么。Web界面通常简洁明了主要就是一个输入框和一个对话区域。但它的内核拥有三种强大的模式。3.1 模式一智能对话 (Chat)这是最基本也是最常用的模式。你可以像和真人聊天一样向它提问。日常问答 “介绍一下光合作用的过程。”内容创作 “帮我写一封申请实习的邮件正文。”文本分析 “总结一下我刚刚粘贴的这篇长文章的核心观点。”编程答疑 “Python里staticmethod装饰器有什么用”得益于32K的长上下文你可以持续进行多轮对话它能够很好地记住之前的聊天内容。试试先让它写一个Python函数然后紧接着说“为这个函数添加类型注解和文档字符串”看看它是否能理解你的意图。3.2 模式二工具调用 (Tool Calling)这是ChatGLM3-6B的“杀手锏”功能。模型可以理解你的自然语言指令并自动调用预设的工具函数来完成任务。系统内置了一些常用工具例如get_weather 查询指定城市的天气。你输入“上海今天天气怎么样”模型会思考用户需要天气信息我应该调用get_weather工具参数是city“上海”。然后系统会执行这个工具函数可能是调用一个天气API并将结果返回给模型。模型最后用友好的语言将天气情况组织成一段话回复给你“上海今天晴转多云气温15-22摄氏度东风2级...”calculate 执行数学计算。你输入“计算一下345乘以678再加上123除以4的结果。”模型会识别出这是一个计算任务调用calculate工具传入表达式。工具计算出结果后模型再告诉你答案。如何体验在对话框中直接尝试以下指令“帮我查一下北京和广州明天的天气然后对比一下。” “计算一下半径为5的圆的面积。”你会发现模型回复中可能会包含类似json {“name”: “get_weather”, “parameters”: {“city”: “北京”}}这样的中间思考过程取决于界面设置然后才给出最终答案。这展示了它“思考-行动”的推理链条。3.3 模式三代码执行 (Code Interpreter)这是最令人兴奋的功能。模型可以在一个安全的、沙盒化的Jupyter内核中动态编写并执行Python代码来解决复杂问题并将执行结果返回。它能做什么数据分析与可视化你上传一个CSV文件然后说“分析一下这个销售数据画出每月销售额的趋势图。”符号计算“求函数 f(x) x^2 * sin(x) 的导数。”文件处理“读取我刚上传的log.txt文件统计一下ERROR级别日志出现的次数。”解决复杂逻辑问题“有一个列表[12, 45, 9, 27, 33]请找出所有质数并计算它们的和。”实战案例绘制正弦波在输入框中告诉模型“请用matplotlib绘制一个从0到4π的正弦波图像并添加网格和标题。”模型会理解你的需求在后台生成类似下面的代码并执行import numpy as np import matplotlib.pyplot as plt x np.linspace(0, 4*np.pi, 1000) y np.sin(x) plt.figure(figsize(10, 6)) plt.plot(x, y, label‘sin(x)’, color‘blue’) plt.title(‘Sine Wave from 0 to 4π’) plt.xlabel(‘x’) plt.ylabel(‘sin(x)’) plt.grid(True, which‘both’, linestyle‘--’, alpha0.7) plt.legend() plt.show()执行成功后图像会直接显示在对话流中。整个过程完全自动化你只需要提出需求。安全提示代码执行通常在严格受限的沙盒环境中进行以防止执行危险命令。但为了绝对安全请勿在不可信的网络环境中开放此功能。4. 进阶技巧与自定义当你熟悉了基本操作后可以尝试一些进阶玩法让这个助手更贴合你的个人需求。4.1 如何注册自定义工具系统内置的工具可能不够用。比如你想让它能查询股票价格、控制你的智能家居或者调用公司内部API。这时你可以自定义工具。工具本质上就是一个Python函数加上一些描述信息。项目通常有一个tool_registry.py或类似的文件。示例添加一个“查询时间”的工具找到工具注册文件例如app/tools.py。添加一个新的工具函数from datetime import datetime import pytz # 需要先安装 pip install pytz def get_current_time(timezone: str “Asia/Shanghai”): “”” 获取指定时区的当前时间。 Args: timezone (str): 时区名称例如 ‘Asia/Shanghai’ ‘America/New_York’。默认为 ‘Asia/Shanghai’。 Returns: str: 格式化后的当前时间字符串。 “”” try: tz pytz.timezone(timezone) current_time datetime.now(tz) return current_time.strftime(“%Y-%m-%d %H:%M:%S %Z%z”) except pytz.exceptions.UnknownTimeZoneError: return f“错误未知的时区 ‘{timezone}’。请提供有效的时区名称如 ‘UTC’ ‘Asia/Tokyo’。”将这个函数注册到工具列表中。通常项目有一个TOOL_REGISTRY的列表你需要按照格式添加TOOL_REGISTRY [ … # 其他已有工具 { “name”: “get_current_time”, “description”: “获取指定时区的当前日期和时间。”, “parameters”: { “type”: “object”, “properties”: { “timezone”: { “type”: “string”, “description”: “时区名称例如 ‘Asia/Shanghai’ ‘UTC’。默认为 ‘Asia/Shanghai’。” } }, “required”: [] }, “function”: get_current_time # 指向上面定义的函数 } ]重启你的Streamlit应用。现在你就可以问“现在纽约是几点” 模型会自动调用你新添加的工具来回答。4.2 优化使用体验的小技巧清晰的指令对于复杂任务拆分成步骤或提供更详细的背景信息效果会更好。例如与其说“分析数据”不如说“请分析sales.csv文件计算每个季度的总销售额和同比增长率并用柱状图展示”。系统提示词你可以在对话开始时通过一个“系统指令”来设定AI的角色和行为模式。例如输入“请你扮演一个严谨的Python代码审查专家。我将给你代码你指出其中的bug、坏味道和改进建议。” 这能让后续的对话更符合你的预期。利用上下文进行多轮对话时可以引用之前的对话内容。例如“关于我们刚才讨论的那个数据可视化方案用折线图是不是比饼图更好为什么”处理错误如果代码执行出错模型有时会尝试分析错误信息并修正代码。你可以把错误信息也反馈给它比如“刚才的代码报了一个KeyError错误信息是…请修正它。”5. 总结通过本教程你已经成功在本地部署了一个功能强大、响应迅速的ChatGLM3-6B智能助手。我们不仅实现了基础的对话功能更重要的是解锁了它的两大核心进阶能力工具调用和代码执行。回顾一下关键收获部署变简单基于Streamlit的优化方案避免了恼人的环境冲突提供了“一次加载、常驻内存”的流畅体验。功能很强大你的AI助手从此不再只是“动口”还能“动手”。它能主动调用工具获取外部信息也能在安全沙箱中运行代码完成数据分析、图表绘制、复杂计算等实际任务。扩展性极佳通过自定义工具注册你可以轻松地将它与你自己的业务系统、API或数据源连接起来打造一个专属的智能工作流引擎。无论是用于学习编程、辅助数据分析、自动化处理文档还是作为个人知识库的交互入口本地部署的ChatGLM3-6B都是一个隐私安全、功能全面且高度可定制的选择。现在就打开你的浏览器开始和你的私人AI助手一起探索和创造吧。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章