GLM-4源码包实战:从推理到LoRA微调与部署全流程
简介GLM-4代码仓库完整源码包面向大模型开发者、算法工程师及对本地部署感兴趣的技术爱好者提供智谱AI第四代GLM系列模型的参考实现与基础使用框架。压缩包内共78个文件包含Python脚本、YAML部署配置、JSON数据、Markdown说明文档并附带少量图片与License文件整体约7.57MB目录结构清晰按基础对话、视觉多模态、OpenAI API服务、微调脚本、Intel硬件适配等模块划分便于快速定位所需代码。已有306人学习下载适合作为理解GLM-4模型结构、CLI/Web对话调用、微调流程、OpenAI API对接及批量压力测试的入门参考。包内除基础demo外还提供OpenAI API服务端与请求客户端、批量推理与压力测试脚本以及基于OpenVINO/ITREX的Intel设备适配代码微调模块包含训练脚本与配置文件可用于领域定制。附带的requirements依赖清单与中英文README能帮助高效搭建环境各脚本可直接运行或二次开发是上手GLM-4并进行本地化改造的实用材料。1. 一份 glm4 代码仓库源码 zip 包能干什么先解决跑起来的问题手头这套 glm4 代码仓库源码 zip 包简单说就是把主线仓库里那套能跑的 GLM-4 代码、配置和示例脚本整体打包解压就能开始工作。它解决的最大痛点是很多人想本地复现和微调 GLM-4结果第一步 git clone 就被网络波动打断或者好不容易下完发现缺脚本、缺依赖说明整个过程变成玄学。这份 zip 包把“能不能一次到位”的问题先解决了适合三类人第一次想跑通 GLM-4 推理的开发者想做指令微调但不想从零搭工程的从业者以及需要离线部署一套开源对话模型环境的运维。它不包含动辄十几 GB 的权重文件但把代码侧的坑基本都替你先趟平了。2. 拆开源码包目录结构、依赖版本与首个推理脚本2.1 压缩包里的文件到底缺了什么代码、配置与权重的边界拿到 zip 包第一件事不是解压就跑而是先看清楚里面有什么。我习惯先列一下目录结构确认源码包的边界在哪。unzip glm4-code.zip cd glm4-code tree -L 1glm4-code/ ├── basic_demo/ # 对话与接口演示入口 │ ├── cli_demo.py # 命令行交互脚本 │ └── openai_api.py # OpenAI 风格接口服务 ├── finetune_demo/ # 微调示例含 LoRA 与全参训练入口 │ ├── finetune.py # 训练脚本 │ ├── configs/ # 训练参数配置 │ └── data/ # 示例数据文件 ├── inference/ # 模型定义与推理逻辑 │ ├── modeling_hf.py # HuggingFace 风格模型实现 │ └── tokenization_*.py ├── requirements.txt # Python 依赖清单 └── README.md # 起步说明通常比你想的有用这个结构基本覆盖了“推理 微调 服务化”三条主线。压缩包里一般是代码、配置和依赖清单但不包含权重。权重文件动辄 10GB 以上zip 包通常放不下也不会放。你要是解压完直接跑脚本大概率会报模型路径不存在这不是包有问题而是你还没有把权重放到代码能找到的位置。常见做法是单独从模型托管平台把权重同步到本地磁盘再通过软链接指到仓库内的 models 目录。先确认这个边界后面所有操作才有意义。2.2 用仓库自带的 cli_demo 跑起对话最小推理链路解压之后我一般先建一个干净的虚拟环境避免全局环境把依赖搞乱。这个习惯在跑 GLM-4 这种对 transformers 版本敏感的模型时特别重要否则你连报错都分不清是代码问题还是环境问题。cd glm4-code python -m venv .venv source .venv/bin/activate pip install -r requirements.txt依赖装完看一下 README 里给的启动命令。这类仓库通常提供一个命令行交互脚本路径基本在 basic_demo 下。python basic_demo/cli_demo.py \ --model-path /data/models/glm-4-9b--model-path指向权重所在目录注意路径要写到包含 config.json 的那一层不是上一级。脚本加载模型之后会进入一问一答的循环输入 exit 退出。这条链路跑通说明代码、依赖、权重三者的关系已经理顺。如果脚本里没有--model-path这个参数而是写死了一个相对路径那就直接改脚本里的常量值。我见过不少新手在这种地方卡住其实这就是个字符串路径的问题不是代码缺陷。改完后用--help或者直接跳进 cli_demo.py 看一眼 argparse 部分参数含义都在那儿。2.3 依赖锁版本transformers 与 torch 的搭配下限这份源码包最容易被忽略的地方是依赖版本。GLM-4 的模型代码用了一些较新的接口transformers 版本太低会缺方法版本太高又可能改了行为导致兼容问题。我的经验是在装完 requirements 后马上用一段小的检查脚本确认核心库版本把它们固定下来。import torch import transformers print(torch:, torch.__version__) print(transformers:, transformers.__version__)torch: 2.1.2 transformers: 4.39.3我在本地环境锁过一组能跑通的组合torch 2.1.2、transformers 4.39.3、safetensors 0.4.3、accelerate 0.28.0、peft 0.11.1。这组组合不一定是这个 zip 包唯一能跑的版本但如果你遇到加载模型时报类型错误、参数名对不上这类问题先往版本上怀疑是性价比最高的排查路径。装完依赖后pip freeze requirements-lock.txt把实际安装的版本全部留档。这样哪个包被意外升级了你可以快速比对出来。版本问题不是玄学是可以用锁文件解决的工程问题。3. 把仓库改造成微调工程LoRA 指令微调全流程3.1 微调入口在哪finetune_demo 的目录逻辑源码包里的 finetune_demo 就是微调工程的起点。它内部通常分成训练脚本、参数配置、数据文件三个部分。先看数据目录再开训练脚本顺序不要反因为数据格式决定了你要不要改预处理逻辑。cd finetune_demo ls data/ configs/data/ train.jsonl dev.jsonl configs/ lora.yaml full_finetune.yaml训练入口一般长这样命令行参数覆盖配置文件是常见做法python finetune.py \ --model_name_or_path /data/models/glm-4-9b \ --train_file ./data/train.jsonl \ --output_dir ./output/lora \ --lora_rank 8 \ --lora_alpha 32 \ --learning_rate 2e-4 \ --num_train_epochs 1 \ --per_device_train_batch_size 1 \ --gradient_accumulation_steps 8这里的逻辑是先加载基础模型然后把 LoRA 适配层挂到注意力层的线形投影上只训练这部分参数。--per_device_train_batch_size设为 1是因为 GLM-4-9B 在单卡 24G 显存下完整前向已经很吃紧再用大 batch 直接 OOM。--gradient_accumulation_steps 8把 8 个小 batch 的梯度累加后再更新一次等效 batch size 是 8显存占用却只有 batch1 的水平。学习率 2e-4 是 LoRA 比较常见的起点比全参微调的 1e-5 高一个量级因为 LoRA 只动少量参数需要更大的步长才能有效更新。3.2 训练参数怎么设才不玄学从 batch size 到学习率很多人在微调 GLM-4 时喜欢问“最优参数是什么”这个问题本身就不成立。参数是否合适取决于你的数据规模、领域差异度和显存预算。我能给出一套经过验证的起点但你要按自己的场景去调。参数我常用值什么时候动它learning_rate1e-4 ~ 2e-4数据量大或训练不稳时降到 5e-5lora_rank8 ~ 16领域差异大、需要记住更多新知识时升到 32lora_alpharank 的 2 倍不收敛时先调 alpha而不是盲目改 lrmax_length1024 ~ 2048显存不足最先降它比降 batch 更直接per_device_train_batch_size1 ~ 4单卡 24G 以下固定 1用梯度累积弥补warmup_ratio0.03 ~ 0.1数据量小时取大值防止起步阶段 loss 震荡max_length是个容易被忽略的参数。它决定每条训练样本截断到多少 token会直接影响显存占用和训练速度。如果你的数据很多是长文档把max_length从 2048 降到 1024训练速度可能快将近一倍代价是超出部分被截断。这需要你对自己的数据分布有数而不是无脑拉满。我一般还会再检查一下训练脚本里是否开启了 gradient checkpointing。它用重计算换显存打开后显存占用可能下降 30% 到 40%但训练时间会增加。在单卡场景下这是保训练能跑起来的关键开关值得优先确认。3.3 对话模板与数据格式不是随便组一个 JSON 就能训GLM-4 的微调数据格式与对话模板强相关。仓库示例数据通常是一个 JSONL 文件每行一条对话记录。我在接自己数据前会先用head data/train.jsonl看一眼格式再照着拼自己的数据。{ conversations: [ { role: user, content: 用一句话解释什么是回调函数 }, { role: assistant, content: 回调函数是把一段逻辑作为参数传给另一个函数在特定时机被调用的函数。 } ] }这个格式的精髓是对话按 user/assistant 轮次交替排列训练脚本会把它拼接成药典范式。但拼接方式不是在脚本里写死的而是读取模型自带的 tokenizer_config.json 里的 chat_template。这就导致一个经典翻车点如果你换了别的模型的 tokenizer或者你用的是旧版 transformerschat_template 没有被正确加载训练脚本会退化成纯文本拼接模型学到的根本不是对话能力生成结果自然一塌糊涂。所以数据预处理这块我建议三步走。第一步检查你自己的 JSONL 是否包含 user/assistant 两个角色缺失任何一方都算坏数据。第二步用脚本加载 tokenizer手动渲染一条对话打印出拼接后的 token 序列看是否包含特殊的对话控制 token。第三步再把训练数据按同样流程过一遍确认格式一致。这三步做下来你基本可以排除数据格式问题。from transformers import AutoTokenizer tokenizer AutoTokenizer.from_pretrained( /data/models/glm-4-9b, trust_remote_codeTrue ) sample tokenizer.apply_chat_template( [ {role: user, content: 你好}, {role: assistant, content: 你好有什么可以帮你} ], tokenizeFalse ) print(sample)看到输出中有|user|、|assistant|这类控制 token说明 chat_template 生效如果输出只是普通字符串拼接没有角色标记那就要回去检查 transformers 版本和 tokenizer 加载方式。这一步是训练前最后一道闸门过了它剩下的就交给显存和耐心了。4. 实战排查部署 GLM-4 时绕不开的五个坑4.1 权重加载失败zip 包里没有权重先解决权重从哪来现象解压完源码包按 README 启动 cli_demo.py报ValueError: Cant load model, weights missing或者一堆tensor name not found的警告。原因zip 包只包含代码、配置和依赖清单不包含权重文件。GLM-4 的权重需要单独从模型托管平台下载下载后也要确认目录里包含config.json、权重切片文件、tokenizer.json等关键文件。很多人直接把 zip 包理解成“解压即用”漏掉了权重这个前提。解决先确认权重目录结构是否完整再让代码指向它ls /data/models/glm-4-9bconfig.json model-00001-of-00004.safetensors model-00002-of-00004.safetensors model-00003-of-00004.safetensors model-00004-of-00004.safetensors tokenizer.json tokenizer_config.json如果代码里的默认路径和实际权重路径不一致用软链接来对齐不要复制权重十几 GB 的文件复制又慢又占磁盘mkdir -p models ln -s /data/models/glm-4-9b models/glm-4-9b4.2 transformers 版本冲突模型代码被新版本接口坑了现象加载模型时报AttributeError或TypeError比如某个类没有某个属性或者 forward 函数收到了不认识的参数。原因GLM-4 的模型实现依赖 transformers 的特定接口行为。新版本 transformers 可能重命名了内部方法或者改了注意力层的参数传递方式导致模型代码里的调用失效。我看过的不少报错案例最后都定位到 transformers 版本不兼容而不是代码写错。解决先用 requirements.txt 里锁定的版本重装pip install transformers4.39.3 torch2.1.2如果项目给你的是这个版本组合那就照锁。如果换了版本还是不行用一段最小脚本验证依赖加载而不是反复重跑整个推理链路import transformers print(transformers.__version__)版本确认无误后再加载模型。记住一个原则在模型生态里能跑通的版本组合是最有价值的。不要试图用最新版本“顺便升级”除非你准备好了排查半天兼容性的心理预算。4.3 显存不足OOM 不一定是卡不够可能是配置没做对现象运行 cli_demo 或微调脚本时直接报CUDA out of memory程序退出。卡是 24G 的模型是 9B理论上应该能跑但就是爆了。原因显存占用由模型权重、激活值、KV cache、优化器状态共同决定。推理场景下KV cache 随序列长度线性增长把max_length或者对话历史拉长显存消耗会快速上升。微调场景更吃紧因为还要保存梯度。解决先量化再砍序列长度最后才考虑换卡。量化是立竿见影的手段from transformers import AutoModelForCausalLM, BitsAndBytesConfig import torch quant_config BitsAndBytesConfig( load_in_4bitTrue, bnb_4bit_quant_typenf4, bnb_4bit_compute_dtypetorch.float16 ) model AutoModelForCausalLM.from_pretrained( /data/models/glm-4-9b, quantization_configquant_config, trust_remote_codeTrue )load_in_4bit把权重压缩到 4bit显存占用大体是原来的四分之一左右。bnb_4bit_quant_typenf4是一种对正态分布权重更友好的量化格式比 fp4 的精度损失更小。如果量化后依然 OOM下一个要动的就是max_new_tokens和对话轮次降低生成长度和上下文长度而不是硬扛。4.4 微调后对话模板错乱训练时学的是对话测试时变成了拼接现象LoRA 训练完加载 adapter 之后对话效果很差。模型输出前言不搭后语或者把用户输入直接重复出来像是一个没有任何对话能力的文本补全模型。原因训练数据在拼接进模型前没有经过 chat_template 的格式化。常见的情况是 transformers 版本过低无法读取新版 chat_template或者你用的是手动拼接的旧式数据格式模型在训练时根本没有见过角色标记。解决回到 2.3 和 3.3 的方法先渲染一条样本确认格式。另外推理时也要显式走 chat_template不能直接把用户字符串塞进模型。代码里要保证这一点inputs tokenizer.apply_chat_template( messages, tokenizeTrue, return_tensorspt ).to(model.device)return_tensorspt表示返回 PyTorch 张量to(model.device)把输入放到模型所在设备。如果这步做对了生成结果和训练时的分布就是一致的。微调效果差先怀疑数据链路不要急着加更多的训练数据。4.5 多卡训练时 NCCL 初始化失败环境变量比代码更容易出问题现象用torchrun启动多卡微调报NCCL error: unhandled cuda error或者卡在rank同步阶段程序一直起不来。原因多卡训练依赖 NCCL 通信它会受网卡、容器网络、共享内存大小等多方面影响。最常见的是/dev/shm太小或者容器里没有配置好可用的通信网卡。解决先给/dev/shm扩容这是容器环境下的第一嫌疑犯docker run --shm-size16g ...如果是在物理机上跑确认多卡之间能正常通信用一条最简单的指令验证python -c import torch; print(torch.cuda.device_count())输出应该等于你的卡数。如果只有 1先查驱动和容器设备映射。我的习惯是第一次调试多卡前先强行把CUDA_VISIBLE_DEVICES设为单卡把流程跑通再做多卡。这样能把问题切成两半单卡失败是代码问题单卡成功多卡失败才是通信问题。5. 进阶技巧把微调后的 LoRA 合并进模型并接成接口微调完拿到一个 adapter 目录不算结束真正落地是把 LoRA 合并回基础模型再把它服务化。合并是一个幂等操作本质是把增量权重写回原模型参数这样部署时就不需要额外依赖 PEFT 去动态挂载。from transformers import AutoModelForCausalLM from peft import PeftModel base_model AutoModelForCausalLM.from_pretrained( /data/models/glm-4-9b, trust_remote_codeTrue ) model PeftModel.from_pretrained(base_model, ./output/lora) merged model.merge_and_unload() merged.save_pretrained(./output/glm-4-9b-merged)这段代码的逻辑是先加载基础模型再加载 LoRA adaptermerge_and_unload()把增量权重写回原模型并从内存中移除 adapter 结构最后保存成独立模型目录。参数上值得注意的就是trust_remote_codeTrueGLM-4 的模型代码依赖这个开关不加的话会直接拒绝加载。合并之后就能用仓库自带的 OpenAI 兼容接口启动服务python basic_demo/openai_api.py \ --model-path ./output/glm-4-9b-merged \ --port 8000启动后用 curl 快速验证接口确认合并后的模型确实带上了微调效果curl -X POST http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: glm-4-9b-merged, messages: [ {role: user, content: 什么是回调函数} ] }接口返回的choices[0].message.content应该是一条完整回答。这一步验证通过说明从源码包解压到权重部署的整条链路都是通的。从那以后我拿到任何 glm4 代码仓库源码 zip 包第一件事都是先看 README 和 requirements.txt再建一个干净虚拟环境绝不直接拿全局环境跑。先把推理链路跑通再谈微调和服务化。这个顺序帮我避开了大量版本和环境引起的低级问题也希望帮到你。本文还有配套的精品资源点击获取

相关新闻

分红时代已死,资本证明时代崛起

分红时代已死,资本证明时代崛起

《分红时代已死,资本证明时代崛起》——下一轮能源周期,市场奖励的不是“投得更多”,而是“证明每一笔钱为何值得花”过去五年,能源公司靠不花钱赢得投资者;未来五年,要靠会花钱。投下去的是资本&#xff0…

2026/10/13 7:58:50 阅读更多 →
OpenUI5源码解析:DesignTime.js如何驱动可视化编辑器

OpenUI5源码解析:DesignTime.js如何驱动可视化编辑器

接触过 OpenUI5 可视化编辑器的同学,应该都对“为什么编辑器知道这个控件能拖拽、那个属性可以改”感到好奇。答案的关键,就藏在一个叫 DesignTime.js 的模块里。这是 OpenUI5 源码解析系列的第三十一篇,我们来把 DesignTime.js 完整拆开。这…

2026/10/13 7:58:53 阅读更多 →
配电网韧性提升:移动储能预布局与动态调度建模与Matlab实现

配电网韧性提升:移动储能预布局与动态调度建模与Matlab实现

1. 项目背景与核心问题剖析1.1 为什么要关注配电网韧性与移动储能先说结论:配电网韧性(Resilience)研究的本质,是在极端扰动发生后让系统"扛得住、恢复快"。传统的可靠性分析更多关注故障概率和平均停电时间&#xff0c…

