Text-to-CAD实战:从自然语言到三维模型的代码驱动方案
1. 从一句话到三维模型text-to-cad 到底在解决什么问题第一次听到 text-to-cad 这个词我的反应是又来了一个蹭大模型热度的概念。但真正动手跑过几个原型、也踩过不少坑之后我改变了看法。它要解决的是一个非常具体、非常痛的工程问题——把自然语言描述直接转换成可用的 CAD 三维模型跳过传统建模里那些繁琐的草图绘制、约束标注、特征堆叠步骤。传统 CAD 建模是什么流程你得先想清楚尺寸、基准面、约束关系然后在软件里一步步画草图、拉伸、倒角、打孔。一个中等复杂度的零件熟练工程师也要花上几十分钟到几个小时。而 text-to-cad 的思路是你用一句话描述需求比如“一个 80mm 长、40mm 宽、10mm 厚四角带 M4 沉头孔的安装板”系统直接吐出对应的三维几何体甚至附带可编辑的参数化特征树。这东西能做什么简单说三类场景最实用。第一类是快速概念验证产品经理或设计师有个想法不需要精确建模先要个能看能改的粗略模型第二类是标准件与简单结构件生成法兰、支架、外壳、连接件这类有规律可循的零件用文字描述比手动画快得多第三类是批量参数化变体同一类零件改几个尺寸就生成新版本特别适合做系列化设计。适合谁来参考我认为三类人最该关注一是经常需要出粗略模型但不想学复杂 CAD 的硬件产品经理和创客二是想给现有设计流程加自动化的机械工程师三是对 AI 生成三维内容感兴趣、想自己搭原型的开发者。哪怕你完全不懂 CAD只要理解基本的几何概念也能从这篇文章里拿到可复现的方案。但我要先泼一盆冷水text-to-cad 目前远没到“说一句话就出工程图”的程度。它生成的是几何近似不是工程精确。公差、配合、材料属性、加工工艺这些它基本不管。所以正确的定位是——它是一个加速草图与概念阶段的工具而不是替代工程师的万能钥匙。想清楚这一点后面的技术选型和实操才不会跑偏。2. 核心技术路线拆解为什么是这几条路2.1 三条主流技术路线对比我调研和实践下来text-to-cad 的实现基本逃不出三条路线每条路线的底层逻辑、优劣势和适用场景差别很大选错了会浪费大量时间。路线核心原理优势劣势适合场景代码驱动型大模型生成 CAD 脚本如 CadQuery、OpenSCAD参数化、可编辑、精度可控依赖模型代码能力复杂形状易失败标准件、规则结构件直接生成型模型直接输出网格或点云如扩散模型形状自由度高能出复杂曲面不可参数化、难编辑、精度差概念造型、艺术化模型混合型先代码生成主体再网格补充细节兼顾精度与自由度流程复杂集成难度高中高复杂度零件我个人的判断是如果你要的是能继续用于工程的设计代码驱动型是唯一靠谱的起点。原因很简单——CAD 的本质是参数化特征历史而不是一堆三角面片。直接生成网格的路线出来的东西看着像但你没法改一个孔的直径也没法导出工程图。代码驱动型生成的是“建模指令”天然带参数改起来就是改一行数字的事。2.2 为什么选代码驱动作为主力路线代码驱动型的核心逻辑是让大语言模型扮演一个“会写 CAD 脚本的工程师”把自然语言翻译成 CadQuery 或 OpenSCAD 代码再由这些库去执行生成精确的 B-rep 或网格几何。这个思路的好处在于可验证、可调试、可迭代。模型生成的代码如果报错你能看到具体哪一行出了问题生成的几何如果尺寸不对你能直接改参数重新跑。相比之下直接生成网格的路线是个黑盒出来的东西不对你只能重新描述、重新抽卡效率极低。另一个关键优势是精度可控。CadQuery 基于 OpenCASCADE 内核生成的是真正的工程几何尺寸精确到小数点后多位能导出 STEP、STL、DXF 等标准格式。这对于后续要对接 3D 打印、CNC 加工或者导入其他 CAD 软件的流程来说是刚需。当然代码驱动型也有明显的天花板。它擅长的是有明确几何逻辑的结构——拉伸、旋转、阵列、布尔运算能表达的东西。一旦遇到自由曲面、有机形态、复杂倒角过渡代码描述就会变得极其冗长且容易出错。这时候混合型路线才有意义但那是进阶话题新手先把代码驱动型跑通再说。2.3 大模型在其中的真实角色很多人以为 text-to-cad 是“模型直接理解三维”其实不是。当前最可行的方案里大模型只做一件事把自然语言翻译成结构化的建模代码。它不理解三维它理解的是“这段文字对应哪几个建模操作”。这就带来一个重要的实践结论提示词的质量直接决定生成质量。你给模型的描述越接近工程语言越明确尺寸、特征、约束生成的代码就越靠谱。反过来你说“给我做个好看的小盒子”模型只能瞎猜结果大概率不能用。我在实操中总结出一个规律把描述拆成“主体形状 关键尺寸 特征列表 约束条件”四段式生成成功率能提升一大截。比如不说“一个带孔的板”而说“一个长方体板长 100mm 宽 60mm 厚 8mm四个角各有一个直径 4.5mm 的通孔孔中心距边缘 8mm”。后者模型几乎能一次生成可用的 CadQuery 代码。3. 实操环境搭建从零跑通第一条生成链路3.1 工具选型与依赖安装要把 text-to-cad 跑起来你需要三样东西一个能写代码的大模型接口、一个 CAD 脚本库、一个把两者串起来的胶水层。我推荐的组合是 CadQuery 任意支持代码生成的大模型 API Python 脚本。先装 CadQuery。它是整个链路里最不能省的一环因为它负责把代码变成真实几何。pip install cadqueryCadQuery 的安装在某些系统上会因为 OpenCASCADE 依赖出问题。我的经验是优先用 conda 装比 pip 省心得多。conda install -c conda-forge cadquery装完之后跑个测试确认内核正常import cadquery as cq result cq.Workplane(XY).box(10, 10, 10) cq.exporters.export(result, test.stl) print(CadQuery 工作正常)如果这步能生成一个 test.stl说明底层没问题。接下来是胶水层核心就是“调模型 API 拿代码 → 执行代码 → 导出模型”这个循环。3.2 提示词模板设计这是整个项目里最影响成败的部分。我试过几十版提示词最后稳定下来的模板长这样你是一个 CAD 建模专家使用 CadQuery 库。 请根据以下描述生成完整的 Python 代码。 要求 1. 只输出代码不要解释 2. 代码必须能直接运行 3. 使用参数化变量定义所有尺寸 4. 最后用 cq.exporters.export 导出 STEP 和 STL 零件描述{user_input}这个模板的关键在于约束输出格式。不加“只输出代码”这条模型会给你写一堆解释文字你还得额外解析。加上“参数化变量”这条生成的代码可维护性会好很多——所有尺寸集中在开头改起来方便。3.3 完整生成脚本把上面串起来一个最小可用的 text-to-cad 脚本大概长这样import cadquery as cq import re def generate_cad_code(description, llm_client): prompt build_prompt(description) response llm_client.chat(prompt) code extract_code(response) return code def execute_cad_code(code, output_nameoutput): local_vars {cq: cq} exec(code, local_vars) return local_vars.get(result) def text_to_cad(description, llm_client): code generate_cad_code(description, llm_client) result execute_cad_code(code) if result: cq.exporters.export(result, output.step) cq.exporters.export(result, output.stl) return True return False这段代码看着简单但里面有几个坑我后面会专门讲。先记住一个原则exec 执行模型生成的代码有风险生产环境一定要做沙箱隔离。我早期图省事直接 exec结果模型偶尔生成死循环或者删文件的代码差点把工作目录搞乱。3.4 第一次生成实测记录我拿“一个 80mm 长、40mm 宽、10mm 厚四角带 M4 沉头孔的安装板”做测试。模型第一次生成的代码大致是import cadquery as cq length 80.0 width 40.0 thickness 10.0 hole_dia 4.5 hole_offset 8.0 result ( cq.Workplane(XY) .box(length, width, thickness) .faces(Z) .workplane() .rect(length - 2*hole_offset, width - 2*hole_offset, forConstructionTrue) .vertices() .hole(hole_dia) ) cq.exporters.export(result, mounting_plate.step)跑下来一次成功几何正确孔位也对。但注意它只做了通孔没做沉头。我在描述里写了“沉头孔”模型理解成了普通孔。这说明模型对工程术语的理解还不够精确需要你在提示词里把沉头尺寸也明确写出来比如“沉头直径 8mm深 4mm”。4. 核心环节实现细节与参数计算4.1 尺寸解析与参数映射自然语言里的尺寸描述五花八门模型要能正确映射到代码变量这一步的准确率直接决定可用性。我总结了几类常见描述和对应的处理策略。第一类是显式数值比如“长 100mm”这种最好处理直接提取数字和单位。第二类是相对描述比如“孔距边缘一个板厚”这种需要模型做推理容易出错建议在提示词里要求“所有尺寸必须显式给出不要用相对描述”。第三类是隐含标准比如“M4 沉头孔”模型需要知道 M4 对应直径约 4.5mm、沉头直径约 8mm这依赖模型的工程知识储备。我的做法是在提示词里加一段术语对照表把常用标准件的尺寸预先告诉模型常用标准件尺寸参考 - M3 通孔直径 3.2mm - M4 通孔直径 4.5mm - M5 通孔直径 5.5mm - M4 沉头沉头直径 8mm深 4mm - M5 沉头沉头直径 10mm深 5mm加上这段之后标准件相关的生成准确率明显提升。这是典型的“用工程知识补模型短板”的思路。4.2 特征顺序与布尔运算逻辑CAD 建模里特征的先后顺序会影响最终结果尤其是布尔运算。模型生成的代码经常出现顺序问题比如先倒角再打孔导致孔边缘的倒角丢失。我在实操中固定了一套特征顺序规范并在提示词里强制模型遵守先做主体形状拉伸、旋转再做减材特征孔、槽、切除最后做修饰特征倒角、圆角这个顺序符合绝大多数零件的加工逻辑也能避免大部分布尔运算冲突。如果模型生成的代码顺序不对我会在胶水层加一个后处理检查用正则匹配特征调用顺序发现异常就重新生成。4.3 参数化变量的组织方式好的参数化代码所有尺寸应该集中在开头并且有清晰的命名和注释。我要求模型按这个格式输出# 参数定义 length 80.0 # 板长 mm width 40.0 # 板宽 mm thickness 10.0 # 板厚 mm hole_dia 4.5 # 通孔直径 mm hole_offset 8.0 # 孔中心距边缘 mm这样做的价值在于后续修改成本极低。客户说“板长改成 120”你只需要改一个数字重新跑不用重新描述整个零件。这也是代码驱动型路线相比直接生成网格的核心优势——可维护性。4.4 导出格式的选择与注意事项CadQuery 支持导出多种格式常用的有 STEP、STL、DXF、SVG。选哪个取决于下游用途。格式用途特点STEP工程对接、CNC 加工精确 B-rep可编辑STL3D 打印、渲染网格精度取决于细分DXF二维切割、激光加工平面轮廓SVG文档插图、展示矢量图不可用于加工我的建议是同时导出 STEP 和 STL。STEP 给工程用STL 给快速预览和 3D 打印用。导出 STL 时注意设置合适的细分精度默认值有时候太粗曲面会显得有棱角cq.exporters.export(result, output.stl, tolerance0.01, angularTolerance0.1)tolerance 控制线性偏差angularTolerance 控制角度偏差数值越小越精细但文件也越大。一般 0.01mm 和 0.1 弧度是个不错的平衡点。5. 常见问题与排查技巧实录5.1 生成代码报错速查表实操中遇到的报错五花八门我整理了一份高频问题速查表覆盖了八成以上的故障场景。报错现象根本原因解决方法NameError: name cq is not defined执行环境没注入 cadqueryexec 时传入 {cq: cq}几何为空或体积为 0布尔运算顺序错误检查减材特征是否在主体之后孔位置偏移坐标系理解错误明确指定工作平面和参考点导出文件打不开几何无效自相交用 result.val().isValid() 检查代码死循环模型生成逻辑错误加超时限制沙箱执行尺寸单位错误模型默认英寸提示词强制要求 mm这张表里最值得说的是几何有效性检查。模型生成的几何有时候看着没问题但实际是无效的比如自相交的面导出后在其他软件里打不开。养成导出前检查的习惯if result.val().isValid(): cq.exporters.export(result, output.step) else: print(几何无效需要重新生成)5.2 生成质量不稳定的应对策略同一个描述模型有时候生成得很好有时候一塌糊涂。这种不稳定性是当前阶段的常态我的应对策略是多次生成 自动筛选。具体做法同一个描述生成 3 到 5 次每次执行后检查几何有效性、体积是否合理、关键尺寸是否匹配。选第一个通过所有检查的结果。如果全部失败就把失败信息反馈给模型让它修正后重试。def generate_with_retry(description, llm_client, max_attempts5): for i in range(max_attempts): code generate_cad_code(description, llm_client) try: result execute_cad_code(code) if result and result.val().isValid(): return result except Exception as e: description f\n上次生成失败{str(e)}请修正 return None这个“失败信息回灌”的技巧很实用。把报错信息追加到提示词里模型下一轮往往能避开同样的坑。我实测下来加上重试机制后简单零件的成功率从六成左右提升到九成以上。5.3 复杂零件的拆解思路一次性生成复杂零件失败率极高。我的经验是把复杂零件拆成多个简单特征分步生成再组合。比如要做一个“带散热鳍片的电机安装座”直接描述整个零件模型基本搞不定。但拆成三步就稳很多第一步生成底座主体第二步生成散热鳍片阵列第三步生成安装孔。每步单独生成、单独验证最后用布尔运算合并。这个思路的本质是降低单次生成的复杂度。大模型在短代码、单一特征上的表现远好于长代码、多特征。拆解之后每一步都是它擅长的任务。5.4 几个我踩过的坑第一个坑是单位混乱。早期我没在提示词里强调单位模型有时候按英寸生成出来的零件尺寸差了 25 倍。后来强制要求“所有尺寸单位为毫米”问题解决。第二个坑是坐标系默认值。CadQuery 默认工作平面是 XY但模型有时候会假设其他平面导致零件方向不对。解决办法是在提示词里明确“以 XY 平面为基准Z 轴向上”。第三个坑是倒角半径过大。模型生成倒角时经常给一个不合理的半径比如板厚 5mm 却倒角 3mm导致几何失败。我在提示词里加了约束“倒角半径不超过最小特征尺寸的三分之一”。第四个坑是导出路径问题。模型生成的代码里导出路径经常是硬编码的绝对路径换台机器就跑不了。我在后处理里统一替换成相对路径。6. 进阶方向与扩展玩法6.1 批量参数化生成跑通单件生成之后最有价值的扩展是批量变体生成。同一类零件改几个参数就生成一系列版本这在做产品系列化设计时特别省事。实现方式很简单把参数抽出来做成配置表循环调用生成函数。configs [ {length: 80, width: 40, thickness: 10}, {length: 100, width: 50, thickness: 12}, {length: 120, width: 60, thickness: 15}, ] for i, cfg in enumerate(configs): desc f一个 {cfg[length]}mm 长、{cfg[width]}mm 宽、{cfg[thickness]}mm 厚的板 result text_to_cad(desc, llm_client) cq.exporters.export(result, fplate_{i}.step)这个玩法我用来做过一批安装支架十几个尺寸变体半小时全部生成完毕手动建模至少要大半天。6.2 与现有设计流程的对接text-to-cad 生成的 STEP 文件可以直接导入主流 CAD 软件继续编辑。我的工作流是用 text-to-cad 出概念模型导入 CAD 软件做精确调整和工程标注最后出图。这样把 AI 的生成速度和人的工程判断结合起来效率比纯手动高不少。另一个对接点是3D 打印。生成的 STL 直接丢进切片软件适合快速验证外观和装配关系。我经常用这个流程做手板从想法到拿到实物快的话半天就能搞定。6.3 提示词工程的持续优化提示词不是一次写完就完事的需要根据失败案例持续迭代。我的做法是维护一个失败案例库每次生成失败就记录描述、报错、修正方法定期把高频问题提炼成新的提示词约束。比如发现模型经常忘记导出文件就在提示词里加“必须包含导出代码”。发现模型经常用错孔的标准尺寸就加术语对照表。这个迭代过程本质上是在把工程经验固化到提示词里让模型越来越懂你的需求。6.4 局限性与边界认知最后说几句实话。text-to-cad 目前的能力边界很清楚规则结构件很强自由曲面很弱概念阶段很强工程细节很弱单件生成很强复杂装配很弱。它不能替代工程师但能帮工程师省掉大量重复劳动。把它当成一个“手速极快但经验尚浅的建模助手”用它的速度补它的短板这才是正确的用法。指望它一句话出工程图现阶段还不现实但用它把概念建模的效率提升三五倍完全做得到。我在实际项目里的体会是text-to-cad 的价值不在于全自动而在于把人的精力从重复建模中解放出来集中到真正需要判断力的地方。尺寸怎么定、结构怎么优化、工艺怎么选这些还是得人来。但“把这个想法快速变成能看能改的三维模型”这件事它确实做得越来越好了。

