text-to-cad技术解析:从自然语言到可编辑CAD实体模型

发布时间:2026/10/26 7:13:02
text-to-cad技术解析:从自然语言到可编辑CAD实体模型

最近这段时间,身边不少做机械设计、产品结构的朋友都在聊 text-to-cad,说是用一句话就能生成CAD模型。我一开始也以为又是那种“文字生成3D模型”的玩具,毕竟之前那些AI建模工具,生成出来的东西精度低、没法编辑,根本没法放进正经的设计流程里用。但实际把这些工具挨个试了一圈,又翻了翻相关的技术实现和开源项目之后,我得说:text-to-cad 跟以前那些“看起来很美”的AIGC建模还真不是一回事。它解决的问题非常具体,就是把自然语言转换成可以编辑、可以装配、可以进CAM流程的实体模型,而不是生成一个只能看的网格壳子。

这篇文章我不打算讲太多论文里的数学推导,就从一个实际做结构和产品设计的从业者角度,聊聊 text-to-cad 到底是什么、背后的思路是怎么演进的、目前有哪些能落到工作流里的工具,以及我踩过的坑和调试出来的经验。如果你正打算把文本生成CAD接入自己的设计流程,或者单纯想搞清楚这东西到底能不能用于生产,这篇文章应该能给你一些参考。

1. 先把 text-to-cad 这件事掰开揉碎:它到底在生成什么

1.1 一句话说清楚:这是“可编辑实体”,不是“好看的网格”

很多人一听“用文字生成模型”,脑子里冒出来的第一个画面是输入一句“一只站着的猫”,然后软件给你吐出来一个很可爱的模型。那个方向确实存在,但那是文本生成3D网格(mesh)或者文本生成体素,和 text-to-cad 的 cad 完全是两码事。

CAD模型的核心特征是参数化和可编辑性。一个真正的CAD文件里,模型不是一个三角形面的集合,而是一系列几何特征的组合:拉伸、旋转、倒角、孔、阵列、布尔运算后的实体。你可以回去修改草图的某个尺寸,整个特征树会自动更新;你可以给两个零件添加配合关系,做装配和运动仿真;你可以直接把这个模型发给加工厂做数控编程。而这些,普通AI生成的网格模型全都做不到。

text-to-cad 的目标,就是直接从自然语言描述生成这种“带特征树的实体模型”。比如你输入“一个直径40mm、厚度5mm的圆盘,中心有一个直径8mm的贯穿孔”,工具应该给你生成一个零件,你用CAD软件打开后能看到这个盘子的创建历史,能修改直径参数,能把它跟其他零件装配在一起。生成网格模型只是生成了一堆三角形的排列,但生成CAD模型意味着理解了“钻孔”这个特征语义,理解了圆柱体和孔的拓扑关系,甚至理解了壁厚、拔模角这类加工工艺要求。

1.2 技术路线的大分水岭:从“重建形状”到“理解构建过程”

把技术实现往前推几年,最早一批尝试用AI做CAD建模的工作,基本都走的是“形状重建”的路子:输入一张图片或者一段文字,AI先判断这个物体大概长什么样,然后通过隐式函数、点云生成或者体素填充的方式,重建出一个三维形状。这条路子的问题是:重建出来的形状没有“语义”,不知道哪块是凸台、哪块是孔,也无法告诉CAD软件“我是通过一次拉伸加一次切除生成的”。

近年来的技术路线出现了一个关键转变——不直接重建形状,而是让模型学会生成CAD操作序列。这个思路的本质是:把CAD建模过程看作一个程序执行过程,每个特征都是一条指令。你在FreeCAD或者SolidWorks里画一个零件,后台本质上就是一系列操作的日志。AI如果能学会预测这些操作序列,就能自动重建出特征树,输出真正可以被CAD软件解析的文件格式。

