☰
text-to-cad深度解析:从自然语言到可编辑CAD模型的完整链路
2026/10/26 6:56:25 网站建设 项目流程

刚接触 text-to-cad 的人,最容易把它当成又一个“文字生成 3D 模型”的噱头。但真正在制造业、机械设计里摸爬过的人,看到这个词的第一反应其实是:这玩意儿生成的模型,能不能直接进 CAM?能不能出工程图?能不能被装配约束正常驱动?如果答案是否定的,那它和 Stable Diffusion 渲染一张产品图也没有本质区别。

text-to-cad 的核心并不是“生成一个三维形状”,而是“生成一个真正意义上的 CAD 模型”——带特征历史、带参数语义、能被尺寸驱动、能被后续特征继续编辑的那种。这件事的难度,比大家熟悉的 text-to-3D 高出一个量级,因为 mesh 和 B-rep 之间横着一条“工程语义鸿沟”。这期我就从原理、工具到实操,把这条链路完整拆一遍,给想入局或者正在评估方案的读者一个能直接参考的框架。

1. 先说清楚:text-to-cad 到底解决什么问题

1.1 不是又一个 text-to-3D

很多朋友把 text-to-cad 和 text-to-3D 混为一谈,这是第一个需要纠正的认知。

text-to-3D 的代表——像 OpenAI 的 Point-E、Shap-E,或者 Stable Diffusion 配合 NeRF 的那套 DreamFusion 管线——生成的是隐式场(SDF)或者网格(mesh)文件,本质上是“长得像”一个物体的几何外壳。这种结果放在游戏资产、影视概念、电商展示场景里完全够用,但放到机械设计里就废了:没有光滑的解析曲面,没有精确的尺寸,没有特征树,更没有参数约束关系。你没法对它倒圆角、没法改一个直径让整个零件联动、更没法直接输出加工程序。

而 text-to-cad 瞄准的是另一个终点:生成一个可以被主流 CAD 内核识别的原生模型,通常是 STEP 或原生 CAD 文件格式,内部包含草图、拉伸/旋转/倒角等特征序列。换句话说,它生成的是“可编辑的工程模型”,不是“好看的壳”。

我用一个例子说明这种差距:对同一个提示词“一个不锈钢法兰盘,外径 100mm,内径 45mm,厚度 10mm,均布 6 个直径 9mm 的螺栓孔”,text-to-3D 会给你一个看起来像法兰的网格模型,孔可能不是真的贯穿,圆角处可能是一堆三角面,你甚至没法量出准确的孔径;而 text-to-cad 会给你一个 STEP 文件,你导入 SolidWorks 后能看到“旋转/拉伸/阵列”这些特征,双击尺寸改一下,整个模型立刻联动更新。

这个区别决定了应用场景的分野:前者只能做视觉,后者才有资格谈工程。

1.2 它适合谁、能用在哪儿

从我的实践经验看,text-to-cad 目前真正能落地的群体有三类:

第一类是标准件与通用件的快速建模。法兰、轴承座、支架、齿轮、管接头这类有明确国标、行标或厂标的零件,参数范围是有限的。过去工程师要对着样本册一个一个画,现在用自然语言把关键尺寸报出来,机器直接给参数化模型,效率提升非常明显。

第二类是工艺方案前期的概念结构设计。做非标自动化设备的人都有体会:方案阶段一天要出十几个结构草稿,大多不追求最终精度,但要能装配、能检查干涉、能给客户看布局。用 text-to-cad 生成基础结构件,再拖到装配体里粗调,省掉大量从零开始的草图操作。

第三类是自动化建模流程的接入环节。很多企业已经在用 CadQuery 或 build123d 这类程序化建模库做批量设计,text-to-cad 的价值是为这套流程补上“自然语言入口”,业务人员不需要写 Python 也能描述需求。

反过来要泼一盆冷水的是:如果你期望它直接生成复杂的装配体、有严格公差要求的精密零件,或者涉及复杂曲面造型的塑料外壳,现阶段会非常失望。它不是万能的,但把“从一张白纸到可用的基础模型”这段路走通,就已经价值巨大。

2. 技术原理拆解:从自然语言到特征树