相关新闻

为什么 Redis 主从异步复制无法保证分布式锁绝对不丢?生产环境容忍度评估

为什么 Redis 主从异步复制无法保证分布式锁绝对不丢?生产环境容忍度评估

在各种技术博客和面试八股文中,只要提起“高并发分布式锁”,十有八九推荐的都是:基于 Redis 的 Redisson 分布式锁。Redisson 封装了精美的看门狗自动续期、可重入 Hash 结构与防死锁 Lua 脚本,开箱即用,体验极佳。 然…

2026/10/10 4:00:33 阅读更多 →
Agent Reach:一句话接通16个平台,AI Agent联网能力实战指南

Agent Reach:一句话接通16个平台,AI Agent联网能力实战指南

1. 从"信息孤岛"说起:AI Agent 为什么需要联网能力如果你最近在折腾 AI Agent,大概率遇到过这样一个尴尬场景:你花了大半天时间把 Agent 的推理链路、工具调用、记忆模块都调通了,结果让它去查一条实时信息,…

2026/10/10 3:59:33 阅读更多 →
构建生产级Claude对话系统:状态代理与上下文管理实战

构建生产级Claude对话系统:状态代理与上下文管理实战

1. 项目概述:这不是“调用API”那么简单的事“Claude 对话:如何构建该功能”——这个标题乍看像一句技术文档的章节名,但实际拆开来看,它背后藏着一个被大量开发者低估的系统工程。我接触过几十个声称“已接入Claude”的项目&…

