Text-to-CAD 这个方向我断断续续研究了快一年。它要解决的事说起来很简单把用嘴描述一个零件变成拿到一个能编辑、能出图、能直接给加工厂用的CAD模型。这些年大家见过不少 text-to-3D 工具输入一句话给你吐一个网格体看着很炫但真做产品的工程师拿到那种结果基本是废的——没有参数、没有特征树、没法改尺寸更转不出工程图。text-to-cad 跟它们最大的区别是它生成的是活的模型底层是参数化特征和代码你可以像改普通CAD文件一样改它。这篇文章我不讲虚的直接把技术路线、核心原理、完整实操流程和踩过的坑都摊开来说适合正在做AI辅助设计工具、或者想把这套能力接入自己工作流的工程师和产品经理。1. 项目整体设计与思路拆解1.1 一句话理解 text-to-cad所谓 text-to-cad就是用自然语言描述一个零件的形状、尺寸和功能需求由大语言模型把它转换成一段可执行的CAD建模脚本再由CAD内核执行这段脚本最终生成参数化三维模型。这个流程里最关键的认知是它不是让AI直接捏出几何体而是让AI写出几何体。就像你让一个熟练的建模师按你的话去操作软件而不是让AI凭空生成一个模型文件。整个管线可以拆成四个环节语言理解LLM 把自然语言里的尺寸、约束、特征拆解成结构化意图。代码生成把意图翻译成 CAD 建模库的 API 调用序列。内核执行CAD 内核执行脚本生成带特征树的三维模型。结果反馈把渲染截图反馈给 LLM让它自我纠错形成闭环。这个设计思路决定了它的上限和下限。上限是只要 LLM 的代码能力够强理论上什么零件都能描述出来下限是如果建模库的 API 本身表达能力弱LLM 再聪明也变不出花来。所以选建模库是整个项目的头等大事。1.2 为什么选择代码生成路线而不是直接出网格体刚开始接触这个方向的人都会问一个问题现在有不少 text-to-3D 工具一段文字直接生成网格或者 NeRF 隐式场效果还挺惊艳为什么还要绕一圈去写代码因为工业场景要的是管得住的模型。网格体的本质是一堆三角面片它没有特征概念你不知道哪块面是平面、哪块是圆角改一个圆角直径等于在一堆顶点里手工挑选加工和仿真软件对网格体的支持也远不如对实体模型的支持好。而代码生成的模型是水密的实体自带特征历史拉伸、切除、倒角、旋转这些操作都记录在脚本里。用生活里的类比来说网格体是一张照片参数化模型是一份菜谱。照片看着好看但你没法从中反推出少放点盐该怎么操作菜谱每一步都写清楚了改一个量整道菜跟着变。做设计的本质需求就是不断修改所以 text-to-cad 必须走代码生成这条路。另外代码生成还有一个隐藏优势可审计。生成的每一步操作都在脚本里工程师可以检查你这里为什么切了5毫米而不是面对一个黑盒模型不知从何下手。这对工程信任的建立非常重要。1.3 这个项目适合谁去用我自己测下来text-to-cad 目前最合适的定位是草图加速器和标准件生成器而不是设计替代品。如果你是需要快速验证一个装配思路的机械工程师比如给我一个带四个安装孔的L型支架底板长100宽60立板高40用 text-to-cad 一两分钟就能拿到能用的模型省掉打开CAD软件新建文件、选基准面、画草图、添加约束的一整套流程。如果你是做夹具、治具、料架这类非标件的设计人员这类零件结构相对固定描述清楚需求之后 AI 生成的准确率很高。不适合的情况也很明确复杂的曲面造型、需要精密的配合公差比如 ±0.01那种、多层级的装配体目前这些场景 LLM 还驾驭不了。它不是不好用是用了之后你检查成本可能比从头画还高。2. 核心技术拆解从自然语言到参数化模型2.1 整体管线是怎么串起来的一个标准的 text-to-cad 系统核心是一条意图解析 代码生成 内核执行 视觉反馈的闭环。下面把每个环节讲透。先看输入。用户的自然语言里通常包含三类信息形状描述L型支架、尺寸约束底板100×60、孔直径8、加工要求边缘倒圆角。LLM 需要先把这些信息从口语里抽取出来转成结构化的建模指令。然后是代码生成。这一步是整个系统的灵魂。以 CadQuery 为例用户说在底板四角打四个通孔LLM 要能拆解成确定扁平面作为基准、计算四个孔的位置坐标、执行四次开孔操作。位置坐标不会出现在用户的话里但如果 LLM 不理解四角均布这个工程常识生成出来的孔就是错位的。代码生成之后是内核执行。这一步看起来是纯技术操作其实暗藏一个关键选择用哪个几何内核处理 BRep边界表示运算。CadQuery 走的 OCCOpen CASCADE内核它对布尔运算和圆角倒角的稳定性比轻量级内核好很多这正是我推荐用它而不是纯自研内核的原因——没必要重复造轮子。最后一步最容易被忽略也是最出效果的一步把渲染结果喂回给 LLM。生成的模型渲染成多角度截图连同用户原始指令一起再丢给模型让它判断形状对不对、孔位对不对、比例对不对。实测中加入这一步一次成功率能提升三成以上因为LLM会自己发现我上次把孔径写成了半径这种低级错误。2.2 CadQuery 和 OpenSCAD 到底怎么选这是我在项目里纠结最久的一个问题直接说结论通用机械零件用 CadQuery纯形状原型用 OpenSCAD。OpenSCAD 是老牌的代码建模工具语法简单文档多LLM 容易学会它的 CSG构造实体几何方式非常适合表达两个圆柱相交盒子上减去一个球这类布尔造型。但它有个致命弱点做圆角很难。OpenSCAD 里一个 minkowski 运算就能把你卡住半天而机械零件里圆角倒角几乎是标配。CadQuery 是面向机械设计的 Python 库语法上更像在CAD软件里一步步操作选面、建工作平面、拉伸、开孔、倒角每一步都有明确的对象和方法。它基于 OCC 内核圆角、拔模、抽壳都很稳。缺点是 API 层级深新手理解faces(Z).workplane()这种链式调用需要一点时间。我给的选型建议是如果你主要做的是支架、底板、外壳这一类需要圆角倒角和装配孔的零件直接选 CadQuery它的特征建模方式更接近工程师思维。如果你只是快速验证一个概念形状比如做一个异形花瓶的轮廓怎么简单怎么来选 OpenSCAD。还有一个折中方案CadQuery 2.x 自带的cq.importers.importScad可以兼容 OpenSCAD 的一部分语法但别指望无缝混合用的维护成本不低。2.3 必须守住的几个关键参数用 text-to-cad 做零件有几个设计参数是实践中反复踩坑总结出来的你在提示词里不写明AI 就会替你自由发挥。第一是基准点和默认单位。我会在系统提示词里固定写死模型单位为毫米原点位于零件左下角底面中心。如果不写LLM 有时会按英寸计算或者把原点放在一个莫名其妙的位置后续装配对齐全乱。第二是孔位的定位方式。描述孔的时候尽量给相对约束比如距离边缘10mm而不是位于第一象限。相对约束符合工程标注习惯代码实现是rect(...)定中心再加偏移LLM 对这种描述的理解准确度高得多。第三是特征顺序。模型的创建顺序影响可修改性。先拉伸主体、再切通孔、最后倒角这个顺序跟加工顺序接近后续想改参数也方便。如果 LLM 先倒角再切孔倒角会被孔打断几何上没错但特征树关系混乱。第四是壁厚与圆角的最小值。要主动约束最小壁厚不小于3mm圆角半径不小于2mm这个数根据你的加工工艺来定。不写LLM 经常给你生成一个 0.8mm 的壁厚拿去 3D 打印一碰就断换成 CNC 加工更是直接废刀。3. 实操全流程生成一个真正能用的零件3.1 环境搭建十分钟跑通最小系统我推荐的最小可用组合是CadQuery 2.x Python 3.10 本地LLM或API。如果你想先体验Zoo 团队的 text-to-cad 开源项目是最快的入口它封装好了完整的后端和前端装好依赖就能在本地浏览器里对话生成模型。手动搭环境也很简单pip install cadquery pip install jupyter然后安装一个能在 Jupyter 里实时预览模型的扩展比如jupyter-cadquery它能在每个建模语句后面直接渲染出三维视图调试时有图像反馈会舒服很多。如果你打算接 LLM国内推荐用主流大模型的 API或者直接部署一个开源的代码模型比如 Qwen-Coder 系列。实测下来参数的推理能力比模型的炫技重要得多7B 量级的模型在简单零件上也能跑出不错的结果但复杂装配体还是得靠大模型。3.2 提示词怎么组织成功率差一倍这是实操里最值钱的经验。同样一个底座你给 LLM 的提示词不同结果质量天差地别。我整理了一个高成功率提示词模板请用 CadQuery 生成一个【零件名称】。 功能需求【它用在什么场景比如连接电机和安装板】 形状描述【主体的大致形状、相对位置关系】 关键尺寸 - 底板长100mm宽60mm厚10mm - 安装孔4个直径8mm通孔距边缘10mm均布 - 立板高40mm厚8mm与底板长边垂直 加工要求 - 所有外部边缘倒R2圆角 - 内部锐角改为R1 约束单位毫米原点位于底板底面中心特征顺序为拉伸-切孔-倒角。 只输出可直接运行的Python代码不要解释。注意几个细节。一是功能需求要写在形状描述前面LLM 对这个零件是干嘛的形成先验认知后生成的形状会更合理。二是尺寸格式统一用长×宽×厚不要一会儿说长100、宽60一会儿说60mm宽格式不一致 LLM 容易在换算时出错。三是明确只输出代码否则一堆解释文本混在代码块里后处理解析很容易翻车。3.3 生成与迭代别指望一次到位以下是我实际执行的一个例子。需求是做电机安装支架完整提示词写好后第一次生成的代码长这样import cadquery as cq result ( cq.Workplane(XY) .box(100, 60, 10, centered(True, True, False)) .faces(Z).workplane() .pushPoints([(35, 20), (35, -20), (-35, 20), (-35, -20)]) .hole(8) )第一眼看上去没啥问题底板、四个孔都对。但渲染出来我就发现不对要求的立板高40没了LLM 把整段描述漏了一部分。这时候把截图和缺失需求反馈回去你遗漏了立板。立板应与底板长边重合高40mm厚8mm并在立板中心开一个直径20mm的通孔。第二轮生成的代码就有了立板但立板的位置偏了 5mm。新一轮反馈又把位置纠正了最后得到的代码包含立板、安装孔、中心过孔再补一条倒角规则后才算完整。整个过程三次迭代耗时不到五分钟。这就是 text-to-cad 的正确使用姿势把它当成一个需要你盯着的实习生而不是一个全知全能的神。3.4 批量生成场景给相似零件做个模板text-to-cad 真正拉开效率优势的不是单件生成而是批量变化。比如我要给一批不同尺寸的控制盒设计底座结构完全一样只有长宽高不同。我可以写一个带占位符的提示词模板根据以下参数生成控制盒底座 长度{length}mm 宽度{width}mm 高度{height}mm 四角安装孔直径8mm孔心距边缘10mm...然后写个脚本循环调用模型接口自动生成一整套底座模型。我们项目里一次生成过30个不同尺寸的底座每个模型都在1分钟内完成人工建模的话每个至少15分钟这个效率差距非常大。批量场景里代码生成的稳定性反而比单件对话更高因为模板固定LLM 的自由发挥空间被压缩到了最小。4. 常见问题与排查技巧实录4.1 生成代码一执行就报错怎么排查这是使用频率最高的问题没有之一。LLM 生成 CadQuery 代码报错的原因九成集中在这三类API 名称拼错、方法参数数量不对、对象类型不匹配。比如它可能写出boss(10, 20)这种不存在的调用或者对 Workplane 对象调用cutBlind()时遗漏了布尔运算对象。我的排查顺序是先看栈信息定位到具体行然后直接问 LLM你的代码第几行有错误请修复并只输出修复后的完整代码——把报错原文原样贴回去它修复的成功率比你自己在旁边改高得多。如果连续两次报错果断放弃整段重开生成新代码往往比持续修修补补更快。有一个小技巧在环境里加一个自动单元测试钩子每次生成代码后自动做三个检查——能否import、能否执行val()得到实体、实体体积是否大于零。这三关过了模型至少是可用的不用每次肉眼盯输出。4.2 模型长出来了但是不可制造代码能跑通只是第一步模型能不能加工是另一回事。最常见的坑是零厚度几何和非流形边。比如 LLM 生成两个正好相切的凸台布尔运算后产生一个共享边但没有共享面的几何体这在 CAD 里看没问题切片软件或 CAM 软件里直接崩。这种问题很难靠改提示词解决因为 LLM 很难预判几何拓扑的边界情况。我的处理方式是加一道程序化检查用 CadQuery 的validate()方法检查实体有效性再用Volume()判断薄片体积异常。如果检测到无效实体自动触发重新生成附加说明的反馈回路把验证错误信息喂给 LLM 让它修复。实测下来这个自动校验环节让最终可制造率从百分之六十出头提到了接近百分之九十。4.3 尺寸幻觉明明说了100mm模型却是50mmLLM 经常会把长度和半径搞混、把直径当半径或者把距离边缘理解成中心距。这个问题的根源在于自然语言的歧义不完全是模型的错。我的应对方案是两层。第一层在提示词里强制做单位标注和口径统一所有尺寸都写成直径8mm的通孔而不是8mm的孔减少歧义。第二层在反馈回路里加入以渲染图比对尺寸的步骤让视觉模型检查长宽比是否明显失调。比如 100mm×60mm 的底板在截图里长宽比应该是5:3如果视觉检查发现接近1:1就要触发修正。还有一个我自己用的土办法生成代码后自动给模型加一个 50mm 的参考尺子就是一个细长圆柱渲染截图里比例一目了然。这个参考体在最终导出前删掉就行。4.4 生成的模型后期改尺寸难这也算是 text-to-cad 被吐槽最多的一点。LLM 生成的代码虽然可编辑但如果它把尺寸硬编码写在30个地方而不是定义成变量你后期改一个尺寸就要改一串数字。这不完全是 AI 的锅很大程度上是提示词没引导好。我给提示词固定加一条规则所有关键尺寸定义为首字母大写的变量并在文件末尾统一赋值。这样生成代码的结构就是顶部变量区、中间特征区、底部实例化区。用户改尺寸只需要动顶部和传统 CAD 改参数表的感觉一致。我还见过有人更进一步让 LLM 生成 JSON 格式的配置参数配合 CadQuery 脚本变成一个真正的参数化零件库。我在实际操作中的体会是text-to-cad 目前最成熟的用法是把它放在设计流程的最前端先靠它快速生成一个七八成对的方案然后由工程师接手做结构细化和工艺调整。它真正改变的不是谁会画图而是画图之前的想清楚这个过程被压缩了——你被迫更精确地表达你的需求这本身就是一种设计能力的提升。如果你也想试建议从一个小支架开始先跑通一次完整闭环再慢慢往里加复杂特征这条路我已经替你趟过了值得走下去。
阅读完成 · 觉得有帮助?