恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
从自然语言到参数化CAD:text-to-cad技术路径与实操避坑指南
首页
资讯中心
/
从自然语言到参数化CAD:text-to-cad技术路径与实操避坑指南
从自然语言到参数化CAD:text-to-cad技术路径与实操避坑指南
发布时间:2026/10/9 0:07:45
最近圈子里一直在聊 text-to-cad我原本以为又是那种“演示视频很酷、落地全是坑”的概念但自己花了大半个月把主流几条路径都跑了一遍之后说实话这条链路现在已经比想象中成熟得多。你给模型一句“一块 40×40×10 的板四角倒圆 R5中心开一个直径 8 的通孔”它能直接给你产出一份参数化建模脚本再往后走还能导出 STEP 文件丢进 Fusion、SolidWorks 甚至加工编程软件里继续用。这篇文章就是想把 text-to-cad 背后的技术逻辑、能落地的工具链、还有我实际踩过的那些坑一次性讲清楚。不管你是机械工程师、做非标自动化的还是自己玩 3D 打印的创客下面这套东西应该都能直接拿来用。1. text-to-cad 到底在解决什么问题1.1 传统 CAD 建模的三座大山先说说 CAD 建模这行当一直以来的难处。第一是学习曲线陡。新手从二维草图开始要理解约束、尺寸驱动、特征树、父子关系这些概念没有几个月时间根本形成不了肌肉记忆。即便是有经验的工程师面对一个稍微复杂的零件也得在草图、拉伸、切除、倒角、阵列这些操作之间反复切换时间不知不觉就过去了。第二是重复劳动严重。非标自动化行业里很多零件其实就是“底板开几个孔、加几个沉头、倒个角”结构大同小异但每来一个新项目就得重新画一遍纯体力活。第三是模型语言和自然语言之间的鸿沟。车间师傅嘴里说的“一块安装板四角留孔中间让开电机”在 CAD 软件里要翻译成一大堆几何操作这个过程既依赖经验也容易出错。text-to-cad 想解决的就是这三座大山让“我想做一个什么样的零件”这句话直接变成“一个可编辑、带特征历史、能导出标准格式”的 CAD 模型。它解决的不是“快速出一个好看的三维渲染图”而是“快速出一个能进下游流程的工程零件”。1.2 为什么强调是 CAD 而不是 3D很多人会把 text-to-cad 和 text-to-3D 混为一谈但这两者的目标完全不一样。text-to-3D 类工具比如生成 OBJ、GLB、glTF 模型输出的是网格 Mesh由一堆三角面片组成看起来像那么回事但拿去做仿真分析、加工、装配基本没用。因为网格模型没有几何拓扑、没有参数化特征、没有可编辑的建模历史工程师拿到手里完全没法改。text-to-cad 输出的则是 CAD 原生数据参数化特征树、B-rep 边界表示、STEP 文件这些。你可以在软件里选中一个“拉伸特征”直接修改尺寸可以重新定义倒角半径也可以把整个模型丢进有限元分析里划分网格。这个区别是本质性的。我见过不少团队一上来就试图用文生图式的方法做模型最后导出 STEP 一塌糊涂就是因为没分清这两个方向。1.3 谁最需要这个能力我大概梳理了一下下面这几类人从 text-to-cad 里受益最大机械工程师做概念验证的时候需求刚提出不需要精细建模先出一个初稿放到装配里看干涉这个场景下 text-to-cad 能把一小时的建模压缩到几分钟。非标自动化设计的“标准底板、支架、法兰”类零件结构高度重复描述清楚就能生成。3D 打印创客经常需要“一个能放手机的手机支架”不需要懂太多 CAD 命令直接自然语言生成再微调尺寸就能导出 STL 打印。企业内部想做设计知识沉淀的团队把老师傅口中的经验“翻译”成参数化模板text-to-cad 可以作为模板生成的前置环节。2. 文本是怎么一步步变成 CAD 模型的2.1 三种三维表示方式先分清再谈生成想要理解 text-to-cad 的技术路径必须先搞清楚三维模型在计算机里常见的几种表示方式。它们决定了“生成”这件事的难度和最终结果的可编辑性。第一种是 Mesh 网格。它就是一个三角形或四边形面片的集合顶点和法线信息组成。游戏、渲染、3D 扫描都用这种格式。生成起来相对容易神经网络也比较擅长预测这种离散的顶点坐标但问题是精度有限、没有拓扑关系工业软件很难直接操作。第二种是 CSG 构造实体几何。它用基本几何体立方体、圆柱、球通过布尔运算并、交、差组合出复杂形状。OpenSCAD 就是典型的 CSG 建模工具。这种表示方式规则性强对大模型来说生成对应的脚本指令并不难而且结果天然是“可参数化”的。第三种是 B-rep 边界表示也就是 CAD 工业里真正的“祖宗”。它记录的是模型的表面、边、顶点以及它们之间的拓扑连接关系STEP 格式的核心就是 B-rep。B-rep 可以直接用于 CAM 加工、CAE 仿真和装配约束定义。但 B-rep 的生成难度远高于网格因为必须保证几何的一致性、闭合性和拓扑正确性这也是为什么真正端到端生成 B-rep 的方案至今还在实验室阶段。2.2 大模型在这里面扮演什么角色大模型在 text-to-cad 里做的事情本质上是“需求拆解”和“指令生成”而不是“几何计算”。几何计算始终是由 CAD 内核或参数化建模库去完成。你可以这样理解大模型像一个很有经验的工程师助理你告诉它“我要一块安装板”它嘴上说着“好嘞”然后拿起笔写出一段 CadQuery 脚本、一段 OpenSCAD 代码或者一整套 FreeCAD 宏命令。真正把脚本执行成三维实体的是这些工具自带的几何内核。这种分工非常关键。因为当前大模型对“代码生成”这件事的熟练度要远高于对“直接输出坐标和拓扑”的熟练度。让 LLM 写一段 Python 代码来生成一个长方体它写得又快又准但如果让它直接输出一组点云、B-rep 面片关系错误率会飙升。所以业界现在最务实的做法就是把 text-to-cad 问题转化成一个“text-to-code”问题。2.3 当前三条主流技术路径基于上面的分工现在的 text-to-cad 解决方案基本可以分成三类路径 ALLM 可编程 CAD 库。代表是 CadQuery、Build123d 这类用 Python 描述参数化建模过程的库。LLM 生成 Python 代码库负责执行几何运算生成的结果可以直接导出 STEP 文件。这条路最成熟、可控性最强也是我这篇文章里重点推荐大家先尝试的。路径 BLLM 脚本化建模软件。比如让 LLM 输出 OpenSCAD 的 .scad 脚本或者 FreeCAD 的 Python 宏然后用软件的命令行工具批量执行。这条路的好处是环境现成、无需写太多胶水代码坏处是建模能力受限于这些软件的表达范围。路径 C端到端生成模型。一些研究项目尝试让神经网络直接输出 CAD 建模操作序列或者 B-rep 数据比如把“生成一个特征树”当作序列生成任务来做。这条路的想象空间很大但目前稳定性、泛化能力都还不够一般只出现在论文里。我自己的判断是路径 A 是当前性价比最高的落地方案。CadQuery 有完整的 API 文档、活跃的社区、可靠的 STEP 导出能力而且它的建模方式本身就是“代码即特征历史”非常契合 LLM 的生成模式。3. 三条最实用的实操路线我都跑通了3.1 路线一CadQuery / Build123d —— 最推荐新手先跑通CadQuery 是一个基于 Python 的参数化建模库底层使用 OpenCascade 几何内核。它的核心概念是“链式操作”从一个工作平面开始逐步执行 box、fillet、hole、cut 这些命令每一步都像一个特征最后形成完整模型。对 LLM 来说这种链式命令的代码结构非常容易生成因为每一步都有明确的几何语义。先看环境安装。我建议用 Python 3.10 以上的环境直接 pip 安装pip install cadquery安装完成后我找一个非常典型的“底板打孔”需求来做测试。需求描述是一块 40×40×10 的矩形板四角倒圆角 R5中心开一个直径 8 的通孔。给 LLM 的提示词只需要明确说出这几个尺寸和操作它生成的 CadQuery 代码大致长这样import cadquery as cq plate_w 40.0 plate_d 40.0 plate_h 10.0 corner_r 5.0 hole_d 8.0 result ( cq.Workplane(XY) .box(plate_w, plate_d, plate_h) .edges(|Z) .fillet(corner_r) .faces(Z) .workplane() .hole(hole_d) ) cq.exporters.export(result, plate.step)这段代码的逻辑非常清晰在 XY 工作平面上建立一个 40×40×10 的长方体选中所有垂直方向的边|Z倒 R5 圆角再选中顶面建立新的工作平面打一个直径 8 的通孔最后导出 STEP。整个过程跑下来不到一秒钟得到的模型完全可以导入到任何主流的 CAD 软件里继续编辑。这里要特别说明一下“工作平面”的概念。CadQuery 里绝大多数操作都发生在某个工作平面上而 LLM 容易忽略的是平面的选择和方向。比如你打算在顶面打孔就必须先用.faces(Z).workplane()切换到顶面否则默认会在底面创建草图。这类细节只能通过多跑几次、多报错来积累经验也是后面要讲的提示词工程的重点。Build123d 是 CadQuery 的进化版语法上更贴近现代 Python 的开发习惯支持了更多的上下文管理器和更清晰的边界表示。如果是从零开始学我建议直接学 Build123d但 CadQuery 的社区资料更多遇到问题更容易搜到答案。两条路线的底层内核一样学一个另一个也能很快上手。3.2 路线二OpenSCAD —— 最轻量的快速出图方案第二个路线是 OpenSCAD。它本身就是一个编程式建模软件用类似函数式语言的语法描述 CSG 模型。LLM 生成 OpenSCAD 脚本的能力非常强因为它不需要处理复杂的工作平面切换整个模型就是一堆基本几何体的布尔运算。还是那个底板打孔的例子的 OpenSCAD 版本// 一块 40x40x10 的板四角倒圆 R5中心开直径 8 通孔 $fn 64; x 40; y 40; z 10; r 5; d 8; difference() { linear_extrude(height z) { offset(r r) square([x - 2*r, y - 2*r], center true); } translate([0, 0, -1]) cylinder(d d, h z 2); }这段代码的思路是先用offset(rr)把一个正方形往外扩 R5 实现圆角效果再用linear_extrude拉伸出 10 毫米的板子最后用difference()把中心的圆柱孔减掉。OpenSCAD 的建模思路确实很“程序员风格”对机械结构规则不强的用户来说非常友好。OpenSCAD 最方便的是支持命令行批处理。你把 LLM 生成的 .scad 文件保存下来可以直接在终端里渲染并导出 STLopenscad -o plate.stl plate.scad如果安装了 OpenSCAD 的 nightly 版本还可以用-o plate.step直接导出 STEP 格式。不过从我的实测经验看OpenSCAD 导出的 STEP 文件兼容性不如 CadQuery 导出的如果后续要进专业 CAD 软件做复杂操作还是优先选路线一。OpenSCAD 这条路特别适合 3D 打印场景。因为 STL 对 3D 打印来说已经足够而且 OpenSCAD 的脚本文件小、执行快改参数也特别直接。我经常让 LLM“把上面这个模型的壁厚改成 2 毫米加一个直径 10 的卡扣孔”改几个数字就能重新编译导出。3.3 路线三FreeCAD 宏和商业 AI 插件 —— 贴近传统环境第三条路是在传统 CAD 软件内部直接做 text-to-cad。FreeCAD 本身有完整的 Python API你可以在 Python 控制台里执行一段宏代码来创建实体。LLM 完全可以生成这段宏代码然后在 FreeCAD 里执行生成的模型会直接出现在特征树里。一个最小例子是这样import FreeCAD as App import Part doc App.newDocument() box Part.makeBox(40, 40, 10) hole Part.makeCylinder(4, 12, App.Vector(20, 20, -1)) shape box.cut(hole) obj doc.addObject(Part::Feature, Plate) obj.Shape shape doc.recompute()这个宏创建了一个 40×40×10 的方块然后在中心2020-1位置创建一个半径 4、高度 12 的圆柱用布尔差集挖出一个通孔。FreeCAD 执行完这段代码以后你可以在左侧特征树里看到这个“Plate”对象但是要注意这种纯 Part 建模生成的模型在特征树里并不是“草图拉伸”那样的参数化特征而是一个布尔运算结果。想要真正可编辑还得在 FreeCAD 里用 Sketcher 和 PartDesign 工作台操作复杂度会更高。商业 CAD 软件方面Autodesk Fusion 360 目前也加入了 AI 文本生成建模相关的探索功能PTC Creo 有一些基于生成式设计的 AI 辅助插件。这些商业工具的优势是和自家软件深度集成生成的模型原生就是参数化特征改起来非常顺。但问题是它们大多是云服务或者封闭模型无法像 CadQuery 那样在本地代码层面做精细控制也不容易嵌入到你自己的自动化流程里。所以我一般把商业插件定位成“个人快速尝鲜”企业级的批量自动化还是得靠开源工具链。4. 踩坑实录从文本到可用零件中间隔着很多意外4.1 自然语言里全是“模糊词”模型容易自由发挥最常见的坑是用户描述里带着大量行业黑话和隐含知识。比如“法兰”“电机座”“加强筋”这些词在不同行业里指代的结构差别很大。LLM 如果不知道你默认的是哪个标准就会按照训练数据里最常见的形态来生成结果往往不是你想要的。我的解决办法是在提示词里要求模型“先拆解需求再生成代码”。具体来说让 LLM 先把模糊词翻译成明确几何语义法兰等于“一个圆盘 中心通孔 圆周阵列螺栓孔”加强筋等于“一个三角形板状凸台连接两个主体面”。这一步非常重要相当于把自然语言“翻译”成工程设计语言然后再让代码生成准确率会高很多。4.2 尺寸与单位的“幻觉”第二个坑是大模型会一本正经地编造尺寸。你说“一块底板”它可能默认给你生成一个 100×100×10 的板而实际上你心里想的是 50×30×2。更危险的是单位CAD 圈有个老笑话一个螺丝的直径到底是 5 毫米还是 5 英寸足以让你在车间里追悔莫及。LLM 默认的训练数据里英制公制混用它很可能在同一个模型里一会儿毫米一会儿英寸。我现在的做法是在提示词里强制要求“所有尺寸必须显式列出单位统一为毫米并且在代码开头用变量定义”。这样即便模型默认了某个尺寸你也能通过改代码顶部的变量一次性修正。还有一个技巧是让模型先生成一个“尺寸清单”像下面这样根据需求请先给出一份尺寸方案 - 板长40 mm - 板宽40 mm - 板厚10 mm - 圆角半径5 mm - 通孔直径8 mm 确认无误后再生成 CAD 代码。这个小步骤表面上多了一次交互但实际能省下你检查模型尺寸的大量时间。4.3 建模顺序错乱特征树直接废掉LLM 生成代码的时候经常忽略特征顺序。举个例子“法兰盘”应该是先创建圆柱主体然后加外沿再打中心孔最后做螺栓孔阵列。但模型可能把倒角放到打孔之后导致倒角把孔的入口也一起倒了或者把阵列放在主体还没完成之前导致特征引用失效。在 CadQuery 这类链式 API 里顺序错了代码可能直接报错也可能不报错但是结果跟你想要的不一样。解决办法是在提示词里显式声明建模顺序比如“请按照以下顺序1. 创建主体特征2. 添加次级特征3. 倒角4. 打孔”。如果生成的代码结果仍然不理想我会把当前代码丢回给模型告诉它“第 3 步的 fillet 应该在第 4 步的 hole 之前请重写”。这种“人机对话式修正”其实是 text-to-cad 最实用的工作模式不要指望一次生成就完美。4.4 导出兼容性与下游验证代码能跑通、模型能显示只是第一步。真正做机械设计的人都知道模型最终要拿去装配、仿真、加工导出格式的兼容性才是命门。CadQuery 导出的 STEP 文件一般质量很高但有时候倒角或者布尔运算生成的边面结构非常复杂导入 SolidWorks 会报“无法修复实体”。OpenSCAD 生成的模型有时候是多个重叠实体没有完全合并切片软件能忍但 CAM 软件不能忍。所以强烈建议每次生成模型以后不要只看预览图要实际导出 STEP 文件再导入一个你常用的 CAD 软件做一次“实体检查”。如果软件提示“实体非流形”或“自相交”就回到代码里检查布尔运算的顺序或者尝试用cq.Workplane.union()把多个实体合并成单一实体。4.5 常见问题速查表我把这段时间反复遇到的几个问题整理成一张表方便你对照排查现象可能原因快速解法代码直接报错CadQuery 版本太旧、API 改名升级到最新版把错误信息原样贴回 LLM 让它自改生成了模型但尺寸离谱提示词里没给明确尺寸要求模型先输出尺寸方案再生成代码孔位偏了工作平面选错检查.faces(Z)之类的面选择表达式倒角后孔口变形倒角在打孔之后执行调整特征顺序先倒角后打孔导出 STEP 后软件无法识别模型存在非流形几何检查布尔运算是否完整合并必要时用union()OpenSCAD 导出的 STEP 质量差OpenSCAD 内核的 STEP 导出支持有限改用 CadQuery 导出或者直接用 STL 走 3D 打印5. 工具选型选对工具比写对提示词更重要5.1 主流工具横向对比我用一个表格把目前能落地的几条路线放在一起对比方便你按需选择工具底层内核输出格式可编辑性学习曲线LLM 生成难度适合场景CadQueryOpenCascadeSTEP, STL, SVG高代码即特征中低机械零件、需要进专业 CAD 的模型Build123dOpenCascadeSTEP, STL高现代 Python 风格中低与 CadQuery 类似更推荐新项目OpenSCADCGALSTL, STEP中参数化 CSG低极低3D 打印、快速验证、简单结构FreeCAD 宏OpenCascadeFCStd, STEP中等特征树可编辑性一般高中需要留在 FreeCAD 生态内操作商业 CAD AI 插件各家自研原生格式很高完全参数化低低个人快速建模、云端协作从表格里能看出一个规律越“工业标准”的工具链LLM 生成起来的难度越低。因为像 CadQuery 这类代码库的语法规范、API 明确训练语料里也足够多模型不容易“发挥失常”。真正难的是让模型去操作 FreeCAD 那套庞大的 GUI 对象模型变量名冗长、层级复杂报错信息又不友好。5.2 不同场景怎么选我的建议是按“最终交付物”来决定工具如果你最终要 3D 打印直接走 OpenSCAD。它生成 STL 最快切片软件也认。哪怕零件复杂一点只要不涉及严格的公差配合OpenSCAD 都够用。如果你要做一个机械零件后续还要进 SolidWorks 或 Fusion 360 做工程图、装配、仿真走 CadQuery 或 Build123d导出 STEP。这样最稳而且留给下游的工程师一个“干净”的实体模型。如果你是个人爱好者想在自己的电脑上快速试试 text-to-cad 的完整流程又想尽量贴近传统 CAD 操作可以用 FreeCAD 宏。但它只适合“我自己用”的场景不太适合做成自动化服务。如果你所在的公司有 Fusion 360 的云服务可以试试它自带的 AI 生成功能但不要对复杂零件抱太高期待。商业插件目前的强项是生成“外观类似”的概念模型参数准确性还得人工复核。5.3 什么时候别用 text-to-cad这里说点不那么热门但很重要的判断——text-to-cad 不是万能钥匙。如果你要做的是一个多零件装配体比如减速器、夹具总成需要严格定义零件间的配合关系、公差、表面粗糙度这些信息很难用自然语言描述清楚即便描述了 LLM 也很难在几何上精确实现。又或者你的零件涉及复杂曲面比如叶轮、进气歧管这些需要专业的曲面造型工具和大量 CFD/CAE 验证text-to-cad 目前完全帮不上忙。还有一条红线如果设计涉及强制性的行业标准比如汽车零部件的 PPAP、压力容器的 ASME 规范你只能把 text-to-cad 生成的结果当“灵感草稿”绝对不能直接进正式流程。模型不懂标准的隐含要求也不会帮你做有限元分析它只负责把语言变成几何。6. 我的工作流从一句话到可用的 STEP 文件最后分享一下我现在实际跑的完整流程供你参考。第一步我会把设计需求写成一段“约束式描述”包括材料、大致尺寸、连接方式、需要避让的空间。第二步把这段描述发给 LLM要求它先输出“尺寸方案表”和“建模顺序清单”这一步能过滤掉大量幻觉尺寸。第三步确认没问题后让 LLM 基于尺寸方案生成 CadQuery 代码并且明确要求每个特征用中文注释标明对应需求条目。第四步在本地执行代码导出 STEP 文件用 FreeCAD 快速打开检查实体完整性和尺寸。第五步如果出现报错或几何异常把错误信息连同一句“请修复第 X 步的 Y 问题”丢回给 LLM通常一轮就能改好。这五步走下来平均一个简单零件五分钟以内能出可用模型。相比以前打开 CAD 软件、新建草图、拉约束、做特征效率提升确实是数量级的。一个小技巧是让 LLM 在生成代码时给每个特征命名比如plate_body、corner_fillet、center_hole命名规范以后你甚至可以用代码自动生成工程图、生成物料清单或者根据特征名批量修改设计。这个习惯一旦养成整个建模过程的可维护性会好很多。我个人体验下来text-to-cad 最有价值的地方不是帮你“一键出图”而是把工程师从大量低级的重复操作里解放出来让你把更多精力放在判断“这个设计合不合理”“这个结构能不能加工”上。工具永远只是在帮你把想法变成一个能继续推敲的起点。