2.1 路线一:生成程序化建模脚本

目前工程落地最成熟、效果最稳定的一条技术路线,是把 text-to-cad 转化成“自然语言到代码生成”的问题。具体做法是:让大语言模型根据用户的文本描述,生成一段 Python 脚本,这段脚本基于 CadQuery、build123d 或类似程序化建模库编写,然后由本机的 CAD 内核执行脚本,最终产出 STEP 或原生格式文件。

这条路线的核心逻辑在于“借力”。大语言模型对 Python 代码的理解能力,远高于对三维几何拓扑的直觉。与其让模型直接输出一个 STEP 文件,不如让它输出一段它更擅长生成的代码,然后再借助成熟的几何内核(比如 OpenCascade)把代码变成精确的 B-rep 模型。

Zoo 项目(早期也叫 Text-to-CAD)就是这个路线的代表。它把模型微调在大量 CadQuery/build123d 脚本与最终模型配对的训练集上,模型学会的不是“法兰长什么样”,而是“用什么建模操作序列能构造出法兰”。这是一个非常聪明的思路转换——把不可逆的几何生成问题,变成了大模型已经相对擅长的代码生成问题。

我在实际使用中发现,这种方案生成的结果有真正意义上的特征树:导入 CAD 软件后,你能看到 Sketches、Extrude、Cut、Fillet 等节点,双击进入草图还能修改尺寸约束。这对工程场景价值极大,因为你永远需要对生成的模型做二次调整,而“能编辑”和“不能编辑”之间,隔着一整个设计流程。

2.2 路线二:离散序列生成

另一条学术上非常活跃的路线来自 DeepCAD 及其后续工作。研究者把 CAD 建模过程序列化成一条指令流——比如“画一个圆心在 (0,0) 半径 50 的圆”“沿 Z 轴拉伸 10 毫米”“在面 >Z 上画一个半径 25 的圆”“反向切割 10 毫米”,每条指令都带有明确的参数。然后他们用 Transformer 序列模型来学习文本描述到这些指令序列的映射。

这个方案的优点是可控性和可解释性都更好。因为输出是一串结构化的指令,你可以逐条审查,也可以在某个步骤上人为介入修改。缺点是序列长度本身会成为瓶颈,一个稍微复杂的零件可能需要上百条建模指令,模型在长序列上的误差会累积,导致生成的模型在某个特征处“突然放飞自我”。

实操上,这类模型通常会输出两个层面的东西:草图层级(二维几何:直线、圆弧、圆)和特征层级(三维操作:拉伸、旋转、阵列)。草图层级的错误可以用后置的几何约束求解器修复一部分,但特征层级的逻辑错误——比如拉伸方向反了、切割到了错误的体——就几乎无法自动修复,只能重新生成或者人工调整。

我自己测试这类模型时最直观的感受是:对简单回转件(轴、套、法兰)生成质量已经可用,但对板金件、多特征空间分布的零件,“看起来合理但内部特征错了”的情况还是高发。它更适合作为科研验证的基线,或者工业场景里对生成结果有严格检查机制的自动化管线。

2.3 路线三:神经 B-rep 与隐式场绕行

第三条路线更激进:跳过显式的建模指令,直接用神经网络估计 B-rep 表面的参数。B-rep(边界表示法)用拓扑面、边、顶点以及它们之间的邻接关系精确描述三维实体,这也是 STEP 文件底层的几何体系。

研究者尝试过多种方式,比如用图神经网络或者 Transformer 直接预测 B-rep 的拓扑结构(哪条边属于哪个面、哪些面围成哪个体壳),再配合每个面的 NURBS 或解析曲面参数。还有一些工作试图把隐式场结果(SDF)通过求交、曲面拟合等算法“转换”成 B-rep。

这条路目前还在实验室阶段。问题在于 B-rep 的拓扑空间比网格复杂得多,一个看似简单的圆角特征,在 B-rep 里可能涉及三个面、两条过渡边和一个布尔运算结果。神经网络草率地预测这些关系,很容易产生非流形实体——就是那种看着是实体,但计算体积、做布尔运算时直接报错的模型。