这也是为什么 text-to-cad 跟传统文本生成3D最大的区别在于数据。现在主流的数据集已经不是一堆OBJ网格文件,而是抽取出CAD特征树的序列化数据。像DeepCAD、Fusion 360 Gallery这些数据集,把设计历史拆成了“拉伸深度、草图轮廓、布尔运算类型、旋转轴”这种机器可读的token,Large Language Model 可以直接在这上面做序列到序列的学习。相当于让AI看了几百万个零件的设计过程,然后学会了“当用户这样说的时候,通常应该先干什么、再干什么”。

1.3 为什么大家都在跟进:这件事的商业价值在“草图生成”环节

行业内对text-to-cad这么关注,有一个很实际的原因:草图阶段占用了设计师大量的重复劳动时间。做过结构设计的人都清楚,一个零件从概念到初版模型,很多时候最麻烦的不是计算和校核,而是把脑子里已经想清楚的结构,在CAD里一笔一笔画出来。拉伸、切除、开孔、倒角,这些操作技术上难度不高,但非常耗时。

自然语言生成CAD真正的价值,就是把这部分重复性的“操作劳动”转换成“意图表达”。设计师可以把精力集中在更上层的设计决策上,比如材料选择、强度校核、装配布局,而把“把这段描述变成几何特征”的重复工作交给模型去做。这也是为什么这个方向对制造业、非标自动化、产品结构设计这类行业特别有吸引力——这些场景里的零件往往是标准件加少量非标件组合,几何描述相对明确,AI生成的准确率可以做得很高。

2. 主流方案与工具选型:有哪些能用的,各有什么脾气

2.1 目前能落地的工具矩阵

我把目前接触到的text-to-cad相关工具和项目分成三类:在线服务型、开源模型型、CAD内嵌插件型。下面这张表是我自己的使用总结,不一定全面,但基本覆盖了主流的可选项。

类型代表方案输入方式输出格式亮点当前局限
在线服务Zoo.dev Text-to-CAD文本提示词STEP / STL / Fusion 360 云文档生成速度快,界面友好,支持多视角渲染预览免费额度有限,复杂装配体支持弱
开源模型ML-CAD、CAD-MLLM文本 / 图片+文本STEP / JSON特征序列可自部署,支持微调,适合研究特定数据集需要GPU资源,安装配置门槛较高
CAD插件Autodesk Fusion 360 AI 辅助、部分厂商内测功能在软件内输入描述原生参数化特征跟设计流程无缝衔接,输出可直接编辑功能还在早期,提示词能力有限
传统方案辅助FreeCAD + LLM 脚本生成自然语言转Python API调用FCStd / STEP完全本地化,可定制性极高需要自己搭建调度逻辑,适合有编程基础的人

2.2 在线服务类:Zoo.dev 的实际体验

Zoo.dev 的 Text-to-CAD 是目前比较出圈的在线工具,其实测下来也确实有值得说道的地方。它的交互逻辑很直接:你输入一段文字描述,它会先给你生成多个视角的渲染预览图,你觉得哪个视角看着靠谱,再指定让它生成最终的模型。这种“先看预览再定稿”的交互设计其实很聪明,因为AI生成是有随机性的,一次生成多个候选能显著提高可用性。

从输出质量上说,Zoo 在“带有孔和圆角的机械零件”这类描述上表现最稳定。比如你输入“一个带有四个对称安装孔的矩形安装板,四角倒圆角”,它生成的模型能直接进3D打印流程。但对带有复杂轮廓、自由曲面、非对称特征的结构,生成的模型往往需要人工修补。

另外一个比较实际的限制是它的免费额度。你真要拿它当主力建模工具用,额度很快就用完了。我个人的使用策略是:把重复性的标准件描述存成提示词模板,需要的时候批量生成,再导入CAD软件做尺寸级的修改,这样能最大化利用有限的额度。

2.3 开源与自部署:ML-CAD 这类模型能干什么

如果你有GPU资源,又对数据隐私有要求,可以关注ML-CAD这类开源项目。它的做法比较有意思:用一个多模态大模型作为理解层,把用户输入的自然语言转换成结构化的几何指令,再接一层生成模块把这些指令变成参数化CAD模型。跟在线服务比,开源方案的最大优势是可定制——你可以针对自己公司的标准件库做微调,让模型学会生成符合企业标准的结构。