2026/10/13 7:58:56 阅读更多 →

最新新闻

Windows下MySQL安装配置与卸载全攻略:从版本选择到残留清理

Windows下MySQL安装配置与卸载全攻略:从版本选择到残留清理

如果你也在Windows上折腾过MySQL,应该能理解那种感受:下载页面一堆版本不知道选哪个,安装到一半卡住,装完了服务起不来,或者换版本时残留文件清不干净,重装总报错。这些坑我基本都踩过一遍,花了…

2026/10/13 11:04:15 阅读更多 →
Thingsboard接入Modbus协议的工程实践与稳定架构设计

Thingsboard接入Modbus协议的工程实践与稳定架构设计

1. 项目概述:为什么一个工业协议接入模块值得单独深挖?“Thingsboard modbus协议”——这六个字背后,不是一句轻飘飘的配置说明,而是一条横跨工业现场与云端管理的真实数据链路。我第一次在某智能配电柜远程监控项目里碰上这个组合…

2026/10/13 11:04:15 阅读更多 →
MySQL与Redis缓存一致性实战:从原理到架构选型

MySQL与Redis缓存一致性实战:从原理到架构选型

做后端这几年,我算是把“缓存和数据库数据对不上”这件事踩透了。团队经常半夜被叫醒,一查原因,十有八九是 Redis 里的旧数据还在服务,而 MySQL 里的记录早就改了。这问题听着朴素,真要讲清楚,背后牵扯到读…