2026/10/10 3:59:33 阅读更多 →

最新新闻

从418到200:Python爬虫获取豆瓣Top250数据全解析

从418到200:Python爬虫获取豆瓣Top250数据全解析

前几天有个朋友问我,为什么他用 requests 请求豆瓣页面,状态码总是 418,而不是预期中的 200。我第一反应是让他检查 User-Agent,结果他回我一句:“User-Agent 不就是一段字符串吗?随便填一个不就行了&#…

2026/10/10 4:39:18 阅读更多 →
微信朋友圈一键转发技巧:从图片多选到收藏笔记的完整实操指南

微信朋友圈一键转发技巧:从图片多选到收藏笔记的完整实操指南

相信很多人都有过这种经历:朋友圈里刷到一条特别实用的攻略、一组拍得超好看的照片,或者某个重要通知,想转发给同事群、家庭群,结果发现自己只能一张张保存图片、复制文字、再重新拼一条。要是图片超过九张,还得忍痛删…

2026/10/10 4:39:18 阅读更多 →
SAS外场成像模糊排查:从运动测量到声速剖面的工程指南

SAS外场成像模糊排查:从运动测量到声速剖面的工程指南

那次的情形我现在还记得:湖面风浪不大,拖体挂得很稳,同事们都盯着屏幕等我开测。首发数据一出来,我心里就沉了——目标区域那片回波图,模糊得像隔着磨砂玻璃看东西,轮廓有,边缘全晕开&#xff0…