自部署的硬门槛确实不低。推理一张图就需要比较高的显存,全套跑起来基本需要24GB以上显存的消费级或专业级显卡。如果你只是想做技术验证,我建议先用云GPU租用方案跑通,不要一步到位买硬件。

2.4 传统CAD里的AI:从“画草图”到“写代码”

还有一个方向值得留意:像FreeCAD这种开源CAD配合LLM,通过生成Python脚本来建模。FreeCAD有完整的Python API,几乎每个操作都能用脚本完成,所以你可以让大模型直接生成一段构建模型的脚本,然后在FreeCAD里执行。

这个方案的好处是每一步操作都透明,脚本里每一行对应一个特征,你可以随时修改参数重新执行。坏处是,大模型生成的脚本不一定能一次跑通,API版本更新还会引入兼容性问题。但如果你把脚本生成和参数化模板结合起来,做一个“描述-生成-修改-确认”的工作流,它在效率上可以超过手动建模。我个人在这条路上投入了不少时间,后面实操部分会详细讲。

3. 实操记录:从一句描述到可编辑零件的完整流程

3.1 准备环境:我用的组合方案

我目前最常用的调试环境是一套本地组合方案:开源LLM + FreeCAD Python API + 自写提示词模板。选它的原因很简单:数据不出本地、每步可改、不用抢在线额度,而且能让我看清楚每个特征是怎么被生成的。

具体环境是这样的:

  • 操作系统:Windows 11(建议用Linux,包管理会更省心)
  • CAD软件:FreeCAD 0.20以上(必须确认API接口稳定)
  • 大模型:本地跑的Qwen2.5-14B量化版,实测在几何指令生成上表现稳定
  • 调度框架:Python脚本,用正则表达式解析模型输出的JSON指令块

需要提醒的是:不要直接让模型输出FreeCAD脚本,因为脚本自由度太高,模型很容易产生API误用。我的做法是给模型限定一个中间指令集,只允许它输出事先定义好的几种操作指令(比如创建草图、拉伸、切除、开孔、倒角),然后由我写好的解释器把指令转换成API调用。这是调试过程中最关键的架构决定,能减少大量随机错误。

3.2 核心流程拆解:五步走到可编辑模型

第一步是写提示词。这里有个要点:几何描述要跟CAD建模语言的表达习惯对齐。你描述零件时,不要说“一个带孔的方块”,要说“一个长100、宽60、高10的长方体,底面中心为原点,在顶面中心创建一个直径12的贯穿孔”。模型对单位的敏感度很高,不写数字它就开始自由发挥。

第二步是先用在线工具做快速验证。在把同样的描述送进本地环境前,先拿Zoo生成一版,确认几何关系是否合理。因为在线工具内置的模型对常见场景理解得更好,如果它都生成得不对,说明你的描述本身有歧义,需要改描述,而不是怪本地模型。

第三步是写中间表示。我的JSON指令结构长这样:

{ "primitives": [ {"op": "box", "params": {"length": 100, "width": 60, "height": 10, "origin": [0,0,0]}} ], "features": [ {"op": "hole", "params": {"diameter": 12, "axis": "z", "position": [0,0,10], "through": true}} ] }

模型只负责产生这种结构化指令,实际建模由解释器执行。这样即使模型偶发指令错误,我也可以手工修正JSON,不需要全部重来。

第四步是在FreeCAD里执行并生成STEP文件。解释器接收上面的JSON,逐个调用 FreeCAD 的 Part 模块 API 创建几何体,最后执行布尔运算合并成一个零件,导出STEP。整个执行过程可以写成脚本一键完成。

第五步是人工校验。打开导出后的STEP文件,测量关键尺寸、检查特征是否完整、确认没有多余的破面。必要的时候修改JSON里的参数重新生成,或者直接在FreeCAD里继续编辑。

3.3 实测案例:一个典型支架零件的生成记录