2026/10/13 11:04:15 阅读更多 →
电商数据分析实战:从CLV到营收预测的完整链路

电商数据分析实战:从CLV到营收预测的完整链路

这种预测需求,在如今做电商数据分析的人手里,几乎每周都会撞上一次:老板在周会上盯着营收曲线,问"下个月能不能回到峰值""这批流失客户还值不值得砸券召回";运营拿着用户分群报表,却不…

2026/10/13 11:04:15 阅读更多 →
SpringBoot直连Hive:JDBC接入全流程与常见坑详解

SpringBoot直连Hive:JDBC接入全流程与常见坑详解

最近在给一个数据平台做数据接口,需要让SpringBoot服务通过JDBC直连Hive,把数仓里的离线结果表实时捞过来给前端展示。这个说起来好像就是连个数据库,但实际操作中,Hive和MySQL这些传统关系型数据库在驱动、依赖、协议、会话管理上…

2026/10/13 11:04:15 阅读更多 →
Java全栈演唱会售票系统开发与高并发优化实践

Java全栈演唱会售票系统开发与高并发优化实践

1. 项目概述与核心价值演唱会售票系统是连接演出主办方与观众的关键数字化桥梁。这个基于Java技术栈的全栈解决方案,通过SpringBoot/SSM后端Vue前端uniapp多端的组合架构,实现了从票务管理、在线选座到移动端购票的完整闭环。我在实际票务系统开发中发现…

2026/10/13 11:03:11 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →