
1. 开篇从一句话到三维模型这事终于不再只存在于demo里我第一次看到 text-to-cad 这个词的时候第一反应是“这不就是文字生成模型的又一个变体吗”。真上手试了一圈之后发现完全不是这么回事。文本生成图片哪怕生成得再离谱至少肉眼能看个热闹。但 text-to-cad 面对的是 CAD 模型尺寸错了 0.1 毫米一个零件就装不进去几何特征搞错一个整个装配体就废了。所以这个方向从一开始就没打算走“看起来像就行”的路线它要的是“能加工、能装配、能编程修改”的实体模型。简单说text-to-cad 就是通过自然语言描述让系统直接生成可编辑的 CAD 模型文件。你输入“一个带四个安装孔和加强筋的L形支架材料厚度3毫米安装孔为M5通孔”得到的不再是一张渲染图而是一段参数化建模脚本或者一个可以直接打开的 STEP 文件。这个能力对于机械设计、创客项目、3D 打印、非标自动化方案的快速验证来说价值是实打实的。这篇文章的内容主要面向三类人一类是画图画到怀疑人生的机械设计师一类是想快速验证想法但不想从零建模的硬件工程师和创客还有一类是纯粹对 AI 生成三维几何感兴趣的技术爱好者。我会从我自己的踩坑经历出发把背后的原理、工具选型、完整实操流程和排查技巧都摊开讲清楚尽量让你看完之后自己也能跑通一个完整的 text-to-cad 流程。2. 核心思路拆解为什么“能用的生成”核心是生成代码而不是生成网格2.1 直接输出网格模型的致命伤很多人第一次听到 text-to-cad脑子里浮现的是“AI 直接吐一个 STL 网格文件像图片生成那样”。这个思路听起来自然但实际上在工程场景里属于死路。原因不复杂。网格模型Mesh本质上是三角面的集合它只有“长得像”这个属性没有“可计算”这个属性。比如你想在一个网格模型上改一下孔的直径传统网格工具里你得重新布尔运算、重新修面、重新处理破面一步搞不定。更麻烦的是大部分网格模型根本不是一个封闭的实体缝隙、重面、非流形边一大堆拿去切片软件或者 CAM 软件里跑一遍十有八九要出问题。说白了网格模型对于渲染和 3D 打印的单次输出也许够用但离“CAD”这个词的标准还差得远。CAD 的核心是参数化、可约束、可修改、可关联而这些全是网格模型给不了的。2.2 参数化脚本才是 text-to-cad 的正确答案我做过的几次实测里效果最稳的方案几乎都是同一个套路让模型输出一段程序化建模脚本而不是直接输出几何数据。这种脚本常见的形式有 CadQuery 代码、OpenSCAD 代码、FreeCAD 的 Python API 代码本质上都是“用代码描述建模过程”。为什么这个思路能成立因为代码天然就有“参数”这个概念。脚本里定义一个plate_length 80后面所有关联的拉伸、打孔、倒角都会自动跟随这个参数变化。你让 AI 生成一个“宽度可调”的支架它不需要生成一百个不同宽度的模型只需要生成一段带变量的脚本你改一个数字整个模型自动更新。这就是参数化的威力。另一个好处是代码是可审查的。AI 生成的网格模型你只能通过肉眼去检查它像不像但生成的代码你可以一行一行去看逻辑哪里多了一步布尔运算哪个特征顺序不对一眼就能定位。对于我这种强迫症工程师来说这种“可解释性”比什么都重要。2.3 CSG 和 B-rep 这两个词你得大概懂聊 text-to-cad 的原理CSGConstructive Solid Geometry构造实体几何和 B-repBoundary Representation边界表示是绕不开的两个概念。CSG 比较好理解它就是“用基本几何体做加减法”。一个零件可以看成是一个长方体拉伸加上一个圆柱凸台再减掉几个孔。建模过程就像搭积木每一步操作都是可逆的、可参数化的。CadQuery 和 OpenSCAD 这类工具的核心操作逻辑就是 CSG。B-rep 则是另一种表达方式它通过记录实体的边界面、边、顶点以及它们之间的拓扑关系来表达立体。工业级 CAD 软件里STEP 文件用的就是 B-rep 表达。B-rep 的好处是对复杂曲面和精确边界的表达能力更强但计算量也更大。现在的 text-to-cad 模型很少直接生成 B-rep因为 B-rep 的数据结构太复杂语言模型难以稳定输出。但业界有个折中方案模型生成 CSG 风格的脚本脚本执行后由内核比如 OpenCASCADE自动计算出 B-rep 实体再导出成 STEP 文件。这样一来用户拿到的是一个真正符合工业标准的模型而不是只能在某个私有软件里看的“玩具模型”。3. 主流方案与模型选型这波浪潮里到底有谁在干活3.1 从公开 API 到开源模型选择比你想象中多text-to-cad 不是某一个公司的专属产品而是整个 AI 4 Engineering 赛道里最活跃的方向之一。目前能实际跑通的方案大致可以分三类。第一类是现成的商业或半商业 API。这类服务已经把模型、推理、后处理都包装好了你只需要把文字描述扔进去拿回一段建模脚本或者一个模型文件。对大部分想快速验证流程的人来说这是最省事的入口。这类服务的典型特征是页面上有一个输入框支持几段示例提示词背后跑的是专门微调过的代码生成模型。第二类是学术界的开源方案。这个方向最近发表了很多相关工作核心思路是用合成数据构造大量“文字描述-CAD脚本”配对再微调一个代码生成大模型。训练数据来自参数化建模脚本库的自动注释。开源方案的优点是可控性强、能自己部署但缺点是模型体积和工程化程度都还比较初级需要你有点折腾精神。第三类是通用大模型配上 CAD 专用提示词。这个方案是我自己用得最多的。ChatGPT、Claude、国产的几个大模型都能写 CadQuery 和 OpenSCAD你只要把需求描述清楚让模型生成脚本然后你在本地跑一遍脚本验证几何。这个方案没有专门针对 CAD 做微调但胜在模型本身推理能力强复杂逻辑不太容易崩配合一定的人工纠错出活率实际上很高。3.2 选型的核心指标不是“跑分”是“出活率”选哪一个方案我的判断标准很简单把同一句提示词扔进去看它生成脚本之后能在本地直接跑通、跑完不出几何错误、渲染出来符合需求的比例有多高这就是“出活率”。我在测试中发现通用大模型加 CadQuery 的组合对于中等复杂度的零件比如带孔、带槽、带倒角的钣金件一次出活的概率大概在 60% 到 80% 之间。剩下的 20% 里一半是脚本语法错误一半是几何逻辑错误比如特征顺序不对导致材料残留。而专门的 text-to-cad 模型在某些特定类型的零件上出活率可能更高但一旦超出它训练数据的分布表现就掉得飞快。所以我的建议是不要迷信“专用模型一定更强”。实际工作流里最高的效率来自“专用模型先跑通用模型纠错人做最终检查”的组合拳。这也是为什么我说要理解背后的原理而不是单纯喊“AI 真厉害”因为你只有懂了原理才知道什么时候该换工具。3.3 离线部署的账要算清楚如果你有保密需求不能把设计数据传到云端那就得考虑本地部署方案。开源代码生成模型现在大体上跑得动一张 24GB 显存的卡就能跑 7B 到 13B 规模的量化模型配合推理框架单条提示词响应时间在几十秒到几分钟之间尚可接受。但要注意本地部署的模型精度通常比云端大模型差一截尤其是在复杂装配体和特殊型材的生成上很容易出现“代码能跑但几何完全不对”的情况。我的经验是本地模型适合用来做标准化零件库的批量生成比如各种规格的安装支架、连接板、导轨座因为这些零件结构高度相似模型翻车的概率低。真正复杂的非标设计我还是倾向于走云端或者通用大模型。4. 实操拆解跑通一个完整的 text-to-cad 流程4.1 环境准备把地基打牢再谈生成不管用哪种方案你都至少需要一套能执行建模脚本的本地环境。我个人最推荐的是 CadQuery理由有三个第一它基于 Python生态好写起来顺手第二它底层直接封装了 OpenCASCADE生成的模型是真正的 B-rep 实体能导出 STEP 和 STL第三它的社区积累了不少现成代码AI 训练语料里 CadQuery 的代码量也不小模型生成的成功率相对高。安装没什么玄学用 pip 就能装pip install cadquery如果想在 Jupyter Notebook 里直接预览模型可以安装 cadquery 的 notebook 扩展pip install jupyter-cadquery装完之后先跑一个最基础的例子验证环境import cadquery as cq result ( cq.Workplane(XY) .box(10, 10, 5) .faces(Z) .hole(2) ) show_object(result)如果这段代码能跑出一个带孔的长方体环境就没问题。注意我这里用的是 Jupyter 的极简写法实际生成脚本里你最好显式导出文件后面检查参数会更方便。OpenSCAD 也是一个备选项。它的语法更接近“描述几何”对 AI 来说可能更容易生成但参数化能力和工业级导出格式都不如 CadQuery 灵活。我的建议是在 CadQuery 为主、OpenSCAD 为辅。4.2 用现成 API 快速体验完整链路如果你不想从零搭环境也可以先用现成的 text-to-cad API 体验一下完整链路。这类 API 的交互逻辑基本一致你提交一个描述服务端返回一段建模脚本脚本可以在线渲染也可以下载后本地执行。以我用的比较多的 Zoo 系的 text-to-cad API 为例它的核心套路是先输入零件描述服务端返回一段 CadQuery 代码。你可以直接在浏览器里看它渲染出来的三维预览如果符合预期就复制代码到本地 CadQuery 环境里继续加工。这种 API 对新手非常友好原因在于你不用去管模型怎么部署、推理怎么加速只需要关注提示词本身。等到你对 text-to-cad 的“脾气”摸熟了再决定要不要自己部署和微调。4.3 设计你的第一个提示词从“能跑”到“能看”提示词设计是 text-to-cad 里最反直觉的一个环节。很多人一开始会写得像在跟人说话比如“帮我做一个好看的外壳”这种描述在文字生成图片里也许能产出点东西但在 text-to-cad 里基本等于什么都没说。CAD 描述的核心是“几何语言”形状、尺寸、位置、关系、加工特征。这些要素缺一个模型就只能猜。下面是我总结的第一个完整提示词示例这个例子在多数方案里都能生成出正确模型生成一个 L 形安装支架长边 80mm短边 40mm材料厚度 3mm。长边上有两个 M5 通孔孔间距 50mm孔中心距长边边缘 15mm。短边末端向下弯折 10mm弯折处内倒角 2mm。这句话看起来很长但每一个信息都是有目的的。长度、宽度、厚度定义了拉伸体的尺寸M5 通孔定义了特征类型和孔径M5 通孔直径通常取 5.2mm 或 5.5mm看具体标准孔间距和边距定义了特征位置分布最后的弯折和倒角定义了两个附加特征的形态和量级。把这句提示词扔进能生成 CadQuery 的模型里我拿到的代码大致长这样import cadquery as cq result ( cq.Workplane(XY) .hLine(80) .vLine(40) .hLine(-80) .vLine(-40) .close() .extrude(3) .faces(Z) .workplane() .center(0, 10) .circle(5.5 / 2) .cutThruAll() .faces(Y) .workplane() .center(15, 0) .circle(5.5 / 2) .cutThruAll() .edges(|Y) .fillet(2) )这段代码的执行逻辑是先画一个 L 形截面拉伸 3mm 形成实体在顶面打两个通孔在弯折内边做倒角。如果一切顺利你得到的模型就是满足需求的零件。执行到这一步你会发现一个核心事实text-to-cad 的输出是代码而代码意味着你可以随时手动改。AI 生成的孔位偏了你不用重新生成直接改坐标参数再跑一次就行。这比传统的“生成图片”工作流强了不止一个量级。4.4 导出 STEP 和 STL图纸不只是一个文件模型生成验证没问题之后接下来就是导出。CadQuery 支持多种格式最常用的两种是 STEP 和 STL。STEP 是工业交换格式大多数 CAD 软件都能直接打开适合后续做结构仿真、CAM 编程或者发给供应商。导出代码如下cq.exporters.export(result, bracket.step)STL 是网格格式主要用于 3D 打印。导出代码如下cq.exporters.export(result, bracket.stl)如果模型是给 3D 打印用的STL 导出之前可以设置导出精度cq.exporters.export(result, bracket.stl, tolerance0.01, angularTolerance0.1)tolerance 控制曲面的最大偏差值越小网格越精细文件也越大。对于通常的 FDM 打印0.01mm 的偏差已经足够细腻继续调小只是白白增加文件体积。4.5 从单零件到小装配体流程如何扩展单零件跑通之后你自然会把目光转向装配体。text-to-cad 能不能直接生成一个完整的装配体目前看一次生成完整装配体的成功率还比较低因为装配体涉及多个零件之间的位置关系、约束和相对运动语言模型很难一次把所有关系都算对。我的做法是把装配体拆开。比如要生成一个“带盖板的传感器盒子”我会分三次生成第一次生成盒子底座第二次生成盖板第三次生成固定螺钉。每次生成的提示词里我都会把前一个零件的关键尺寸显式写进去比如“盖板长度 底座内腔长度 2 * 壁厚”。这样即使单个模型没有“装配意识”最终拼起来也能完美契合。这个过程进一步印证了我前面说的text-to-cad 的价值不在于“一次生成一个总成”而在于它把建模门槛从“画图”降低到了“描述和组装描述”。5. 提示词工程进阶怎么让模型听懂你的几何意图5.1 黄金法则先整体后细节先形状后特征我试过不下几十种提示词的写法最后沉淀出来的套路就八个字整体形状细节特征。开头第一句永远先定整体形态。是板状块状轴类壳体还是型材拼接模型只有先确定了基础形态后面的特征才有附着的地方。如果开头就说“一个法兰”模型可能默认成圆盘但如果说“一个矩形法兰底座中心带凸台”模型就知道要先拉伸矩形板再加圆柱。整体定完之后再一步步加特征。每个特征描述尽量包含“类型、尺寸、位置”三个要素。比如“圆角”和“倒角”是两种截然不同的特征不要混着说。再比如“通孔”和“盲孔”也必须写清楚尤其当孔底部还连着某个内部腔体的时候语义不清极容易生成出不符合加工逻辑的隐藏孔。5.2 尺寸和单位这是最容易翻车的环节在 text-to-cad 的实测里尺寸翻车的概率高到离谱。有一次我描述一个“直径 20mm 的圆盘”生成出来的模型直径是 20 英寸的视觉比例相当于放大了 25.4 倍。问题就出在模型默认单位没有对齐。大多数 CAD 脚本都以毫米mm为单位但语言模型在预训练时见过英制和公制混合的语料。你说“一个 2 英寸的孔”模型可能真的生成 2 英寸也可能理解成 2 毫米非常不确定。我的经验是每次都在提示词开头显式声明单位比如“以下所有尺寸单位均为毫米”。这句话看起来没什么技术含量但它能大幅降低模型在尺寸理解上的随机性。另外重要尺寸尽量给出“从哪到哪”的距离关系。比如“孔的圆心距板件左边缘 15mm”比“孔的 X 坐标为 15”要稳得多因为后者隐含了坐标系假设一旦坐标系理解错就全乱。5.3 不存在的特征不要硬编给模型留余量另一个易错点是“用文字描述复杂曲面”。比如样条曲面、渐开线齿轮的齿形、复杂的过渡曲面这些几何特征用自然语言很难讲清楚。你硬要在提示词里描述模型大概率生成出一堆自相交的废几何。我踩过几次坑之后学乖了遇到这类需求先让模型生成一个能跑通的基础毛坯模型再在 CadQuery 里手动加复杂特征或者把齿轮库、轴承库这类现成零件直接导入装配。不要让 AI 去做它不擅长的事这是 text-to-cad 使用者的第一课。5.4 善用示例代码少用纯文字描述如果你用的是通用大模型比如 Claude、ChatGPT有一个很好用的小技巧把一段 CadQuery 示例代码和你的文字描述一起发给模型让它参考示例代码的风格来生成。模型对代码的模仿能力远强于对纯文字描述的三维理解能力。我常用的提示词模板是这样的参考这个例子生成类似的零件给出一段 CadQuery 代码生成一个带安装孔的矩形板。现在请生成另一个零件矩形板长度 100mm宽度 60mm厚度 4mm长边两端各有一个腰形安装槽槽长 20mm宽 6mm。这种“示例代码 新需求描述”的组合出活率比我只扔一句文字描述高出一大截。原理不难理解代码给了模型一个“语法模板”文字描述则提供了“几何语义”两者结合模型犯错的空间被大幅压缩。6. 常见问题与排查技巧实录6.1 脚本能跑但模型是空的多半是截面没闭合这是我遇到频率最高的一个问题。CadQuery 的建模流程里最基础的操作是画一个闭合截面然后拉伸。如果截面没有闭合拉伸结果为空。典型的表现是代码没有报错但最后输出的实体是空的。排查思路检查截面绘制代码里有没有.moveTo和.close()。在 CadQuery 里使用hLine、vLine等命令画完轮廓后必须手动close()闭合否则拉伸出来是个开放的薄片或直接为空。我第一次遇到这个问题时卡了足足半天后来才意识到是截面没闭合。这个坑几乎每个玩 CadQuery 的新手都会踩好在定位之后改起来很快。6.2 孔的位置对不上坐标系原点理解分歧有一次生成一个对称支架我描述“两个孔对称分布在中心线两侧间距 30mm”生成结果是两个孔都在中心线同一侧。原因是模型把“对称分布”理解成了“从中心开始朝一个方向偏移 30mm”而不是“各偏移 15mm”。这类问题的本质是自然语言的歧义。对称、居中、对齐这类相对位置词不同的人有不同的理解模型更是一头雾水。解决办法就是量化。把“对称分布”改成“两个孔的中心点分别位于中心线两侧各 15mm 处”模型就绝对不会搞错。总的原则描述位置关系时永远给绝对尺寸不要依赖模糊的相对词。6.3 导出的 STEP 文件在 SolidWorks / Fusion 360 里打不开这种问题一般不是文件损坏而是生成实体的过程中留下了退化几何。所谓退化几何指的是实体中出现了理论上不存在但实际存在的零厚度、零长度的边或面。OpenCASCADE 对这类几何容忍度较高但其他 CAD 内核比如 Parasolid不见得买账。解决办法是尽量避免重叠操作。比如你在拉伸一个 3mm 厚的板子之后又在这个位置拉伸一个同样 3mm 高的凸台两个实体完全共面就会产生退化特征。正确做法是把两步合并成一个截面拉伸。我写提示词时也会刻意注意这一点要求模型“合并共面的拉伸特征”。6.4 中文表述和英文 CAD 术语的差异text-to-cad 模型大多以英文语料训练为主中文描述的效果通常会打一个折扣。这不是说不能用中文而是要注意术语选择。比如“倒角”在英文里是 chamfer切角或 fillet圆角你如果只说“倒角”模型可能随机选一个结果十次里有五次是错的特征。我的经验是关键术语尽量中英并列。比如“倒角chamfer2mm”“圆角fillet3mm”。这样模型不会产生歧义。还有“通孔through hole”、“盲孔blind hole”、“腰形槽slot”这类词也建议中英文都带上出活率会明显提升。6.5 常见问题速查表问题现象可能原因快速解决脚本执行后实体为空截面未闭合检查close()是否调用尺寸整体偏大或偏小单位理解错误在提示词开头声明单位均为毫米孔的位置偏移相对位置词引发歧义改为给出绝对坐标或绝对间距圆角和倒角混淆中英文术语歧义关键特征同时写中文和英文导出 STEP 无法打开存在退化几何检查是否共用面重叠拉伸装配体零件互相干涉缺少装配间隙描述提示词中显式给出间隙数值复杂曲面完全变形强行用文字描述曲面改用基础实体加阵列特征完成7. 写在最后把 text-to-cad 当成你的“首稿生成器”跑了大半年的 text-to-cad 之后我对这个工具的态度经历了从怀疑到真香的转变但同时也更清楚地看到了它的边界。它现在还做不到的事很多复杂的自由曲面、精密配合的公差标注、完整装配体的约束关系、符合国标的工程图出图这些领域它都还撑不住。但如果你把它定位成“创意转三维草稿的加速器”它的价值立刻变得非常实在。过去一个新零件的概念设计我至少要在 CAD 软件里折腾一两个小时现在先让模型生成一个可用的 70% 版本我再用十分钟在 CadQuery 里修修改改效率提升不是一点点。我个人踩过最深的坑是早期希望模型能一步到位生成完美模型然后陷入反复调整提示词的泥潭。后来我调整了工作方式先接受一个“能用但不够好”的初版然后在本地脚本里直接改代码把 AI 当成同事而不是神。这个心态转变之后text-to-cad 才真正开始在我的一线工作中发挥作用。最后分享一个小技巧如果你生成的结果偶尔不对劲不要急着重新生成一整套而是把问题描述直接追加在后面的对话里比如“把孔的位置从 15mm 改成 18mm”模型往往只修改相关部分保住之前正确的地方。我实测下来这种迭代式修改的成功率比从头生成高得多省下的时间和算力都很可观。