
如果你跟我一样脑子里已经有一个清晰的零件轮廓但一打开CAD界面就开始卡壳——先画哪个草图、怎么约束、倒角放哪步——那你一定会爱上“text-to-cad”这类工具。简单说它就是用自然语言直接生成CAD模型你说“一个带USB-C走线孔的桌面支架底座”它给你一段可编辑的建模脚本甚至直接输出STL。这篇文章不是搬运官方文档而是我自己在这类工具上折腾了几周后的完整复盘包括原理拆解、工具对比、完整的出图流程以及那些文档里根本不会写的坑。1. 一句话出模型的本质text-to-cad到底破解了什么难题1.1 传统建模的心智负担到底在哪传统CAD建模的痛点从来不是“画线”本身而是把设计意图翻译成操作序列这个过程。你脑子里想的是“这里需要一个直径15mm的孔孔心距底面20mm最好再加个沉头”但软件听到的是“先选面、建草图、画圆、标注尺寸、拉伸切除、再倒角”。每一步都有无数种等价做法而每种做法的后续可编辑性完全不同。text-to-cad换了个思路跳过操作序列直接描述设计意图。模型负责把语言翻译成一个参数化的几何描述再由底层的几何内核把它“算”出来。这相当于把“设计师-软件-几何内核”中间那层操作语言压缩掉了。用大白话讲传统建模是“你指挥软件怎么干活”text-to-cad是“你告诉软件要什么软件自己想办法”。这区别听起来不大但实际使用中最大的变化是你不再需要记住那些工具栏的位置和命令的层级关系只需要能把需求说清楚。1.2 谁最需要它谁用了会失望我实际体验下来以下几类人收益最大3D打印爱好者很多人的需求就是“一个能卡住手机的木架”“带孔的电池盒”这种单件、小批量的东西不值得花两小时建模但完全可以让AI出一版再改。机械工程师做概念验证前期方案阶段要快速出几个形状对比精度要求不高最重要的是快。不会CAD但会描述需求的创客比如电子工程师结构部分一直外包现在至少能自己出个初版。教育场景用来教“参数化建模思想”比直接教软件操作更直观。但也有反例。凡是涉及复杂装配、运动机构、精密配合的场景我劝你别指望它。这不是它能生成的“形状”不够多而是它目前缺乏对“公差”“装配关系”“材料工艺”这些隐性知识的建模能力。它适合做外形和结构概念不适合做工程级交付件。1.3 它和“文生图”“文生3D模型”不是一回事很多人把text-to-cad和Text-to-3D搞混。文生3D模型比如扩散模型直接生成mesh得到的是一个三角网格长得像但没法编辑、没有特征树、也不能出工程图。text-to-cad的目标是生成参数化特征模型也就是带“步骤”的实心几何你可以改尺寸、改特征、重新生成。我打个比方文生3D是在给你捏一个泥塑泥塑好看但改不动text-to-cad是给你一份“图纸施工队”图纸随便改施工队重新盖。对于真正要做东西的人来说后者的价值高得多。2. 把文字变几何的底层机制三种技术路线目前主流是哪条2.1 三条路线对比市面上所谓的text-to-cad底层其实分三类我梳理对比一下技术路线原理输出可编辑性精度LLM生成程序化建模代码大语言模型输出Python/CadQuery/OpenSCAD代码由几何内核执行参数化实体强代码即特征树高扩散模型生成隐式神经场/点云类似文生3D文本嵌入条件用3D表示网络生成体素或SDF网格/点云弱难以参数化修改中低文本检索参数化模板理解语义后匹配标准件库或参数模板参数化实体取决于模板中等结论很明确目前第一条路线是主流且最实用。原因很简单——LLM最擅长的是生成文本而CadQuery、OpenSCAD这类库本身就是文本代码两者天然契合。更重要的是代码是显式的、可审查的、可修改的这正好弥补了AI容易犯错的问题——你可以看代码找错误改参数重跑而不是接受一个黑箱mesh。2.2 真正干活的是几何内核不是大模型这是我用了一段时间后最深刻的体会大模型本身并不“懂”CAD它懂得是“描述几何体的代码长什么样”。真正把几何生成出来的是CadQuery背后的OCCT内核OpenCascade或者OpenSCAD背后的CGAL。打个比方大模型是一个很会画图纸的建筑师但它不搬砖。你让它画一个“两面夹角45度中间有加强筋”的盒子它能把图纸画得头头是道但图纸能不能盖出来、强度够不够还是施工队几何内核说了算。这带来的直接后果就是你调试的时候大部分报错其实来自内核或语法而不是“理解”问题。比如CadQuery换了版本某个API被废弃代码逻辑完全正确但跑不起来——这是非常常见的。2.3 为什么“约束”是核心中的核心传统CAD里草图的灵魂是约束平行、相切、固定、对称。text-to-cad的prompt里其实也在表达约束只不过用的是自然语言。但自然语言有个大问题模糊。你说“孔在板子的中间”“中间”到底是几何中心还是某个方向上的中点你说“背面加两条筋”“筋”多厚、多长、和边缘的间距是多少这些约束不明确生成的模型就会“看起来对实际没法用”。所以我后来养成了一个习惯凡是空间关系、尺寸、相对位置一定用具体数值和明确的参考对象来描述比如“在Y方向中心位置距顶面12mm处开一个直径6mm的通孔”。这个习惯直接决定了生成模型的可用率。3. 市面上能用的方案实测工具选型与效果对比3.1 我实际试过的几个方向先说结论目前没有哪个工具是“输入一句话就完美出模型”的但有几个组合拳思路非常成熟我按照使用体验排序讲方案A直接用GPT-4/Claude等大模型生成CadQuery/OpenSCAD代码这是我目前最推荐的方式因为可控性最强。我自己用的流程是在聊天窗口里描述需求 → 让它输出完整可运行代码 → 本地运行预览 → 发现问题截图或描述报错让它修改。这里的“text-to-cad”能力其实是通用大模型特定建模库知识的组合好在主流模型对CadQuery和OpenSCAD的语法掌握已经相当不错。方案BZoo Text2CAD这类专用开源模型这是专门为text-to-cad任务训练的模型。它的思路是用“自然语言-代码”数据对微调开源LLM输出可直接运行的建模代码。优点是小模型也能跑、专注度高缺点是更新慢、对复杂几何的支持不如通用大模型广。我试下来的感觉是简单零件效果不错一旦需求拐了几个弯它容易“偷懒”生成一个近似的简单形状。方案CBricsCAD等商业软件里的AI辅助商业CAD开始内置AI助手但功能更多是“命令助手”和“宏生成”而不是直接生成实体。比如你输入“创建一个100mm×50mm×5mm的矩形板再倒角”它能帮你组合命令但本质上还是传统建模的自动化。适合已经熟悉CAD的用户提速不适合当text-to-cad用。方案D小宇宙CAD/Text2CAD这些网页端Demo质量和性能参差不齐有的只输出简单的体素模型真正的工程可用度不高。玩一玩可以别指望干活。3.2 一个不容易察觉但很关键的选型维度预览和迭代速度工具选型时多数人只看“生成效果”但我强烈建议你把迭代速度也放进去。所谓迭代速度就是从你发现问题到修改完成重新看到模型的时间。我实测本地CadQuery VS Code预览改一次大约10秒体验最好。网页端Demo出图要排队改一次少则半分钟多则几分钟非常劝退。直接用OpenSCAD的话改参数自动重新编译几乎是实时的。所以我现在的工作流是大模型负责写代码我负责本地快速迭代。哪怕生成效果比专用工具差一点点迭代速度快这一个优势就完全值回来了。3.3 关于“AI会不会取代建模工程师”这个问题我听得多了说点实在的。text-to-cad目前能覆盖的是设计意图到参数化模型的翻译层而一个建模工程师的价值远不止翻译——他知道加工工艺、知道装配顺序、知道应力集中在哪里、知道这个零件在产线上一不小心就会装反。这些不是语言模型靠阅读能习得的必须来自实际的工程经验。所以我的看法是它更像一个“无限耐心、语法极好的建模助手”能帮我们把想法快速变成可编辑的草稿但最后把关的还得是人。你把它当实习生用效率提升立竿见影你把它当总工程师大概率要翻车。4. 实操全流程从一句需求到打印出来的STL这一节我完整记录一个最近做的例子一个带USB-C走线孔的桌面充电支架底座。整个过程大概用了40分钟其中有三分之一时间在改细节。我把每一步的关键决策和翻车点都写出来。4.1 第一步把需求“翻译”成结构描述很多人第一步就错了——拿起手机就在对话框里写“帮我做个支架”。模型又不是你肚里的蛔虫你至少要告诉它四件事是什么底座/支架/外壳几何尺寸长宽高、壁厚、孔径功能特征走线孔、卡槽、螺丝孔、加强筋空间关系孔在哪个面上、距离边界多少、和已有特征的位置关系我当时整理出来的需求单是一个桌面底座底面长90mm、宽65mm、厚度8mm。顶部需要一条宽2mm、深1mm的走线槽从中心位置通到背面。背面中部开一个宽度12mm高度8mm的USB-C走线孔孔中心距底面18mm。四个角各有一个直径4mm的安装通孔孔心距边缘8mm。这么写看起来很啰嗦但正是这些具体约束让后面的生成一次成型率大大提高。4.2 第二步把需求单喂给模型拿到第一版代码我用CadQuery作为目标语言prompt大致是这样的这里是我的常用模板直接抄就行请用CadQuery写一个Python脚本实现以下需求 1. 主体长90mm、宽65mm、高8mm的矩形块 2. 顶部走线槽宽2mm、深1mm沿X方向贯穿顶部中心线 3. 背面走线孔在Z18mm高度处孔宽12mm、高8mm从背面贯通到底座内部 4. 四个角安装孔直径4mm通孔孔心距两个相邻边缘均为8mm 要求 - 使用 cadquery 的 Workplane 语法 - 使用公制单位 - 生成完整的、可运行的Python代码 - 添加必要的注释模型生成的第一版代码大致是这个样子import cadquery as cq # 主体 base cq.Workplane(XY).box(90, 65, 8) # 顶部走线槽宽2mm深1mm沿X方向贯穿 slot (cq.Workplane(XZ) .center(0, 8) # 走到顶面高度 .rect(90, 2) .extrude(1)) # 向下挖1mm base base.cut(slot) # 背面走线孔中心距底面18mm usb_hole (cq.Workplane(YZ) .center(0, 18) # 中心高度18mm .rect(12, 8) .extrude(30)) # 向内部挖深 base base.cut(usb_hole) # 四个角安装孔 base (base.faces(Z) .workplane() .rect(90 - 16, 65 - 16, forConstructionTrue) .vertices() .hole(4)) show_object(base)这里有个很典型的知识点挖槽、挖孔都是用布尔减运算cut而不是在草图里画U型槽。CadQuery的哲学是“先建实体再切特征”理解这一点你才能看懂为什么AI生成的代码总是建一个大方块然后各种切。4.3 第三步跑预览第一轮修改避开了两个坑我在VS Code里装了CadQuery插件直接按预览键就能看到模型。第一眼就发现两个问题第一个问题是顶部走线槽的方向。我要求“沿X方向贯穿”但代码里用的rect(90, 2)确实对因为主体长边就是90mm沿X方向。OK这个没问题。第二个问题就典型了四个安装孔的高度。base.faces(Z)选的是顶面孔从头打到尾是对的但孔心距边缘8mm的计算方式不对——rect(90-16, 65-16)确实能算出中心到边缘8mm但那是相对顶面的中心线。因为孔是在顶面workplane上打的所以正好落在距边缘8mm的位置。第一版能跑通已经算运气好这里如果模型用了hole(4, depth8)打出来的就是盲孔而不是通孔那就踩第二个坑了。这里想特别说一下CadQuery有一个非常隐蔽的坑就是hole()默认打穿当前workplane所在实体的所有厚度而不是只打你指定的深度。如果你用的是faces(Z)孔就是通孔如果你不幸用了faces(Z)或侧面打孔方向就可能反掉。AI生成的代码经常在这里犯迷糊我后来每次都要专门检查这个方向。4.4 第四步优化细节加倒角和圆角第一版模型能用但边角太“生”打印出来容易割手。我追加了第二轮prompt请在上一步基础上做以下修改 1. 所有竖直边加半径2mm的圆角 2. 走线槽的开口边缘加0.5mm的倒角 3. 背面走线孔的四角改为半径3mm的圆角 请保留原有所有尺寸参数这里有好消息也有坏消息。好消息是AI能准确理解“圆角”和“倒角”的区别坏消息是它生成的代码里圆角顺序如果不对CadQuery会报“edges not found”之类的错误——因为倒角/圆角必须在实体上显式指定边一旦特征名称或者边ID对不上就会失败。这其实是一个经典的CAD问题拓扑命名不稳定。AI能把形状算对但它没法“看见”哪条边是哪个ID所以只能靠试错。我的解决方式是告诉它“用.edges(|Z)选择所有竖直边”因为那四条竖直边在Z方向上是连续的这个选择方式对任何长方体都稳定有效。最终的修改是这样base base.edges(|Z).fillet(2)实话说这一轮迭代花的时间比第一轮还久因为AI经常在edges的选择语法上出问题。但熬过这一步模型就从“能看”变成了“能打”。4.5 第五步导出STL进切片检查最后一步是导出STL并检查网格质量。CadQuery导出STL很简单cq.exporters.export(base, desk_base.stl)但我强烈建议导出后用切片软件或MeshLab打开看一眼重点检查三个东西是不是流形网格有没有破面、重叠面。一旦有切片软件会疯狂报错。最小壁厚走线槽挖完之后顶部剩余厚度只有7mm没问题但如果你同时挖了槽和孔两个特征交叉处的壁厚可能变得很薄切片打印会有风险。孔的尺寸建模时4mm的通孔打印出来实际会缩小约0.2~0.4mm视打印机补偿而定所以需要安装M3螺丝的孔建模时我会直接给4.2mm。这套流程跑通之后我回头把需求单里“四个角安装孔”改成了“底部沉头孔”AI很自然地配合生成了沉头参数。这就是参数化模型的好处——你改的是文字重新生成的是实体而不是在一个静态mesh上修修补补。5. 踩坑实录与进阶建议这些坑文档里不会写5.1 单位混用AI经常把英寸和毫米搞混这绝对是最搞笑的坑也是最危险的坑。有一次我要求生成一个“6×3英寸的盒子”AI在box(6, 3, 1)里直接用英寸数值但CadQuery默认是毫米结果生成出来一个152×76mm的板。你以为你改的是参数实际上你改的是“单位语境”。我的对策在prompt里写死“所有尺寸单位均为毫米mm”并且让它把关键尺寸用变量名定义在文件头部这样检查起来一目了然LENGTH_MM 90 WIDTH_MM 65 HEIGHT_MM 8 HOLE_DIAMETER_MM 4这个习惯救了我很多次。一旦生成结果不对劲先看变量值而不是盯着三维视图猜。5.2 悬空特征形状存在但物理上站不住text-to-cad生成模型时它不会做“物理合理性”的校验。我遇到过一个典型案例让AI给一个薄壁圆柱加一个安装耳它生成的耳是一个悬在圆柱外部的方块只有一小条边和圆柱相连。三维视图里看着像连上了实际上布尔求和之后接触面积小得可怜打印出来一掰就断。这种问题没有自动检测工具我的经验是生成之后旋转模型从各个方向看一遍特别注意那些“看起来刚好贴上去”的特征。在prompt里你也可以主动要求“所有附加特征的连接处请确保至少5mm以上的重叠或使用梯形加强结构”——模型虽然不会真的做结构分析但它会在几何上把连接做厚实一点。5.3 拓扑命名冲突AI改代码的隐形炸弹CadQuery用户都知道“Topological Naming”问题当你修改了之前某一步的特征后面的特征引用的边/面可能会变导致报错或生成错误. AI在帮你修改代码时尤其容易踩这个雷因为它往往是“增量式修改”你让它加一个圆角它在你原有代码的末尾追加一段而不会重构整个特征依赖链。我的经验是不要让它“追加改”而是让它“全文重写”。每次修改都重新提交完整需求单让它输出一份完整的新代码。这看起来笨但实际上比让它“找到问题所在再修改”成功率高得多。因为全文重写时它会重新规划特征顺序拓扑冲突的概率反而更低。另外强烈建议用Git管理你的模型脚本。每生成一版可运行的代码就commit一次改坏了随时退回。CAD脚本和软件代码一样版本管理永远是第一安全感来源。5.4 描述“方位”时的镜像陷阱这是最后一条也是我最常犯的错。中文里说“在背面开孔”模型可能会理解成“在屏幕视角的背面”而零件在装配里真正的“背面”可能是另一侧。这个歧义会让你的孔位左右镜像一旦生成出来你没仔细看打印完才发现孔位反了那真是欲哭无泪。我现在解决的办法是prompt里明确坐标系。CadQuery默认Z轴向上X向右Y向里。我固定用这个坐标系描述所有方位比如“在X轴负方向那一侧的面即左侧面开孔孔心距顶面10mm”。听起来很工程师腔但它避免了所有歧义。还有一个小技巧生成完先导出STL看一眼不要直接切片打印看一眼只要十秒能拦下八成低级错误。text-to-cad这个方向现在还很年轻离“一句话交付工程件”还有距离但作为从“想法”到“可编辑模型”的桥梁它已经足够实用了。说到底它把建模的门槛从“记住软件操作”降到了“把话说清楚”。如果你也打算入坑我的建议是别等工具完美现在就选一个大模型配CadQuery从一个小支架开始跑通一次全流程你就能真切感受到这类工具在工作流里的位置——它不会取代你但能把你从那些毫无创造力的重复操作里解放出来。