text-to-cad 这个词,我最早是从一位做非标设备的朋友嘴里听到的。他抱怨最多的不是CAD软件难用,而是客户给的需求太含糊:“一个座子,能放控制器,四角开孔,侧面留散热栅格”,这句话到他那里要变成一张能开模的图纸,中间那层“翻译”极其吃经验。后来我陆续跟进 text-to-cad 方向的技术讨论和复现,发现这条赛道盯的人已经很多,但真正把原理讲透、把坑讲清的实操内容还是少。这篇文章我想从技术原理讲到最小Demo复现,再到我实际踩过的几个坑,一次性聊透。适合正在做CAD二次开发、准备入局智能设计的工程师,也适合被重复建模拖累、想找替代方案的机械和产品设计师。
1. text-to-cad 到底在解决什么问题
1.1 建模流程里最贵的其实是“翻译”
CAD软件本身已经足够成熟,画一条线、做一个拉伸、倒一个圆角,随便一个新手花半天就能上手。真正拉开效率差距的,是把模糊设计意图拆解成特征树的那个过程。工程师拿到的需求往往不是齐整的技术图纸,而是类似“一个底座,能放得下控制器,四角要安装孔,侧面开散热格栅”这种口语化描述。这句话里藏着大量隐含信息:底座尺寸取决于控制器大小,能放得下意味着有间隙配合,安装孔要确定孔径和孔距,散热格栅要做阵列甚至要考虑通风面积。
传统流程里,这一步靠熟手在脑子里完成“需求编译”。尺寸估算、工艺判断、特征拆分、建模顺序,全部依赖个人经验。一个做过几百个类似零件的工程师,可能十分钟就出方案,换个新人可能要在CAD里反复试错两小时。text-to-cad 想省掉的正是这段“人脑编译时间”——它试图把自然语言描述直接映射为CAD特征序列,让机器先完成初稿,工程师只负责审核和修改。这个切入点的价值不在于省掉手工画图那几分钟,而在于把重复性极高的“需求转结构”劳动自动化。
1.2 和 text-to-3D 有本质区别:它要的是“工程数据”
很多人第一次听说 text-to-cad 时,会直接把它和 text-to-3D 画等号,觉得无非是“用AI生成模型”。但这两条路线从输出物到评估体系都完全不同。text-to-3D 生成的是网格模型或隐式场,天生适合渲染、游戏、动画、快速概念表达,说白了是给视觉看的;而 text-to-cad 要输出的是带拓扑关系的B-rep实体、可编辑的特征树,至少也得是一份干净的STEP文件,这种东西是要给机床和仿真软件用的。
我拿生活中的例子类比:text-to-3D 像用照片捏泥巴,捏出来的东西远看像,近看没有内部结构,也不能修改局部;text-to-cad 像按施工图砌墙,每一块砖、每一条灰缝都对应真实的操作记录。这种差异会直接影响技术选型,连续空间里的生成方法不能直接搬过来用。CAD数据是高度离散化的结构,顶点、边、面、环都有明确的连接关系,还要挂上几何约束,扩散模型那套连续生成逻辑在这里会非常别扭。所以真正做 text-to-cad 的团队,几乎都在“预测建模操作序列”这个方向上下功夫,而不是直接预测三维坐标。
1.3 输出B-rep/STEP,等于把可编辑性和可制造性放在第一位
为什么非得生成CAD原生数据,而不是生成Mesh之后再转STEP?这个问题我实际验证过:网格转STEP在平面和简单曲面上或许可行,一旦遇到非平面、复杂过渡面,逆向重建几乎必然引入偏差。加工出来的零件尺寸和你在屏幕上看的不一样,这在工程里是不可接受的。B-rep的优势在于参数化,每个圆角半径、每个孔位都是显式存在的,改尺寸重新生成就是几秒钟的事;CAM工具和仿真软件直接认这种数据,不需要再做一层有损转换。
所以行业内真正关注 text-to-cad 的人,目标从来不是一张好看的渲染图,而是一条“描述→特征→实体→制造”的全自动链路。输出CAD原生数据是这条路成立的地基,而不是可选项。这也是我在讲技术方案前必须把它单独拎出来强调的原因,很多人一开始就走错了方向,用 text-to-3D 的指标来评判 text-to-cad,最后做出一个“看看挺好,用又不能用的玩具”。
2. text-to-cad 核心技术拆解:从自然语言到参数化模型的完整管线
2.1 先看整体流程:文本进来之后要过几道关
一个完整的 text-to-cad 系统,通常可以拆成四个环节:文本理解、结构建模、CAD操作生成、几何校验。文本进来以后,先被编码成向量,再从向量里抽取出实体、属性、关系;接着生成模块负责预测一段CAD建模命令序列;最后把这段命令翻译成真实特征操作,交给几何内核重建,并对生成的B-rep做合法性检查。这四个环节环环相扣,任何一个掉链子,最终产出的模型都会出问题。
我用一个例子串起来:输入“一个长120宽80高15的底板,四角倒圆角半径5,中心开一个直径10的孔”。文本编码环节要把“长120”“宽80”“高15”“圆角半径5”“直径10”这些数值全部识别出来;结构建模环节要确定主体是“底板”,特征是“倒角”和“孔”,位置关系是“四角”和“中心”;生成环节开始预测“先拉伸矩形,再倒角,再打孔”的顺序和参数;几何校验环节则检查倒角会不会吃掉整个边,孔有没有穿透板,有没有自相交。任何一个步骤理解偏了,结果都会差得很远。
2.2 文本编码:不能只靠一句嵌入向量走天下
文本编码是很多入门项目最容易糊弄的环节。不少人直接把整句话丢给语言模型,拿最后一层向量当条件,下游生成模块爱怎么用怎么用。结果就是模型对“左边”“右侧”“靠近前端”这类空间方位词非常迟钝,生成出来的结果经常左右镜像,或者尺寸方向搞反。原因在于普通嵌入向量是全局语义的压缩,它把“长120宽80”和“高15”混在一个高维向量里,生成网络很难从中精确拆解出每一个数值。
更可靠的做法是先做结构化解析。我看到的方案里,效果比较好的思路是:先用语言模型抽取实体和关系,形成类似“实体=底板,高度=15,特征列表=[倒角(半径=5), 孔(直径=10, 位置=中心)]”的中间表示,再把这个中间表示编码成生成模型的条件。这个中间表示很像设计师在动手前心里列出的“设计要点清单”,语义清晰,数值独立,下游模型也容易对齐。结构化解析会丢失一些自由句式的灵活性,但换来了稳定性和可控性,在工程场景里这笔交易是值得的。
2.3 生成模型选型:为什么主流方案是“预测操作序列”
技术路线分歧最大的是在这个位置。扩散模型在图像、视频、连续场生成上表现很强,但它对B-rep这种离散拓扑结构并不友好。你让扩散模型去生成顶点坐标,很容易生成出“位置合理但拓扑关系错误”的面片集合,形状看着像,工程上根本不能用。所以业界做 text-to-cad 的主流路线,基本都收敛到了两类:一类是自回归Transformer,把CAD建模历史串行化为token序列,像生成语言一样逐个预测下一个操作;另一类是序列到序列模型,把命令流当成程序代码输出,再交给几何内核解释执行。
这两种方案的本质都是“让模型预测建模操作,而不是预测坐标”。我强烈建议你记住这个决策逻辑:同样一个长方体,用“拉伸”生成的实体和用“放样”生成的实体,最终形状一样,但特征树完全不同。如果只预测坐标,后端的可编辑性就全丢了;预测操作序列则能天然保留建模历史,用户拿到模型还能改参数,生成模型之后接的是真实CAD内核。操作序列的token化格式大致长这样:先画一个矩形草图,设置宽高,然后拉伸指定深度,再执行倒角,最后做一个通孔。每一步都是一段token,模型逐个预测,和语言模型生成句子没有本质区别。
2.4 条件注入与后处理校验:决定“能用”和“不能写”的分水岭
条件注入环节要解决的是“精确数值怎么进模型”。实际工程里,你不能只对模型说“一个中等大小的底板”,你得告诉它是120毫米还是180毫米。常见做法有两种:一是把连续数值量化成离散token,比如长度范围0到200毫米,按0.5毫米间隔分成400档;二是设一个回归头,在预测特征类别的同时输出具体数值。量化方案训练稳定、评估简单,但精度受档位限制;回归头精度更高,但训练容易漂移。我自己更偏向混合策略,部件类型和特征类别用分类token,具体尺寸用回归值,最后交给几何约束模块做一次数值规整,确保“四个孔完全对称”“孔中心距保持恒定”这类关系不被模型破坏。
后处理环节就更关键了。模型输出的token流不能直接当成品,必须经过一个解释器把token翻译成真实CAD操作,再交给几何内核重建,最后对B-rep做合法性检查:有没有自相交、有没有自由边、孔位是否超差、尺寸是否落在合理区间。我见过太多早期项目在这里翻车,生成过程看起来顺顺利利,一旦导入CAD软件,要么面片破碎,要么布尔运算直接报错。原因很简单,token序列预测很容易出现“每一步逻辑都对,但组合起来几何非法”的情况。后处理就是这个系统的守门员,它做得好不好,直接决定你的输出是能用的图纸还是一堆垃圾多边形。
3. 复现一个最小可用的 text-to-cad 系统:从零到能跑
3.1 算力与工具链准备:单卡也能起步
先说一个很多人关心的问题:做 text-to-cad 需要多大算力?如果你想复刻完整的大规模方案,确实需要一堆高端卡;但如果目标只是验证路线、跑通链路,单张消费级显卡完全足够。我建议的准备方案是:一张24GB显存的显卡,配合混合精度训练;数据量控制在几万个零件;迭代10万步左右;用一个能做自回归训练的深度学习框架,再准备一份开源的B-rep几何内核。这套配置跑小规模验证,基本几个晚上就能看到结果。
这里有个非常重要的提前提醒:几何内核和训练框架之间的数据接口一定要尽早打通。我身边不少同行踩过同一个坑,模型训练得很漂亮,但输出命令喂给几何内核时,对方根本解析不了。问题不出在模型,而出在token设计和数据格式约定。所以动手训练前,先花一天时间做一件事:手工构造几条CAD操作序列,走一遍“token→命令→内核重建→B-rep检查”的完整链路,把接口跑通,后面训练才有意义。
3.2 自造数据:没有现成“文本-CAD”对怎么办
公开CAD数据集大多只有模型文件,没有配套的自然语言描述,这是起步时最大的障碍。一个务实的办法是自动构造“描述-模型”对:把特征树按固定模板翻译成句子。这个过程听起来机械,但非常有效。遇到一条“拉伸矩形,宽120,高80,深度15”的特征,就自动生成描述“一个长120宽80高15的长方体”;遇到“打孔,位置(40,30),直径10”,就生成“在位置40,30处打一个直径10的孔”。模板生成的句子虽然句式单一,但作为初始数据集完全够用。
我常用的一个简化实现大致长这样:
def feature_to_text(feat): if feat.type == "extrude_rect": w, h, d = feat.geometry return f"生成一个长{w}宽{h}高{d}的长方体" if feat.type == "hole": x, y, r = feat.position return f"在位置{x},{y}打一个半径为{r}的孔" if feat.type == "fillet": edges, r = feat.edges, feat.radius return f"对{len(edges)}条边进行半径为{r}的倒角" # 其他特征类型继续补充构造完原始数据后,清洗和平衡才是真正决定成败的环节。清洗主要处理两类问题:一是特征树残缺、无法正确重建的样本,直接丢掉;二是尺寸极端值,比如某零件长1000毫米而其他零件都在200毫米以内,这种异常值会严重干扰量化范围,该截断就截断。平衡则要控制零件类别占比,避免“规则底板占七成、异形散热器占半成”这种极端长尾,否则模型学到最后只会生成最常见的几种形状,遇到冷门描述直接摆烂。
3.3 训练策略:先小后大,盯住两个关键指标
我自己跑下来的经验是:千万别一上来就堆大模型。先做一个参数量不到一亿的小模型,输入输出都限制在几十个token长度,把数据流水线和后处理闭环验证完,再逐步增加容量和数据量。否则你根本分不清效果差是模型容量不够,还是数据管道有bug。小模型跑通后,再扩大数据规模、加长序列、增加层数,每一步都有明确的对照效果。
训练时重点盯两个指标,一是序列预测准确率,尤其要拆开看关键特征边界的准确率,比如倒角半径、孔心距这些数值token是不是预测准了;二是后处理成功率,也就是生成结果最终能通过几何内核重建、产出合法B-rep的比例。这两个指标比loss曲线重要得多。我见过不少项目loss降得很漂亮,生成的渲染图也像模像样,但导入CAD软件后的失败率高得离谱,本质就是只盯损失没盯后处理成功率。你必须把“后处理成功率”当成模型好坏的核心度量。
3.4 推理与交互:不要只做一个黑箱生成器
跑通训练之后,如果你只想写一个“输入描述,输出STEP文件”的黑箱脚本,那这个demo的参考价值就大打折扣。我建议至少做成三步交互式验证。第一步是“描述检查”,把用户输入解析出的实体、数量和关键尺寸展示出来,让使用者确认机器理解对了;第二步是“尺寸抽查”,列出预测的模型关键尺寸,与输入描述做对照,差异太大直接标红;第三步是“特征树预览”,把生成的操作序列以文本形式展示,工程师一看就知道建模思路是否合理。
这三步看似简单,却能把“AI不可控”的焦虑感大幅降低。工程场景里最怕的就是模型“一本正经地胡说八道”,文本里明明写了两个安装孔,输出的特征树里却只有一条拉伸。把检查环节前置到推理端,让使用者第一时间发现错误,而不是等导入CAD后才面对满屏报错,这个体验差异会直接影响别人愿不愿意用你的工具。
4. text-to-cad 实战避坑记录:我踩过的几个大坑
4.1 “左”“右”“前”“后”真的很难学
文本里最难理解的是方位词。很多模型会把“左侧开槽”和“右侧开槽”搞混,尤其在训练数据里左右镜像样本不够平衡时,这个错误会被放大。我排查过不少案例,根因不在生成网络,而在数据构造环节:自动生成的描述里,“左边”和“右边”的出现频率几乎一样,但特征序列在镜像前后对应的token顺序完全不同,模型很容易把方向信息当成噪声忽略掉。
解决思路有两条。一是数据增强时做左右镜像,同时翻转描述文本中的方位词,强制模型学习“左”和“右”的对偶关系。二是在结构化解析环节先把相对方位翻译成绝对坐标,比如解析模块知道“左侧”指的是x轴负方向,于是直接输出孔位坐标(-40,30),生成模型就不需要再理解“左”这个词了。第二条路我更推荐,它的本质是把自然语言歧义在入口处消解掉,而不是把难题留给一个概率模型。
4.2 尺寸漂移:文字说2毫米,输出变成5毫米
尺寸漂移是 text-to-cad 里最让人郁闷的问题。输入明明写了“壁厚2毫米”,输出的实体一量却有5毫米。根因通常是量化粒度太粗,或者回归头在长尾数据里学偏了。我在最开始也踩过这个坑,排查时发现训练数据里绝大多数零件的厚度落在3到10毫米区间,2毫米的样本少得可怜,模型自然把“2”这个数字往常见值上凑。
后来我试出的一套有效方案是:后处理阶段拿解析出的文本尺寸约束几何内核,强制把拉伸深度或者直径修正到目标值。如果模型预测值和文本要求相差超过20%,就不再修修补补,而是直接重新生成,否则模型会被错误样本反复带偏。这条规则的底层逻辑是:文本里明确给出的数值,是用户最不可能让步的硬性要求,宁可多花一次推理时间,也不能交出一版尺寸不合格的模型。
4.3 自相交面和碎面:“逻辑正确”不等于“几何合法”
自相交和碎面问题,在复杂特征组合时尤其常见。文本要求“底部开一个通槽”,模型生成的命令序列是“拉伸矩形→在底面向下拉伸一个小长方体→做减法”,听起来每一步都合理,但拉伸方向稍微偏差,减料体和主体就产生了交叉面。这种问题最烦人的地方在于它不报错,软件会正常显示,但进入制造环节修模要花很长时间。
排查方法很直接:把生成结果逐特征回放,一旦某一步产生自相交,就精确定位到那一个命令。修复策略分两步走,第一步调整布尔运算方向,比如把“减料”改成“求交”;第二步是在训练数据里补充这类错误样本,让模型学会提前判断操作合法性。几何内核层面如果提供了合法性检查接口,一定要在后处理里默认开启,不要为了节省那几毫秒跳过校验。
4.4 评估指标好看,实际结果不可用
这个坑几乎所有人都会踩。早期我习惯用视觉领域的相似度指标来评估生成质量,渲染图漂亮、指标分数高,就觉得自己做出来了。结果拿到真实项目里一测,STEP文件要么无法导入CAM,要么孔位间距差了一倍,彻底不能用。后来我总结出一个教训:在CAD场景里,视觉美感是充分条件,不是必要条件,甚至很多时候完全是误导。
我后来的评估体系只保留四关:第一关,后处理成功率,能通过几何内核重建的样本占比;第二关,尺寸误差分布,关键尺寸偏离目标值的均值和分位数;第三关,关键特征存在性,孔、槽、倒角这些用户明确要求的结构有没有漏生成;第四关,可编辑性,拿去修改某个特征参数后,模型能否正常重生而不报错。四关全部通过,才敢说这个生成结果“可用”。这也是我给所有做这个方向的朋友的第一条建议:尽早放弃视觉指标,尽早建立工程导向的评测管线。
| 常见问题 | 典型现象 | 根因分析 | 推荐解法 |
|---|---|---|---|
| 方位词理解混乱 | 左右镜像、前后颠倒 | 镜像样本不足、相对方位难学 | 数据增强加镜像,解析时转绝对坐标 |
| 尺寸漂移 | 文本说2mm输出5mm | 量化粒度粗、回归头学偏 | 后处理强制修正,差距超20%重生成 |
| 自相交面 | 通槽减料穿出底面 | 操作序列几何非法 | 逐特征回放定位,调整布尔方向并补样本 |
| 指标欺骗 | 渲染图好但STEP烂 | 视觉指标与可用性脱钩 | 四关评测:重建率、尺寸误差、特征存在性、可编辑性 |
5. text-to-cad 的应用场景、边界与下一步方向
5.1 现阶段最适合切入的三个场景
技术离完美还有距离,但已经有几个场景能落地了。首先是概念设计阶段,设计师输入“一个带提手的圆角矩形外壳”,快速得到两三个候选外形,再挑一个深入细化,这个流程能显著压缩前期脑暴时间。其次是非标零件自动出图,尤其“底板加孔位加槽”这类规则件,完全可以把描述规则化、模板化,批量生成参数化模型,效果非常稳定。第三是教学场景,初学者通过观察“描述怎么一步一步变成特征树”,反而比死记硬背操作命令更容易建立起建模思维。
这三个场景的共同点是:对生成结果的容错度相对高,后续会有人工介入修改,不要求端到端一步到位。如果你的需求符合这几个特征,现在的技术储备其实已经足够启动一个试点项目了。
5.2 短期做不了的事,别抱幻想
我也劝过一些朋友不要过度乐观。text-to-cad 目前绝大多数方案停留在单个零件粒度,零件之间的配合关系、公差带、形位公差还很难通过端到端生成保证。你可以让它生成一个“带卡扣的侧板”,但它很难生成“和另一个零件配合、间隙0.05毫米、且拔模角度满足模具要求”的卡扣。高精度的冲压件、注塑件更不能直接上生产线,模具设计还要考虑拔模斜度、壁厚均匀性、分型面位置,这些工艺知识目前几乎没有有效编码进任何公开模型里。
另外,真正复杂的CAD模型往往不是一个从零生成的“英雄模型”,而是大量标准件、通用结构的组合复用。现在的模型对这类结构化组合建模的抽象能力还不够,你让它生成一个“基于某标准法兰的改进型连接座”,它大概率会从零画一个,而不是参考已有的标准件库。这是工程落地绕不开的差距。
5.3 后续演进:从“生成一个”到“生成可用的一批”
在我个人观察里,这个方向接下来有三个比较靠谱的发力点。第一是多模态条件输入,用户不再只用文字描述,而是文字加草图、文字加参考点云,让机器同时理解“你说什么”和“你指的是什么”;第二是可控编辑,已经生成的模型允许用户圈选区域改描述,比如选中左上角孔位,说“把这个孔移到中心”,而不是整个模型重新生成一遍;第三是生成与仿真校验的闭环,模型输出后立刻做干涉检查、应力分析和尺寸验证,把“可用性”门槛前置到生成阶段,而不是等工程师拿到文件后才发现问题。
这三个方向不是互相独立的,底层逻辑都是同一个:让生成模型从“创造者”变成“工程助手”,输出物从一次性的模型变成可持续迭代的数字资产。这条路大概率不会是一条直线,但它的终点不是替代工程师,而是把工程师从重复劳动里解放出来,去做真正需要判断力的事情。
写到这里,我想把最真实的感受留在最后。text-to-cad 不是那种“今天能跑Demo、明天就上岗”的技术,它的价值在于把重复性翻译劳动从人身上一点一点卸下来。我做过的实验里,真正留下印象的不是哪个指标分数多高,而是有一次把生成模型接到开源几何内核之后,修改生成件的一个孔位,整个B-rep都能跟着联动更新——那一刻我才意识到,这条路表面是在做三维生成,实际上是在重新定义建模这件事的入口。如果你也想试试这个方向,我的建议很简单:不要急着追逐最新的模型结构,先搭一个“描述解析、模型训练、几何校验”三段式的最小闭环。等你哪天能把几十条描述准确、稳定地变成可加工的实体文件,再回来找我聊聊,我们那时候再讨论怎么把它做大。