开头
最近"text-to-cad"在搞设计和搞3D打印的圈子里讨论度直接拉满。用一句人话解释,就是你打出"帮我生成一个M6的六角法兰螺栓",它真给你输出一个能用的CAD模型,而不是一张概念图。我前后花了两周时间,把能摸到的方案全部试了一遍,从网页工具到本地跑的模型都折腾过。今天把这些东西梳理清楚,包括哪些项目真的能落地、哪些还在实验室阶段、提示词怎么写才不翻车,以及最后导出STL/STEP去加工、打印时会踩的坑。
先说清楚这篇文章适合谁看:想用AI跑通"文字→模型"这条链路的机械/创客方向从业者,以及被建模折磨但会用自然语言的新手。如果你已经把CAD软件玩得比筷子还熟,这篇文章同样有价值——因为这玩意的主体思路不是取代你,而是把前期构型阶段那些重复劳动压到最低。另外,下文涉及的工具里,Zoo那个平台目前在线可用,开源项目也给了我源码,实操路径是完全可以复现的。
1. 先说人话:text-to-cad到底在搞什么
1.1 从"画图"到"写图":一个思维转变
传统CAD的思路是"画",不管你是用SolidWorks拉伸切除,还是用Rhino拉曲面,本质都在屏幕里手动构造。而text-to-cad整个思路换了个赛道:它把建模过程变成"写"。
更具体的说,现在的落地产品基本都走两条线。第一条是直接用大模型生成中间格式,比如把文字变成一串程序化代码,再让这串代码去驱动建模内核(比如CadQuery或OpenSCAD),最后产出STEP、STL这类标准格式。第二条是让模型直接预测CAD操作历史,输出B-rep固体模型。前者在社区里更主流,因为执行过程是可解释的,你拿到的是代码+参数,随时可以改;后者则更像"黑箱出图",但生成速度极快,目前更像论文里的东西。
我第一次玩通这个流程的感受是:传统建模像是自己一砖一瓦盖房子,text-to-cad则是拿着施工队的电话,说清楚你要什么结构,然后等它给你交付。但问题也很明显——施工队可能会听错话,而且对复杂的多层结构估计会直接摆烂。
1.2 为什么"直接生成程序化代码"更靠谱
如果只在AI绘图领域呆过的人可能想当然地认为text-to-cad就是"直接吐出一个STL网格"。目前以Zoo为代表的实际项目并不是这么做的,Zoo那个Text-to-CAD的底层不是去预测三角网格坐标,而是训练模型生成StepWise代码。
这一步选择非常关键。STL本质是一堆三角面片拼成的外壳,没有任何拓扑关系,你拿到STL后想改一个孔的直径,基本上等于要重新建模。而程序化代码则完完全全不同:每个尺寸、特征、布尔运算全在代码里,像基于Python的StepWise会自动给你生成一组带参数的建模步骤,你改一个数字,所有相关特征跟着变。这种特性就是参数化建模的价值,也是它能跟现有CAD工作流衔接的真正原因。
我拿同一个零件——一个塑料支架——让AI分别输出直接网格和程序化代码,体验差距极大。程序化版本我可以直接改壁厚和孔距,重新生成就是新的实体;网格版本想修改就只能去MeshLab里补洞、重划网格,几天都未必搞定。所以我的结论很明确:现阶段真正能落到生产链路上的方案,基本都是依赖程序化建模的,而不是直接生成多边形网格。
2. 现在值得上手的方案逐个看
2.1 Zoo的Text-to-CAD:上手最快的一条路
先说Zoo,这是目前我用过对新手最友好的平台。打开浏览器,输入文字描述,它会在几十秒内给你返回一份带3D渲染预览的StepWise代码文件,同时提供STL和STEP格式的下载。
关于这个工具的定位,你得搞清楚:它不是万能的。
我实测下来,像"一个M6x30的六角螺栓,头部对边13mm,头部厚度7.5mm,螺纹长度25mm"这种描述能稳定出结果;但如果描述里有比较多的曲面过渡要求,比如"带有G2连续曲面的鼠标外壳",那就大概率翻车,因为它更擅长处理棱角分明的机械零部件,而不是A级曲面。
实操中有一点值得注意:Zoo生成的是程序化参数模型,你在它网页的代码编辑器里直接改参数,模型会实时更新。这个能力对修改设计来说太香了,我甚至可以直接在预览界面里把尺寸改成需要的公差值,再下载STEP去CAM软件里走刀路。
2.2 通用大模型+本地建模库:自由度最高但门槛不低
如果你不想被Zoo锁在那个网页里,还有另一条DIY路线——让通用大模型帮你写CAD脚本。
具体说就是让大模型输出CadQuery或OpenSCAD代码,然后在本地运行。OpenSCAD走的是CSG(构造实体几何)路线,有点像用代码搭积木;CadQuery则更"工程化",它把建模操作提取成Python风格的命令,能够比较自然地表达"在某个面上打一排孔"这类需求。
我自己的例子是这样的:我让大模型写一个带4个M5安装孔的矩形法兰板,板厚4mm,长宽100x60,孔的坐标要对称。大模型很快就给了CadQuery代码,我直接用cq-cli跑出STEP再导入FreeCAD,完全没有遇到拓扑错误。
但门槛在于:你得有一定代码基础,能看懂报错,能改参数,还需要先把本地Python环境配好。对于小白来说这条路的挫败感比较强,不太推荐作为第一选择。
2.3 学术路线:Text2CAD和DeepCAD在干什么
研究社区里最近两年的工作集中在"从自然语言直接生成CAD操作序列"。比如MIT那边开源的Text2CAD相关工作,它的核心思路是把模型生成过程当成"写一串建模指令",每一步对应拉伸、剪裁、倒角这些操作。
这个方向如果继续走,理论上最终效果会更接近于一个真人工程师在CAD里一步步建模的过程,而不是"直接生成代码帮你去执行"。但就目前的开源实现来看,它处理复杂装配体的能力还非常有限,数据集也偏向单个机械零件。所以我的看法是:如果你赶论文或者想看技术方向,去看这些研究没问题;但短期内想靠这些论文模型直接干活,现实点说,不如用Zoo+手工微调流程。
2.4 怎么选:看你的场景需求
用一张表把几种方案的特点列清楚,方便你直接判断:
| 方案 | 输出格式 | 上手难度 | 修改能力 | 适合场景 |
|---|---|---|---|---|
| Zoo Text-to-CAD | StepWise/STEP/STL | 极低 | 强(参数化) | 快速原型、标准件、概念模型 |
| LLM + CadQuery | Python脚本→STEP | 中 | 强(代码改参) | 有代码基础的人做定制件 |
| LLM + OpenSCAD | .scad→STL | 中 | 强(CSG树清晰) | 简单几何体、3D打印稿 |
| 学术模型(Text2CAD等) | STEP/序列 | 高 | 弱 | 研究探索、论文复现 |
我的建议是:只想快点用上就直接Zoo;想深度研究那就花钱花精力折腾CadQuery;如果只是做点3D打印的小玩意,OpenSCAD路径足够用了,没必要一上来就上工业级方案。
3. 亲手跑一次:从文字提示到STL的完整流程
3.1 用Zoo跑通全流程
我把实际跑通的流程拆成几步,你可以按顺序直接操作:
第一步,打开Zoo官网的Text-to-CAD界面,在输入框里填写零件描述。我建议描述遵循"零件名称+关键尺寸+特征细节+制造约束"的结构,比如:"a flat rectangular mounting plate, 100mm by 60mm by 4mm, four M5 through holes at the corners with 80mm by 40mm hole spacing, chamfered edges on top face"。不要只给一个名词就完事,尺寸和特征信息越具体越好。
第二步,点击Generate,等待大约30秒到1分钟。浏览器里会先出现一个StepWise代码预览,同时右侧渲染出3D模型。这里我强烈建议你先转一圈检查一下各个视角,看看孔有没有穿,法兰面有没有偏。
第三步,直接在代码编辑器里改参数。比如你觉得孔距40mm不合理,直接改成45,模型秒更新。这个能力比传统CAD改特征还方便,因为传统CAD改完参数往往要重建关联特征,这里不用考虑父子关系的问题。
第四步,下载导出。选择STL用于3D打印,或者STEP用于导入更专业的CAD/CAM工具,比如SolidWorks、Fusion 360或者FreeCAD。我在Fusion里打开过Zoo导出的STEP,特征树能识别出来,不像有些在线工具导出的STEP是一坨死几何体。
3.2 用通用大模型本地生成OpenSCAD模型
如果你不想注册任何平台,完全可以在本地复现一条链路。我用的是OpenSCAD(免费开源),配合通用大模型来生成脚本。先安装OpenSCAD,然后把下面这段描述发到大模型对话框里:
"用OpenSCAD写一个矩形法兰板,长100mm、宽60mm、厚4mm,四角各开一个直径5.3mm的贯穿孔(M5螺栓间隙孔,留0.3mm余量),孔的圆心距短边边缘10mm,距长边边缘8mm,四个孔严格对称。板中央再开一个30mm x 20mm的矩形通槽。"
大模型给我返回了这样一段代码:
difference() { // 板体 cube([100, 60, 4], center = true); // 四个M5安装孔 for (x = [-40, 40], y = [-22, 22]) { translate([x, y, 0]) cylinder(h = 6, d = 5.3, center = true, $fn = 32); } // 中央矩形通槽 translate([0, 0, 0]) cube([30, 20, 6], center = true); }把这段代码保存为flange_plate.scad,用OpenSCAD打开后按F6编译,再导出STL即可。注意我这里故意把中央通槽的高度设为6mm(比板厚4mm大),就是为了让布尔运算能完全贯通,不然可能出现"槽底残留在板中间"的问题,这是很多初学者容易犯的错。
3.3 提示词怎么写才能减少翻车概率
跑了几十次之后,我总结出一套写提示词的公式,可以归纳成"四要素":实体命名(M6螺栓)、关键尺寸(含单位:mm)、特征约束(贯穿孔、对称、倒角)、制造意图(用于3D打印/CNC加工)。比如下面这两个对比:
糟糕的提示词:"做一个法兰盘。"
可用的提示词:"做一个用于管道连接的法兰盘,外径90mm,内径45mm,厚度12mm,开8个直径为9mm的螺栓孔,螺栓孔中心圆直径为70mm,均匀分布,外边缘做1mm的45度倒角。"
对比很明显:后者每个特征都有数值,AI生成的代码里参数就是确定的,修改起来也方便。前者呢?AI只能靠猜,尺寸出来一个"大概"的形状,完全不可用。
经验谈:提示词里最好避免"漂亮一点""看起来高端"这类主观词,因为程序化建模没有"漂亮"这个接口。你越是用工程语言描述(对称、均布、贯穿、深度、公差),结果越可控。
4. 背后原理拆开看:程序化建模为什么是聪明的路线
4.1 程序化建模相当于教AI"写菜谱"
如果理解不了程序化建模的精髓,就把它想象成写菜谱而不是直接上菜。你去餐厅不可能直接得到一盘做好的鱼香肉丝——大模型在text-to-cad干的事也不是直接给你一盘菜,而是把"鱼香肉丝怎么做"的菜谱写给你,后厨(渲染器/建模内核)再根据菜谱做菜。
文本到CAD也是一样,Zoo那套流程里的StepWise代码就是菜谱,而渲染器负责执行。为什么这个路线比"直接生成STL网格"可控?因为菜谱错了一个字,你可以看到是哪一步错了,可以单独修改,而一盘已经炒糊的莱你无法通过"再加热"来修正。另外,菜谱本身是结构化的,便于版本管理和复用;写一次菜谱,后厨可以精确执行一万次。
4.2 训练数据从哪来:这个方向最容易被忽视
可能有人会问:大模型怎么学会把这些文字和建模操作对应起来的?答案就是海量带标注的三维模型数据。目前开源界有几批比较关键的CAD数据集,比如ABC是McMaster-Carr的百万级机械零件数据集,Fusion 360 Gallery提供了大量带操作历史的建模文件,这些数据经过处理变成"文本-建模操作序列"的对,喂给模型训练。
也就是说,模型学到的不是"人类审美",而是"此类输入在历史数据里最常对应哪种操作组合"。这也解释了为什么当前模型对标准机械件(法兰、螺栓、轴、孔板等)生成效果特别好,因为这些零件在训练数据里出现频率遥遥领先;而对外观造型类的东西(消费品壳料、曲面雕塑件、异形灯饰)效果就差,因为训练数据里很少。
4.3 参数和约束:工程模型和玩具模型的本质区别
用文字生成CAD还有一个很核心的优势来自"约束"这个概念。工程模型不是随便一堆特征堆叠的,它内部有一套参数关联和拓扑逻辑。
比如一个法兰盘的螺栓孔分布圆直径和法兰外径往往有比例关系,如果你在这个项目里修改外径,最好让孔分布圆也跟着变。程序化代码天生支持这种约束,因为它是代码,关联关系就是变量表达式。你在StepWise代码里写上bolt_circle_d = outer_d - 2*edge_margin,然后后面对孔坐标的所有引用都基于这个变量,那么改外径的时候孔会自动跟随。这不只是方便,而是传统CAD参数驱动设计的核心追求。
所以我的看法是:text-to-cad这条技术路线的价值不只在"从无到有",更在"从有到改"。机器学习的部分把拍板的时间省了,而代码化的骨架又把你后期折腾的时间省了,这两件事加在一起才真正改变了早期结构设计阶段的效率。
5. 实机踩坑:常见报错、离谱结果与排查思路
5.1 常见问题速查表
跑了大量case之后,我把最典型的翻车情况整理成一个表,你可以对照排查:
| 现象 | 根本原因 | 处理办法 |
|---|---|---|
| 生成出来的模型是个空壳 | 布尔运算差集把主体干掉了,通常因为切除体太大或位置偏移 | 检查差集对象尺寸,确认切除范围小于主体;把diff顺序调整一下 |
| 孔的位置对称性很差 | 提示词里没写"对称/均布",模型自由发挥了 | 重新描述特征,指明"关于中心轴对称"或直接给坐标值 |
| 导出STL之后表面有破洞 | 多个实体没有合并,网格划分留了缝隙 | 在CAD里做一次布尔并集,或者重新检查拓扑共用面问题 |
| 生成尺寸完全不对 | 单位提示缺失,比如只说"孔径5"没写mm | 补充单位,并在提示词里明确"所有尺寸单位是毫米" |
| 大模型生成了能渲染但不可修改的网格 | 走错路线,用了图像生成转3D那类工具 | 确认目标应该是程序化代码,不是三角网格 |
5.2 尺寸精度问题:AI并不真正理解"毫米"
这是最坑的一个点。
我让Zoo做一个"长为30mm的槽",结果输出是"3.0",我猜模型把"30mm"理解成了"3个格子"。后来我换成写"length = 30.0 // millimeters"这种代码注释风格,才稳定输出。类似的经验也适用于通用大模型:你直接告诉它"单位是毫米",但更好的做法是,在描述里把所有数据带齐,并让它生成时把单位标注在注释里。
哪怕这样,生成结果依然可能有3%-5%的偏差,所以关键配合面的尺寸千万不能直接拿AI生成结果去加工,至少要导入CAD里量一遍再出图。
5.3 导出格式选择:STL只适合打印,STEP才适合干活
很多小白拿到STL就以为是完成了,其实STL只是"面片汤",它不带拓扑、不带单位、不带精度。你把它放进CNC编程软件或者做仿真,几乎没法用。STEP是实体格式,能携带曲面类型和拓扑关系,导入专业CAD还能继续编辑,这才是"能进工作流"的交付物。
实操中我一般这样处理:如果只是自己3D打印玩玩,STL足够;如果要给别人加工、开模或者做装配干涉检查,必须导出STEP后再检查。Zoo导出的STEP用FreeCAD打开目前没有遇到破损,这点值得肯定。
5.4 提示词优化自查清单
根据我的踩坑复盘,每次生成前对照下面这个清单过一遍,能大幅降低失败率:
- [ ] 实体名称是否说清?比如"M6六角法兰螺栓"而不是"一个金属件"
- [ ] 是否给全关键尺寸?长宽高/直径/厚度/孔距
- [ ] 是否注明单位?毫米
- [ ] 是否描述特征关系?对称/均布/同心/贯穿
- [ ] 是否给出加工约束?是否要倒角、要圆角、要间隙
- [ ] 是否说清输出目标?STEP/STL/代码
6. 真实使用场景:怎么把它接进现有工作流
6.1 零件替代与逆向设计的快速起点
我最近遇到一个很常见的场景:老设备上有个塑料支架断了,厂家停产,图纸也找不到。传统做法是拿卡尺量一堆尺寸,然后手工画三维草图再建模,整个过程至少半天。
用text-to-cad的思路是:先用文字把这个支架的大致结构描述出来,"一个L型支架,两个安装面分别厚4mm,长面80mm宽40mm,短面40mm宽40mm,每个面上有两个直径4.2mm的贯穿孔,孔位距边缘8mm"。AI给出第一步模型之后,你再对照实物微调各参数,全程不到半小时就能得到一个尺寸接近的备件模型,然后直接拿去3D打印或者CNC加工出小批量替代件。
我特别强调一点:这是"快速起点",不是"直接成品"。实物有公差、有装配关系,你用AI生成初稿再手工校正,比完全从零快得多。
6.2 3D打印场景下的快速形态迭代
做3D打印的朋友应该深有体会,改一版设计最花时间的不是打印本身,而是中间那一段建模修改。
text-to-cad在这个场景里最大的贡献是一只"工具箱的感觉"。我先用文字生成一个大概的形状,看一眼不顺眼,直接改描述重新生成,不需要原来那种"删除特征→重画草图→重新拉伸→倒角"的繁琐步骤。关键是一种意识:描述即参数。
这个能力对验证设计想法特别强大。我跟朋友一起做个桌面收纳盒,从"盒子+分隔板"到"带倾斜抽屉的前面板"再到"加了加强筋的底板",每改一次只需要重新描述,预览模型半分钟就出来,一天可以验证七八个形态方案。如果全部用传统CAD做,一天大概只能做出两个,差距就在这里。
6.3 非机械人群的"会说就能做"
这个方向未来最大的增量市场绝对是"非专业人群"。我做手工皮具的朋友想做一个裁皮刀刀鞘,他描述了半天,AI给了个带斜面开槽的模型,他拿去打印出来,说"虽然细节不懂但真的能用了"。这种人对参数化一无所知,但他们从没觉得自己需要学CAD,他们只需要描述自己的需求。
所以对企业用户来说,如果产品线里大量存在"客户定制化参数件"的需求,比如外壳改个孔位、支架换个长度,那么把text-to-cad的模型生成能力和内部参数模板结合起来,等于把过去售前工程师半天的工作压缩到一次对话。这确实是能切实落地的工作流改造方向。
7. 最后聊点实用心得
我自己的体会是,text-to-cad目前还不是"无所不能的CAD替代品",但离"能用"已经非常接近了。把它当一个从语言到参数化模型的中枢来用,比把它当成一个"AI建模师"要合理得多。
一个很容易被忽略的小技巧:尽量把描述结构化,拆成"基础形状+特征1+特征2+约束条件"。不要用一大段散文来描述,改用编号列表或短句。我发现大模型对结构化的理解明显好于大段文字,生成的代码也更有条理。
这是一个你值得花一个下午去玩一下的东西。不需要懂代码,不需要装软件,打开网页打一句话,看到模型生成的那一刻,你对"未来的CAD应该长什么样"这个问题的答案,大概会有自己的判断了。