
写需求的人天天在重复一句话“帮我画个东西大概什么样我已经想好了可惜不会用软件。”以前这句话只能换来对方的苦笑。现在不一样了text-to-cad 这类工具把“用嘴建模”变成了可落地的操作至少对一批特定结构的零件来说效率提升是实打实的。我花了两周时间把主流路线都试了一遍包括直接生成模型文件的、通过大模型写代码再执行的、还有在CAD软件里挂插件做语义解析的。踩了不少坑也摸清了一些门道。这篇就围绕 text-to-cad 的核心逻辑、方案选型、实操步骤和常见问题展开给想入手的机械设计、3D打印玩家和做自动化设计工具开发的朋友一份可参考的实战记录。1. 先拆清楚text-to-cad 到底是怎么“听懂”人话的1.1 从自然语言到三维模型的三个关键环节很多人以为 text-to-cad 是“对着空气说句话软件就给你变出一个零件”实际上背后的链路比想象中长。一个典型的流程至少要经过三步。第一步叫语义解析。输入的句子要能被拆分成“实体、属性、操作”三个维度。举个例子“给我一个外径50毫米、内径40毫米、高度30毫米的带法兰圆柱壳体”这句话里实体是“圆柱壳体”属性是“外径50、内径40、高度30”操作是“带法兰”。大模型先要把这些信息抽取出来形成结构化的中间表示。第二步叫几何映射。抽出来的参数要变成几何特征这步是核心难点。同样是“法兰”在不同语境下可能是圆形法兰盘、方形法兰板也可能是带孔的安装边。模型需要根据上下文判断把文本描述落到具体的特征类型上然后映射成参数化几何约束。第三步叫模型生成。拿到参数化描述之后系统再选择具体的输出路径。可以直接调程序化建模库生成BREP实体也可以生成一段脚本代码交给CAD内核去执行还可以直接输出网格文件。这个路径选择决定了后续的编辑空间有多大。整个过程里最容易被忽略的是“中间表示”的设计。好的中间表示就像翻译时的草稿纸人和机器都看得懂。我试过的方案里用自然语言直接生成STEP文件的效果最不稳定因为跨过了太多抽象层次。反而是先转成一种结构化的建模指令序列再逐条执行成功率能提高很多。这个思路后面细说。1.2 三种主流技术路线以及我为什么偏向代码生成text-to-cad 目前的实现路线大致有三条各有各的适用场景。第一种是端到端生成模型文件。输入文本直接输出STEP或者STL。这条路线对最终用户最友好但问题也很明显。一旦生成结果不理想你几乎没法局部修改只能重新生成或者拿到别的软件里去修。而且目前端到端模型对几何精度的控制还比较弱圆角倒角位置偏移、孔位公差不对这类问题经常出现。第二种是大模型加程序化建模库。这也是我目前最推荐的一条路线。大模型负责把自然语言转成代码代码调用类似CAD脚本库的接口来构建模型。我实际测试下来最常见的组合就是让模型生成CAD脚本代码执行后输出STEP格式。这么做的好处是每一步都有日志可查哪里错了改哪里还能保留完整的参数化特征树。适合需要反复迭代、精度要求高的场景。第三种是在CAD软件里挂载AI插件直接在交互界面里解析自然语言。这种方案上手最快对已经有建模经验的人来说几乎没有学习成本。缺点是受制于软件本身的API能力复杂曲面、多实体布尔运算这类高级操作插件往往无能为力。而且商业软件的插件生态比较封闭想自定义二次开发很费劲。我自己做机械件比较多需要频繁改尺寸、调位置所以主力方案是第二种。它的核心逻辑不算复杂把建模过程当成“写代码”大模型生成代码代码再跑出模型。这个思路最大的优势是可解释性。模型错了你能看到是代码哪一行的问题尺寸不合你直接改参数就行。对比之下端到端生成就像个黑盒出了问题只能干瞪眼。2. 工具选型哪些方案值得上手哪些是坑2.1 开源方案的技术底子与效果边界先从开源方案说起。目前比较成熟的是基于“大模型加参数化建模脚本”的开源项目形态这类项目通常把建模脚本库和推理框架封装在一起用户只需要输入文本就能拿到一个脚本文件再导入CAD软件生成模型。我试过的几套开源管线底层几乎都依赖同一个建模脚本库。这个脚本库用的是Python语法按“添加特征—设置参数—执行布尔运算”的顺序建模代码风格接近CAD软件里的历史树。大模型在这个框架下生成代码语法约束相对严格出错率比自由对话式生成低很多。效果边界在哪里开源方案对“标准机械特征”处理得不错拉伸、旋转、打孔、倒角、阵列这些常见操作都比较稳。但一旦涉及自由曲面、拓扑复杂的艺术造型表现就明显下降。原因也好理解参数化建模脚本本身擅长的是规规矩矩的工程设计特征自由曲面需要NURBS控制点、曲面连续性约束这类底层操作自然语言很难精确描述到那个粒度。另一个需要留意的是推理成本。一套像样的开源管线本地跑至少需要十几GB显存模型量化后能降一些但生成复杂零件时推理时间可能拉到几十秒甚至几分钟。这个代价对个人用户来说不低但如果是团队内部高频复用摊销下来还是划算的。2.2 商业工具与云端服务怎么选商业方案走的是另一个方向。目前市面上能见到的一类是CAD软件内置的AI助手另外一类是独立的云端text-to-cad平台。这两类我都简单测过。内置AI助手的好处是跟现有工作流无缝衔接。你正在画装配体突然发现缺个垫片直接在命令栏敲一句“生成一个M8平垫圈外径16内径8.4厚度1.5”模型直接就出现在装配树里这个体验确实爽。适合建模过程中灵光一现的补充设计。缺点是它跟你用的CAD版本强绑定换了软件流程就废了而且可操作的特征类型偏基础。独立云端平台的优势是精度控制。因为后端跑的是完整建模内核尺寸公差、几何约束都能做得很严格生成的STEP文件拿到任何CAD软件里都能正常打开。我测试过一个典型场景让它生成带6个均布安装孔的电机安装座孔位置度误差控制在0.01毫米级别完全可以直接用于出图。这类平台的短板是交互延迟高网络差的时候体验很糟而且按月订阅的价格对个人玩家不够友好。怎么选我的建议是分场景。如果只是临时起意做几个小零件云端平台合适。如果是天天要在CAD里干活、频繁补特征的工程师内置助手更顺手。如果是要批量生成、自动化设计的那就老老实实用开源管线自己做二次开发商业方案在这块自由度不够。2.3 环境搭建从零配置一个可用的 text-to-cad 环境我自己常用的是一套开源组合推理框架配上建模脚本库再加一个轻量级的用户界面。给想复现的朋友整理下环境需求。硬件方面如果只是体验一下一张16GB显存的显卡可以跑轻量化模型。想稳定生成复杂零件建议32GB显存起步或者直接用云服务商的GPU实例。内存至少32GB因为模型加载和推理中间态都很吃内存。硬盘要留足空间一个量化模型也要十几GB。软件环境相对简单。操作系统推荐Linux驱动和CUDA版本兼容性问题少。Python环境建议用虚拟环境管理工具单独隔离避免把系统环境搞乱。推理框架安装好之后还要单独安装建模脚本库。这里有个细节建模脚本库有几个专用依赖包括几何内核的Python绑定装不对后面跑起来全是奇奇怪怪的报错。配置完成后先跑一个最简单的官方示例比如生成一个带孔立方体确认整条链路是通的再做复杂测试。这个“从简到繁”的习惯能帮你省很多排查时间。我第一次配置的时候直接在复杂零件上测试结果报错信息满天飞根本分不清是模型问题还是环境问题。老老实实先跑通Hello World级别的例子后面就顺了。3. 实操全流程从一个电机安装座说起3.1 需求描述怎样把脑子里的话变成模型能听懂的指令实操部分拿一个典型的电机安装座来走完整流程。这个零件不算复杂但覆盖了拉伸、打孔、阵列、倒角这些高频特征很适合做例子。先看需求描述怎么写。我最初拿到这个需求的时候输入的是这样一句话“一个电机安装座底板120毫米长、80毫米宽、8毫米厚四角有直径6毫米的安装孔中心有一个直径60毫米的凸台高20毫米凸台顶端均布4个直径5毫米的螺纹孔。”这句话看着挺详细但实际跑起来问题不少。“四角”没有指定孔到边的距离“均布”在圆周上具体怎么分布也不明确一次试下来出来的模型孔位全乱了。后来我总结了一套描述结构按这个顺序写成功率明显提升。描述顺序是主体尺寸定位基准次级特征特征间距公差要求倒角圆角。用这套结构重新写变成了这样“底板长度120毫米宽度80毫米厚度8毫米左下角顶点为原点底面为基准面。底板四角各有一个直径6毫米的通孔孔中心距相邻边10毫米。底板中心有一个外径60毫米、高度20毫米的圆柱凸台与底板同轴。凸台顶面有4个直径5毫米、深度12毫米的螺纹底孔孔中心所在圆直径为40毫米均匀分布。所有棱边倒角C0.5。”这次输出的模型所有孔位、凸台位置都准确落位。核心变化在于把尺寸全部显式化给每一个特征都指定了参考基准还明确了相对位置关系。这套描述习惯其实跟传统图纸标注的逻辑是一致的图面上没标清楚的东西机器理解不了。3.2 执行过程从文本到STEP文件每一步都发生了什么需求描述准备好之后执行链路大概是这样的。第一步是把自然语言发给大模型让它生成建模脚本代码。这一步的输出质量很大程度上取决于模型对CAD脚本语法库的熟悉程度。我实测下来把建模脚本库的关键函数说明和少量示例代码塞进上下文里生成的成功率能提高一大截。这相当于给模型配了一份速查手册它照着手册写代码比自己发挥稳得多。第二步是执行生成的代码。建模脚本库执行的时候会实时构建几何实体如果代码里有语法错误或者参数不符合约束——比如拉伸长度给成负数、布尔运算选择了不相交的实体——执行会中断并报错。这时候不需要重新生成整个模型直接把报错信息反馈给大模型让它修复代码就行。第三步是导出STEP文件。建模脚本库生成的几何体可以直接导出为标准STEP格式这个文件包含了完整的边界表示信息倒入任何主流CAD软件都不会丢面。导出的时候可以设置单位默认为毫米和国内机械设计的习惯一致。这三步走下来从输入文本到拿到STEP文件一台性能够用的机器上大概需要一到三分钟。其中大头时间花在模型推理上真正执行代码和导出文件反而是秒级完成。3.3 结果修复尺寸不对、特征丢失时的通用处理思路理想情况下一次生成就能用但实际大概率要修几轮。我总结了几种常见问题对应的高效处理方式。尺寸偏差是最常见的。比如你要求凸台高度20毫米生成出来变成了18毫米。这种情况不需要重新描述需求直接改代码里的参数值就行。大模型生成的代码里每个尺寸都是显式参数定位到对应数字改掉重新执行几秒钟就出新的模型。这比在CAD里手动拉伸改尺寸还快。特征丢失也比较多见。比如漏掉了倒角或者螺纹孔成了通孔。处理思路是定位到代码里对应的特征操作检查参数是否写全。倒角漏了大概率是描述里没有强调代码里自然没有对应行手动补一行即可。如果是模型漏理解就得把描述中该特征单独提出来强调重新生成。还有一个隐蔽问题是特征顺序。建模脚本是顺序执行的后创建的特征可能会被前面的布尔运算吃掉。比如先做了一个凸台又在凸台上做阵列打孔结果孔的深度被实体截断导致没有通孔效果。这种问题修起来要看特征创建顺序必要时调整代码顺序把打孔操作挪到所有实体合并之后。3.4 下游应用STEP文件拿去做仿真、切片和装配拿到STEP文件只是一个开始。我实际验证了三种下游路径都走得通。做仿真分析的话STEP文件可以直接导入有限元分析软件设置边界条件和载荷就能跑静力分析。因为STEP格式保留的几何精度很高网格划分不会出现碎面、缝隙这类破壳问题。我用电机安装座做了一次静力分析加载100牛的径向力整个流程从文件导入到出应力云图比传统方式至少省了一个下午的建模时间。做3D打印切片的话需要先把STEP转成网格格式。切片软件大多不直接认STEP我用一个开源格式转换工具做中转转出来的STL文件质量不错没有明显的破面和坏边。切片参数正常设置就行打印出来的实物和模型尺寸误差在公差范围内。如果想省掉转换环节也可以让建模脚本库直接导STL但要注意指定导出精度默认精度有时候会很粗糙。做装配配合的话多个text-to-cad生成的零件可以直接在CAD软件里组装。因为每个零件都有精确的坐标基准和孔位配合约束的时候不需要二次调整位置。比如我让文本生成一个安装底板、一个电机端盖、一组垫片螺栓导入后按同轴约束装配整个过程很顺畅没有出现干涉或者明显的装配缝隙。4. 常见问题与排查技巧这里有一份速查表4.1 语义歧义同一个词模型理解的和你不一样text-to-cad 用起来最大的拦路虎是语义歧义。中文尤其明显。比如“法兰”在某些语境里指管道连接用的法兰盘在另一些语境里指零件边缘的凸缘结构。模型默认理解成哪一种取决于它训练数据的分布不取决于你的真实意图。我踩过一次坑我想生成一个带安装边的异形支架描述里写了“边缘加一圈法兰边”。结果模型理解成了管道法兰盘直接给生成出来一个带8个螺栓孔的大圆盘。后来我学乖了在描述里增加限定词比如“零件四周的矩形安装边宽度10毫米均布6个直径4毫米的孔”歧义就消除了。再比如“若干”“几个”“差不多”这种模糊量词模型完全没有概念。它可能给你随机填一个数字而且每次跑随机得还不一样。我的做法是描述里杜绝模糊词所有数量、尺寸都用精确数值。如果确实没想好就先随便给一个数后面改参数都比模型瞎猜强。4.2 参数冲突与单位混乱参数冲突是执行阶段的常见报错来源。表现是代码能生成但运行时提示实体构建失败。典型场景是你要求底板厚度8毫米但又给螺纹孔深度12毫米孔深大于板厚按通孔语义处理就没问题但如果你描述里写的是盲孔模型就得在8毫米厚的板上开一个12毫米深的孔这本身就矛盾。遇到这类问题要么改孔深要么改板厚。排查时先对照描述数据看看有没有自相矛盾的地方。单位问题更隐蔽。机械行业默认毫米但模型训练数据里混着一堆英制单位的数据。我遇到过输出尺寸整体偏小约25倍的情况一看单位模型把毫米理解成了英寸。排查方法很简单生成后先看模型整体尺寸。偏差特别离谱的十有八九是单位出了问题。解决方案是在描述里加一句“所有尺寸单位均为毫米”能在很大程度上压低这种概率。4.3 布尔运算失败与拓扑错误布尔运算失败是建模脚本执行时的硬伤。比如你要在一个实体上减掉另一个实体但两个实体之间存在面贴合或者微小间隙布尔运算就会失败或者产生退化面。这类问题排查起来相对困难因为报错信息有时候就一句“布尔运算失败”完事不给任何上下文。我的处理技巧是把布尔运算简化。比如不要在单一实体上连续做多次减运算而是合并成一次复合裁剪操作尽量让参与运算的实体边界完全穿透而不是刚好贴合。如果实在不行就稍微改一下尺寸比如把要减掉的圆柱加长几毫米保证完全穿透被减实体。这种小技巧在工程模型上特别管用。拓扑错误我遇到最多的是自交面和非流形边。这种模型拿去做仿真或者切片网格阶段就会崩。排查方法是用建模脚本库自带的几何检查工具扫一遍能定位到问题区域。大多数自交问题出在倒角和圆角上尤其是多个圆角交汇的尖角位置。没有十足把握的情况下尽量少在小特征上做复杂的多重圆角组合。4.4 问题速查表问题现象可能原因排查思路解决方案生成模型与描述完全不符语义歧义关键词被错误理解检查描述中是否用了模糊词汇增加限定词精确数值替换模糊量词整体尺寸偏大或偏小若干倍单位被误解为英制对比目标尺寸与生成尺寸比例描述中显式声明“单位毫米”孔位乱、间距不对缺少位置基准描述检查是否有孔到边的距离描述为每个特征指定绝对或相对位置基准特征丢失特征未被识别或代码遗漏检查代码中是否缺少对应特征行描述中单独强调遗漏的特征布尔运算失败实体边界相交方式不当查看报错上下文调整实体尺寸确保完全穿透或完全分离倒角圆角处拓扑破损多个圆角交汇导致自交用几何检查工具定位减少交叉圆角或调整倒角顺序生成代码语法错误大模型输出不符合API规范查看错误行号和语法提示将报错反馈给模型要求修复后重新生成这张表本质上是一种二分排查法先看是理解问题还是执行问题再看是描述问题还是代码问题定位到一层之后处理思路就清晰多了。大模型生成的东西出问题再正常不过关键在快速定位和最短路径修复。5. 一些我的实际体会把 text-to-cad 用顺之后最大的感受不是“建模变快了”而是“改图变轻了”。以前客户说尺寸要改你得在CAD里各种约束联动调整。现在只需要改描述里的一个数字重新跑一遍整个模型自动更新。这种参数化改模的自由度才是 text-to-cad 真正值钱的地方。但也要泼一盆冷水。目前的 text-to-cad 适合的是规则明确、特征标准的工程设计零件适合拿来快速出初稿方案、做前期结构验证。它对语言描述的依赖度很高你的需求表达越精确输出质量越稳定。真正要把它用好不是学会用工具而是学会精确描述三维空间关系。最后分享一个我最近在做的扩展。我在尝试把 text-to-cad 生成的STEP文件接入属性管理库让每个生成零件自动带上材质、密度、表面处理等制造信息直接形成一份带BOM表属性的数字样机。这样从需求描述到工艺规划之间的链路又短了一截。这条路还在跑等流程跑顺了我再专门写一篇分享细节。