我用一个“L形支架”做了完整的记录。提示词写的是:“L形支架,两臂长度分别为80和60,宽度40,厚度8,两臂交点处有一个直径10的贯穿孔用于安装,长臂末端有一个直径6的贯穿孔。”

这个描述放给本地模型后,生成的JSON指令主要包含两个box原始体,一根圆柱作为切除工具,以及一个布尔减运算。解释器执行后的结果基本正确,但两臂的圆角过渡没有被表达出来——因为我的提示词里没有明确要求圆角。最后我手动在FreeCAD里补了一个R5倒角,总共用时不到两分钟。如果完全手动建模,这个零件从零画起,怎么也要五到十分钟。

3.4 提示词模板的沉淀与复用

这是我强烈建议所有人都做的一件事:把你日常设计里高频出现的零件类型,拆成可复用的提示词模板。比如“标准安装板模板”的提示词,我会固定成:

一个矩形安装板,长{length}、宽{width}、厚{thickness}, 四角倒圆角{radius}, 面上分布安装孔,孔位置和直径如下:{holes}

用这种模板,参数一替换就能批量生成一系列相似零件,极大提高出图效率。做结构设计的朋友应该能秒懂这句话的价值:很多非标设备里,一整块钣金面板上就是一堆规格不同的安装孔,以前要一个个画,现在一句话加一个参数表就够了。

4. 常见问题与排查技巧:我踩过的那些坑

4.1 生成的零件是“壳”而不是实体

这是非常典型的问题。你在预览里看着模型挺像回事,结果一导入CAD软件,发现模型其实是个空心薄壳,或者有很多重叠面。问题根源在于模型对“实体”和“表面”的认知还不到位。

排查方法是严格控制输出格式,增加一步几何合法性校验。在FreeCAD里执行完布尔运算后,用Part.CheckGeometry检查实体有效性。如果检测到非实体结果,立即兜底:重试生成、调整描述中的拓扑关系用词(比如把“相交”改成“合并”),或者对简单零件直接用原始特征重建而不是依赖布尔运算。

4.2 尺寸比例失调,完全不符合常理

AI模型对物理世界的真实尺寸没有直观感知,你不写单位,它就默认自己在某个虚拟空间里。比如你描述“一个直径30的圆盘”,它可能生成直径300的模型,也可能生成直径3的模型。

解决方法是提示词里所有尺寸必须带单位或者带明确数值范围。另外,可以在提示词模板里预置常用材料的厚度推荐值,比如“钣金件厚度建议1.5或2.0”“注塑件壁厚建议2.5”。模型在微调时见过大量工程图纸语料,你给出工程语境,它的输出会更贴近实际。

4.3 “孔”和“凸台”语义混淆

这是个很有意思的失败模式。当你描述一个带有复杂背景的零件时,模型有时会把孔识别成凸台,或者反过来。我分析下来,大概率是训练数据里“孔”往往跟“圆柱”共现,模型学到的是“圆柱等于某种凸起特征”,而不是真正理解“孔”是减法的语义。

应对策略是:在生成流程里强制将“孔”映射为“圆柱体与基础体做减运算”,而不是让模型自己选择操作符。因为一旦模型在指令阶段选错了操作符,后面的几何就很难纠正。我现在的JSON模板里,hole操作固定由解释器翻译成“创建圆柱+布尔减”,模型不需要也不可能改变这个操作方向。

4.4 单位制混乱:英寸和毫米的薛定谔叠加

这个坑特别隐蔽。模型的训练数据里英美工程语料和公制工程语料是混合的,它对“厚度5”这种描述可能会理解成英寸。一次我生成的支架,导入软件后尺寸全部自动变成了原来的25.4倍,差点直接发去加工。

处理方法是模板里默认明确标注单位:所有尺寸均为毫米。如果生成结果尺寸明显不合理,先检查这一步,不要急着怀疑模型。另外,在导出STEP文件前,在FreeCAD里对零件的BoundingBox做一次尺寸检查,确认主轴长度在预期范围内,这一步能避免绝大多数单位问题。

4.5 特征树缺失:打开文件后只有一个“孤零零的实体”

