text-to-cad:从自然语言到可编辑三维模型的生成技术解析
发布时间:2026/10/27 21:18:19 锦皓数字建站

1. text-to-cad到底解决了什么问题最近几个月我一直在折腾text-to-cad也就是用自然语言描述直接生成CAD三维模型的那类工具。老实说第一次看到它的输出结果时我的第一反应是这玩意儿终于从玩具变成半成品工具了。作为常年跟SolidWorks、Fusion 360打交道的机械设计从业者我对这类工具的期待其实很朴素能不能让我少画一点重复的草图、少拉几次拉伸特征把时间留给真正需要动脑子的结构设计。先说清楚text-to-cad是什么。它本质上是一条AI生成链路输入一段文字描述比如一个带四个圆孔的安装板长100毫米宽50毫米厚3毫米输出一个可以被CAD软件打开、编辑、再生成的标准三维模型文件。这里的关键不是渲染一张看起来像的图片而是生成一个真实存在的、带几何参数的三维实体。很多朋友第一次接触这个概念会想当然地把它跟AI绘画类比但实际上两者差别巨大。我见过不少人拿Midjourney生成的产品概念图去开模结果打印出来根本合不拢。道理很简单图片只是一堆像素值的排列AI绘画模型根本不理解实体几何它只是在拟合你见过的那种像的感觉。而text-to-cad要解决的是另一个维度的问题必须输出真实的、可测量的、可制造的几何体。这意味着模型不仅要学会看还要学会构建它得知道草图是平的、拉伸是有方向的、孔是有轴线的、圆角是切出来的。这就对训练数据和网络结构提出了完全不同的要求。1.1 传统CAD建模的门槛在哪每个用过三维CAD软件的人都心知肚明上手容易精通难。画一个长方体谁都会但真正到了复杂曲面、装配配合、运动仿真的时候软件本身只是个工具真正的门槛在于把脑子里想的转换成CAD软件能听懂的操作序列。举个最简单的例子。你想设计一个带加强筋的外壳传统流程是新建草图画一个矩形标注尺寸拉伸成底板再选一个面新建草图画筋的截面拉伸然后做圆角、打孔、镜像复制。每个特征都要你手动点选基准面、定义草图约束、设置参数数值。整个过程不复杂但非常消耗耐心而且特别容易在特征树里积累大量冗余步骤。等你改了一处尺寸后面依赖它的特征可能全部报错你就得一层层往下修。这个场景我经历过无数次每次都想摔鼠标。text-to-cad切入的就是这个场景里最机械的部分把重复性的、规则化的建模行为交给语言模型和参数生成网络去完成。它不一定能搞定整机设计但对那些标准件、支架、壳体、卡扣、钣金件之类的常规结构一句描述直接出模型效率提升是成倍的。1.2 文本与三维几何之间的翻译难点为什么这个翻译这么难到现在也没有一个工具能完全替代手动建模因为自然语言是极度模糊的而三维几何是极度精确的。你说一个带圆角的板圆角半径是1毫米还是5毫米板的长宽比是多少圆角是四边都有还是只加两边这些信息在人类设计师之间靠默契和上下文但AI没有这个默契。即便你描述得非常具体比如直径20毫米、高度30毫米的圆柱体顶部带一个直径5毫米的同心通孔模型也要先把这段文字解析成结构化语义再映射到CAD内核里的相应操作。当前多数方案的实现思路是让语言模型先输出一个中间表示常见的是程序化的建模指令序列或参数化的特征树再交给后端的CAD内核去重建几何。换句话说text-to-cad不一定真的在理解几何它更像是在翻译指令。我自己的体会是描述越接近建模操作语言生成效果越稳定。比如用拉伸特征做一个矩形底板然后在上面加一个凸台比设计一个可爱的外壳靠谱得多。这不是模型不够聪明而是当前技术路线决定了它更擅长解读操作序列而不擅长解析过于抽象的美学描述。理解了这层关系你才能用好这类工具。1.3 和AI绘画、传统三维生成模型的根本区别很多人会把text-to-cad与那些文本生成3D模型的研究项目混为一谈比如用神经辐射场生成一个看起来像雕像的三维网格。这类项目确实很火但它们的输出通常是三角形网格没有参数化特征没有历史记录也没有可编辑的草图。所以核心区别要落在两个词上B-rep边界表示和特征历史。CAD软件里的模型表面看是一个实体内里其实是一棵特征树先拉伸长方体再从某个面挖孔最后加倒角。每个特征都有参数、有依赖关系。你现在想改孔的直径没问题双击特征改数字整个模型自动更新。而网格文件就是个豆腐块要改只能重新雕刻或者用网格转实体的算法逆向恢复那又是另外一套麻烦工程。text-to-cad的目标就是直接输出带特征历史的B-rep实体。这样生成的模型可以无缝进入工程软件像普通模型一样修改、装配、出工程图。这是它跟AI绘画、3D AIGC最本质的分野。2. 主流方案与技术路线拆解现在市面上敢叫text-to-cad的东西背后技术路线大致能分成三类。我在折腾的过程中把这几条路都走了一遍这里先讲讲原理和它们的边界后面再说实操。2.1 基于程序化指令生成的路线这条路线是目前最接近能用的。它的核心思想把自然语言命令映射成一组CAD建模操作程序。语言模型生成的是类似脚本或者伪代码的东西然后一个解释器把这些指令逐条喂给CAD内核去执行。这里的代表思路就是很多研究团队在做的用LLM生成Python脚本再调用CadQuery或OpenCASCADE库去建模。我在本地也搭过这样的工作流丢一句描述给大模型让它输出一段CadQuery代码然后我在Jupyter里跑跑完导出STEP文件再导入FreeCAD做后处理。这条路线最大的好处是结果天然就是参数化模型。代码里写明了拉伸高度、孔径、倒角半径这些都是显式参数改起来跟改程序一样简单。而且它能直接利用LLM强大的代码生成能力不用专门训练一个三维生成模型落地成本低。缺点是模型能力完全取决于LLM对CAD库的掌握程度。我实测下来让它写简单的钣金件代码没问题一遇到法兰面上四个非对称分布的螺纹孔这种稍复杂的命令它就开始闹脾气要么遗漏孔位要么坐标系搞反。这说明LLM在语言到代码的映射上还不太稳定需要你像带实习生一样反复修正。2.2 基于几何编码器的专用生成路线另一条路线是训练专用模型直接把文字描述编码成几何潜变量再通过解码器生成CAD特征序列或者体素/点云。这个过程类似于图像生成模型的工作方式但输出空间换成了CAD操作序列或隐式几何表示。这条路线训练成本高但理论上上限也高。它不需要语言模型硬背一堆API用法而是从大量CAD数据中直接学习什么样的描述对应什么样的特征序列。我之前看过一些团队的开源成果输入一个简单的带槽滑块模型会输出一段结构化的特征序列包括基体尺寸、槽的位置、深度等。这种做法在特定领域机械零件、建筑构件效果很好因为训练数据可以覆盖大量同类结构。缺点也很明显换一个陌生领域比如首饰建模或者雕塑形态它的泛化能力就大打折扣。而且因为解码的是结构化的特征序列而不是具体几何点它输出的模型在细节上往往比较粗糙需要配合后期精修。2.3 混合Route语言模型专用重建器还有一类方案试图取前两者之长先用LLM把自然语言解析成结构语义树提取出关键尺寸、特征列表和空间关系然后用一个专门的CAD重建网络把这张语义树变成可编辑的B-rep中间通过固定接口对接。这类方案最优雅的一点是语义解析和几何重建解耦。语言模型只负责理解用户想要什么几何重建部分交给专门训练的模型。用户描述很抽象时语义树里可能只有一块板、四个孔、厚度3这几个节点重建器就会自动推断出合理的长宽比和孔间距而不是傻傻地问你板多长。但这种方案工程复杂度拉满了目前开源社区里能做完整的很少。我自己试过其中一个半成品项目发现它最大的问题在前后端衔接语义树里的一个通孔定义在重建器里存在好几种实现方式草图画圆拉伸切除、直接用孔特征、布尔减运算选哪个直接决定模型历史记录干不干净。模型选了最省事的一条路结果后续想改螺纹就麻烦了。2.4 我实际用下来觉得值得关注的项目我陆陆续续试过十几个工具有商业的也有开源的把印象比较深的列在下面供不同需求的人参考。工具/项目路线输出格式我眼中的优缺点Zoo.dev Text-to-CAD商业在线服务STEP / STL / 参数化文档上手快网页直接出结果但对复杂提示词反应不稳定基于CadQueryLLM的本地脚本程序化指令STEP脚本生成可完全自定义适合批量生成需要自己维护调试环境某些论文开源的专用生成模型几何编码器STEP / OBJ领域内效果好但泛化差模型文件通常很大混合路线半成品语义树重建参数化特征模板概念先进但目前稳定性还撑不起日常使用这里多说一句很多开源项目挂的是Text-to-CAD的名实际上输出的是mesh网格不是真正的CAD实体。下载下来一看好家伙STL格式丢进SolidWorks里只能当图形参考根本没法做特征编辑。所以你在选型的时候一定要看清楚两点一是输出格式是否支持STEP/IGES二是是否附带特征历史。如果没有那它本质上还是一个三维生成器不是CAD工具。3. 实操流程与提示词策略聊完原理接下来进入正题。我在本地和在线工具上都做了大量测试这里整理一套我自己跑通的工作流以及一套能让生成成功率明显提高的提示词写法。3.1 从描述到模型的标准流程以我在Zoo.dev Text-to-CAD上的实操为例一套完整的流程大概是这样的第一步明确你需要什么格式的模型。如果只用于3D打印预览STL就够了如果要进SolidWorks或FreeCAD做后续设计必须导出STEP。这决定了你后续能不能正常编辑。第二步把需求写成结构化描述。不要一上来就写设计一个支架而是写L型支架底板长度80毫米宽度60毫米厚度5毫米竖板高度70毫米厚度4毫米底板上均布4个直径6毫米的安装孔竖板上开两个间距40毫米的直径8毫米长圆孔。我测试下来的经验是这种尺寸特征密集的描述生成成功率比抽象描述高一大截。第三步提交生成等结果。在线工具一般需要几十秒到几分钟不等生成时间取决于模型的复杂度。这段时间你可以先把文件命名想好后面导出一堆模型时你就知道名字规范有多重要了。第四步下载并把模型导入CAD软件。导入后第一个操作一定不是开始编辑而是检查尺寸。用测量工具确认关键尺寸跟你描述的一致特别是孔径、中心距、板厚这类直接影响装配的参数。不一致就回到提示词里调整重新生成别硬改。第五步把确认过的模型另存为你的项目模板格式并重建特征历史。很多工具导出的STEP文件不带特征树你只能在CAD里当成死人模型用改一个尺寸就得整个重来。我的习惯是用STEP做参考在软件里重新建模一遍这样后续改起来才顺畅。3.2 提示词是最大的杠杆用text-to-cad这一年我最大的心得就是提示词写得好不好决定这个工具是效率神器还是玩具。它跟AI绘画的提示词逻辑完全不同AI绘画讲究氛围、风格、细节text-to-cad讲究的是可测量、可重复、无歧义。我总结了一套自己的提示词模板分四段第一段定义整体类型和外形。比如一个矩形安装板一个U形槽一个带法兰的圆柱套筒。这里不要写任何修饰性词汇什么流线型现代感漂亮都对几何生成没有帮助反而可能引入噪声。第二段写清楚全局尺寸。长、宽、高、直径、厚度所有你能确定的数值都写出来。单位要统一用毫米不要混用。如果你写长5厘米宽3厘米有的模型会默认成5毫米和3毫米出来的东西直接小一个量级。第三段写特征列表。孔、槽、倒角、加强筋、凸台、凹槽每一个特征都要单独一行或一句写明位置和数量。底板上4个直径6毫米的安装孔就比带安装孔强太多。第四段写装配关系和位置约束。比如孔中心距边缘15毫米两个长圆孔水平对齐布置这些信息是CAD建模中必不可少的约束条件你在提示词里不写模型就会随机布局出来的东西大概率不符合装配需求。我举一个好提示词和坏提示词的对比。坏提示词做一个铝合金外壳上面要开孔底部有加强筋整体要好看。这是什么这连一个刚入行的助理工程师都建模不出来。没有具体尺寸没有孔的数量没有位置没有厚度没有倒角要求。任何一家靠谱的AI工具拿到这种描述只能猜猜出来的东西你能用才怪。好提示词一个铝合金矩形壳体外形尺寸长120毫米宽80毫米高30毫米壁厚3毫米底部四个角各有一个直径6毫米的沉头孔沉孔深度2毫米底面上均匀分布三条高度3毫米、宽度5毫米的纵向加强筋顶部四边倒角2毫米。这种描述已经接近一个人可以动手建模的细致程度了。模型拿到这样的提示词生成的准确率高很多。即便偶尔出错你也能一眼看出是哪里出了问题修改成本很低。3.3 生成结果的后处理从能看到能用很多人的失落感来自这里生成出来的模型乍一看好像对仔细一量孔位偏了、尺寸不对、倒角消失。这很正常当前text-to-cad的定位更接近概念方案快速生成而不是替代人工精确建模。所以拿到生成结果后必须有一道后处理工序。我先讲一个自己踩过的坑。有一次让工具生成一个带法兰的轴套提示词里写明了外径、内径、法兰直径和厚度各是多少。生成结果导入FreeCAD之后用Part模块的测量工具一看轴套主体尺寸完全对但法兰上的四个孔竟然是等距分布在圆周上的我提示词里明明写的是其中一个孔位于法兰顶部中心另外三个间隔90度——描述不够精确模型就默认变成均匀分布。后来我改了提示词明确第一个孔位于12点方向其余孔顺时针间隔90度才得到正确结果。这件事给我的启发是text-to-cad生成的模型只能作为第一稿处理任何关键尺寸都要在CAD软件里重新验算一遍。如果你的项目涉及装配我强烈建议你导出的STEP进到CAD里之后用直接编辑或移动面这种工具修掉那些细微偏差而不是回到提示词里重新生成一遍。因为重新生成的种子不一样可能修好了孔位又把倒角搞没了。这里还要提醒一点生成结果的单位问题。我遇到过几次奇葩情况提示词里写的毫米导出的STEP在SolidWorks里打开却显示成英寸或者米。这通常不是AI的问题而是CAD软件导入STEP时选择了错误的单位设置。你在导入向导里注意看一下单位选项一般改成毫米就能解决。3.4 本地脚本工作流给进阶用户的一条路如果你想绕开在线工具的种种限制完全可以自己搭一条LLMCadQuery的本地工作流。思路很简单准备一个调用大模型API的脚本把提示词发给模型让它输出CadQuery代码然后执行并把结果导出为STEP。我自己的脚手架大概就是这个样子import cadquery as cq import subprocess # 伪代码示意实际使用时你需要接入大模型API prompt L型支架底板80x60x5竖板70x4... generated_code llm_generate(prompt) # 让模型生成CadQuery代码 # 将代码写入临时文件并执行 with open(part_gen.py, w) as f: f.write(generated_code) result subprocess.run([python, part_gen.py], capture_outputTrue) print(result.stdout)这段流程跑通之后你就可以批量生成零件了。比如我要为一台设备定制几十个不同尺寸的同一类支架只需写一个循环把尺寸参数迭代传入提示词自动跑出一堆STEP文件。对那种结构相似、尺寸不同的系列化零件这个本地工作流实际价值非常大远超过在线工具。当然它也有成本。大模型的代码生成能力需要调校同一个提示词扔给不同模型生成的CadQuery代码质量差别很大。我的建议是先用几个标准件做测试挑一个在你常用场景里最稳的模型然后再投入使用别频繁切换。4. 典型问题与排查心得工具用多了总会碰到各种怪问题。这里我把日常踩过频率最高的几个问题整理出来对应排查方向和解决思路省得你到时候抓瞎。4.1 生成的模型打不开或导入报错这个概率说高不高说低不低。最常见的原因是文件格式版本兼容问题。比如有些在线工具生成的STEP文件用的是较新的AP242标准而你本地的CAD软件比较老只支持AP203或AP214就会报无法识别文件格式。排查顺序我建议是先在在线工具的预览窗口里确认模型是否正常生成再检查下载文件后缀名是否真的跟你选的格式一致最后去CAD软件里看导入选项调一下单位或容差设置。如果上述都正常还是打不开用一个在线查看器打开STP文件确认文件完整性基本就能确定是不是CAD软件兼容性问题了。4.2 关键尺寸和描述不一致这个我在前文也提到过核心原因是提示词里的尺寸太多模型处理不过来把某个参数漏掉或组合进了上下文。解决办法是减少一次请求里的参数数量把细化拆成多轮。我的策略是先让模型生成一个只带外观轮廓的粗模型确认外形没问题再在提示词里追加特征和孔位重新生成最后才要求具体倒角半径和公差信息。这样每一步都有验证点出问题更容易定位。另外如果你想保证某些尺寸绝对准确一个技巧是把文字描述写成百分百遵守以下尺寸并且在提示词里把尺寸清单单独列成一行一组用逗号分隔。我实测这样做的成功率比一整段散文描述高不少。4.3 模型生成成功但特征树是空的这可能是我最想吐槽的问题。相当一部分工具生成的STEP文件在SolidWorks里打开后只有一个输入实体没有特征树。意思是你看到的是一块死的几何体想改其中某个孔的直径不行因为它没有记录这个孔是孔特征它只是一堆三角面片拼出来的形状。从技术上来说这不算bug因为很多生成网络输出的是隐式曲面再通过等值面提取变成网格或BREP实体本身就没有经过拉伸-切除-倒角这样的操作序列。所以你拿到空特征树的模型其实情有可原你要是用它就想好了自己重新建模的预算。我的处理办法用这个STEP文件当模板在CAD软件里开启识别特征功能。SolidWorks的FeatureWorks、FreeCAD的宏都能做基础的特征识别识别出来之后倒是能编辑了但识别质量参差不齐简单件可以试试复杂曲面件不建议强求。4.4 别把text-to-cad当万能工具最后说一点我觉得非常重要的认知text-to-cad目前的最佳使用场景是规则零件的概念设计和系列化零件的批量起稿而不是复杂系统的精建模。什么叫复杂系统多零件装配体、有配合关系的运动机构、需要有限元分析的受力结构。这些东西的参数化关系极其复杂一个装配配合链里牵一发而动全身语言模型根本没法靠一段描述给你理清楚。我自己试过让它生成一个带滑槽的滑块滑槽内放一个滚轮的组合体输出的是两个零件在空间里互相穿插没有任何配合关系。所以我的建议是把它定位成草图之前的草图。拿到一个粗模型心里有了大致的形态和尺寸接下来该在CAD里从头建模还是继续迭代生成取决于项目的重要程度。重要的承重件、装配件一定要人工重新建模而那些外观示意、方案PPT、3D打印快速原型直接用生成结果也完全够。再分享一个小技巧不要把第一次生成的结果当成最终结果。同一段提示词不同模型生成的结果差异很大同一个模型同一段提示词随机种子不同也会产生差异。我用在线工具的时候习惯一次生成3到4个版本然后把它们全部导入CAD里并排对比选择最接近需求的那一个再进行后处理。这个对比筛选的过程比反复修改提示词然后重试要节省时间得多。text-to-cad这个方向还在快速迭代每周都有新模型和新思路冒出来。但不管你用哪个工具把它当成一个非常聪明的实习生就对了它会很快地给出一个粗略的方案但离真正能交付的工程图纸还需要你从头到尾去确认、修正、再设计。抱着这样的预期去用它的价值就会实打实地体现出来。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。