☰
text-to-cad:一句话生成工程级三维模型的原理与实践
2026/10/27 22:09:04 网站建设 项目流程

最近AI圈子里冒出来一个方向,叫 text-to-cad,也就是“一句话生成三维模型”。第一次看到这个词的时候,我第一反应是:这不就是把自然语言变成代码再变成几何体吗?能干的事应该挺有限的。但实际跟进去看了源码、跑了几个方案,发现这事比想象中靠谱不少,而且它正在悄悄改变一批工程师和设计师的工作方式。

这篇文章我想把 text-to-cad 这条线的来龙去脉、技术原理、可用工具、实际跑通的流程,以及我踩过的坑一次说清楚。无论是搞机械设计的、做3D打印的,还是对AI辅助建模好奇的开发者,应该都能从中找到能直接拿去用的东西。

1. 从一句话到三维模型:text-to-cad 到底在解决什么问题

1.1 为什么这个方向突然火了

先说个背景。过去几年,AI生成图片、生成视频、生成代码都已经很成熟了,但“生成三维模型”一直是个老大难。原因很简单:三维模型不是像素点的排列,而是由点、线、面、约束、特征、装配关系组成的结构化数据。你让模型直接“画”一个三维形状,它很容易输出一堆看起来像模型、实际上没法用的网格体(mesh),导入SolidWorks或者Fusion 360之后连编辑都没法编辑。

text-to-cad 解决的就是这个痛点。它的目标不是生成一张“像模型”的图片,而是生成一个真正能用的CAD文件——也就是带参数、带特征树、能改尺寸、能约束、能拿到下游工序里去用的那种工程模型。换句话说,它是让AI从“画图”进化到“设计”。

这个方向突然火起来,有几个直接的推力。

第一个推力是大语言模型的能力突飞猛进。现在的模型写代码、读文档、理解几何描述的能力已经足够强,足以承担“把自然语言翻译成建模脚本”的工作。第二个推力是程序化建模语言(procedural modeling language)的成熟,像 CadQuery、OpenSCAD 这类工具把建模逻辑写成了代码,这让大模型有机会插手。第三个推力是社区和开源项目的跟进,多伦多大学那个 Zoo 团队开源的 text-to-cad 项目直接把门槛拉到了一条命令启动的程度,这让许多人第一次真切感受到“我说人话、它出模型”的体验。

1.2 它和传统建模方式的本质区别

传统的CAD建模流程,用的是图形用户界面:你点一个草图按钮、选一个平面、画几条线、加几个约束、拉伸切除。整个过程依赖于你脑子里已经想好的形状,然后用鼠标键盘一步步把它“翻译”成软件里的操作。

text-to-cad 不一样。它把建模过程变成了两层翻译:第一层,把你的自然语言描述翻译成一段建模代码;第二层,把建模代码执行成真正的三维实体。你描述的越精确,代码就越准确,最终得到的模型就越接近你想要的效果。

这种方式的本质区别在于:传统建模是“人直接操作几何”,text-to-cad 是“人描述意图,程序解释意图并执行几何”。前者适合需要精细控制的专业场景,后者适合快速验证想法、批量生成变体、以及降低建模门槛。

打个比方,传统建模像是自己下厨切菜炒菜,每个步骤都亲力亲为;text-to-cad 像是你告诉厨师“我要一盘鱼香肉丝,不要太辣,胡萝卜多放点”,厨师根据你的描述去配菜做饭。前提是这个厨师得懂菜谱,也就是得有足够强的“建模代码生成能力”。

这带来一个很关键的好处:可复现性。同一个描述,跑十次可能得到近似但不同的模型,但只要你保存了生成的脚本,你随时可以回到那个脚本里去改参数、调整尺寸、重新生成。这比传统软件里的“操作历史树”还要透明——因为脚本本身就是完整的建模记录。

2. 核心原理拆解:一条自然语言是怎么变成CAD文件的

2.1 背后的技术栈

text-to-cad 不是单项技术,而是一条流水线。从输入自然语言到输出可编辑的CAD文件,中间经过四个核心环节:意图理解、代码生成、程序化建模、文件导出。

先看意图理解。这个环节由大语言模型完成,它要做的是把“一个底部直径30毫米、高度50毫米的圆柱体,顶部有一个直径10毫米的贯穿孔”这种描述,解析成结构化的建模指令。这里不只是关键词提取,还要处理单位、方位、几何关系,比如“底部”“顶部”“贯穿”“同轴”这些词,都要映射到具体的建模操作上。

接下来是代码生成。大语言模型根据解析出来的意图,生成一段符合目标建模库语法规范的代码。这一步是整个流程中最容易出错的:模型可能生成了语法正确但逻辑错误的代码,或者使用了不存在的API。因此,越好的 text-to-cad 系统,越会在这一层加入约束和校验机制。