我对这条路线保持相当谨慎的态度,它的上限极高,但下限也极低。目前来看,它在逆向工程(从点云或网格重建参数化 CAD 模型)里的价值,反而比 text-to-cad 更早显现。

3. 工具选型:谁的生成结果能进产线

3.1 Zoo Text-to-CAD:拿来就能用的 API

如果要选一个“第一天就能跑通”的工具,Zoo 无疑是最省事的选择。它提供了托管的 API 服务——你注册账号拿到 API key,然后调用接口传一段自然语言,云端模型在几秒到几十秒内返回一个 STEP 文件或一段 Python 脚本。这个体验非常接近大家熟悉的 OpenAI API:不需要本地 GPU,不需要管理模型权重,甚至不需要懂深度学习。

Zoo 的底层基于 build123d(CadQuery 的继任者)的代码生成,返回的文件不仅包含最终几何,还保留了建模脚本。你应该优先下载 STEP 文件用于下游工程,同时保存脚本用于参数化复用——这俩叠加起来,就是我们前面说的“正宗 CAD 模型”体验。

有一点需要注意:Zoo 的托管 API 商用版本是收费的,免费额度比较有限。对于小团队做概念验证,先拿免费额度跑通流程,确认 ROI 后再上付费套餐,是更稳妥的节奏。如果你有本地 GPU 资源,也可以从 HuggingFace 拉取开源的 Zoo 模型权重,在自己的机器上部署推理服务。后者自由度更高,但你需要自己处理并发、显存管理和模型迭代。

3.2 DeepCAD 系开源工作:科研向,可控但难上手

如果你关注的是学术前沿而非快速落地,DeepCAD、Text2CAD 这类开源项目值得花时间研究。它们通常提供完整的训练代码和预训练权重,你可以自己微调模型,让它学会特定品类的建模风格——比如你们公司的法兰标准、你们厂的支架设计规范。

代价是上手门槛确实高。这些代码库的依赖错综复杂,需要你自己管理数据集、训练脚本、评估指标,还要面对序列生成模型调试的各种玄学问题。我对非科研背景的工程师真心不推荐这条路,除非你们公司有专门的算法团队,并且确实需要高度定制化的生成模型。

工业界的实践里,常见的做法是拿 Zoo 或者大模型 API 做“通用入口”,再用 CadQuery 脚本库做“定制兜底”:通用模型生成不了的,或者生成结果不符合厂内规范,就用脚本库里的标准化模块替换。这种“通用大模型 + 领域程序库”的混合架构,是我见过落地最稳的组合。

3.3 传统 CAD 软件里的 AI 助手

还有一个绕不开的话题:SolidWorks、PTC Creo、NX 这些老牌 CAD 巨头都在这两年密集上线了 AI 辅助功能。比如 SolidWorks 的 3D Creator 里已经能看到人工智能驱动的设计工具,Creo 也有基于自然语言的生成式设计探索插件。

这些功能有一个共同点:深度集成在原生环境里,支持特征树联动、装配约束、工程图更新等全链路工作流。这比“外部生成 STEP 再导入”的体验顺滑得多——不需要转换,不需要修复导入破面,也不会有特征识别失败的问题。

但说实话,目前这些工业 CAD 内置的 AI 能力,覆盖的建模类型仍然有限,普遍集中在标准特征、简单回转体、基础扫掠结构。复杂曲面依旧依赖传统曲面工具,工艺知识库也尚未真正打通。所以我对它们的定位判断是:短期内适合在成熟 CAD 工作流里做“加速器”,不太适合作为独立生成引擎。

4. 实操记录:从一句话到可编辑的 STEP 文件

4.1 准备环境与第一行代码

我以 Zoo 托管 API + CadQuery 本地验证这条最经典的链路,完整跑一遍“用文字生成法兰盘”的过程。你需要准备的东西非常简单:

一个 Python 3.9 以上的环境,配置好zooSDK。官方推荐的方式是:

pip install zoo

然后设置 API key。这里有两种玩法,环境变量方式适合所有项目共享:

export ZOO_API_KEY=your_key_here

也可以写在代码里,适合测试脚本:

import zoo zoo.api_key = "your_key_here"

