1. text-to-cad到底是什么:别把“文生3D”和“文生CAD”搞混了
前阵子跟几个做机械设计的兄弟聊AI辅助设计,发现很多人对text-to-cad的理解还停留在“用AI生成一个3D模型”这个层面。这个理解不能算错,但漏掉了最关键的东西:text-to-cad生成的不是一堆三角面片组成的“好看模型”,而是真正能进CAM、能标注尺寸、能改参数的CAD文件。我一听到这个方向就开始折腾,前前后后把主流项目跑了个遍,包括生成脚本路线、扩散模型路线、模板检索路线,踩了不少坑,也摸出了一些门道。这篇文章就把我这大半年的实操记录、选型思考、踩坑实录都整理出来,给想入坑的同行一个参考。
1.1 不是“文生3D”,而是“文生工程模型”
先搞清楚一个概念。市面上常见的“文生3D”,比如那些输入一句话就能生成一个三维网格模型的工具,本质上是AI在“捏泥巴”——它生成的是一个表面形状,背后没有任何参数、特征、约束关系。你拿这个模型去做有限元分析、做CNC编程、做装配配合,基本都干不了,因为模型内部可能是空壳,拓扑乱七八糟,尺寸也不可控。
text-to-cad走的是另一条路。它生成的是CAD原生的东西,常见形式有两种:一种是直接生成可执行的CAD脚本,比如FreeCAD的Python API脚本、CadQuery的建模范式代码,或者某个商业CAD软件的宏命令;另一种是生成参数化的B-Rep实体模型,也就是边界表示模型,由面、边、顶点和拓扑关系构成,能被CAD软件打开、测量、修改。这两者还有一个共同点:结果必须是可编辑的、有尺寸信息的、符合机械制图和加工逻辑的。
我用一个生活化的类比来解释:文生3D相当于你描述一只猫,AI给你捏一个猫的石膏像,好看但不能拆开;text-to-cad相当于你描述一个法兰盘,AI给你画一张标注了所有尺寸的工程图纸加一个参数化模型,你拿到手能直接改孔径、改厚度、改孔位,还能导出STEP格式去加工。这个差别,用过的人都知道有多重要。
1.2 它解决的三个实际痛点
我之所以持续关注这个方向,不是因为“AI很酷”,而是因为它确实戳中了工程日常里的几个痛点。
第一个痛点是概念图到初版模型的快速转换。很多时候客户或者产品经理给一段文字描述:“一个直径50mm的圆盘,中心孔20mm,周围四个均布安装孔,底下带一圈加强筋。”传统流程里,工程师要打开CAD软件,建草图、加约束、拉伸、打孔,少说也要十几分钟,来回沟通改尺寸更是没完没了。text-to-cad可以在几秒内给出一个初版模型,哪怕没有直接达到最终状态,至少把80%的重复劳动干掉了。
第二个痛点是标准件和通用件建模。法兰、支架、轴承座、齿轮、底座这类零件,结构规律、参数明确、重复度高,是最容易被生成式AI替代的工作。我用text-to-cad生成过标准的法兰盘、电机安装支架、带轮毂的齿轮,实测下来效率和准确率都相当能打。
第三个痛点是老图纸的逆向与改造。手里有一张旧零件的图纸或者一个STEP文件,想快速换个尺寸、改个孔位重新出图,传统做法要么重新建模要么用参数化改造,都挺费劲。text-to-cad配合反推流程,可以大大压缩这个环节的时间。
适合谁来看这篇文章呢?机械设计、产品结构设计、3D打印爱好者、智能制造方向的开发者,还有对AI编程辅助设计感兴趣的程序员,应该都能从中找到有价值的信息。我不写教科书式的原理堆砌,直接记录我实际跑通的过程、用过的方案、栽过的跟头和现在的推荐玩法,大家可以直接对着抄作业。
2. 主流技术路线与工具选型:三条路我实测走了一遍
text-to-cad听着是一个方向,实际上实现思路差别很大。我把自己实际接触过的方案按技术路线分成三类,分别跑了一遍,下面说说我看到的现状和各自适合的场景。
2.1 当前三类主流路线
第一类是大语言模型直接生成CAD脚本。这是目前最热、落地效果最明显的一条路。思路不复杂:用大量“文本描述 + CAD脚本”的配对数据微调一个代码模型,让模型学习从自然语言翻译成CAD操作命令。最简单的形态是让模型输出一段FreeCAD或者CadQuery的Python代码,执行这段代码就能得到模型文件。这类方案的代表是Text2CAD、CAD-GPT这类项目,它们一般会搭配特定的语法规则和约束描述,让输出的代码不出现低级语法错误。公开资料显示,这类项目通常会构建数万到数十万条“文本-CAD模型”配对样本,训练一个能理解工程语义的代码模型。
我实际体验下来,这条路最大的优点是可以直接拿到“带特征历史”的可编辑模型,因为脚本本质上就是建模操作序列,每一步都对应一个特征;缺点是模型质量高度依赖训练数据和提示词,对于没见过的新零件类型,生成结果大概率会缺特征或者尺寸偏差。
第二类是扩散模型生成几何,再重建成CAD实体。这条路跟AI绘画更接近,先让模型生成点云、体素或者隐式场表示的几何形状,然后再通过拟合算法转换成B-Rep实体模型。听起来挺美,因为理论上不局限于“训练集里见过的零件”。但实际跑下来,我的感受是“重建成品率”很不稳定。几何表示和B-Rep之间不是简单的等值面提取,涉及大量面的拟合、拓扑修复、圆角识别等操作,难度相当高。生成一个类似叶轮、支架这类复杂曲面的“视觉原型”还可以,但拿去做装配和加工,还差得远。
第三类是检索加模板组合。这种方式更工程化,不搞复杂的生成模型,而是先建一个标准件零件库,配好参数化模板,然后用大模型解析用户意图,去库里匹配模板并填入参数。我测过一些工业大厂做的AI生成工具,思路基本就是这条路。比如你输入“需要一个内径30mm、外径60mm、厚度8mm、四个直径6mm的均布安装孔的法兰”,它直接调一个法兰参数化模板,填好参数输出STEP文件。这条路最稳,但覆盖范围有限,只能做库里的东西。
我整理了一张对比表,方便大家根据自己的需求快速判断:
| 技术路线 | 代表方案类型 | 可编辑性 | 覆盖范围 | 生成稳定性 | 落地成熟度 |
|---|---|---|---|---|---|
| 生成CAD脚本 | Text2CAD、CAD-GPT | 高,保留特征树 | 中高,取决于数据集 | 中等,依赖提示词 | 较高,适合研究者 |
| 扩散模型重建 | 研究型项目偏多 | 低,需要大量后处理修复 | 高,可生成新形状 | 较低,重建成功率不稳定 | 低,暂不建议生产使用 |
| 检索+模板组合 | 工业AI工具 | 高,参数化模板 | 低,仅限于模板覆盖范围 | 高,稳定可靠 | 高,适合企业场景 |
三类路线我都建议感兴趣的读者至少跑一遍,因为每种路线的失败模式完全不同,亲手踩过坑,对“AI能干什么不能干什么”的判断会准很多。
2.2 我的工具选型建议:从CadQuery和FreeCAD开局
工具选型这块,我给新手一个明确的建议:别一上来就整商业软件的商业闭源AI插件,先搞开源工具链。原因是调试的时候你能看到完整报错,逻辑透明,改起来有抓手。
我首推的是CadQuery加FreeCAD的组合。CadQuery是一个用Python描述参数化CAD模型的库,号称“Python版的OpenSCAD”,但它比OpenSCAD强在支持真正的B-Rep实体建模和约束历史。CadQuery生成的代码,本质上就是text-to-cad模型最理想的目标输出——结构清晰、特征明确、可参数化。FreeCAD则负责做“翻译官”,把脚本执行结果转成STEP、STL、DXF等通用格式,或者直接打开进行人工修改。
为什么不用AutoCAD或SolidWorks的自动化接口呢?一方面这些软件授权成本高,另一方面闭源环境里报错信息不透明,出了问题很难排查。我自己跑text-to-cad的时候,遇到90%的问题都出在“模型生成代码但代码执行报错”这个环节,用开源工具链你可以拿到完整的堆栈信息,一步一步跟踪,很快就能定位是API调用错误、单位问题,还是几何约束冲突。
选定CadQuery之后,我建议大家先做一个小练习:手动写一个法兰盘的CadQuery脚本,跑通生成、导出、导入FreeCAD全流程。这个练习不用AI参与,目的是让你熟悉目标输出的“长相”。一个典型的法兰盘脚本长这样:
import cadquery as cq result = ( cq.Workplane("XY") .circle(60 / 2) .extrude(8) .faces(">Z") .hole(30) .faces(">Z") .workplane() .rect(4, 4, forConstruction=True) .vertices() .hole(6) ) cq.exporters.export(result, "flange.step")我刻意把代码写得精简,不堆高级操作。等你亲手跑通这一段,再看text-to-cad模型的输出,你就能一眼看出AI生成代码里哪些是无效操作、哪些会报错、哪些几何结果又丑又不能用。这个基本功,比看多少论文都管用。
3. 完整实操:用一句描述生成一个能用的法兰盘
光说不练假把式。下面这一段我记录一个完整的实操流程:从准备环境开始,到输入一句描述,最终导出一个法兰盘的STEP文件。这套流程我跑了不止三遍,每一步的反馈都是我实际操作后总结出来的,按这个顺序走基本不会卡壳。
3.1 环境准备与依赖安装
首先准备一个Python环境。我这里用的是Python 3.10以上的版本,因为新版CadQuery和PyTorch生态对高版本Python支持更好。建议用虚拟环境,避免跟系统Python乱七八糟的包打架。
python -m venv t2c_env source t2c_env/bin/activate # Windows下用 t2c_env\Scripts\activate pip install cadquery pip install torch transformers pip install git+https://github.com/your-choice/text2cad-project.git这里说明一下,text-to-cad方向的开源项目更新迭代很快,具体的仓库地址大家要以自己搜索到的项目为准,但安装套路基本就是“装PyTorch、装Transformers、克隆项目、装依赖”四步。我自己跑的时候,最大的坑是PyTorch的CUDA版本跟本机显卡驱动不匹配,导致推理速度慢到离谱。后来老老实实按PyTorch官网给的命令装,半小时搞定。
如果你没有独立显卡,也不用慌。我实测CPU模式下跑小模型,生成一个简单零件也就十几秒到半分钟,完全可用。用大模型的话CPU会慢一些,但不至于跑不动。对于学习阶段来说,CPU加小模型完全够了。
3.2 实操例子:生成法兰盘并导出STEP
环境备好之后,我输入了一句描述,目标是生成一个经典的法兰盘。描述写得越精确,生成结果越接近预期,这条经验值100%可靠。
我的提示词是这样的:
A circular flange with outer diameter 60mm, inner hole diameter 30mm, thickness 8mm, four through holes with diameter 6mm, evenly distributed on a bolt circle with radius 22.5mm.这里我刻意把“bolt circle radius”写成22.5mm,而不是直径45mm,是因为我发现很多生成模型对“直径→圆周均布”这个语义转换容易出错,直接写成半径值,模型更容易理解。这是我从多次失败里总结出来的提示词技巧之一。
运行生成命令,从项目里选一个基础生成脚本:
python generate.py --prompt "A circular flange..." --output flange输出内容通常有两类:一类是生成的CadQuery/FreeCAD脚本文件,另一类是项目直接把脚本执行好得到的STEP模型文件。我建议你优先保留脚本文件,因为这是模型的可编辑资产;STEP文件只是给下游用的“只读结果”,改起来很麻烦。
生成的脚本画风跟我上面手动写的那段法兰盘代码很像,只是可能带一些冗余操作,比如多建了一个面、多一次没必要的变换。这时我会用FreeCAD打开STEP模型,先测关键尺寸:外径是不是60mm、中心孔是不是30mm、四个孔是不是直径6mm且均布。实测大多数情况下,尺寸整体是对的,但偶尔会出现中心孔偏大0.5mm这种精度漂移,原因大概率是训练数据里的标注单位不一致。这个瑕疵用FreeCAD的测量工具或直接改脚本参数,几秒钟就能修好。
3.3 实操例子:从“描述”到“尺寸标注”的全链路
另一个我常用来验证能力的例子是“电机安装支架”。这类零件结构简单但涉及多个特征组合:底座、两侧耳板、安装孔、中心孔。我在提示词里这样描述:
A motor mounting bracket with a flat base plate 80mm by 60mm and thickness 5mm, two vertical side plates at the left and right edges with height 40mm and thickness 4mm, a centered hole with diameter 24mm in each side plate for the motor shaft, four mounting holes with diameter 5mm at the corners of the base plate.生成出来的模型,我检查了特征完整性和尺寸合理性。结果是底座和侧板确实按描述生成了,中心孔位置也对,但四个安装孔的定位偶尔会出现偏移,原因在于我的描述里没有说明“安装孔相对于底座边缘的偏移量”,模型只能按训练数据里的“常见默认值”生成,这个默认值跟我的目标不一致。
这说明一个规律:text-to-cad对显式描述的几何特征把握很好,对隐性工程默认值把握不准。比如“四个角上的孔”这个说法,人类工程师会本能地设定孔中心到边缘的合理距离,但AI只能猜。解决办法是,把你能想到的尺寸全部量化写进提示词,宁可啰嗦不可省略。孔位置的偏移量、圆角半径、螺纹规格这些信息,你想偷懒不写,AI就会替你自由发挥,而它的发挥方向显然不一定是你要的。
3.4 参数调节与模型选择心得
很多项目都给你留了一个temperature参数,也就是采样的随机性。这个参数在我实测中作用很大:
- 低温度(0.1到0.3):生成结果更稳定,代码更少报错,但形状上比较“保守”,倾向于训练集里最常见的零件形态。
- 高温度(0.7以上):生成形状更多样,甚至能出现一些结构上的“创新”,但是报错率指数级上升,经常生成出根本不能执行的废话代码。
我做学习实验时喜欢把temperature调到0.5左右,既有一定多样性,又不至于完全失控。如果我要拿结果去加工,就老老实实用0.2。
模型选择方面,我看到的主流做法是“基座模型用代码模型(比如CodeLlama或DeepSeek-Coder系列),配合特定项目的微调权重”。跑下来我的经验是:通用代码模型的工程语义理解能力偏弱,它会写出一段语法完全正确的Python代码,但对“法兰盘”应该有什么特征完全没有概念。反而是专门在CAD脚本数据集上微调过的模型,生成结果的可用性高很多。所以,如果出现“代码不报错但模型莫名其妙”的情况,十有八九是你用了没微调过的基座模型。
4. 踩坑实录:常见问题与排查技巧
老实说,text-to-cad到现在还不能做到“描述即所得”。我在实际跑的过程中遇到了大量问题,这里挑几个最有代表性的,把现象、原因、排查方法都写出来,大家以后遇到能少走弯路。
4.1 生成的模型打不开或者破面严重
这个现象在“扩散模型重建B-Rep”路线上表现得尤其明显。你满怀期待地跑完生成,拿到一个STEP文件,结果在FreeCAD里一打开,模型上全是破面、裂缝、洞,根本没法用。
我的排查心得是这样:先看文件大小。一个健康的机械零件STEP文件通常几十KB到几百KB。如果生成的文件只有几KB,多半几何信息严重缺失;如果文件有几十MB,说明重建算法把无数细碎小面片都塞进来了,这种也是垃圾模型。这两个极端都别花时间去修,直接重新生成或者换技术路线更划算。
如果是轻微破面,可以尝试FreeCAD的Part菜单里的“修复形状”工具,对轻度的拓扑错误有一定修复能力。但记住,修复只能救场,别指望它把严重破损的模型变回正常。我踩过这个坑,花了两个小时修一个灭失了一半面的支架模型,最后果断放弃重来。
4.2 尺寸和单位混乱:AI把毫米当成英寸了
这个问题出现频率极高,而且特别隐蔽。我遇到过生成的齿轮模型,轮毂内径足足大了2.54倍,一看就是模型把描述里的“25.4mm”理解成了“25.4英寸”。还有更气人的,同一张图纸里两个特征分别用了毫米和英寸,生成出来的模型歪七扭八。
排查技巧是:拿到生成结果的第一时间,不要看外观,先测一个你心里最有把握的尺寸,比如法兰的外径。如果PF(比例因子)刚好是25.4的整数倍,别犹豫,单位换算错误实锤。解决办法是在提示词里反复强调单位,比如写“All dimensions are in millimeters”,同时把尺寸的数值写得“不凑巧”一点,比如用63.5mm代替60mm,这样即使发生换算错误,你也能一眼看出来。
4.3 生成的代码报错:API版本变了,模型还在用老接口
这一类坑集中出现在“生成CAD脚本”路线。AI模型是在某个特定版本的CadQuery或FreeCAD API上训练的,但你自己环境里装的版本可能已经升级了,API参数变了或者某个方法被弃用,导致AI写的代码一执行就报错。
我遇到过的典型情况是CadQuery旧版本里的Workplane.workplane方法在新版本里改了参数语义,或者FreeCAD的Part.makeCylinder参数顺序变化。这类问题的排查方法很朴素:把报错信息复制到搜索引擎里查,或者直接看当前版本API文档,对比AI生成的代码。不要试图让AI“自己改自己的代码”,你把它报错的信息返回给它,它大概率会继续用旧API思路修修补补,形成死循环。正确做法是手动改两步,一般就能跑通。
4.4 输出看起来对,一加工就废:顺序与方向问题
这是最磨人的一种情况。模型在屏幕上看完全正常,尺寸也对,但你拿去3D打印或者CNC加工,结果惨不忍睹。原因通常是两个:一是模型的坐标系方向跟加工基准不统一,比如你本来想让底面朝下,生成出来的模型底面朝上,悬空结构变成了需要支撑的结构;二是特征顺序不对,AI生成的脚本里先打了孔再做了拉伸,导致孔被后续特征吃掉了或者产生了隐形的内部空腔。
检查方法也很简单:在FreeCAD里切换视图到前视、右视、俯视,观察模型的“三视图”是否符合机械常识;然后用剖切视图看一下内部结构,有没有不该出现的空腔和材料堆积。这两步花不了三分钟,能避免你浪费半天加工时间。
下面我整理一个高频问题速查表,方便大家快速定位:
| 现象 | 可能原因 | 我的处理办法 |
|---|---|---|
| 模型打开破面严重 | 重建算法拓扑修复失败 | 不浪费时间,重新生成或换路线 |
| 尺寸整体偏差2.54倍 | 毫米/英寸单位理解错误 | 提示词里反复强调单位,用非整数值做探针 |
| 代码运行报错 | API版本不兼容 | 查当前版本文档,手动修复,不要循环让AI改 |
| 外观正常但内部空腔 | 特征顺序不合理 | FreeCAD剖切视图检查,调整特征顺序 |
| 四个孔位置不对 | 隐性工程信息缺失 | 把所有尺寸写全,包括孔到边缘的偏移 |
| 生成结果极不稳定 | temperature设置过高 | 降到0.2左右,优先保证稳定 |
5. 我总结的落地工作流与后续扩展思路
折腾了大半年,我现在对text-to-cad的定位已经从“换掉工程师”变成了“给工程师当助理”。下面这套工作流是我现在真实在用的,可以给同行参考,也可以作为下一步折腾的起点。
5.1 目前最靠谱的落地方式:人机分工
我的工作流分三段。第一段是需求拆解,这一环必须人来干。拿到一个任务,先自己把要做的零件拆成“几何特征加参数”的清单,比如底座尺寸、孔位、厚度、圆角,逐条写清楚。第二段是批量生成,把特征清单交给text-to-cad工具,让它一次性生成多个候选方案。第三段是人来评审,打开候选模型,检查尺寸、特征完整性、加工可行性,挑一个最接近目标的方案,在CAD软件里做最后的参数化调整。
这套流程的核心逻辑是:AI负责“从描述到初稿”的机械转化,人负责“从初稿到工件”的工程判断。前者是重复劳动,交给AI效率倍增;后者涉及加工工艺、材料属性、装配关系,这些是AI目前还搞不定的。我用这套流程做过一个支架类零件的方案设计,从需求到最终定稿,原来大概半天,现在两个小时以内搞定。
5.2 值得继续折腾的三个方向
第一是结合参数化模板。我建议你把自己公司常用的标准件整理成一套CadQuery参数化模板,然后把text-to-cad作为“模板填充器”,让AI只负责把自然语言解析成模板参数,而不是从零生成代码。这样稳定性和正确率会大幅提高。实际上,不少工业AI工具内部就是这个路子。
第二是引入“约束反馈”机制。现在多数text-to-cad是单向生成:输入文本,输出模型,没有中间校验环节。我尝试做了一点改造,在生成脚本里加入自动检查代码,比如生成后立即检查轮廓直径是否在预期范围内、孔数是否等于描述里的数字,不符合就自动调整参数或者重新生成。这个思路实践下来效果很好,能拦截掉大概三成低级错误。
第三是把模型扩到装配体层面。目前绝大多数text-to-cad项目只能做单零件,但我实际工作里常用的文本需求场景往往是装配体,比如“一个底座上面放一个电机,电机旁边装一个支架,支架上固定一个轴承座”。这需要模型理解零件之间的相对位置和配合关系,难度上了一个台阶,但也更有价值。
我个人的体会是,text-to-cad的价值不在“从零生成一个能直接用的零件”,而在于它把“从想法到毛坯”的时间压缩到了极致。你可以花十分钟亲手画一个法兰,但当你需要的是二十种不同尺寸的法兰时,让AI批量生成再人工筛选,效率完全不一样。建议所有对AI辅助设计感兴趣的同行,先把CadQuery练熟,再把温度参数玩明白,最后再碰那些花哨的重建算法。基本功不牢,后面踩坑就是灾难。这篇文章写的都是我一个人在电脑前折腾出来的真实记录,工具在变,模型在变,但“先理解目标输出形态、再控制生成过程、最后严格验证结果”这套思路不会变。