资讯动态

一文看懂text-to-CAD:从自然语言到可编辑参数化三维模型

发布时间:2026/10/27 7:09:02 来源:尧图企业网站定制
最近一段时间text-to-cad的热度明显涨上来了身边不少做机械结构、工业设计和数控加工的工程师都在问同一件事能不能用一句自然语言直接生成一个能用的三维模型我理解这种期待。传统CAD建模的痛点太直接了新建草图、画线、标约束、拉伸、切除、打孔、阵列每一步都不能少中间想改个尺寸还要回头翻参数。text-to-cad要解决的正是这个——让计算机理解人的语言输出一个真正可以在CAD软件里继续编辑、重新参数化的三维实体模型。这篇文章不打算堆概念我把这个方向的底层原理、主流技术路线、可以上手的开源工具以及自己复现和试用过程中的踩坑记录整理出来适合算法工程师、结构设计工程师也对所有关注AI辅助设计的人有参考价值。1. 为什么 text-to-CAD 不是文生图加个三维通道那么简单1.1 图像生成和CAD建模的目标函数完全不一样很多人第一次接触这个方向会觉得它跟文生图差不多输入提示词模型生成结果只不过输出从二维像素变成了三维网格。这个类比基本成立但也正是它容易把人带偏。图像生成的核心是语义上的合理。你生成一张猫咪图尾巴角度歪了5度、耳朵轮廓差了几个像素普通人看不出问题甚至AI绘画圈还有崩图也有艺术感的说法。但CAD模型不一样它服务的对象是加工、装配、仿真几何尺寸错了就是废品。举个最简单的例子一块板上有4个孔模型的孔中心如果偏移了1毫米视觉上完全看不出来但实际装配时螺丝就是装不上轻则返工重则整个零件报废。所以图像生成可以用CLIP分数、人工打分这类模糊指标评估而text-to-cad的评估要落到几何精度、拓扑合法性、参数可修改性这些硬指标上。生成一个长得像法兰盘的mesh很容易但生成一个孔距公差正确、能导入CNC程序、能继续编辑的STEP实体模型是另一个难度级别的事。1.2 CAD的底层表达比三维网格高一个量级要理解这个方向为什么难先得知道CAD数据到底是什么。我们平时在网页上看到的三维模型大多数是三角网格mesh本质是一堆顶点和三角形面片只能表达外观没有内部结构也不能做参数化修改。而工业级CAD软件里的模型至少分三类表达方式第一类是边界表示也就是B-rep。模型由顶点、边、面以及它们之间的拓扑关系构成面可以是平面、圆柱面、NURBS曲面边可以是圆弧、样条曲线。B-rep模型的每个面都有精确的数学表达所以能被数控加工、有限元仿真直接使用。第二类是构造实体几何也就是CSG。模型被表示成一系列基本体方块、圆柱、球和布尔运算并集、差集、交集组成的树。这种表达直观但表达复杂造型时树会变得很庞大。第三类是特征历史树这是最贴近真实设计流程的表达。一个模型在CAD软件里的操作历史——拉伸、旋转切除、打孔、倒角、阵列——被完整记录每个特征还有可修改的参数。现代CAD软件几乎都基于这个思想。text-to-cad面临的关键问题就是要从一句话自然语言中同时推理出几何形状、建模步骤和设计约束。模型不仅要学会这是什么形状还要学会这个形状是用什么特征一步步做出来的。这比图像生成多了一个设计意图的维度。可以这样理解文生图是拍一张好照片text-to-cad是交付一份还能修改尺寸的施工图而且每一根尺寸线都是活的参数。1.3 用户真正要的是可编辑的参数化实体我在实际试用这类工具时发现一个规律刚开始大家都被一句话生成模型惊艳但兴奋期一过最关心的问题永远是下面三个——导出的格式是不是STEP或原生CAD文件格式模型能不能在软件里继续改尺寸改完尺寸后关联特征会不会自动更新这个需求本质上就是参数化实体。当前很多文本生成三维模型的方法输出的是mesh本质上是一个看得见摸不着的雕塑导入CAD后既不能继续拉伸切除也不能改孔距只能当视觉参考实用性大打折扣。所以真正意义上的text-to-cad项目早期设计目标就要定在生成可编辑的CAD特征序列或CAD脚本上而不是生成一张好看的渲染图。这个目标一旦定下来后面的技术选型逻辑就完全不一样了。2. 三条主路线的进化从看起来像到真的能改2.1 老路线生成体素、点云和隐式场快但不可用最早一批文本到三维模型的研究走的是体素、点云、隐式神经场这类路线。思路很直接用文本编码器提取语义特征再用生成模型输出三维形状的概率分布。这类方法能跑通、能出图也能做形状插值但产物基本都是mesh级别的表面不带特征信息、不带参数、不带建模历史。我在调研阶段专门试过这类开源模型直观感受是它们更适合游戏资产或影视视效的概念设计。比如你说一把木质椅子它能给一个像模像样的模型但你说一块120×80×10的铝合金板四角各有一个直径8的孔它输出的结果在尺寸精度上基本不可控甚至孔的数量都会错。原因不难理解这类模型是在三维形状的统计分布上做采样它天然擅长整体形状不擅长精确特征。2.2 核心路线把CAD建模命令当成序列来生成后来这个领域找到了更贴近CAD本质的路线——把建模过程当成一个序列生成问题来建模。典型代表是DeepCAD和Text2CAD这一系列工作。这个思路的精髓在于它把一个个CAD特征新建草图、画直线、画圆弧、标注约束、拉伸、打孔、倒角离散化成固定词表上的token于是生成一个CAD模型就等价于生成一段token序列。模型本身可以用Transformer架构来训练条件变量是自然语言描述输出是完整的建模命令序列。得到序列之后在CAD软件或Open CASCADE内核里逐条重放就能重建出实体模型。这条路线之所以比生成mesh有前途是因为输出是结构化特征序列天然满足可编辑需求——序列中每个特征都对应真实建模操作修改指定参数就能更新模型。但它的难点也非常实际第一一个稍微复杂的零件建模序列可能包含上百个token序列越长误差积累越明显前面某个草图的坐标偏移一点后面所有特征全受影响第二训练数据不够通用目前能用的CAD命令级数据集以机械零件为主对自由曲面、复杂装配几乎没有覆盖第三生成结果需要合法性校验不是任何token序列都能重建成合法实体。2.3 大模型路线让LLM直接写CAD脚本通用性最强深度学习之外还有一条工程上最容易落地的路线直接让大语言模型编写CAD脚本。以CadQuery和OpenSCAD这两个为代表CadQuery是Python库通过面向对象方式描述草图、拉伸和布尔运算OpenSCAD则是纯代码式CAD模型完全由脚本生成。这条路线本质上是把text-to-cad转化成了代码生成问题。而代码生成恰好是大语言模型最擅长的事情之一。GPT-4、Claude这类模型见过大量编程语料对几何关系和自然语言的理解都要好于专门的CAD生成模型配合检索增强把常用建模代码片段作为示例注入提示词效果可以做到相当可用。我在实际使用中这样的组合能稳定处理四边都有倒角的矩形板加中心通孔带六角法兰面的安装座这类中等复杂度零件。生成结果不再是一堆不可编辑的mesh而是一段可重复执行的Python代码改参数就是改变量导出STEP也只需一行命令。当然它也有短板生成代码偶尔会出现语义正确语法错误的幻觉、坐标系方向搞反、用错了CadQuery方法参数这些都需要一套生成—执行—检验—修复的闭环去兜底。2.4 三条路线怎么选这三条路线没有绝对优劣关键看产物交付形态。我整理了一张对比表方便你按自己的需求快速判断技术路线代表做法产物类型优点缺点直接生成3D表示体素/点云/神经场mesh级模型生成快、视觉效果好无可编辑特征、无精确尺寸CAD命令序列生成DeepCAD、Text2CAD等可重放的特征步骤贴近真实CAD流程、可编辑数据少、长序列误差、泛化受限大模型编写CAD脚本LLM CadQuery / OpenSCAD代码 可导出STEP实体语义理解强、通用性高、易集成生成代码稳定性需校验依赖代码库扩散模型改造CAD表达扩散在潜在CAD表示上B-rep或参数化中间表达前沿、能处理连续曲面工程成熟度低、复现成本高对绝大多数想尽快用起来的团队我会建议走第三条路线如果要发论文、做算法研究第二条路线仍然是最接近CAD本质的方向如果只是做产品概念演示或内部评审的可视化素材第一条路线成本最低、出图最快。3. 可上手的工具盘点哪些值得装、哪些只适合围观3.1 开源界的网红Text2CAD项目本身Text2CAD是当前这个方向里被讨论最多的开源项目之一。它的做法和上面提到的CAD命令序列生成路线一致在DeepCAD的建模命令序列之上通过指令微调让模型学会从自然语言映射到CAD操作序列。训练数据主要来自Fusion 360 Gallery这类大规模CAD数据集这些数据带有原始特征树可以反向用于指令配对。如果你主要目的是做研究、跑实验、对比算法指标我建议认真复现一遍这个项目。它把数据预处理、tokenizer构建、模型训练、序列到CAD重建的完整链路都串起来了是学习这个方向最好的入门口。但如果你只是一个想快速出模型的设计师我不建议直接部署它——原始模型对自然语言的容错率没有那么高句子表述稍微绕一点生成出来的建模序列就可能出现几何上可行但语义不对的情况。3.2 实用性最强的组合LLM CadQuery这个组合我在实际工作中用了一年多是目前投入产出比最高的方案。核心方法很简单把需求描述成一段自然语言交给大语言模型生成CadQuery脚本然后在本地Python环境里执行脚本通过Open CASCADE内核做布尔运算和导出STEP。一个最小可复现的例子是这样。提示词写清楚生成一个120×80×10、四角radius 5倒角、四个直径8通孔、中心直径30通孔的矩形板模型会输出类似下面的代码import cadquery as cq result ( cq.Workplane(XY) .box(120, 80, 10) .edges().fillet(5) .faces(Z).workplane() .pushPoints([(40, 20), (-40, 20), (40, -20), (-40, -20)]) .hole(8) .faces(Z).workplane() .center(0, 0).hole(30) ) cq.exporters.export(result, plate_with_holes.step)这段代码生成的实体模型可以直接导入FreeCAD、Fusion 360等软件继续编辑。就算某一步生成出错报错信息也会指向具体CadQuery方法通常让模型看一眼报错信息再返修一次就能解决问题。3.3 浏览器端的轻量方案CADmium这类项目如果你不想搭Python环境可以关注CADmium这类开源项目。它把CAD建模搬进了浏览器界面内可以直接切换AI代理通过自然语言生成CadQuery源码然后在浏览器里完成几何体预览。优势是零安装、演示效果好适合给非技术背景的同事展示text-to-cad的完整概念。但它也有明显的天花板浏览器端的几何内核性能不如本地Open CASCADE面对复杂装配和高精度曲面会吃力项目本身还在快速迭代接口不一定稳定不适合直接接入生产管线。我把它定位成交互式demo验证工具。3.4 商业软件方向的现状判断传统CAD巨头和一些创业公司也都在做这个方向有的是在原生CAD软件里加AI提示入口有的是做自然语言参考图片直接生成特征历史的插件。现阶段它们的共同策略是尽量不交出一次性生成的死模型而是让AI参与最耗时间的草图构建和特征排列生成结果仍然保留完整特征树和参数方便设计师二次修改。这个方向我认为是对的因为真实工业场景里设计决策是不可替代的AI最先取代的一定是重复性特征操作。3.5 按用途选型的思路总结结合我自己的经验做工具选型时可以按下面这个逻辑来对号入座只是想给方案评审做视觉效果图走文生3D模型的老路线快而且效果好别追求CAD精度。需要可编辑、可出STEP的机械零件优先LLM CadQuery本地管线工程成熟度最高。做算法研究、想发论文复现Text2CAD类方法从CAD序列生成的角度切入。给客户做产品原型或交互演示试试浏览器端方案轻量且直观。4. 复现和搭建text-to-CAD环境时我踩过的一组坑4.1 环境依赖Open CASCADE和Python版本是最大的敌人不管是复现Text2CAD还是跑CadQuery第一步都是装好Open CASCADE的Python绑定。这个库是CAD领域事实标准的内核很多项目都要用到但它的编译安装出了名地麻烦。我曾经在一台Ubuntu服务器上尝试源码编译连续两次因为Boost库版本不匹配失败每次都要耗掉快一个小时。我的建议是直接用conda安装现成的cadquery发行包而不是手动编译底层依赖。同时把Python版本固定到项目文档推荐的版本区间不要图新换Python 3.12很多CAD相关的轮子还没跟上新版本。GPU训练方面单卡8GB显存能跑小规模的CMD序列模型但如果要上完整数据集的指令微调建议至少准备24GB显存或者直接用云上A100跑。注意环境折腾不值钱值钱的是时间。把环境步骤写成脚本、把依赖版本锁死是这个方向所有实操的第一步。4.2 数据集的坑几十个GB只是开始目前text-to-cad方向主要使用的公开数据集是Fusion 360 Gallery和ABC还有DeepCAD内部整理的CAD命令序列。这些数据集都有同一个特点非常大。Fusion 360 Gallery解压后要占用几十GB磁盘空间而且原始文件格式并不统一有的是参数字典有的是导出后的step或smt格式。我最初按默认方式全量解压结果磁盘直接爆了。正确做法是先读数据集的官方解析脚本把需要的字段和CAD命令序列提取成精简的中间格式比如JSONL或者npy再进入训练管线。另一个坑是单位尺度不统一不同来源的模型有的用毫米、有的用英寸有的模型自身没有归一化。训练之前必须统一把尺寸转换到毫米并且对模型做适当的对中处理不然模型学到的几何分布是乱的。4.3 指令对的构造CAD序列本身没有自然语言标签搭建数据管线时你会发现最棘手的问题不是怎么训练而是训练数据从哪里来。Fusion 360 Gallery里的模型每个都带有完整的建模历史但没有配套的中文或英文描述而text-to-cad需要的是成对的自然语言—CAD命令序列。我采用的解决办法有两种。第一种是程序化模板生成把参数化的模型描述直接拼接成自然语言比如一个120×80×10的带四孔的板这类样本生成成本极低量大但表述单调。第二种是让大语言模型基于模型渲染图或特征摘要反向生成多样化描述再用人工抽检筛选质量高但成本也高。实际项目中通常是两种搭配使用先用模板数据保证规模再用模型改写提高表达多样性。4.4 训练和推理里的隐性坑训练层面CAD命令序列的长度普遍长于常规文本而很多Transformer实现默认最大序列长度是512。我在实验中发现一批中等复杂零件的命令序列频繁超过这个阈值结果多个样本被截断模型根本学不到完整特征。解决办法是把max_length调到1024同时用更紧凑的tokenizer设计把草图坐标量化成更小的词汇表。推理层面beam search不加合法性约束是最常见的翻车点。模型可能生成像模像样的token串但重放时会发现还没有草图就执行拉伸约束数量不足导致草图过约束。我在项目里加了一个简单的合法性mask每一步推理前检查当前特征上下文禁止生成那些不符合建模状态的token。光这一项合法模型率就从不到50%提升到接近90%。另外还有一个细节容易被忽略混合精度训练。很多开源代码默认开启fp16加速但CAD序列生成任务里某些梯度的数值范围比较大fp16容易导致loss变成NaN。遇到这种情况不要硬调学习率先试着关掉混合精度跑一遍如果稳定再换bf16。5. 几个不花钱但很管用的土办法提升生成质量的实战技巧5.1 提示词里写清几何语言别只描述感觉text-to-cad模型的输入质量对输出影响极大。同样是描述一块带孔的板我见过效果最差的提示词是一个板子上面有几个洞效果最好的提示词是一块120×80×10mm的6061铝合金板四角各一个直径8mm通孔孔中心距离边缘10mm中心一个直径25mm盲孔深度5mm。差别就在于后者把几何尺寸、特征类型、数量、位置关系全部量化了。模型不再需要自己猜语义只需要把数值映射到相应的CAD参数上。不管用的是开源序列模型还是大语言模型写提示词都要养成这个习惯先写材料/外形再写具体尺寸然后写特征最后写公差或表面处理的额外要求。同时所有尺寸后面明确写上mm或英寸能有效避免模型默认单位不同带来的尺寸翻车。5.2 迭代修正比一次生成的成功率更高目前没有任何text-to-cad工具能做到一次生成完全符合要求的模型所以别抱一步到位的期望。有效的做法是把整个流程拆成生成—检查—修改三步。先生成一个大体结构正确的模型然后针对差异点单独发指令比如把四个孔改成六个孔沿长边等距分布把圆角从5mm改成3mm。这里多说一句大语言模型加CadQuery的路线在迭代上比CAD序列生成模型好用得多因为代码是文本可以直接定位到具体的参数变量局部修改不会让整个模型推倒重来。而序列模型往往一个地方错了整个序列需要重新生成。如果你的工作流需要频繁迭代修改优先考虑代码生成路线。5.3 自动校验和后处理别让废品混进交付物生成完之后必须建立自动校验环节。我目前的做法很简单所有生成的CAD实体统一跑一次Open CASCADE的合法性检查确保没有零厚度的面、没有自相交的边、所有特征都能被正确求解。第二步是自动检查关键尺寸。用CadQuery的boundingBox接口取包围盒尺寸与输入提示词的期望值做对比误差超过1%就判定失败并自动重跑。在实际项目里我会对同一个提示词执行多次采样每次生成不同随机种子下的结果然后用脚本过滤掉不合法或尺寸偏差过大的模型保留top1作为最终候选。这个多采样—自动过滤—保留最优的流程即使模型本身不太强最终产出质量也能稳定不少。5.4 接入现有CAD工作流STEP不是终点是起点生成后的模型最终要进入设计师的工作流。目前最通用的中间格式是STEP因为它被所有主流CAD软件支持能从CadQuery、FreeCAD导出也能无缝导入Fusion 360、SolidWorks、Creo等商业软件。我实际使用中有两个经验可以分享。第一导出STEP之前一定要确认单位制CadQuery默认单位毫米但如果模型是英制导入的导出的STEP在目标软件里会显示成奇怪的大尺寸这类问题隐蔽且容易被人忽视。第二CAD软件导入STEP后通常会当成一个无历史特征的实体来处理也就是你能修改的位置是有限的想加新特征通常要额外转换。所以更稳的工作流是保留原始的CadQuery脚本把它作为设计活源STEP只是给协作方看的结果文件。6. 我对text-to-CAD现状的判断边界很清楚机会也很大6.1 当前模型最擅长和完全做不好的事经过一段时间的实践我对目前text-to-cad技术边界有了比较清晰的认识。它现在最擅长的是规则机械零件板类、轴套类、壳体类特征是阵列孔、沉头孔、倒角、加强筋这些常见结构化特征。因为这些零件的建模逻辑清晰参数规律性强数据集中也最容易覆盖。它目前完全做不好的场景第一类是自由曲面造型比如车身蒙皮、鼠标外壳、人体工学手柄这类形状依赖NURBS曲面的连续性和空间感本质不是特征步骤能简单描述的第二类是复杂装配体一个装配体里有几十个零件之间的位置约束和运动关系现有方法还远远无法从一句自然语言推断出来第三类是公差和设计意图比如这个孔和对面壳体是过渡配合这种隐含在工程语义里的知识单靠几何生成很难表达。6.2 对普通设计师意味着什么我越来越觉得text-to-cad短期内不会替代设计师而是会大幅降低三维建模的工具门槛。以前一个机械专业学生要花几个月熟悉软件操作、坐标平面、约束概念才能画出像样的零件未来只要能把需求表达清楚AI就能先搭出结构雏形剩下的精修和决策工作交给人工。对一线工程师来说最直接的变化是重复劳动减少。每周画支架、出盖板、改孔位这类工作占用了大量本该用来做结构优化的时间。把这些让AI去做腾出精力做方案对比和仿真验证这才是这个方向真正的价值。6.3 后续值得关注的拓展方向从技术发展看我认为有三个方向后续最有潜力。第一个是检索增强把企业的标准件库、历史设计规范、典型特征代码片段注入生成上下文让模型输出天然贴合企业内部规范。第二个是多轮对话式建模让模型支持从草稿到细化的连续修改目前代码生成路线在这方面基础最好。第三个是B-rep级别的预训练模型直接从边界表示学习几何绕过命令序列这一步在处理自由曲面时会有突破。我自己现在的日常工作方式已经发生了变化接到一个零件需求先写下带尺寸的自然语言规格然后用LLM加CadQuery生成首版模型导入FreeCAD快速检查特征需要调整就改代码参数重新导出。整个过程下来真正的重复建模时间至少节省了一半。最后再分享一个小技巧无论你用什么工具提示词里第一句一定要写单位——all dimensions in mm这句话能帮你避开一半以上的尺寸翻车问题。如果你正准备入坑这个方向我的建议很简单别一开始就追大模型先把一个单零件的生成—校验—导出管线完全跑通你会发现后面所有的事情都会顺很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