不用再为了一个法兰盘画三小时草图了。最近我把大量时间投在 text-to-cad 这条新赛道上,试了一圈主流工具,也自己搭过离线方案,最大的感受是:这东西不是来替代工程师的,它是来替你把那些“长在图纸上的废话”直接变成模型的。所谓 text-to-cad,简单说就是输入一句自然语言描述,系统自动生成对应的三维 CAD 模型文件,输出通常是 STEP、STL 这类通用格式,也有一部分方案直接生成参数化脚本。对于做机械结构、产品外壳、工装夹具的朋友,这意味着从“脑子里的想法”到“能拿去加工或继续装配”的距离被大幅压缩。
这篇文章不打算写成论文,就是把我这段时间踩过的坑、对比过的路线、实际跑通的流程梳理出来。适合正在评估 text-to-cad 能不能用于生产的机械工程师,也适合想自己搭一套文本建模工作流的开发者。我尽量把每一步的原理和选择逻辑讲清楚,哪些环节能用现成服务,哪些环节必须自己把关,都会交代到位。
1. 先看懂 text-to-cad 到底在做什么
1.1 它和普通 AI 生图不是一个物种
很多人第一次看到 text-to-cad,会下意识拿它跟“文生图”对比。这不恰当。文生图产出的是像素矩阵,你放大看就是颜色块,没法测量,更没法驱动数控机床。CAD 模型是另一回事,它必须满足边界表示:有明确的边、面、拓扑关系,模型上任意一点的坐标可以被精确查询,两个面之间的夹角是多少度、一个圆孔的直径是多少毫米,这些都是可度量的硬信息。
所以 text-to-cad 系统的核心难点不在于“画得像”,而在于“结构对”。它必须理解你句子里的拓扑关系,然后构建出在几何上自洽的实体。差之毫厘,就可能导致后续装配干涉或应力集中。这也是为什么现在的 text-to-cad 工具大部分选择走“代码生成 + 参数化建模”路线,而不是让 AI 直接输出网格模型。
我举个例子你就明白了。你输入“一个直径 50mm 高 30mm 的圆柱体,顶部开一个直径 20mm 的沉孔,深 15mm”。好的系统会把这句话解析成三个约束:圆柱体基础特征、孔的位置(默认圆心对齐)、孔的深度与直径。然后它内部会生成一段参数化建模代码,执行代码后得到边界表示模型。这个模型在 CAD 软件里打开,你还能继续编辑特征树,修改直径、加深沉孔,一切可追溯。
1.2 它真正解决的三个效率问题
第一是草图阶段的速度瓶颈。做过非标设计的人都懂,很多时候你心里已经想好了结构方案,但把它落实到 CAD 里需要大量重复性操作:画草图、标约束、拉伸、打孔、倒角。text-to-cad 可以把这段耗时从“小时级”压缩到“分钟级”,而且不用你一笔一笔画。
第二是方案沟通的语言鸿沟。机械设计里最累的环节其实是和上下游沟通:你说要一个“带安装边的壳体,四个角上开腰型孔”,对方脑子里的图和你脑子里的图往往不是同一个。用 text-to-cad 快速生成一版参考模型,再在这个基础上改,沟通成本会低非常多。
第三是衍生设计的前置输入。做拓扑优化或参数化仿真之前,需要先有一个干净的 CAD 基础模型。text-to-cad 很适合用来快速生成这一类“种子模型”,尤其是标准件、通用结构件的变体,只需要改几个关键参数就能批量产出。
2. 核心技术拆解:一条文本指令如何变成可编辑模型
2.1 从自然语言到约束图的解析机制
当系统拿到一句“设计一个……”时,它第一步做的是把自然语言转换成语义约束图。这里有个关键设计:约束图里的节点不是“词语”,而是几何要素,比如面、边、孔中心轴、基准平面。词与词之间的关系被转换成了几何关系,比如“穿过”对应共轴约束,“贴在表面上”对应共面约束,“在中心”对应对称或同轴约束。
这个阶段普通大语言模型也能完成,但专业系统的优势在于:它经过大量 CAD 领域的精调,知道工程语义的优先级。例如“长 100 宽 50 高 20 的盒子,四角倒 R5 的圆角”,这里的“四角”默认是指侧面的竖直边,而不是顶面的边。通用大模型容易忽略这类隐含语义,专业系统会把这些当作高频规则处理。
2.2 为什么主流方案都在用代码生成而不是直接输出几何
现在业界主流的 text-to-cad 工具,比如 Zoo.dev 的 Text-to-CAD、Autodesk 的近期实验项目,底层逻辑高度一致:先让大模型写一段代码,这段话以某种编程语言来描述几何体,通常是 OpenSCAD 的脚本语法,或 CadQuery 的 Python 接口,然后通过执行器把代码变成模型。
这背后的原因非常实际。直接让神经网络输出三维点云或网格,现有技术在精度和拓扑正确性上都不够看。而用代码生成,模型输出的是一系列几何操作:加一个圆柱、减一个长方体、做一个放样……这些操作是明确的、可验证的、可参数化的。生成的代码如果错了,你可以打开编辑器逐行检查,哪里不对改哪里。这让整个过程具备很强的可解释性,对工程设计来说,可解释性就意味着可靠。
另外,代码生成还有一层让你更容易控制的好处:同一个文本提示词,你可以生成多个变体,而这些变体的差异仅仅体现在几个参数上。比如把“直径 50”改成“直径 60”,生成的代码里只改一个数字,剩下的逻辑全部复用。这种灵活度是黑盒生成模型给不了的。
2.3 隐式曲面生成路线的处境
也不是所有团队都在走代码生成路线。有一派研究做的是隐式曲面表示,用神经网络逼近一个符号距离场,然后用 Marching Cubes 算法提取等值面得到网格。这种方案的优势在于擅长表达有机形态,比如手持设备的人体工学曲面、雕塑感强的外观件,这些都是传统参数化建模的短板。
但代价也很明显:一是输出的是网格模型,网格转成可编辑的 BREP 实体非常费劲,经常需要逆向软件重新拟合曲面;二是尺寸精度不好保证,神经网络逼近出来的等值面,某个关键孔的直径可能偏了 0.2mm,装配就可能出问题。就我目前的实践反馈来看,这条路线更适合做“概念造型”而不是“工程设计”。如果你要的是能直接出工程图的零件,老老实实走代码生成路线。
3. 工具选型实测:哪条路线适合你
3.1 在线服务与本地方案的对比
市面上已经有不少可以上手的 text-to-cad 工具,我按照“接入成本—编辑能力—可控性”三个维度整理了一张表格,是我实测后的主观评价,供你参考:
| 方案 | 输出格式 | 可控性 | 适合场景 | 上手门槛 |
|---|---|---|---|---|
| Zoo.dev Text-to-CAD | STEP | 中等,生成后可微调 | 快速概念验证、非标件初稿 | 低,网页直接用 |
| Spline AI | 原生Spline场景 | 高,图形界面调整 | 工业设计、曲面外观 | 低 |
| CadQuery + LLM 自建 | STEP | 极高,代码全可控 | 标准件系列化、批量变体 | 高,需要写代码 |
| OpenSCAD 脚本生成 | STL/3MF | 高,纯代码驱动 | 参数化结构件 | 中 |
Zoo.dev 这个在线工具是我目前用得最多的。它生成的模型以 STEP 格式输出,可以直接导入 SolidWorks、Fusion 360 或者 FreeCAD 继续编辑,这一点非常加分。它内部用的也是代码生成方案,用户不需要看到代码,系统在后台自动处理。用它出一个“带六边形安装孔的面板”大概十几秒,生成质量在简单几何体上相当稳。
3.2 自部署方案的组合玩法
如果你对数据保密性有要求,或者想批量生成某种特定结构的变体,我建议自己搭一条流程。我的做法是用开源的 CadQuery 作为几何内核,搭配一个大语言模型来做文本到代码的转换。
整套流程是:把提示词发给大模型,让它输出 CadQuery 的 Python 代码,然后用一个沙箱执行器运行这段代码,最后导出 STEP 文件。CadQuery 这个库值得多说两句,它用 Python 描述几何建模操作,API 设计得很符合机械设计直觉:你可以直接写 workplane 来选择面、写 hole 来打孔、写 fillet 来倒角。相比 OpenSCAD 的纯 CSG 语法,CadQuery 的表达能力更强,也更贴近工程师思维。
大模型这一层,我用过几个主流开源模型来做转换任务。效果上来看,简单几何体的代码生成准确率已经不错,但对复杂装配体或多实体操作还容易出逻辑错误。我的缓解方案是给模型提供固定的“代码模板”,让它在模板基础上改参数,而不是完全自由发挥。这样可以把准确率从六成拉到九成以上。
3.3 选型决策建议
没有最好的工具,只有适合你当前阶段的方案。我的建议是分三步走:先用在线工具体验一遍全流程,理解 text-to-cad 的能力边界,重点测试它输出模型的可编辑性;然后挑一个你日常最常画的零件类型,反复试生成,看能不能达到“改改参数就能用”的状态;如果确认值得投入,再考虑搭本地流程。本地化最重要的理由不是省钱,而是你能把所有中间产物沉淀成自己的参数化零件库。这个库越厚,后续生成新零件的速度就越快,相当于你的模型逐渐学会了你们公司的常用结构。
4. 手把手实操:如何从提示词成功生成一个 CAD 模型
4.1 提示词编写的底层原则
很多人在 text-to-cad 上碰壁,不是因为工具不行,而是提示词写法不对。你把它当搜索引擎用是不行的,要把它当成一个“理解力有限但执行力极强的实习生”。核心原则是:把口语描述转成工程描述,把可能产生歧义的地方全部显式化。
举一组对比你就明白了。模糊的提示词是:“设计一个支架,上面放电机,底下固定在板上。”这种句子在工程上信息量几乎为零,什么尺寸都没有,系统只能靠猜。可用的提示词是:“设计一个 L 形支架,垂直板高 80mm、宽 60mm、厚 8mm,水平板长 100mm、宽 60mm、厚 8mm,垂直板顶部中央开直径 5mm 的通孔,水平板四角各开一个直径 6mm 的通孔。”后者把每个几何要素和对应的尺寸约束都写清楚了,系统生成的结果才可能符合预期。
关于尺寸单位,我在使用中建议:所有尺寸统一用 mm,并且在提示词里明确写出“单位毫米”或直接带单位符号。不少工具内部的默认单位并不统一,写出明确单位能避免模型“按英寸生成”的坑,这一点我至少踩过三次,生成的零件整体尺寸全部变了,装配的时候完全对不上。
4.2 一个从零到一的标准实操流程
我以生成一个“电机安装座”为例,把完整流程拆解开,你可以照着这个步骤来走第一遍。
第一步,明确边界条件。列出你所有已知的硬约束:安装面尺寸、孔距、孔径、避让空间。比如我这里要求底座 120mm × 80mm,厚 10mm,四角开直径 6mm 的安装孔,孔距分别是 100mm 和 60mm,中心开一个直径 30mm 的电机轴过孔。
第二步,写提示词。我会按“结构类型—主体尺寸—特征操作—细节处理”这个顺序整理句子,这样系统解析约束时能按优先级处理,最后得到类似这样一句话:“创建一个 120mm × 80mm × 10mm 的矩形底座,四角分别开直径 6mm 通孔,孔心距边缘 10mm,中心开直径 30mm 通孔。”
第三步,生成并检查代码或模型。在 Zoo.dev 这类工具里,你直接看预览模型。在自己搭的 CadQuery 流程里,你要检查生成的代码里每个尺寸数字是否符合预期、特征操作顺序是否合理。比如“先开孔后倒角”和“先倒角后开孔”,在一些情况下会导出完全不同的几何形状,需要注意操作顺序。
第四步,导出并验证。导出 STEP 后,把它导入 FreeCAD 或你常用的 CAD 软件,用测量工具检查关键尺寸。这一步不可跳过,我见过太多人直接拿生成模型去 3D 打印,结果孔位偏了 1.5mm,整块板报废。验证只需要 30 秒,但能省掉后面一小时的返工。
4.3 几何验证的标准检查项
拿到生成模型后,我一般按下面这个清单逐项检查,不做完不进入下一步:
- 尺寸检查:随机抽 3~5 个关键尺寸,用测量工具核对,特别是孔距、板厚、外形尺寸,看是否与提示词完全一致。
- 拓扑检查:检查实体是否存在非流形边或零厚度面,这个在做复杂布尔运算的时候容易出现,轻则无法导入 CAM 软件,重则后续网格剖分直接报错。
- 干涉检查:如果模型会参与装配,把生成零件导入装配体,看是否存在干涉。生成模型在单独看时没问题,但放到整个装配环境里经常会出现局部交叉。
- 方向检查:生成模型时经常发生坐标系翻转的情况。比如你要求“孔在顶面”,实际生成出来的孔贯穿方向反了。导入 CAD 后先检查模型方向是否与装配基准一致,不一致就旋转对齐。
4.4 从单个零件到参数化变体
如果只是生成一个零件,text-to-cad 的价值有限,它的真正威力体现在参数化变体上。我的做法是:先让系统生成一个基准模型,然后在该模型的代码基础上,把关键尺寸替换为变量,形成一套模板。
例如,我需要为五种规格的电机生成不同的安装座,它们的结构完全相同,只是安装孔直径和中心距不同。在 CadQuery 流程里,我会把这几个参数定义成变量,写成一个函数。然后,我只需要把每种规格的参数传给函数,代码会自动生成五个 STEP 文件,整个过程不用再写一句新代码。这种做法在传统 CAD 里也能实现,但用 text-to-cad 的流程来搭,效率差距非常明显:传统方式需要你先画好带参数的表驱动模型,而 text-to-cad 是让 AI 直接上手搭模型,你只需要审查代码逻辑是否严谨。
5. 常见问题与排查技巧实录
5.1 输出模型尺寸畸变
有一个非常经典的坑:你在提示词里写“直径 50”,系统生成出来的模型是“直径 50 英尺”。这听起来匪夷所思,但实际发生概率不低。原因在于大模型训练数据里充斥着英寸和毫米混合的 CAD 文件,它内部对单位的判断并不稳定。
排查方法是先看代码,再量模型。如果代码里写的数字本身没有问题,那就可能是执行环境单位设置的问题。CadQuery 默认使用毫米,FreeCAD 的导入选项里也可能有单位换算逻辑,检查这两个环节基本能定位。更根本的解法是:在提示词里明确写“直径 50mm”,并且把所有关键尺寸都加上单位后缀,不给模型任何“自由发挥”的空间。
5.2 生成结果不符合预期时的调整策略
如果你拿到模型,发现整体结构对,但某个特征位置不对,我建议你优先改提示词,而不是改模型。因为直接修改模型虽然可行,但会让你的工作流丧失通用性——下次换一个规格,你又要从头来一遍。
修改提示词要精准命中“变量描述”。比如生成的模型孔位置全部偏到了角落,你就需要更精确地描述孔的位置约束,把“四周开孔”改成“距离每条边 10mm 的中心处开孔”。如果模型把“圆角”理解成了“倒角”,你就要把“圆角”写成“圆弧半径 R5 的圆角”,并明确指示方向。
还有一个小技巧:生成前可以先让系统“复述”一遍它理解的几何结构。在自建流程里,我会让大模型先生成一段“中文结构清单”,列出它计划创建哪些特征、每个特征放在哪、尺寸是多少。确认清单没问题,再让它生成对应代码。这一步只多花几秒钟时间,但能把无效生成的概率降低一半以上。
5.3 复杂结构生成的失败模式
我做过的测试里,text-to-cad 最容易失败的结构是:多实体布尔运算、阵列特征和孔系结构。原因不难理解,AI 模型在纯文本训练中不太容易建立“第二个实体与第一个实体做差集”这类操作的扎实几何直觉。
针对多实体结构,我摸索出一个可行的拆分法:把一个复杂零件拆成多个简单零件分别生成,再把它们导入 CAD 里做装配或布尔合并。比如要做一个带散热片的壳体,散热片阵列单独生成一个实体零件,壳体本体生成另一个,最后在 CAD 里用布尔合并把它们变成一个零件。这样每一步生成都足够简单,准确率大幅提升。
5.4 常用排查操作速查表
| 症状 | 可能原因 | 解决动作 |
|---|---|---|
| 模型尺寸整体偏差 | 单位未显式指定 | 全尺寸加 mm 后缀 |
| 孔位偏移明显 | 位置约束描述含糊 | 明确参照边与距离 |
| 圆角变成倒角 | 特征类型有歧义 | 注明“圆弧半径” |
| 特征顺序错误 | 缺少结构优先级描述 | 按“主体—主特征—细节”排序 |
| 模型无法导入 CAM | 拓扑错误/自相交面 | 使用 CAD 修复功能或重生成 |
| 多实体操作失败 | 生成器难以处理复杂布尔 | 拆分为多个独立零件再合并 |
还要提醒一个很多人容易忽略的点:生成完的模型建议立刻导出一个备份。无论是在线服务还是本地脚本,同一个提示词在不同时间运行的结果并不完全一致,大模型的采样机制决定了它有一定随机性。如果你生成了一个满意的模型,把它导出的 STEP 文件和对应的提示词、代码一起妥善保存。过两周你再想复现时,如果不记录提示词和参数,大概率只能重新试错一遍。
6. 一些个人的使用体会和扩展建议
用了大半年 text-to-cad 之后,我的工作方式确实被改变了。以前遇到结构类似的零件,比如各种规格的安装支架、传感器固定座、电缆夹,我总是翻以前的图纸找相似件,然后一个一个改尺寸,费时费力。现在我的流程是:把历史图纸整理成一组提示词模板,每种结构对应一个模板,用的时候改几个关键参数,直接批量生成 STEP,再导入 CAD 做微调和装配验证。
这里我特别想说的是:text-to-cad 最花工夫的地方不在生成环节,而在于建立起你自己的“描述体系”。你提示词里的描述习惯,决定了生成模型的稳定性和一致性。如果你每次都换一套说法描述同一个结构,生成结果自然五花八门。我的做法是把常用的结构类型固化成标准提示词模板,并保存在团队共享文档里,大家统一用同一套描述语言,这样生成出来的零件风格高度一致,后续管理和复用都方便很多。
另外一个值得投入的方向是:把 text-to-cad 和参数化仿真联动起来。我已经在尝试用生成的参数化模型直接驱动仿真工具的批处理任务——用模板生成 20 个不同参数的支架模型,然后批量运行静力学仿真,筛选满足应力要求的最优参数组合。以前做这种参数扫描,光是建 20 个模型就够画大半天,现在基本半小时搞定,而且全是干净的可编辑 STEP 模型。这个流程一旦跑顺,对产品前期的方案选型帮助非常大。
如果你正准备开始尝试,我最后的建议是:不要贪多求全,先从你的日常工作中挑一个结构最简单、重复度最高的零件试起。跑通这一个小闭环的收获,远比到处试各种工具却什么都没深入要强得多。等这一条流程稳定了,再慢慢往更复杂的结构上扩展,你会发现这条路的潜力远比第一眼看上去大得多。