大模型人工智能微调本地部署AI AgentRAG【免费下载链接】ChatGLM3ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型项目地址https://gitcode.com/gh_mirrors/ch/ChatGLM3点击查看免费下载ChatGLM3 是智谱 AI 与清华大学 KEG 实验室联合发布的对话预训练模型系列本指南以其开源代表模型 ChatGLM3-6B 为线索系统梳理该模型在 README.md 及仓库各 Demo 子目录中沉淀的完整使用链路从全新的 ChatGLM3 对话格式PROMPT.md与模型加载到工具调用、代码解释器、OpenAI 兼容 API 部署再到低成本部署与 LoRA / P-Tuning v2 微调。读完本文你将能够在自己的硬件上完成模型的本地加载、多轮对话、工具调用、API 服务化与参数高效微调并理解每一步背后的源码实现。一、ChatGLM3 系列概览与模型选型ChatGLM3-6B 是 ChatGLM3 系列中的开源对话模型在保留前两代模型对话流畅、部署门槛低等特性的基础上引入了三大升级方向更强大的基础模型其基础模型 ChatGLM3-6B-Base 采用更多样的训练数据、更充分的训练步数和更合理的训练策略在语义、数学、推理、代码、知识等角度的数据集上表现出 10B 以下基础模型中的领先性能。更完整的功能支持采用全新设计的 Prompt 格式除正常多轮对话外原生支持工具调用Function Call、代码执行Code Interpreter和 Agent 任务等复杂场景。更全面的开源序列除对话模型外还开源了基础模型 ChatGLM3-6B-Base、长文本对话模型 ChatGLM3-6B-32K 与 ChatGLM3-6B-128K。模型列表与序列长度ModelSeq Length说明ChatGLM3-6B8k对话模型支持工具调用本指南核心对象ChatGLM3-6B-Base8k基础模型不支持工具调用ChatGLM3-6B-32K32k长文本对话模型ChatGLM3-6B-128K128k进一步强化长文本理解能力注意工具调用能力目前仅 ChatGLM3-6B 支持Base 与 32K 模型不支持见 tools_using_demo/README.md。所有权重对学术研究完全开放在填写问卷登记后亦允许免费商业使用但需遵守 MODEL_LICENSE 开源协议。评测结果要点README 中给出了基于 ChatGLM3-6B-Base 在 8 个中英文典型数据集上的评测GSM8K 72.3、MATH 25.7、BBH 66.1、MMLU 61.4、C-Eval 69.0、CMMLU 67.5、MBPP 52.4、AGIEval 53.7均为 0-shot 或 0-shot CoT 设置BBH 为 3-shot并在 LongBench 上对比 ChatGLM2-6B-32K平均 41.5提升至 50.2长文本场景论文阅读、文档摘要、财报分析人工评估效果平均提升超 50%。这些数据可在 README 原文核对可作为选型参考但具体表现依任务与硬件而异。二、环境安装与代码调用2.1 安装仓库与依赖git clone https://github.com/THUDM/ChatGLM3 cd ChatGLM3 pip install -r requirements.txt为了保证torch版本正确请严格按照 PyTorch 官方文档的说明安装不同 CUDA 版本对应不同 wheel。仓库根目录的 requirements.txt 覆盖了基础 Demo 依赖不同子目录如 composite_demo/requirements.txt、finetune_demo/requirements.txt还有各自独立的依赖清单。2.2 一行代码加载模型from transformers import AutoTokenizer, AutoModel tokenizer AutoTokenizer.from_pretrained(THUDM/chatglm3-6b, trust_remote_codeTrue) model AutoModel.from_pretrained(THUDM/chatglm3-6b, trust_remote_codeTrue, devicecuda) model model.eval() response, history model.chat(tokenizer, 你好, history[]) print(response) # 你好!我是人工智能助手 ChatGLM3 - 6B, 很高兴见到你, 欢迎问我任何问题。 response, history model.chat(tokenizer, 晚上睡不着应该怎么办, historyhistory) print(response)需要trust_remote_codeTrue因为 ChatGLM3 的模型实现modeling_chatglm.py由 Hugging Face Hub 远程加载。model.chat会自动维护多轮history并将对话转换为 ChatGLM3 专用格式后送进模型。2.3 从本地加载模型以上代码会由transformers自动下载模型实现与参数。网络较差时可先通过 Git LFS 下载到本地git clone https://huggingface.co/THUDM/chatglm3-6b然后改为从本地路径加载例如AutoModel.from_pretrained(your local path, trust_remote_codeTrue)。HuggingFace 下载慢时也可以从 ModelScope 下载同款权重。三、ChatGLM3 对话格式Prompt 格式详解这是 ChatGLM3 区别于前两代模型的关键设计。PROMPT.md 指出为避免用户输入的注入攻击并统一 Code Interpreter、Tool 与 Agent 任务的输入ChatGLM3 采用全新对话格式。3.1 整体结构与对话头一段对话由若干对话头 内容组成|system| You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the users instructions carefully. Respond using markdown. |user| Hello |assistant| Hello, Im ChatGLM3. What can I assist you today?对话头占完整一行格式为|role|{metadata}。其中|role|部分使用 special token 表示无法从文本形式被 tokenizer 编码从而防止注入metadata 部分为可选的纯文本。角色规定如下|system|系统信息设计上可穿插于对话中但目前规定仅可出现在开头|user|用户不会连续出现多个|assistant|AI 助手出现前必须有一个来自|user|的信息|observation|外部返回结果必须在|assistant|的信息之后。3.2 多轮对话样例有且仅有|user|、|assistant|、|system|三种 role结构与 3.1 相同这里不再重复。3.3 工具调用格式工具调用场景下system prompt 中携带工具 JSON 描述模型通过带 metadata 的 assistant 行发起工具调用随后以|observation|回传结果|system| Answer the following questions as best as you can. You have access to the following tools: [ { name: get_current_weather, description: Get the current weather in a given location, parameters: { type: object, properties: { location: { type: string, description: The city and state, e.g. San Francisco, CA, }, unit: {type: string}, }, required: [location], }, } ] |user| 今天北京的天气怎么样 |assistant| 好的让我们来查看今天的天气 |assistant|get_current_weather python tool_call(locationbeijing, unitcelsius)|observation| {temperature: 22} |assistant| 根据查询结果今天北京的气温为 22 摄氏度。可以看到模型输出 tool_call(...) 形式的函数调用代码块工具名作为 assistant 的 metadata 出现。这套约定正是 [tools_using_demo](https://link.gitcode.com/i/6937eb169982efc2be8b8a810b46b7de) 与 API 服务器中工具调用解析逻辑的底层依据。 ### 3.4 代码执行Code Interpreter格式 代码执行场景加入 |observation| 角色且 |assistant| 的 metadata 为 interpreter。模型输出 Python 代码块执行结果以 |observation| 返回如 [Image]、result 代码块等模型据此继续生成。完整示例在 [PROMPT.md](https://link.gitcode.com/i/7924146f3e7230ca3829ebbdc40305d8#代码执行) 中给出包含文件读取、缺失值检查、绘制爱心等完整流程可直接对照。 ## 四、快速上手三种开箱即用的 Demo ### 4.1 综合 DemoChat / Tool / Code Interpreter 三合一 仓库提供了集成三种功能的 Streamlit 综合 Demo使用说明见 [composite_demo/README.md](https://link.gitcode.com/i/653e38290875369ceb67e14f76691ec9) bash conda create -n chatglm3-demo python3.10 conda activate chatglm3-demo pip install -r requirements.txt # 使用 Code Interpreter 还需安装 Jupyter 内核 ipython kernel install --name chatglm3-demo --user streamlit run main.py通过export MODEL_PATH/path/to/model指定本地模型export IPYKERNELkernel_name自定义 Jupyter 内核三种模式Chat侧边栏可调 top_p、temperature、System Prompt、Tool通过 tool_registry.py 注册工具、Code Interpreter在 Jupyter 环境中执行代码完成复杂任务只需描述任务即可模型会连续执行多个代码块直至完成工具注册只需用register_tool装饰函数函数名即工具名、docstring 即工具说明参数用Annotated[typ, description, required]标注register_tool def get_weather( city_name: Annotated[str, The name of the city to be queried, True], ) - str: Get the weather for city_name in the following week ...额外技巧生成时可点右上角Stop打断刷新页面清空对话记录Manual mode下可用 YAML 直接指定工具列表需手动回填工具输出。4.2 网页版对话 DemoGradio 版basic_demo/web_demo_gradio.pypython web_demo_gradio.pyStreamlit 版basic_demo/web_demo_streamlit.pystreamlit run web_demo_streamlit.py运行后输出 Web Server 地址浏览器打开即可使用。经项目测试Streamlit 版更流畅。4.3 命令行对话 Demo运行 basic_demo/cli_demo.pypython cli_demo.py程序在命令行中交互式对话输入clear清空历史输入stop终止。源码中通过model.stream_chat(..., top_p1, temperature0.01, return_past_key_valuesTrue)流式生成并复用past_key_values加速多轮推理也支持MODEL_PATH/TOKENIZER_PATH环境变量指定本地模型注释中提示 int4 量化需在.eval()前加.quantize(bits4, devicecuda).cuda()且必须使用 cuda。五、工具调用Function Call实战工具调用的完整方法见 tools_using_demo/README.md同时仓库提供了两个可运行示例tools_using_demo/cli_demo_tool.py命令行版与tools_using_demo/openai_api_demo.pyAPI 版。5.1 构建 System Prompt工具定义采用与 3.3 一致的 JSON 结构确保格式一致可获得最优性能tools [ { name: track, description: 追踪指定股票的实时价格, parameters: { type: object, properties: { symbol: {description: 需要追踪的股票代码} }, required: [symbol] } }, { name: text-to-speech, description: 将文本转换为语音, parameters: { type: object, properties: { text: {description: 需要转换成语音的文本}, voice: {description: 要使用的语音类型男声、女声等}, speed: {description: 语音的速度快、中等、慢等} }, required: [text] } } ] system_info {role: system, content: Answer the following questions as best as you can. You have access to the following tools:, tools: tools}5.2 提出问题并解析工具调用请求注意目前 ChatGLM3-6B 的工具调用只支持chat方法不支持stream_chat方法。history [system_info] query 帮我查询股票10111的价格 response, history model.chat(tokenizer, query, historyhistory) print(response) # {name: track, parameters: {symbol: 10111}}返回为 JSON 字典表示模型需要调用工具track并传入参数symbol。5.3 调用工具并以 observation 回传自行实现工具调用逻辑后将结果以 JSON 格式、以roleobservation回传此参数不能省略result json.dumps({price: 12412}, ensure_asciiFalse) response, history model.chat(tokenizer, result, historyhistory, roleobservation) print(response) # 根据您的查询经过API的调用股票10111的价格是12412。对于复杂问题模型可能进行多次工具调用。判断依据当返回的response是dict时表示工具调用请求继续执行工具并回传 observation是str时表示最终回复流程结束。这一chat 返回 dict/str 双形态的设计在 openai_api_demo/utils.py 的process_response中也有体现。六、OpenAI / ZhipuAI 兼容 API 部署仓库提供了 OpenAI / ZhipuAI 格式的开源模型 API 部署代码可作为任意基于 ChatGPT 的应用后端核心实现为 openai_api_demo/api_server.py基于 FastAPI uvicorn。6.1 启动服务cd openai_api_demo python api_server.py服务默认监听0.0.0.0:8000。源码要点模型路径可通过环境变量MODEL_PATH/TOKENIZER_PATH默认THUDM/chatglm3-6b指定Embedding 模型通过EMBEDDING_PATH默认BAAI/bge-m3指定提供三个核心端点/v1/models列出chatglm3-6b、/v1/chat/completions对话补全支持流式与普通模式、工具调用、/v1/embeddings文本向量化仅支持单 GPU显存需求约 14–15GB2GB Embedding 模型 12–13GB FP16 LLMToken 限制提醒OpenAI API 中的max_tokens等价于 HuggingFace 的max_new_tokens而非max_length例如对 6B 模型设置 8192 会因历史与提示词占位而报错默认未注册任何工具若需流式工具调用可参照tools_using_demo实现dispatch_tool(tool_name, tool_params)并接入create_chat_completion的 function_call 分支流式工具调用采用先判定前 7 个字符是否包含get_前缀的启发式判断见contains_custom_function源码注释明确说明这不严谨、仅供参考。6.2 使用 Curl 测试chat 补全测试curl -X POST http://127.0.0.1:8000/v1/chat/completions \ -H Content-Type: application/json \ -d {\model\: \chatglm3-6b\, \messages\: [{\role\: \system\, \content\: \You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the users instructions carefully. Respond using markdown.\}, {\role\: \user\, \content\: \你好给我讲一个故事大概100字\}], \stream\: false, \max_tokens\: 100, \temperature\: 0.8, \top_p\: 0.8}标准 OpenAI 接口 agent-chat 测试携带 tools 定义curl -X POST http://127.0.0.1:8000/v1/chat/completions \ -H Content-Type: application/json \ -d {\model\: \chatglm3-6b\, \messages\: [{\role\: \user\, \content\: \37乘以8加7除2等于多少\}], \tools\: [{\name\: \track\, \description\: \追踪指定股票的实时价格\, \parameters\: {\type\: \object\, \properties\: {\symbol\: {\description\: \需要追踪的股票代码\}}, \required\: []}}, {\name\: \Calculator\, \description\: \数学计算器计算数学问题\, \parameters\: {\type\: \object\, \properties\: {\symbol\: {\description\: \要计算的数学公式\}}, \required\: []}}], \stream\: true, \max_tokens\: 100, \temperature\: 0.8, \top_p\: 0.8}6.3 自定义工具的自主动调度AgentOpenAI 风格的自定义工具箱自主调度接口实现openai_api_demo/tools/schema.py中的工具描述脚本并将api_server.py中的AGENT_CONTROLLER指定为true即可获得curl -X POST http://127.0.0.1:8000/v1/chat/completions \ -H Content-Type: application/json \ -d {\model\: \chatglm3-6b\, \messages\: [{\role\: \user\, \content\: \37乘以8加7除2等于多少\}], \stream\: true, \max_tokens\: 100, \temperature\: 0.8, \top_p\: 0.8}该接口具有调度异常的自处理回复能力无需另外实现调度算法且用户无需 api_key。6.4 使用 Python 脚本测试cd openai_api_demo python openai_api_request.py测试成功时模型应返回一段故事。README 中同样给出了 ZhipuAI 测试脚本入口zhipu_api_request.py。6.5 LangChain 集成仓库的 langchain_demo 展示了如何把 ChatGLM3 接入 LangChain 生态ChatGLM3.py 封装了模型调用main.py 演示串联tools 目录预置了Calculator.py、Weather.py、DistanceConversion.py三个工具可直接与 5.1 的工具 JSON 定义配合使用。七、低成本部署7.1 模型量化默认 FP16 精度加载约需 13GB 显存显存有限时可 4-bit 量化加载model AutoModel.from_pretrained(THUDM/chatglm3-6b, trust_remote_codeTrue).quantize(4).cuda()量化会带来一定性能损失但项目测试表明 4-bit 量化下仍能自然流畅生成。7.2 CPU 部署无 GPU 时可在 CPU 上推理约需 32GB 内存速度较慢model AutoModel.from_pretrained(THUDM/chatglm3-6b, trust_remote_codeTrue).float()7.3 MacApple Silicon / AMD GPU部署安装 PyTorch-Nightly版本号应为2.x.x.dev2023xxxx而非2.x.x目前 MacOS 仅支持从本地加载模型并使用 mps 后端model AutoModel.from_pretrained(your local path, trust_remote_codeTrue).to(mps)加载半精度模型约需 13GB 内存内存较小的机器如 16GB MacBook Pro空余内存不足时会使用硬盘虚拟内存导致推理严重变慢。7.4 多卡部署单卡显存不足以容纳完整模型时先安装pip install accelerate然后正常加载模型即可自动切分到多张 GPU。7.5 专用推理加速方案OpenVINO支持在英特尔的 CPU 和 GPU 上加速推理使用方法见 Intel_device_demo/openvino_demo/README.md 与 openvino_cli_demo.pyTensorRT-LLMNVIDIA 高性能 GPU 加速推理方案部署步骤见 tensorrt_llm_demo/README.mdCLI 示例为 tensorrt_llm_cli_demo.pyREADME 友情链接还收录了 chatglm.cpp类 llama.cpp 量化加速、ChatGLM3-TPU算能端侧芯片 BM1684X 上约 7.5 token/s等社区方案可作为扩展学习入口。八、模型微调全量 SFT / LoRA / P-Tuning v2微调套件位于 finetune_demo提供全量微调与 P-Tuning v2LoRA 亦可通过 lora.yaml 配置使用支持多轮对话与输入输出两种数据格式并附有 lora_finetune.ipynb 示例。8.1 硬件参考默认配置下显存占用仅供参考随参数变化SFT 全量微调 4 卡均分、每卡约48346MiBP-TuningV2 1 卡约18426MiBLoRA 1 卡约14082MiB。项目仅在英伟达 Hopper如 H100与 Ampère如 A100架构上做过测试其他架构可能出现训练问题、显存误差或推理效果差异。8.2 数据格式纯对话能力微调仅微调对话能力注意 step 较多时会削弱工具调用能力[ { conversations: [ {role: system, content: system prompt text}, {role: user, content: user prompt text}, {role: assistant, content: assistant response text} ] } ]对话 工具能力微调tools字段会被json.dumps(..., ensure_asciiFalse)自动格式化为首条 system prompt无需手动插入[ { tools: [], conversations: [ {role: system, content: system prompt text}, {role: user, content: user prompt text}, {role: assistant, content: assistant thought to text}, { role: tool, name: name of the tool to be called, parameters: {parameter_name: parameter_value}, observation: observation }, {role: assistant, content: assistant response to observation} ] } ]要点每种角色可附带bool类型loss字段控制是否参与 loss 计算默认 system、user 不计算tool不是原生角色预处理时会自动转化为带工具调用 metadata 的assistant默认计算 loss与observation不计算 loss目前未实现 Code Interpreter 微调system为可选角色但必须位于user之前且每条对话只能出现一次。微调数据必须同时包含训练集与验证集测试集可缺省或直接用验证集代替。8.3 配置文件配置位于 finetune_demo/configsds_zero_2.json/ds_zero_3.json为 DeepSpeed 配置lora.yaml/ptuning_v2.yaml/sft.yaml为三种方式的模型与训练配置。关键参数data_configtrain_file/val_file/test_file数据集路径、num_proc加载数据进程数max_input_length/max_output_length输入/输出序列最大长度training_argsoutput_dir、max_steps、per_device_train_batch_size、dataloader_num_workers、save_strategy/save_steps、logging_strategy/logging_steps、per_device_eval_batch_size、evaluation_strategy/eval_steps、predict_with_generate等generation_config.max_new_tokens生成的最大新 token 数peft_configpeft_type如 LORA、task_typeCAUSAL_LMLoRA 参数r秩、lora_alpha缩放因子、lora_dropoutdropout 概率P-TuningV2 参数num_virtual_tokens虚拟 token 数量。8.4 启动微调单机多卡 / 多机多卡需安装 deepspeedcd finetune_demo OMP_NUM_THREADS1 torchrun --standalone --nnodes1 --nproc_per_node8 finetune_hf.py data/AdvertiseGen/ THUDM/chatglm3-6b configs/lora.yaml单机单卡cd finetune_demo python finetune_hf.py data/AdvertiseGen/ THUDM/chatglm3-6b configs/lora.yaml从检查点继续微调第四个参数传yes自动从最后一个 Checkpoint 继续或断点号数字如600从序号 600 的 Checkpoint 继续cd finetune_demo python finetune_hf.py data/AdvertiseGen/ THUDM/chatglm3-6b configs/lora.yaml yes8.5 使用微调后的模型在 inference_hf.py 中验证python inference_hf.py your_finetune_path --prompt your prompt在其他 Demo 中使用LoRA 与 P-TuningV2 不合并模型路径记录在adapter_config.json若原始模型位置变更需同步修改base_model_name_or_path。参照 finetune_demo/inference_hf.py 中的load_model_and_tokenizer若目录含adapter_config.json则用AutoPeftModelForCausalLM.from_pretrained加载否则用AutoModelForCausalLM.from_pretrained再用该函数替换各 Demo 的模型加载方式即可。8.6 微调排障提示训练前会打印首条训练数据的 Sanity Check每行依次为 detokenized string、token_id、target_id-100表示该 token 不参与 loss 计算_prepare_model_for_training会把可训练参数转为torch.float32默认开启若 half 训练有问题可切回显存可能增加若显存不足可尝试将模型代码modeling_chatglm.py中torch.utils.checkpoint.checkpoint的use_reentrant改为True微调后的模型可用任何支持 peft 加载的推理加速框架本仓库数据集格式与 ZhipuAI API 微调格式有差异messages对应本仓库conversation字段API 的jsonl需改名json。九、常见问题与注意事项模型输出准确性ChatGLM3-6B 规模较小且受概率随机性影响无法保证输出完全准确且输出容易被用户输入误导项目不承担开源模型及代码导致的数据安全、舆情风险或滥用风险请遵守 MODEL_LICENSE 并避免将模型用于未经安全评估和备案的服务。版本同步所有模型最新更新会率先在 HuggingFace 发布ModelScope 与 WiseModel 因未同步需要手动更新。工具调用限制目前仅支持chat方法API 服务器的contains_custom_function用get_前缀启发式判断工具调用仅供演示参考。部署门槛FP16 约 13GB 显存API 服务约 14–15GBCPU 约 32GB 内存量化与多卡可进一步降低成本运行环境请以仓库 requirements.txt 与各子目录 requirements 为准。至此从模型选型、Prompt 格式理解、多形态 Demo、工具调用、API 服务化到低成本部署与微调的完整链路已全部打通你可以在此基础上按需组合构建自己的 ChatGLM3-6B 应用。赞分享大模型人工智能微调本地部署AI AgentRAG【免费下载链接】ChatGLM3ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型项目地址https://gitcode.com/gh_mirrors/ch/ChatGLM3点击查看免费下载相关推荐ChatGLM2-6B 开源双语对话大模型从架构特性到本地部署与微调全指南ChatGLM2 6B 开源双语对话大模型从架构特性到本地部署与微调全指南 ChatGLM2 6B 是智谱 AI 开源的第二代中英双语对话大语言模型在延续初大模型人工智能模型推理服务NLP终极ChatGLM-6B开源双语对话模型部署全指南从零基础到本地运行终极ChatGLM 6B开源双语对话模型部署全指南从零基础到本地运行 GitHub加速计划/CodeGuide项目中的ChatGLM 6B是由清华大学开发的开文档教程后端ChatGLM-6B 开源双语对话模型实战指南从本地推理、量化部署到 P-Tuning v2 高效微调ChatGLM 6B 开源双语对话模型实战指南从本地推理、量化部署到 P Tuning v2 高效微调 本指南以 ChatGLM 6B 官方仓库的 READM大模型人工智能交互助手本地部署微调NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考