面对一个棘手的零件需求,过去我的流程是先翻标准件库,找不到就打开CAD软件从草图开始画,草图画完再拉伸、打孔、倒角,一套下来怎么也得十几分钟。现在有了text-to-cad,我只需要把需求用一句话说清楚,比如“M8六角法兰螺母,对边14mm,厚度7mm”,它就直接给我吐出一个可以用的三维模型。这种“自然语言直接驱动三维建模”的工作方式,正在把CAD工具链里最耗时的心智负担外包给模型,也让完全没学过制图的人有机会亲手做出自己想要的零件。
这篇文章不是泛泛介绍“AI可以生成模型”,而是想站在实际使用的角度,把text-to-cad是什么、背后有哪几条技术路线、怎么真正跑通一个生成流程、以及我在测试中踩过的那些坑,一次性讲清楚。无论你是机械工程师、3D打印爱好者,还是刚接触三维建模的新手,看完都应该能上手试一把,也知道结果出来后该怎么检查和处理。
1. text-to-cad 在解决设计师的哪个痛点
1.1 从一句话到三维模型的跳跃
传统CAD建模的本质是“把设计意图翻译成操作序列”。你要画一个法兰,先得画圆、拉伸、再在端面画螺栓孔、阵列、布尔减除。每一步软件都要求你给参数、选基准面、约束草图。这套流程熟练工做起来很快,但门槛和心智负担始终摆在那里:你得知道用什么特征、按什么顺序、怎么约束。
text-to-cad想要删掉的,正是“把意图翻译成操作”的这一整段。它直接学习自然语言和三维几何之间的映射关系,你的描述就是输入,输出的几何体就是结果。这个思路一旦跑通,对人的要求就从“会建模”变成了“会描述”——而描述需求,恰恰是每个人天生就会的能力。
我在测试中体会最深的一点是:它特别适合处理那些“结构明确但画起来繁琐”的对象。比如带孔的法兰盘、带有特定倒角规则的轴套、异形支架的初稿。这些东西结构不复杂,但手动建模少说要五六步操作,用text-to-cad几秒钟就能出一个基础版本,我再在这个基础上修改,效率提升非常明显。
1.2 为什么正好是现在爆发
text-to-cad不是突然冒出来的概念,十年前就有研究人员尝试过“自然语言建模”,但效果一直惨不忍睹。原因是模型既听不懂描述,也不懂几何。最近这一轮爆发,靠的是三个变量同时到位:
第一,多模态大模型能真正理解“带尺寸的自然语言”了。“直径30mm”“中心孔”“六角形”这些词到底指向什么几何含义,模型经过海量图文训练后已经建立了靠谱的语义映射。
第二,三维生成技术从体素、点云一路进化到神经隐式场和扩散模型,生成结果的连续性和细节水平有了质的提升。早年的方法生成出来的模型基本是“一团土豆”,现在至少能看出明确的工程特征。
第三,开源社区的积累让数据集和基座模型不再是秘密。大量CAD模型、脚本、参数化文件被用来训练模型,让text-to-cad从实验室玩具变成了可以实际试用的工具。Zoo的Text-to-CAD、OpenAI的Shap-E、Autodesk实验室的多项研究,都是这个方向的代表成果。
还有一个不可忽视的产业背景:CAD软件本身几十年来没有本质变化,厂商们迫切需要一个“说得过去的AI叙事”。于是我们看到Autodesk、PTC、Siemens都在做自己的AI助手,而开源这边直接用text-to-cad这个更激进的方向撬动传统工具链。这场变革的本质不是“建模更快了”,而是“人机交互方式变了”。
1.3 它能做的和不能做的边界
盲目吹捧没有意义。我在实际试用后给text-to-cad划了一条能力边界,大致可以用下面这张表来说明:
| 场景类型 | 实际表现 | 原因分析 |
|---|---|---|
| 标准件/常用零件(螺母、法兰、轴套) | 表现良好,直接可用 | 训练数据多,几何特征明确 |
| 简单定制件(带孔支架、异形底座) | 可用作设计起点 | 语义可描述,但细节需调整 |
| 复杂装配体(多零部件配合) | 基本不可用 | 模型难以理解装配关系和约束 |
| 高精度公差件 | 不可用 | 模型无法表达公差与配合等级 |
| 复杂曲面造型(车身、壳体) | 结果粗糙 | 隐式几何难以精确控制曲面 |
| 需要完整BOM和制造工艺的对象 | 不可用 | 输出只有几何,没有工程语义 |
一句话总结:它是“概念设计加速器”,不是“工程出图机”。凡是可以在脑子里用一两句话描述清楚、且几何关系相对简单的对象,它都能帮上忙;凡是需要精确公差、装配约束、工艺知识支撑的对象,现阶段还得靠人。
2. 技术路线拆解:从语言到几何的四条路径
2.1 端到端生成:扩散模型直接吐网格
第一条技术路线是端到端的生成式方法,代表是OpenAI的Point-E和Shap-E。基本流程是:文本先经过CLIP或T5这类文本编码器变成向量,然后再通过一个三维扩散模型逐步去噪,最终输出点云或者网格。
这类方法的优点是泛化能力极强,什么奇奇怪怪的描述都能给你生成一个东西,“一只戴帽子的猫”这种跟工程毫无关系的请求也能跑通。缺点也很致命:生成结果通常不具备CAD语义,没有参数化特征,没有可编辑的草图历史,本质上是一坨三角形网格。你可以在3D打印机上把它打出来,但没法在SolidWorks里像编辑普通特征那样编辑它。
如果只是做视觉验证、概念模型、快速原型,这条路线完全够用。但如果你想把它接入正式设计流程,指望它生成一个带特征树的可编辑模型,它做不到。所以这类方法更多被视作“三维版的文生图”,距离CAD工作流还有很大距离。
2.2 程序化建模:让大模型写CAD脚本
第二条路线更有意思:不让模型直接生成几何,而是让大语言模型生成一段CAD脚本。常见的脚本语言包括OpenSCAD、CadQuery、FreeCAD的Python API等。模型输出一段代码,本地的CAD内核解析代码后生成模型。
我拿OpenSCAD写过这样一个简单的六角法兰螺母脚本:
module hex_nut(flat_to_flat = 14, thickness = 7, hole_d = 8.4) { r = flat_to_flat / 2 / cos(30); difference() { cylinder(h = thickness, r = r, $fn = 6); cylinder(h = thickness + 0.1, d = hole_d, $fn = 64); } } hex_nut();这段脚本简洁明了:外轮廓用六段圆柱模拟六角形,中间的通孔用第二个圆柱做布尔减除。大模型生成这种脚本的成功率相当高,因为它本质上是在做“代码生成”任务,而代码生成恰好是当前大模型最擅长的领域之一。
这条路线最大的优势是“可编辑、可参数化”。脚本里的每个尺寸都是变量,后期想改成对边16mm,改一个参数就行。这非常贴合工程师的使用习惯——我们需要的不是一张死板的模型,而是一个可以继续迭代的“活”设计。缺点是需要本地有对应的CAD内核环境,处理复杂几何时脚本可能报错,需要懂得调试。
2.3 混合路线:先生成中间表征再转换实体
第三条路线是目前产品化最激进、也最贴近“真CAD”的一条:不直接生成网格,也不完全依赖脚本,而是先生成某种中间表示,再转换成真正的实体模型(B-rep / STEP)。Zoo推出的Text-to-CAD系列模型走的就是这个思路。
具体做法各厂商不完全一样,但大方向都是让模型同时理解“几何形状”和“CAD特征语义”。模型输出的不是简单的三角形网格,而是能被CAD内核识别为拉伸、旋转、倒角、布尔运算等特征的数据结构。这样一来,生成结果可以直接以STEP格式导入主流的CAD软件,保留实体属性,甚至保留可编辑的特征信息。
这条路线对模型能力的要求非常高,因为B-rep的拓扑结构比网格复杂得多,既要有精确的曲面方程,又要保证边界的闭合和水密性。它不像网格那样可以容忍轻微的破面和穿模。正因如此,这类模型目前对输入描述的规范性要求也更高,Prompt写得含糊一点,输出就容易崩。
2.4 选型建议
三条路线各有适用场景,我的建议是:先看你的最终目的是什么。如果只是3D打印一个物理原型,网格就够了,走第一条路线最省事;如果希望模型能反复修改迭代,或者要放进正式图纸流程,走第二条或第三条路线。第三条路线目前成熟度还比不上第二条,但上限最高——因为它输出的STEP文件意味着你的下游工具链全都可以继续使用。
选型时还要考虑你是不是有GPU。端到端的扩散模型本地跑起来很吃显存,16GB是起步线。相比之下,让大模型写脚本并本地解析,对GPU的依赖低得多,因为生成脚本的是常规LLM,解析脚本的是CPU上的CAD内核。这两种方式的算力要求根本不在一个数量级。
3. 实操:跑通一个text-to-cad工作流
3.1 零代码体验:在线Demo试起来
如果你只是想感受一下text-to-cad的效果,完全不用先搭环境。Zoo在Hugging Face上放了公开的推理Space,打开网页输入描述就行。类似的在线Demo还有不少,我建议你优先试那些明确标注支持“STEP输出”的版本,因为STEP结果比STL更有工程价值。
在线Demo的使用方法没什么门槛,但我建议你第一次别输入那种很复杂的描述。先用“a simple cylindrical container with a lid”这类简单句子试,看看默认参数下的输出速度和质量,再逐渐增加尺寸、孔位、倒角等要求,感受模型对不同信息的敏感程度。
有一点需要注意:很多Demo为了控制推理成本,默认生成的分辨率并不高,输出结果看着粗糙别急着下结论。去设置里把网格分辨率或采样步数调高,效果会好不少。如果Demo不提供这些参数,可以改用API或本地方式来跑。
3.2 本地环境搭建与依赖选择
想进行批量测试或处理敏感模型,本地环境更可控。以Zoo模型的通用调用方式为例,你至少需要准备Python环境、PyTorch、transformers和gradio_client这几个基础组件。具体依赖版本以官方仓库README为准,不同时期的主分支变动很大。
我个人建议你使用虚拟环境来做,避免污染系统级的Python环境。创建虚拟环境后先安装GPU版PyTorch,再装其他依赖。我第一次跑的时候就是直接用conda base环境,结果版本冲突折腾了一下午。虚拟环境隔离干净,踩坑概率小很多。
用API方式调用在线模型有一个我给自己的硬性要求:常看别人的代码很容易把一个核心逻辑忽略掉,那就是“记得做后处理”。模型返回的数据往往需要经过坐标变换、网格清理、法线重计算等步骤才能正常导入CAD软件。别生成完就直接拖进SolidWorks,结果大概率是模型显示异常或无法编辑。
3.3 提示词怎么写得准
text-to-cad表现好坏,一半取决于模型,另一半取决于你的Prompt。这不是玄学,而是因为模型对自然语言的理解高度依赖表述的精确性。我总结了四个实用习惯:
第一,明确写出单位。说“直径30”不如说“直径30mm”,模型对公制单位的理解明显更稳定。
第二,写出具体数量和位置。说“带几个孔”不如说“在距离中心25mm的圆周上均匀分布6个直径5mm的通孔”。
第三,说明相对位置和朝向。加上“底部”“顶部”“中心贯穿”“一侧”这类方位词,能显著减少模型理解偏差。
第四,声明不需要的特征。比如“不要圆角”“不要倒角”“保持直角”这类负面描述有时比正面描述更重要,因为模型默认倾向于生成“圆润好看”的模型,而工程件往往需要锐利边角。
我放一组我自己测试时的对照,方便你直观感受:
| 差提示词 | 好提示词 | 结果差异 |
|---|---|---|
| 一个法兰 | 外径80mm、内径30mm、厚度10mm的法兰,在直径60mm圆周上有4个均布的直径9mm通孔 | 前者尺寸全凭运气,后者基本一次到位 |
| 一个螺母 | 对边14mm、厚度7mm、螺纹孔直径8.4mm的六角螺母 | 前者可能生成五角或圆角化对象,后者稳定输出六边形 |
| 一个支架 | L形支架,长50mm、宽40mm、高5mm,竖直面中心有一个直径10mm的孔 | 前者形状不确定,后者结构清晰可编辑 |
这些对照不是说我写的Prompt就是最优解,但方向是明确的:模型对“具体”的响应远好于对“抽象”的响应。把模糊的描述翻译成几何确定的语言,是使用text-to-cad最值得花时间练习的技能。
3.4 生成结果的后处理与格式转换
模型输出后并不能直接进入正式流程。我一般会做三步检查和处理:
第一步是水密性检查。在MeshLab或Blender里看模型是否存在破面、开放边、翻转法线。网格模型如果非水密,3D打印切片时会出错,导入CAD内核时更可能直接报错。
第二步是尺寸校验。模型生成时不会自动标注尺寸,你需要用测量工具验证关键尺寸是否与Prompt一致。我遇到过几次Prompt里写了50mm,实际生成出来却少了近10%,大概率是模型在解码时把比例弄偏了。
第三步是格式转换。STL转STEP不是简单换个扩展名,需要经过逆向或网格转曲面处理。如果你用的是FreeCAD,可以用Mesh Design工作台把网格转成Shape,再导出STEP。这个过程对简单几何体效果尚可,但对复杂曲面会产生大量微碎片面,模型体积暴涨,后期编辑极度痛苦。所以如果最终目标是STEP,最好直接用支持实体输出的text-to-cad版本,而不是拿STL硬转。
4. 常见问题与排查技巧实录
4.1 八个高频翻车现场
实际测试中,text-to-cad的失败模式高度集中。我把遇到的典型问题整理成一张速查表:
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| 孔洞缺失或变成凹坑 | 网格分辨率不足,小特征被抹平 | 提高采样步数,或改用程序化路线 |
| 尺寸比例失衡 | Prompt缺少定量描述 | 补上具体尺寸和单位 |
| 重复元素过多或莫名对称 | 模型先验过强,偏好规则对称 | 明确写“不均匀分布”或给出具体坐标 |
| 只生成外轮廓,内部实心 | 布尔特征被丢弃 | 提示词强调“通孔”“贯穿” |
| 单位混乱,尺寸相差10倍以上 | 模型对mm/inch理解错乱 | 统一使用mm并放在数字后面 |
| 曲面破碎,出现自交面 | 网格生成阶段拓扑重建失败 | 尝试重新生成或降低复杂特征 |
| 特征粘连,孔和边界的距离为负 | 布尔运算坐标判断失误 | 减少特征数量,或拆分描述 |
| 生成正常但无法导入CAD | 网格非水密或法线方向混乱 | 先做网格修复再导入 |
这八类问题基本覆盖了我两个多月测试中遇到的绝大多数情况。前几类靠优化Prompt就能解决大半,后几类则需要换路线或调整模型参数。
4.2 排查顺序建议
遇到一个生成结果不像样时,我建议按以下顺序排查,而不是盲目修改Prompt反复重试:
第一步,先看Prompt里有没有歧义。“一个带孔的板”这种描述几乎必然出问题,因为“孔”的数量、位置、大小全没定义。先把描述改到“换个人看也能画出一模一样的图”的程度。
第二步,看生成参数。分辨率是不是被调低了?采样步数是不是默认值?很多平台为了省算力默认值很低,导致小特征丢失。把参数拉高一个档位再试,很多时候问题自动消失。
第三步,检查输出格式是不是适合当前任务。想做STEP却选了STL输出,那必然需要大量后处理。反过来,只做视觉预览却要求精确STEP,浪费算力也没必要。
第四步,如果上述都没问题,那就多生成几个结果做“择优投票”。text-to-cad本身有随机性,同一个提示词跑五次可能出三种不同的结果。取其中结构最合理、特征最完整的那个继续加工,比跟一个“顽固的坏结果”死磕高效得多。
4.3 当前产品化落地建议
基于我的实际使用体验,text-to-cad目前最合适的产品化定位有三个:设计起点的快速生成、备选方案的批量探索、以及非专业用户的自助建模。
设计起点不用多说——生成一个基础形态,再进入CAD软件做细化调整,比从白纸开始快太多。备选方案批量探索很有意思:同一个需求换个视角描述,比如“底部安装的四孔支架”和“顶部承载的带翻边支架”,模型会给出完全不同的结构形态,这等于在进行初步的概念空间搜索。
非专业用户自助建模是另一个被低估的场景。车间老师傅需要一个小小的挡片,以前得找人画图,现在自己输入“长60mm、宽40mm、两端各一个直径6mm安装孔的2mm厚铝片”,直接拿到可打印的模型。这种“让需要零件的人自己生成零件”的模式,在设备维修、工装夹具、个性定制等场景里价值非常大。
需要特别提醒的是:AI生成的模型绝不能不经审查就直接用于受力关键件或批量生产。我见过连基本壁厚都不满足的对象被直接送去加工,结果装上去就断了。AI是设计助手,不是质量保证体系。引入任何AI生成模型之前,必须确保有明确的设计评审和仿真验证环节。
5. 个人经验与下一步玩法
折腾text-to-cad这段时间,我最喜欢的用法并不是生成一个完整零件,而是用它配合传统的参数化建模做“半自动工作流”。比如我需要一个非标法兰,先用text-to-cad生成一个结构合理的初始版本,导入FreeCAD后把关键尺寸改成变量,然后把这份参数化脚本存进自己的标准件库。以后再遇到类似需求,直接改两个参数就出模型,根本不用再碰AI。
这种“AI生成起点,参数化固化经验”的组合拳,我认为是当前阶段最务实的落地姿势。它既利用了text-to-cad快速生成的优势,又规避了模型精度不足、特征不可编辑的劣势,最后沉淀下来的都是自己能完全控制的资产。
我下一步打算尝试的方向有两个:一是收集自己所在行业的标准件库,用RAG方式把它们组织起来,让模型在生成前先检索“最接近的历史设计”作为参考,这比完全自由生成靠谱得多;二是尝试在本地微调一个小型模型,专门学习某一类特定零件(比如钣金支架)的几何规律,看看能不能显著提升这类任务的一次成功率。
如果你也想上手,我的建议很简单:今天就在在线Demo上试一个你最熟悉的零件,别用那种“要什么自行车”的抽象描述,就用精确到毫米的需求描述写一次。等结果出来,你大概率会第一次直观感受到“说话建模”带来的冲击——这确实和拉草图完全不是一回事。