然后是程序化建模。生成的代码被交给 CadQuery、OpenSCAD 这类库去执行,它们负责把代码变成真正的几何实体。这一步是可预期的,因为程序化建模库本身就具备确定性的几何内核,代码怎么写,模型就怎么长。

最后是文件导出。几何实体生成之后,需要导出成 STEP、STL、DXF 等通用格式,才能被下游的CAD软件、切片软件或制造设备使用。选择导出什么格式,取决于你后续要干什么。

2.2 为什么程序化建模是关键

你可能会问:为什么不能直接让大模型输出一个网格模型文件?那样不是更直接吗?

理论上可以,但实践上行不通。直接生成网格的AI模型,输出的网格往往存在这样那样的问题:非流形边、重叠面、法线方向混乱、分辨率不足。这些网格拿去3D打印或者做仿真,轻则报错,重则直接崩溃。

程序化建模绕开了这些问题。因为 CadQuery 这类库是基于边界表示(B-rep)构建的,生成的每一步都符合几何内核的规则,最终得到的实体是水密的、可布尔运算的、带参数信息的。这才是CAD圈认可的“正经模型”。

所以我个人认为,text-to-cad 的技术灵魂不在于大语言模型本身,而在于它选对了“中间表示”——用代码而不是点云来描述三维形状。代码能表达精确的尺寸和关系,能被版本管理,能被参数化修改,更重要的是,大语言模型对代码的生成能力远强于对三维网格的生成能力。

2.3 为什么选择Python脚本作为中间表示

目前主流的 text-to-cad 方案,比如 Zoo 的 Text-to-CAD 和同类的开源项目,都选择把 CadQuery 的Python代码作为中间表示。这个选择不是拍脑袋决定的。

一方面,Python 是绝大多数工程师和开发者都熟悉的语言,生成的代码可读性强,出了问题能直接翻出来改。另一方面,CadQuery 的建模语义相对直观,它的API设计是“从草图出发、拉伸旋转、布尔运算”,非常接近工程师的建模思维。相对而言,OpenSCAD 的语法更偏向纯函数式,生成的代码虽然也有可读性,但对新人来说门槛高一些。

代码作为中间表示还带来一个隐藏优势:它可以被测试。在把代码交给几何内核执行之前,系统可以先对代码做静态检查、甚至运行单测,大幅降低生成模型出错的概率。这是纯端到端的神经网络做不到的。

3. 主流工具实测与选型

3.1 几个代表性方案对比

现在能跑起来的 text-to-cad 方案不少,但真正有代表性、值得花时间去试的,我整理了一下。

第一个是Zoo Text-to-CAD,这是目前社区热度最高的开源项目。它提供了一套完整的工具链:一个网页版编辑器,一个命令行工具,还提供了可以和常见的机械设计软件串起来的工作流。它的做法就是让大语言模型生成 CadQuery 代码,然后在本地执行并渲染预览。

第二个是OpenSCAD 加 LLM 的组合,这不是一个具体产品,而是一种玩法。OpenSCAD 本身是一个成熟的程序化建模工具,它的脚本语言里有大量现成的函数,你把需求描述给模型,让它生成 OpenSCAD 脚本,然后在 OpenSCAD 里渲染。好处是 OpenSCAD 的生态成熟、文档齐全,生成的脚本可以直接被 OpenSCAD 编辑器打开调整。

第三个是各种云端AI建模平台,这类平台通常把 text-to-cad 能力包装成SaaS服务,用户上传文本描述,平台返回模型文件。这类方案的优点是零部署成本,缺点是黑盒、不可定制、无法深度集成到本地工作流里。

方案中间表示部署方式可定制性适合场景
Zoo Text-to-CADCadQuery (Python)本地/云端高,可改造代码机械零件、3D打印件
OpenSCAD + LLMOpenSCAD 脚本本地高,生态成熟参数化几何、快速验证
云端AI建模平台私有格式云端低,黑盒快速出个形状看看

3.2 我实际测试的感受

我把 Zoo Text-to-CAD 跑起来试了一圈,印象最深的倒不是“生成得多像”,而是“生成的代码质量比预期好”。比如我让它生成了一个带六个圆形安装孔的方形法兰盘,它给出的 CadQuery 代码用了一个循环来均匀分布孔位,代码结构干净,参数都在开头集中定义,方便后续调整。这种结果直接拿去改改尺寸就能用。