部分工具生成的STEP文件在几何上是正确的,但导入CAD软件后,你看到的只有一个“哑实体”,完全没有特征历史。对需要修改尺寸的设计场景,这就很尴尬。

这里要明确一个期望:目前大多数text-to-cad工具输出的STEP本来就不带特征历史,能生成参数化文档的还是少数。如果你需要参数化修改,建议把生成的模型当作参考几何,在CAD里重新描一遍草图,或者使用自动特征识别功能(像Fusion 360里就有)把操作历史推断出来。这个功能虽然不是100%准确,但对修改简单特征(拉伸、孔)已经够用了。

4.6 复杂装配体支持还比较弱

目前的text-to-cad工具大多擅长单零件生成,对“多个零件的装配关系”支持很有限。你输入“一个由底座、转臂和销轴组成的旋转机构”,它大概率会输出一个糊成一团的形状,而不是三个能互相配合的独立零件。

我目前的处理方式是把装配体拆成多个独立工件来描述,逐个生成,再在CAD里手工添加装配约束。这个流程虽然笨一点,但每个零件都能保证质量,远比指望AI一步到位现实。

5. 怎么把 text-to-cad 真正嵌入现有设计流程

5.1 建立“描述库”和“零件模板库”,而不是零散地用

跟AI工具磨合一段时间后,最大的感受是:把text-to-cad当作一个临时灵感工具,价值非常有限;把它当作公司标准件库的生成引擎,价值才真正体现。

我的做法是维护一个分类好的描述库:

  • 标准件类:螺钉、垫圈、销、轴承座,这类描述高度标准化,AI生成成功率很高
  • 钣金件类:带折弯的支架、安装板、外壳,重点在描述折弯半径和孔位
  • 机加件类:带倒角、梯形螺纹孔、腰型槽的零件,对布尔运算要求高,需要仔细调参

每次生成成功的提示词,我都把最终描述和输出模型关联存档。积累一段时间后,这个描述库本身就是一笔资产,新人也可以用同样的模板生成同样的标准件,团队内部的沟通成本会明显下降。

5.2 人机分工:让AI干重复活,让人干决策活

跟text-to-cad合作得越深,我越觉得正确的姿势不是“让AI替代人”,而是“让AI把设计师从重复劳动里解放出来”。设计师对模型的合理性判断、对材料的理解、对装配工艺的考虑,这些是AI目前替代不了的。

我个人的分工方式是:AI负责“从描述到几何”这一段,人负责“从需求到描述”以及“从几何到验证”这两段。遇到需要专业判断的地方,比如“这个壁厚能不能满足强度”“这个圆角加工工艺上能不能做出来”,AI给不了答案,这些必须由人来决定。把AI定位成“一个很听话、干活很快但不懂工程的下属”,而不是“一个全知全能的设计师”,心态上会舒服很多,产出也会稳定很多。

5.3 扩展方向:图片输入和逆向建模

最后聊一个我正在尝试的扩展方向——图片辅助的text-to-cad。现在有一些模型支持“草图图片+文字”的输入模式,你可以拍一张手绘的零件草图,配上文字说明,模型结合图像信息生成更精确的模型。对速写能力比较强的设计师来说,这种方式比纯文字描述更直观,成功率也更高。

再往后看,text-to-cad还会跟生成式拓扑优化、增材制造仿真这类技术结合。到时候设计师可能需要的不是“设计零件”,而是“描述功能需求”,跟AI说清楚“这个零件要承受多大载荷、跟什么配合、用在哪里”,AI在约束范围内生成候选结构方案。这一步要是真走通了,设计范式又要变一轮。

我在实际测试中最大的感受是,text-to-cad目前还远谈不上完美,但如果你愿意花点时间去建模板、调流程、做校验,它是目前AI辅助设计里最接近“能进生产流程”的工具方向。别指望它一步到位把复杂的装配体给你生成好,从标准件和简单支架开始积累经验,慢慢扩展能力边界,这个路径走下来,你会发现自己有更多时间去做真正需要判断力的设计工作。