
做CAD这行久了都会有个感觉从一句产品想法到能进生产线的三维模型中间隔着巨大的工作量。传统软件里画一个简单的支座可能只要几分钟但要把一个完整零件做对、做规范、可改参数往往要折腾大半天。text-to-cad这个方向就是冲着这个痛点来的它的目标非常直接——把自然语言描述直接翻译成结构化的CAD模型而不是那种只能看不能用的Mesh网格。这篇文章从原理、技术路线、实操跑通到踩坑记录完整拆解这个项目想上手或者准备评估技术路线的朋友可以直接参考。1. text-to-cad解决的根本问题以及和传统3D生成的本质差异1.1 一句话说清它能做什么text-to-cad翻译过来就是文本到CAD模型。用户输入一段描述比如一个带四个安装孔的法兰底座外径120mm厚15mm系统会输出一个可编辑、可装配、可导入CAM软件做数控加工的CAD模型文件常见格式是STEP或IGES。这里强调CAD模型而不是三维模型是因为两者有本质区别。很多人接触过Stable Diffusion生成图片或者文生3D工具生成OBJ/GLB格式的网格模型这类模型由三角形面片拼成视觉上好看但缺少工程语义——它没有真正的平面、圆柱面、倒角特征也没有参数和约束关系。你把一个Mesh导入SolidWorks系统根本不认识这是一个圆孔只能当一堆碎面处理想改个直径几乎不可能。text-to-cad要做的是生成带拓扑结构的BREP实体模型也就是CAD软件里真正一直在用的那种参数化实体。这个方向适合三类人。第一类是机械工程师和产品设计师可以在概念阶段用自然语言快速探索多种结构方案第二类是AI应用开发者和研究员需要了解扩散模型在几何生成上的落地玩法第三类是自动化制造领域的从业者希望把订单需求直接转成可加工模型减少人工建模环节。1.2 为什么不能用现成的文生3D模型直接改一个很自然的思路是现在文生3D工具那么多让它先生成Mesh再自动转成CAD不就行了理论上可行实操上处处是坑。Mesh转BREP也就是逆向工程在CAD软件里叫曲面拟合或实体化难点在于识别原始设计意图。一个机械零件上的圆柱孔在Mesh上会变成几十上百个三角形面自动算法很难判断这些面应该合并成一个标准圆柱还是保持不规则形状。即便转出来了模型的特征树是扁平的没有任何参数记录后续修改只能重新建模。另外Mesh转BREP对模型质量要求非常高。3D生成模型经常出现面片交错、内部空洞、非流形边等问题这些小瑕疵在渲染器里看不出来但做布尔运算或加工路径计算时会让软件直接崩溃。text-to-cad绕开了这个弯路从源头生成的就是拓扑正确的边界表示后面不需要翻译。还有一个被忽视的问题是单位与精度。3D生成模型常用相对尺寸长度单位混乱小数点精度也不够。但CAD模型讲究绝对尺寸和公差一个小数点错位加工出来的零件尺寸完全不对。text-to-cad的数据集和输出格式都按工程标准处理单位、精度、坐标系统一直接可用。1.3 传统CAD自动化的三条路线为什么diffusion成了主力在text-to-cad之前行业里已经有几种从文本或参数生成CAD的尝试对比下来就能理解为什么现在的技术路线能成。第一条路线是参数化模板。预先定义一套可配置的3D模板比如法兰、轴承座、支架然后用规则引擎把文本里的关键词映射到参数上。这条路线的问题是只能覆盖模板覆盖过的零件类型换个形态就失灵本质上还是低代码配置不是智能生成。第二条路线是程序化建模。像OpenSCAD那样用代码描述模型再让大模型生成代码。早期有不少团队尝试让LLM直接写OpenSCAD或CadQuery代码再用代码生成模型。这条路能生成比较规范的模型但大模型写代码经常忽略几何约束细节画出来和描述的完全不是一回事而且CadQuery这类框架本身表达能力有限复杂曲面做不了。第三条路线就是现在主流的条件扩散模型。它的做法是把CAD模型表示成一组有序的几何操作序列比如画一个草图、拉伸、打孔、倒角再用类似Stable Diffusion的扩散模型以文本描述为条件一步步去噪生成这个序列。因为它直接学的是一整个数据分布理论上能覆盖任意复杂度的零件和LLM写代码路线比它对几何关系的把握更稳——毕竟扩散模型天然擅长处理连续的、有结构的数据。2024年前后几个代表性工作包括MIT团队提出的Text2CAD基本都走这条路实测下来在常见机械零件上的成功率已经达到可用的水平。提示现在说text-to-cad默认指扩散模型直接生成顺序CAD建模步骤这条路。如果哪天听到有人管CAD文字自动标注也叫text-to-cad那是另一码事注意区分。2. 核心原理拆解从自然语言到参数化CAD的完整链路2.1 数据是第一步文本-CAD配对数据怎么来AI模型吃饭靠数据text-to-cad最大的门槛就是训练数据。你要让模型学会描述和模型结构的对应关系必须得有大量 文本描述, CAD模型 成对样本。公开的Text2CAD基准数据集是绕不开的起点它从ABC数据集和Fusion 360数据集里筛选出几万个完整CAD模型为每个模型配了多条不同专业级别的文本描述。注意这里说的专业级别——同样是描述一个轴套初学者写法是一个中间带圆孔的圆柱体专家写法是有同心台阶孔和端面倒角的旋转体。数据里特意按难度分层是为了让模型既能听人话也能听工程话。如果自己构建数据集流程大致是四步。第一步收集有原始建模历史的CAD文件最好是Fusion 360或Onshape这类能导出特征历史记录的软件第二步把每个模型的特征树压缩成标准操作序列比如草图-拉伸-打孔第三步由标注人员写文本描述越细越好包含形状、尺寸、相对位置、功能语义第四步做文本增强用一个LLM把描述改写成不同专业程度、不同措辞的版本等于白嫖了大量数据。这一步最容易被低估。模型生成的文本描述质量直接决定生成质量上限。你给模型看一万个圆柱体上有圆孔它永远学不会轴承座的概念。建议数据清洗时至少保证每个模型有至少两条描述一条面向新手、一条面向专家文本里的尺寸数字和模型实际尺寸一致描述里包含功能命名比如安装孔散热槽而不只是几何命名。2.2 让AI理解CADBREP结构和edge-face表示有了数据还不够得让模型读得懂CAD模型。Mesh模型用顶点和三角形表示模型看得懂但BREP模型的结构是——点、边、环、面、壳、实体层层嵌套还有拓扑关系。直接把这种图结构扔给Transformer计算量巨大效果还差。业界通行的做法是把CAD模型压平成一个序列。具体来说对每个面把它的外轮廓边和内孔边拆出来记录每条边的几何类型直线、圆弧、样条、起点终点坐标、控制点信息再记录面与面的连接关系。这样一来一个三维实体就变成了一个扁平的token序列类似NLP里的句子。模型的任务从生成三维几何变成生成一组有序的token难度降了一个维度。这里有个关键设计为什么选edge-face表示而不是直接输出体积函数因为CAD软件的内核不管是Parasolid还是ACIS都是基于BREP做布尔运算和特征操作的你给一个隐式函数比如SDF它反而没法用。只有显式的边界面信息才能无缝导入CAD内核转成真正的B-rep实体。实际训练时模型还会给每类token加特殊分类标记比如这是一个直线的起点这是一个面的外环。这些标记帮助Transformer理解几何层级。我在实测中发现如果在数据预处理时把这些标记设计得更有语义比如直接叫extrude_profile_start而不是抽象的special_token_1下游生成的可编辑性会好不少——模型似乎真的学到了操作意图而不仅仅是几何形态。2.3 生成策略sketch-extrude这种参数化流程有了序列化表示扩散模型怎么生成现在的方案不是一锅端生成全部面而是模仿人建模的习惯先画草图再拉伸再打孔或倒角。这个设计非常聪明。人的CAD建模思路是草图拉伸/旋转特征操作模型也按这个顺序生成生成出来的模型天然带特征树回到CAD软件里还能接着编辑。反过来看如果一个模型只学会了生成最终的BREP几何它本质上还是个形状预测器没法融入真实设计流程。具体到生成管线网络会一次性预测一组操作步骤。每个步骤包含操作类型草图/拉伸/圆角/孔、操作的参数拉伸距离、圆角半径、以及草图的轮廓坐标用上面说的edge-face序列表示。扩散过程在底层几何坐标上加噪声逐步去噪顶层的离散操作类型则用分类token直接预测。所以这个模型其实是离散连续混合生成比纯图像扩散复杂不少。这里给不熟悉扩散模型的朋友打个比方扩散模型就像雕刻家在雾里看石头一开始什么都看不清随着雾气噪声一层层散去石头形状越来越清晰最后显露出完整的雕像。对text-to-cad来说石头就是所有可能的CAD结构空间雾就是添加在高维坐标上的噪声雕像就是最终那个和文字描述匹配的模型。模型训练的目标就是学会从噪声里一点点剥离出合理几何。2.4 质量怎么算几何指标与文本对齐评估生成之后怎么判断好不好行业里一般分两个维度看。第一维度是几何相似度。把生成模型和真实模型都转成Mesh计算Chamfer Distance倒角距离和IoU交并比。Chamfer Distance衡量两个点云的接近程度数值越小越好IoU衡量两个三维体素网格的重叠比例数值越接近1越好。这两个指标能大体反映形状对不对但注意它们对细微瑕疵不敏感——一个面偏了0.5mm在Mesh上可能根本看不出来但对装配而言就是废品。第二维度是文本对齐度。这个更关键也更难量化。现在常用CLIP分数模拟文本描述和生成模型的匹配程度但CLIP本质是二维图像和文本对齐的模型用在三维CAD上有点错位。更靠谱的做法是人工评估让工程师看模型和描述是否一致。实操中建议做一个四档评分表完全匹配、小偏差比如孔位偏移、大偏差多了一个特征、完全不对。团队内部按这个标准抽检200个样本比看一堆数字直观得多。注意Chamfer Distance在CAD评估里有隐藏的坑。如果两个模型只是朝向不一致倒角距离会很大但模型其实没问题。所以评估前一定要做模型对齐预处理把坐标系规整到一致再算。3. 实操从零跑通一个text-to-cad项目3.1 环境准备硬件、软件栈与依赖讲原理总归是纸上谈兵下面用一套公开的text-to-cad实现为例完整走一遍流程。这套流程在单卡NVIDIA RTX 409024GB显存上就可以跑显存要求不算离谱性价比高。基础环境建议如下操作系统Ubuntu 20.04/22.04 LTS不建议Windows直接跑很多几何处理库在Linux下兼容性更好Python3.9或3.10配合虚拟环境管理避免污染系统环境CUDA11.8或12.1和PyTorch版本对应好核心依赖PyTorch 2.0、Transformers、CLIP用于文本编码、trimesh处理Mesh数据、cadquery操作CAD模型、numpy、h5py读数据集安装依赖的顺序有讲究。先装PyTorch再装几何处理库最后装CLIP。如果反过来经常出现NumPy版本冲突——CLIP对numpy版本敏感而trimesh又依赖较新的numpy会互相挤兑。建议用conda建一个干净的python 3.9环境再逐步pip安装。数据集方面公开的Text2CAD数据集体积不小包含模型文件和标注文本下载加解压大概要40到60GB磁盘空间。训练前先用一个小子集验证代码跑通再全量加载否则第一次跑就全量加载任何一个bug都会让你白白等上几个小时。3.2 数据准备与预处理数据预处理是整个流程里最琐碎、最影响效果的环节。这一步的目标是把原始CAD文件转换成模型能吃的序列token。第一步是格式标准化。把原始的三维模型统一成标准坐标系所有模型缩放或对齐到相似的尺寸范围。没有这一步模型会学得乱七八糟——同样是法兰盘一个直径100mm一个直径10mm网络会认为这是两种不同的形状。我的经验是把模型归一化到单位包围盒最长边为1同时记录原始缩放比例生成后再缩放回去。第二步是提取edge-face序列。用cadquery或OCPOpen Cascade Python库读入模型遍历每个面获取外环和内环的边把每条边转成参数化曲线。直线的终点和起点坐标都要记录圆弧要额外记录圆心和半径。按固定顺序比如从底面外环开始逆时针输出保证序列的顺序一致性。第三步是文本处理。把每段自然语言描述用CLIP的tokenizer转成token id同时记录描述的专业级别标签。这里要注意文本长度截断CLIP默认支持最长77个token超长的描述要裁掉或重写不然模型根本读不到后面的内容。预处理完成之后把数据整理成h5或者npy格式按8:1:1划分训练集、验证集、测试集。划分时特别注意按模型分不要按文本分——同一个模型的不同描述应该在同一集合里否则验证集泄漏评估结果虚高这一点踩过坑的人都懂。3.3 关键训练参数与调参经验训练text-to-cad模型有不少细节直接决定能否收敛、能否生成有效模型。我把它整理成一个参数速查表都是基于多次实验验证过的合理默认值参数推荐值影响说明学习率1e-4 到 5e-4初始训练用1e-4预热3000步防止早期不稳定批量大小32-64显存够就开64批量太小会让扩散模型的loss剧烈震荡训练步数150k-300k看验证集loss连续5k步不降就可以停了扩散步数1000训练时固定1000步加噪推理采样步数50-100实测100步质量稳定再大边际收益低文本编码器CLIP ViT-B/32冻结参数不参与训练序列最大长度512超过此长度的模型直接丢弃或简化槽特征优化器AdamW权重衰减0.01常规配置即可调参中最值的注意的是学习率和批量大小的配合。扩散模型对学习率极为敏感——高了loss发散直接出现NaN低了迟迟不收敛。我习惯在训练一开始盯最近100步的平均loss曲线如果前2000步loss没有明显下降一般是学习率过低或者数据预处理有问题不要傻等赶紧停。如果loss变成NaN十有八九是某个几何坐标算出了无穷值回去查数据清洗。还有训练中期可以开启梯度裁剪最大范数设为1.0能有效防止偶然出现的异常batch把权重震飞。这在几何数据上比在图像上更重要因为CAD坐标偶尔会出现极大值一个异常样本就可能毁掉整个checkpoint。3.4 推理、后处理与STEP导出模型训练完推理过程相对简单但有几个环节处理不当生成结果还是不能用。推理时输入一段文本比如一个直径50mm、高30mm的圆柱体顶部中心有一个直径10mm的通孔。模型会输出一组带噪声的token序列经过100步去噪后得到干净的序列。但注意模型输出的是几何token不是最终模型文件。要把这些token复原成CAD实体还需要一个翻译器——把edge-face序列重建成面再用布尔运算把面合成实体。一个常见的问题是生成的边可能不闭合或者相邻面的边在数值上对不齐。这时候不能直接把边数据扔给CAD内核会报错。建议按以下顺序做后处理修复给每条边设置一个容差小于1e-4的间隙直接合并这是最常用的修复手段检查面的法向是否一致不一致就翻转把所有满足闭合条件的边缝合为面再缝合成壳如果壳不封闭尝试用最近的相交面裁剪多余部分。修复完成后用cadquery的export方法导出STEP文件。STEP是ISO标准格式SolidWorks、FreeCAD、Fusion360都能打开是整个生成流程的终点。提示第一次跑推理请务必在纯CPU环境下先跑通一个最简单的样本比如一个立方体确认整个后处理链没问题再上GPU批量生成。不然GPU生成速度快后续报错排查反而拖时间。4. 常见问题与排查技巧实录4.1 数据清洗导致模型学歪了这是最高频的问题没有之一。表现是训练时loss正常下降但生成结果完全不是描述的形状出现张冠李戴——说好的圆柱体生成出来是方块说好的法兰盘生成出一个带缺口的饼。排查下来大部分原因是数据里的模型和文本没对上。我遇到过公开数据集的标注错误某个模型的描述写的是带六个安装孔的圆盘但模型拆开看实际上只有四个孔。模型不知道谁对只能照着多数样本的趋势去猜。如果错误样本比例不高问题不大但如果清洗时把模型方向搞反了、缩放尺度乱了模型就会系统性跑偏。排查技巧训练前随机抽500对文本和模型可视化看一遍确认描述和模型确实对得上。务必把模型用标准视角截图归档和文本一一对应这步虽然耗时但能省下后面排除数据问题的无数烦恼。4.2 训练到一半loss突然变成NaN训练跑得顺风顺水突然某个step之后loss变成NaN再也没恢复。这个问题我遇见不下三次根本原因几乎都出在几何数据里的异常值。CAD模型里偶尔会有极短的边比如1e-8毫米、极大半径的圆弧、或者坐标在原点上的退化面。这些异常在可视化时看不出来但输入到扩散模型里稍加计算就会产生超出浮点数范围的中间值直接导致梯度爆炸。解决办法分两步。第一步数据预处理时主动滤掉退化实体——边长度小于1e-6的直接删掉圆弧半径小于1e-5的降级为直线。第二步训练代码里给中间变量加 clamp限制在-100到100之间防止意外溢出。这样处理后我在后续多轮训练里再也没碰到过NaN。4.3 生成了看着合理但无法实体化的模型这个问题最让人恼火生成的边、面在数学上完全合规渲染出来也漂亮但一导入CAD软件就报错说非实体或者面未闭合。传统CAD软件对实体的要求比学术算法严格得多。一个面只差1e-7毫米不闭合在trimesh里能正常显示在SolidWorks里就是实体错误。很多生成的模型坐标精度只能到1e-4转成STEP后小数点被截断就出现了微小的拓扑缺口。经验做法是在导出STEP之前做一次几何净化。把所有坐标四舍五入到1e-6精度然后把重合的边合并删除重复面最后用CAD内核的修复功能走一遍。FreeCAD里可以用Part模块的Check geometry和Refine shape两步操作SolidWorks里用输入诊断功能。实测下来这步能把百分之七八十的非实体模型救回来。4.4 常见问题速查表现象可能原因处理方案loss不下降学习率过低 / 数据未对齐调高学习率到2e-4重新检查文本-模型对loss出现NaN数据里有退化几何滤除极短边加clamp限制中间值生成模型和描述完全不匹配数据清洗时方向/缩放错误抽查可视化数据对统一坐标系生成模型进入CAD软件报错精度不足 / 面未闭合几何净化四舍五入坐标到1e-6训练速度极慢序列过长 / batch过大降低最大序列长度减小batch文本微调无效果CLIP编码器被冻结且描述冲突保持描述风格统一避免中英混杂5. 应用场景与实操建议5.1 概念设计场景把想法快速变成原型text-to-cad现阶段最有落地价值的地方是概念设计早期。设计师脑海里有个模糊想法手复述给模型几秒钟拿到一个可旋转、可缩放、可切片的基础形态再导入CAD软件细化。这个过程把从想法到草图的时间压缩到接近零。我试着做过一个实验让模型生成一个带散热鳍片的铝制外壳底部有四个安装孔模型给出一个大致合理的外壳结构虽然鳍片间距和真实散热要求还有差距但作为概念方案的起点完全够用。在这类场景里重点不是生成精确的最终零件而是快速探索多种造型可能帮助设计师尽快明确方向。5.2 面向制造的设计精度和公差还很遥远如果你的目标是直接生成可加工零件现在的text-to-cad模型还差得远。主要瓶颈在于缺乏制造语义——模型没学过公差标注、表面粗糙度、倒角形式、加工工艺约束。一个在数学上完美的模型可能因为拔模角度不够而无法注塑脱模可能因为内圆角半径过小而无法用标准刀具加工。所以在实际生产环节我更建议把text-to-cad当作自动建模助手而不是自动工程师。让模型为你搭大框架再由工程师加上公差、标注和工艺特征。这个协同模式在目前的技术成熟度下最稳妥也最能快速见效。5.3 与参数化建模流程的结合这类项目的一个重要优势是生成结果带特征历史。也就是说你可以像对待一个人画出来的模型一样进入CAD软件修改它的草图尺寸、拉伸高度、孔位坐标整个参数化链路没有断。这意味着text-to-cad不是要替代CAD工具而是要嵌到CAD工具里当智能前端。现在很多CAD插件开发的方向就是输入一段文本自动生成特征树生成后设计师可以继续改参数。这种模式下模型只需对第一个版本负责后续所有调整都由设计师在CAD环境里完成大大降低了对AI精度的要求。5.4 对这个方向持有长期耐心我给团队做过一次内部评估结论是text-to-cad在规则零件上已经展示出实用潜力在自由曲面零件上还非常初级。原因是训练数据里标准机械零件占比高自由曲面是少数派数据不够模型就学不好。如果打算在公司内部落地建议从标准化程度高的零件品类入手——比如法兰、支架、轴套、箱体——这些零件结构规整、描述语言统一成功率最高。等团队积累了经验和定制数据再逐步扩展到更复杂的零件类型。技术上多关注ResPilot、CADDreamer等后续工作的进展一边试用一边沉淀自己的数据集这个方向会越来越值得投入。最近几次复跑这个项目我最大的感受是text-to-cad把CAD生成从炼丹变成了工程。早期做三维生成大家只求形状好看完全不管后续可用性现在这个方向从一开始就把可编辑、可加工、可导入CAD当成核心指标整个技术路线和研究心态都成熟了不少。最后给准备入手的同行两个实操建议。第一数据比模型更要紧把预算和精力多投入在数据清洗与标注质量上回报远高于堆算力调参。第二评估模型不要只看生成率一定要在真实CAD软件里过一遍导入和编辑流程能导入能改参数才算真的能用。按这个标准做大概率少走很多弯路。