OpenSCAD 那条路我也试了,让 GPT 直接生成 OpenSCAD 脚本去画一个“带螺纹的瓶盖”。结果生成的脚本能跑通,螺纹部分用的是线性拉伸加旋转,效果马马虎虎,但胜在可修改性强。你打开 OpenSCAD 编辑器,把参数调一调,立刻能看到形状变化,这种交互模式特别适合做参数化设计的迭代。

至于云端平台,我试过两三家,体验差别比较大。有些平台生成的模型能直接下载STEP文件,导入 Fusion 360 之后特征树是完整的,这个体验相当加分;也有平台导出的模型就是一个网格体,没有特征、没有参数,实用性大打折扣。所以在选工具的时候,我建议你第一件事就是问清楚:导出的文件是参数化实体还是网格?能不能在我的主力CAD软件里继续编辑?这个问题直接决定了这东西能不能进你的生产流程。

4. 实操:从零跑通一个 text-to-cad 流程

4.1 环境准备

这里我以 Zoo Text-to-CAD 为例,因为它是目前最成熟、最开箱即用的开源方案。环境准备分三步。

第一步,准备 Python 环境。建议用 Python 3.10 以上,装好 pip。如果你用的是 Conda,就新建一个独立的虚拟环境,避免把依赖搞乱。

第二步,安装 Zoo Text-to-CAD。项目提供了 pip 安装包,一条命令就能装完。它会自动拉取 CadQuery、OpenCascade 几何内核、以及与LLM交互所需的客户端库。装完之后,你在终端里执行一下自带的版本检查命令,确认安装成功。

第三步,准备 API 密钥。Zoo Text-to-CAD 默认调用云端的大语言模型接口来理解自然语言并生成代码,所以你需要一个可用的 API 密钥,并在系统的环境变量里配置好。如果你不想用云端接口,项目也支持对接本地跑的模型,但生成质量和速度会差一些。

4.2 写提示词的技巧

text-to-cad 的提示词写作,和写 ChatGPT 提示词有很大区别。最大的区别在于:你需要描述几何关系,而不是描述审美感受。

比如你说“给我一个好看的底座”,模型会懵;你说“一个直径100毫米、高度20毫米的圆柱底座,中心有一个直径30毫米的贯穿孔,四周均匀分布四个直径8毫米的安装孔,孔心距外沿15毫米”,模型就知道该怎么做了。

写提示词的时候,有几个要点值得记住。

第一,先整体后局部。先交代模型的整体轮廓和基本尺寸,再说特征和细节。这样模型生成的代码结构也会遵循同样的顺序,代码的可读性和可维护性都会更好。

第二,讲清楚操作而不是描述结果。与其说“这个零件上方有个凸台”,不如说“在顶面中心添加一个直径20毫米、高度10毫米的圆柱凸台”。前者是描述状态,后者是描述建模操作,后者对代码生成更友好。

第三,给出约束和公差。比如“孔心距外沿15毫米”是一个约束,“螺纹为M8标准”是一个标准要求。约束越多,模型越不容易自由发挥,生成结果越符合预期。

第四,善用参考资料。如果项目支持上传参考图片或已有模型文件,尽量用上。视觉参考加文字描述的组合,比纯文字描述的成功率高得多,这一点我实测下来感受非常明显。

4.3 生成结果的后处理

生成结果不是终点,后处理才是决定你能不能真正用上这个模型的关键环节。

第一步,审查生成的代码。不要直接信任模型输出的代码,至少要扫一眼关键操作:尺寸数字是否合理、布尔运算是否按预期顺序执行、是否有重复定义。我遇到过不少次模型生成了语法完全正确的代码,但里面用错了单位——把毫米写成了英寸,模型直接大了25倍多。

第二步,在预览窗口里旋转检查几何。绝大多数 text-to-cad 工具都会提供本地预览,一定要用起来。从正面、侧面、顶面各看一眼,确认没有飞出来的多余特征、没有明显的破面。预览这一步能挡掉八成以上的低级错误。

第三步,导出格式的选择。如果你要拿去3D打印,导出 STL 就够了;如果你要拿去CNC加工或者和别的工程师协作,导出 STEP 是必须的,因为STEP文件保留精确几何和装配信息。Zoo Text-to-CAD 对几种格式的支持都不错,导出之后建议再用 CadQuery 自带的能力做一次“实体有效性检查”,确认水密性。

注意:不要拿到一个能预览的模型就直接归档。真正的生产流程里,模型还要经过壁厚检验、拔模角分析、干涉检查这些环节。text-to-cad 生成的模型往往在草图上没问题,但在实际制造约束下还有差距,这点要有心理预期。

5. 常见问题与排查实录

5.1 生成失败的原因与处理

我在实际使用中遇到的生成失败,绝大多数集中在三种情况。

第一种是提示词信息不足。比如只说“做一个支架”,没说尺寸,没说安装孔位,没说壁厚,模型就只能自己发挥,生成出来的东西和你脑子里想的完全是两回事。这种情况的解法不是换工具,而是补信息,把尺寸、位置、约束一项项说清楚。

第二种是代码执行报错。CadQuery 的API有一定门槛,模型偶尔会调用不存在的参数,或者用了错误的类名。这种问题通常会在执行阶段被捕获,错误信息会直接弹出来。我的经验是,把报错信息原样贴回给大模型,让它自己修,大多数情况下修复一次就能跑通。如果修复两三次还不行,说明当前这条路径走不通,换个描述角度重新生成往往更高效。

第三种是几何逻辑错误,代码能跑、模型能看,但结果不对。比如你要求“底部有一个凹槽”,模型可能生成了一个凸台。这种问题最隐蔽,因为工具不会报错,只有你自己能发现。曾经让模型生成一个带燕尾槽的滑块,它生成的燕尾方向反了,槽变成了凸,装不进去。排查这类问题没有捷径,只能靠你对几何的理解去发现,然后必须修改提示词,更明确地描述方向和位置关系。

5.2 结果模型的质量问题

就算生成过程一切顺利,结果模型也未必能直接投入生产。质量问题我遇到最多的是这几类。

一是圆角与倒角缺失。模型生成的零件经常是锐利的直角边,这在图纸上没问题,但实际加工需要圆角过渡。CadQuery 代码里需要显式调用圆角接口,如果模型没生成,你得自己在代码里补上。

二是壁厚不足。特别是做壳体件的时候,模型常常只生成外轮廓而忽略内腔和壁厚,导致零件是个实心块,又重又费料。这种问题在提示词阶段就可以规避:明确说“壁厚3毫米,内部掏空”,模型就会按你的要求去处理。

三是精度与公差不达标。text-to-cad 生成的模型尺寸通常是浮点数,可能带着多位小数,这在模型层面没问题,但在制造层面会引起麻烦。我习惯在拿到代码后,把关键尺寸统一写成整数或者按标准小数点后两位,并检查关键配合面之间有没有留出设计公差。

5.3 和传统CAD工作流的衔接

text-to-cad 出来了,但离“替代传统CAD”还差得远,至少现阶段完全不现实。更务实的定位是:把它当成传统工作流的前端加速器。

我的用法是:先用 text-to-cad 把概念方案快速生成出来,确定大致的形状和尺寸;然后把导出的 STEP 文件导入专业的CAD软件,进入正式的参数化设计阶段,调整细节、添加工程特征;最后出图、标注、做生产准备。这套流程下来,最耗时间的“从空白到第一版方案”阶段被大大压缩,后续专业工作仍然在自己熟悉的软件里完成。

有一点要特别提醒:不要试图跳过专业CAD阶段直接让 text-to-cad 交付生产模型。当前所有开源方案在工程标注、公差分析、装配约束这些维度上都还很弱,生产级模型仍然需要人来把关。把它当“草图加速器”,你的体验会好很多;把它当“免费工程师”,你会失望的。

6. 我对这个方向的一些看法

跑了一段时间 text-to-cad 之后,我最大的感受是:这个方向真正的价值不是“替代设计师”,而是“降低设计的启动成本”。

过去,你要做一个零件,哪怕只是一个简单的支架,你也得打开CAD软件、建草图、加约束、拉伸切除,这套流程至少花上十几分钟。现在,你说一段话,十几秒就能看到第一版模型。无论这个模型能不能直接用,它都给了你一个可迭代的起点。设计本来就是迭代的过程,而 text-to-cad 把迭代的周期缩短了一个数量级。

我也注意到这个方向还在快速演进。现在社区里已经在做“根据图片加文字生成CAD模型”的工作,也有人在做“自然语言修改既有模型”的探索——不是重新生成,而是在原模型基础上增量修改,比如“把这个孔从直径8毫米改成10毫米”。如果能跑通,那就真的离“对话式设计”更近了一步。

最后分享一个我常用的工作小技巧:我会维护一个自己的“提示词模板库”,把常用的零件类型——法兰盘、支架、轴承座、外壳——对应的提示词模板整理好,放到笔记软件里。每次需要生成类似零件,直接复制模板改几个数字就行。比起每次从零描述,模板能显著提高成功率和一致性。这个习惯看起来不起眼,但在实际项目中帮我省了大量时间。

text-to-cad 不会是CAD的终点,但它确实让“从想法到模型”这段路短了一大截。如果你平时需要经常出三维模型,我建议你花半小时把 Zoo Text-to-CAD 跑起来,亲手试一句描述。等第一个模型在你屏幕上转起来的时候,你就会明白我上面说的这些体验了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询