启动时常见的一个坑是 SDK 版本兼容问题。我曾经在 Python 3.11 上遇到过某个依赖包编译失败,实测降级到 Python 3.10 就正常了。建议直接用 3.10,省事。

4.2 写提示词并生成模型

生成模型的调用代码非常直接:

import zoo # 明确参数,避免纯视觉描述 prompt = ( "A circular flange plate with outer diameter 100mm, " "inner diameter 45mm, thickness 10mm, " "6 equally spaced bolt holes of diameter 9mm " "on a 75mm bolt circle" ) result = zoo.TextToCad.create(prompt=prompt) result.wait_until_completed() result.save("flange.step")

这段代码干的事情是:把自然语言描述发到云端模型,模型内部生成一段 build123d 脚本,再执行脚本生成 STEP 文件。你可以在 Zoo 的 Web 控制台看到每一步的日志。

这里我要强调提示词工程的一个关键点:尺寸参数一定要显式说明,并且用"bolt circle"这类 CAD 语义词汇,而不是“周围有一些孔”“差不多这么厚”这种模糊描述。模型对尺寸名称的理解直接决定生成精度。我试过用“several holes”这种模糊词,结果模型真的给了 4 个孔,而不是我要的 6 个。改成“6 equally spaced on a 75mm bolt circle”之后,一次就对了。

另一个经验是单位。Zoo 的模型默认用毫米,但你最好还是把单位写进提示词,因为生成脚本里的尺寸直接驱动最终特征,单位错了后面全错。

4.3 用 CadQuery 本地兜底与验证

云端生成完 STEP 后,我的习惯是先做一次几何验证,再扔进 CAD 软件。纯粹靠眼睛看不够,必须用程序验证关键尺寸。最简单的方式是用 PythonOCC 读 STEP 文件:

from OCC.Core.STEPControl import STEPControl_Reader from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox reader = STEPControl_Reader() reader.ReadFile("flange.step") reader.TransferRoots() shape = reader.OneShape() # 在这里用 BRepCheck_Analyzer 检查几何合法性

如果 STEP 文件的拓扑有问题,后面导入 SolidWorks 大概率会破面,所以这步检查值得做。

本地兜底方案是让 CadQuery 直接生成一个已知正确的法兰作为“标准对照”,然后对比两个模型的体积和关键截面尺寸。这样做不是为了证明云端模型不够好,而是为了在批量使用场景里建立自动质检机制——机器生成的模型不能自动进产线,必须过一道尺寸抽检闸门。

4.4 导入 CAD 软件后的后处理操作

拿到 STEP 文件后,我强烈建议你养成固定的后处理流程:先用免费工具看,再进主力 CAD 软件编辑。

我一般先导入 FreeCAD 做快速检查。导入后重点关注两件事:特征树里是否有“Empty”或者不可解析的特征;模型是否可以被选中并高亮整个实体(不是多个碎片面)。

Check 完没问题,再进 SolidWorks 或 NX 做正式编辑。此时你会看到 STEP 文件在 CAD 软件里通常表现为一个“Imported”特征,没有原生特征树。怎么办?两个办法:

一个是特征识别。SolidWorks 的 FeatureWorks、NX 的同步建模技术,都能对导入的 B-rep 模型做特征识别,尝试提取出拉伸、旋转、孔等特征。实测下来对法兰、轴套这类回转件识别率很高,但遇到复杂圆角过渡或者阵列特征,偶尔会识别失败或产生冗余特征。

另一个是直接重新参数化。如果是频繁使用的标准件,我会直接用 CadQuery 写一套参数化脚本,以后换规格就改几个变量,不再依赖每次文本生成。文本生成是入口,参数化脚本才是长期资产。

顺嘴说一句,不要指望 text-to-cad 生成的模型第一次就能直接加工。哪怕特征树完整,也需要你人工检查公差标注、表面粗糙度、倒角避让这些制造语义——这类信息自然语言能描述,但模型未必会落实到特征上。

5. 常见问题与踩坑实录

5.1 生成的模型“看着对但尺寸不对”

这是我最常遇到的情况,也是文本生成 CAD 目前最大的一类问题。表象是模型形状完全正确——该有的孔都有,外观比例也协调——但你一测量,外径成了 99.87mm,与要求的 100mm 差了 0.13mm。对于普通视觉应用这完全无所谓,但在工程里这就可能干涉配合。

原因在于大模型生成代码时,它首先猜的是“建模操作序列”,然后才把尺寸作为参数填进代码。尺寸的精确度取决于模型对数字映射的能力,而这个能力目前并非逐毫米精确的。解决思路有三个:一是把关键尺寸写得极其显式,减少模型猜测空间;二是生成后立刻用脚本做尺寸校验,超差则自动重生成;三是对高精度要求的部分,在 CAD 里用约束手动锁定,而不是依赖模型的原始输出。

我自己的处理顺序是:重生成两次,如果两次都偏差超过 0.5mm,就直接脚本修正——输出 STEP 后我用其他工具做尺寸修改,不重新生成。因为重新生成一次的成本远高于局部修正。

5.2 特征树丢了,成了“死模型”

另一种高发现象:生成的 STEP 文件能正常打开,看上去也没破面,但导入 CAD 后只有一个整体实体,完全没有特征历史。这意味着你没法双击尺寸去改参数,任何调整都得从零开始重画。

这种局面通常发生在两条路径上:一是模型后端直接输出了 B-rep 而不是脚本(Zoo 默认返回 STEP 的同时有脚本,但某些调用方式只取 STEP),二是你中途经过了某个网格化/修复流程,把 B-rep 转成了网格后又转回 STEP——这种二次转换基本会把拓扑信息洗得干干净净。

规避方法是:确认返回结果包含建模脚本,并在本地保留一份;如果需要二次修改,优先改脚本再重新导出,而不是去编辑 STEP。还有一个小技巧,如果是复杂装配体,尽量保留每个零件独立生成的脚本,避免在装配级做整件导入再分解,后者特征丢失的概率暴增。

5.3 提示词表达能力边界

不少用户写的提示词是“创建一个好看的机械零件”,这种词喂给 text-to-cad,得到的结果大概率是一坨不可名状的几何体。模型的训练数据决定了它只会处理它见过的建模模式,抽象的美学描述无法映射到具体的参数化特征序列。

我整理了一个自己一直沿用的提示词模板,供大家参考:

[零件类型] + [关键轮廓描述] + [所有关键尺寸,带单位] + [特征数量与布局] + [倒角/圆角等工艺特征] + [对称性/阵列信息]

一个具体的正向示例是:

A shaft support bracket with a square base plate 80x80mm, 8mm thick, two vertical ribs of 6mm thickness at the center, a circular boss of 30mm diameter and 12mm height in the middle, a through hole of 16mm diameter at the center.

对比一下,你会发现后者把基座、肋板、凸台、孔、尺寸、位置全部拆成了模型认识的原子特征。模型不是设计师,它不会替你做工程判断,你描述得越接近“一系列建模步骤”,得到的模型越接近你的期望。

6. 老实话:我对 text-to-cad 现状的判断

技术圈对一个新方向很容易走向两个极端:要么吹得神乎其神,要么踩得一文不值。text-to-cad 的真实位置,在两者之间。

我的实际体验是:对于参数明确的标准件、回转体结构件、板件类零件,它已经能稳定产出可编辑、可装配、可二次修改的 CAD 模型,效率比人工建模高一个数量级。对复杂铸件、曲面外壳、多体运动机构,它的能力还完全不够看。这类模型目前最适合的定位,是“设计初期的加速器”而不是“方案终稿的生成器”。

如果你决定在你的工作流里试它,我的建议是从一个你最熟悉的零件品类开始——找一个你画过几十遍的法兰或支架,用它生成一次,对比特征树、尺寸精度、编辑友好度,很快你就能判断出它在你这个细分方向的可用程度。不要一上来就挑战整机或高复杂度模型,那只会让你得出“这技术没用”的错误结论。

最后分享一个我认为长期有价值的小习惯:把验证成功的文本提示词按零件类别整理成模板库,每次生成前从模板库复制出来改参数。这样做的好处是,你每次调用的都是被验证过语义准确的结构,生成成功率会明显高于完全自由发挥。我用这套方法,把批量生成支架类零件的成功率从不到五成提升到了八成以上,希望也能帮你在实践中少走几步弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询