2026/10/10 4:39:17 阅读更多 →
AI搜索效果归因:用GEO方法量化业务增长

AI搜索效果归因:用GEO方法量化业务增长

1. 为什么“AI搜索带来增长”这句话在会议室里没人敢签字?上周三,我坐在某电商公司增长部的复盘会上,听一位算法同学指着大屏上的折线图说:“Q2全站AI搜索调用量涨了370%,用户停留时长2.8倍,我们确信这是增…

2026/10/10 4:39:17 阅读更多 →
安卓新闻App源码实战:从环境配置到功能扩展的完整指南

安卓新闻App源码实战:从环境配置到功能扩展的完整指南

简介:这是一套基于 Android Studio 开发的安卓新闻 App 项目源码与配套报告,面向计算机相关专业正在准备期末大作业的学生,以及需要项目实战练习的初学者。项目经导师指导并通过评审,获得 98 分,难度适中,源…

2026/10/10 4:39:17 阅读更多 →
背包问题进阶:从0-1背包到完全背包与多重背包的循环顺序深度解析

背包问题进阶:从0-1背包到完全背包与多重背包的循环顺序深度解析

我最早接触背包问题是在准备算法面试的时候,当时啃完了0-1背包的经典解法,觉得自己已经"会了"。直到某天被问到一道"物品可以无限取"的变体,才发现自己只是背下了代码模板,根本没理解状态转移里那个循环顺序到…

2026/10/10 4:38:17 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →