text-to-cad深度解析:自然语言如何生成参数化三维模型

发布时间:2026/10/27 13:49:31
text-to-cad深度解析:自然语言如何生成参数化三维模型

做了这么多年CAD二次开发和三维模型处理,我见过太多人卡在同一道坎上:脑子里有个清楚的东西,手底下却画不出来。客户说"给我一个带六个均布孔的法兰盘",设计师的第一反应不是打开软件,而是先追问"孔径多少?厚度多少?法兰外径多少?"——这不是设计师不专业,而是自然语言和CAD模型之间,隔着一整套精确的尺寸、约束和拓扑关系。text-to-cad要填的,正是这道鸿沟。

这类工具或者说这类技术方向,这两年突然热起来,核心目标就一句话:让普通人用大白话描述一个零件,系统自动生成可编辑、可制造、带参数的三维模型,而不是仅仅渲染一张"看起来像"的图。它适合的人也很明确:不会建模但需要提需求的工艺工程师,靠三维打印吃饭但不想在建模软件里耗时间的手工爱好者,以及天天处理历史图纸、想提升复用率的CAD开发者。

这篇文章我准备把text-to-cad从原理到落地完整拆一遍,会讲清楚四条主流技术路径、参数化建模背后的约束求解逻辑、一套从自然语言到STEP文件的可运行流程,以及我在实测中踩过的那些几何坑。

1. text-to-cad要解决的,不只是"把语言变成模型"

1.1 自然语言与CAD模型之间的"翻译成本"

先看一个常见场景。需求方说:"这里要加一个支架,底板四个角打孔,中间留出走线的空间。"这句话落到CAD里,至少要拆解成十几步操作:建草图、定坐标系、画底板轮廓、拉伸、在角上建孔特征、设置孔径和通孔深度、再判断"走线空间"到底是开槽还是避让区。每一步都有多个选择,选错一步,后面全跟着错。

这个"翻译成本"是很隐蔽的。对话只花了三十秒,但设计师为了确认需求、反推参数、建立特征树,可能花掉一小时。更麻烦的是,这套翻译过程几乎没法复用——换个尺寸、换个布局,又得重来一遍。text-to-cad想做的,是把这段重复劳动压缩掉,让输入端的描述直接映射到CAD的特征操作序列。

我见过不少团队把text-to-cad等同于"文本生成三维模型",这是理解偏差。普通三维生成模型输出的是网格,看起来是那么个东西,但放大一看表面破碎、没有特征树、改不了参数,根本没法进加工流程。CAD模型和网格模型的本质区别,后面我会专门讲。这里你只需要记住:真正的text-to-cad,产出物必须是参数化、带拓扑语义、能驱动修改的模型,而不是一张"三维照片"。

1.2 从热搜词看CAD学习的真实门槛

去看CAD相关热搜词长期霸榜的内容,会发现很有意思:永远有人搜"cad制图初学入门"、"cad安装教程"、"cad插件",也永远有人问"cad里面的bl命令在cass里面是什么"、"cad里面f命令用不了"。这说明什么?说明大量使用者不是专业设计师,而是被迫要用CAD的工程师、施工员、创客。他们不需要成为建模高手,他们只是想把脑子里的零件变成能出图、能加工的东西。

CAD最大的成本从来不是软件授权费,是掌握"用特征语言表达设计意图"这件事。草图、约束、拉伸、旋转、扫掠、布尔、特征树,这整套概念对科班出身的人来说是基本功,但对非科班的人来说,每一环都是抽象的新概念。text-to-cad的价值恰好在这里:把"特征语言"这层皮剥掉,让用户用母语和模型对话,系统替他完成从自然语言到特征序列的翻译。

1.3 真正该解决的三类需求

结合我自己接触过的项目,text-to-cad的实用需求大体分三类:

  • 检索与改型:企业库里存着几万张历史图纸,张工想要"和上次那个差不多的底座,但孔距放大到40mm",传统做法是人肉检索、翻老图纸、手动复制改参数。text-to-cad可以把"描述"变成"检索条件+参数变更指令",直接把最接近的模型拽出来改好。
  • 从零生成草稿:3D打印爱好者想做一个手机支架,说不出规范术语,只描述"斜着撑住手机、背后有个镂空三角",这类工具先给出一个可编辑的草稿,再让用户微调。
  • 批量变体:给一个基础型号,用文本描述变体要求("加两个耳朵"、"壁厚减到2mm"、"改成左侧出线"),批量生成系列化零件。

注意,这三类需求里,text-to-cad做的是"草稿级"产出,最终人工确认和微调仍然跑不掉。这不是缺陷,而是产品定位问题。后面讲落地时我会专门展开,千万别把这类工具当"无人设计"来用。

2. 四条主流路径:从大模型生成代码到扩散模型输出网格

text-to-cad不是一条路走到底,目前业内各家的技术路线差别很大,简单归纳是四条。

2.1 路径一:让LLM直接生成参数化建模脚本

这条路线最简单粗暴:拿大语言模型当代码生成器,让它输出OpenSCAD、CadQuery、FreeCAD Python脚本,再交给开源几何内核执行。优点非常突出——模型的参数彻底保留,每一个尺寸都能改,特征树清清楚楚,输出的是真正的STEP或原生CAD格式。

我自己的实践里,这条路最稳。原因不难理解:LLM对代码的生成能力已经相当成熟,而CadQuery这类库本质上是"用Python描述特征操作",其API本身就接近自然语言的语序,命中率很高。局限在于:复杂曲面造型(比如自由曲面把手、人体工学外壳)靠脚本描述极其吃力,LLM多半会吐出一堆生硬的多段线,质量感人。

2.2 路径二:扩散模型直接生成三维体素或隐式场

把三维的体素网格、符号距离场当作"三维像素",用文本做条件,扩散模型直接生成占据场,再用行进立方体之类的算法抽取网格。这个思路就是想复刻Stable Diffusion在图像领域的成功。优点是大曲面、有机造型表现力强;缺点是输出几乎必然是可编辑性极差的网格,面数一多就超过CAD系统的处理能力。

我实测过几个这类方案生成的模型,远看造型确实唬人,但切到剖面一看,内壁破破烂烂、厚度忽大忽小,有些地方甚至出现非流形边。这模型给3D打印做视觉预览还凑合,想进CNC或注塑流程,几乎不可能。

2.3 路径三:多视图生成加三维重建

先用文本生成模型在几个标准视角下的渲染图,再用三维重建网络从多张图中恢复出几何。这类做法的定位更多是"文生三维资产",给游戏、影视、电商做展示用,不是给工程制造用的。它顺带在text-to-cad话题下被提及,是因为效果好、传播广,但精度和可编辑性甚至不如扩散直接输出网格。工程界看看就好,别当主力方案。

2.4 路径四:检索增强生成加历史图纸库

这条路径目前最被企业IT部门看重,思路是用语义向量检索历史CAD库,先找出描述最接近的模型,再用LLM提取参数差异,对模型做参数化调整。"帮我找那个带三角加强筋的底板"这类需求,本质是检索问题,不是生成问题。工程图纸库沉淀多年,几何可信度毋庸置疑,搞一个能听懂人话的检索层,比从零生成靠谱得多。

"cad图纸合并"、"cad图纸怎么拼"这些长期热搜的背后,反映的正是企业图纸越积越多、复用困难。text-to-cad的检索增强路线,本质上就是给图纸库装一颗会听人话的大脑。用到的是最成熟的嵌入模型加向量数据库,工程化难度低,见效快。

四条路径的差异,我用一张表收一下:

技术路径几何精度可编辑性参数保留工程化难度典型产出
LLM生成建模脚本高高完整保留低STEP/原生CAD
扩散模型输出隐式场中低低无高网格模型
多视图加三维重建低低无高带纹理网格
检索增强加图纸库极高中高部分保留中改型后的原模型

对绝大多数制造类场景,路径一和路径四是真正能落地进生产流程的。路径二和三适合做视觉资产,离CAD还远。我下面重点拆原理和实操,也是沿着路径一的主线走。

3. 核心原理拆解:参数化表示、约束求解与拓扑语义

3.1 为什么生成"网格模型"容易,生成"CAD模型"难

网格模型是三角形的集合,每个三角形独立存储三个顶点和一个法向,生成它本质上就是预测一大堆坐标。数据量大,但结构简单。CAD模型不是这样,一个零件在CAD里是"特征树",树的每个节点记录的是一个操作:拉伸、旋转、打孔、倒角、阵列。每个操作带着参数:拉伸高度、孔径、圆角半径、阵列个数。

树状结构有两个特征让生成变得困难。第一是顺序依赖:必须先有底板,才能在上面打孔;必须先建草图,才能拉伸。第二是约束传播:一个孔的位置可能被三个尺寸约束锁定,改其中任何两个,第三个会自动调整。LLM要生成的不是一组静态几何,而是一段"有逻辑的构造过程",这比生成坐标高一个维度。

打个比方,网格像一张照片,CAD模型像一份菜谱。生成照片,AI只要学会"哪里亮哪里暗";生成菜谱,AI得懂"先切菜再热锅,翻炒两分钟,最后调味"的先后顺序和因果关系。text-to-cad的难点,绝大多数都集中在这里。

3.2 约束求解器:从"六个均布孔"说起

回到文章开头的法兰盘。"六个孔均布在直径32的圆上",这句话听起来简单,但CAD内部处理时,系统会为每个孔的位置建立一套约束方程:孔1到圆心的距离是16;孔2的角度等于孔1角度加60度;所有孔半径相等。约束求解器的工作,就是解这组通常带非线性的方程组。

当LLM去生成这段描述时,学过CAD的人会意识到,最稳定的做法是告诉模型"用圆形阵列,六个实例,均布",而不是"依次给出六个孔的坐标"。前者表达的是设计意图——不管法兰直径怎么变,六个孔永远均匀分布;后者只是一堆静态数值,直径一变,孔位全部失配。

我在用LLM生成CadQuery代码时,专门在Prompt里加了一句"凡是涉及重复特征,必须用阵列或循环,禁止逐个写坐标"。加了这句话之后,生成成功率直接上了一个台阶。原因就是,CAD的核心表达方式是意图驱动的约束,不是坐标堆砌。

3.3 B-rep、CSG与特征树:CAD的"语言"

真正把CAD模型存成文件的格式,常见的有STEP和原生格式(如Fusion 360的F3D、SolidWorks的SLDPRT)。其中STEP是最重要的中性交换格式,它存储的是B-rep(边界表示)数据:一堆曲面片,曲面之间的边和顶点,以及它们之间的连接拓扑。B-rep的东西,CAD软件能可靠地读进来做布尔运算、出工程图、算加工路径,网格格式做不到。

另一条线索是CSG(构造实体几何),记录的是一个布尔运算的树:"先把圆柱和长方体做并集,再挖去六个圆柱"。CSG和特征树很像,但特征树更丰富,还包含草图和约束信息。text-to-cad生成模型时,业界更倾向让AI输出特征序列或CSG树,理由很简单:结构化、易校验、能直接转换成可编辑文件。如果直接让AI输出B-rep,那等于让它倒着写菜谱——难度极高,而且错了极难定位。

顺带说一句,STEP文件本身虽然难写,但很多参数化建模脚本(比如CadQuery)在导出STEP时,会内置可追溯的构造历史。这就是为什么"LLM生成建模脚本"这条路工程化程度最高,因为最终交付物天然就是制造业需要的格式。

3.4 训练数据:这些能力是从哪儿学来的

LLM天然会写CadQuery和OpenSCAD,一是因为代码训练语料里本身就有大量CAD脚本,二是因为近几年有几个公开数据集专门为这个方向做了标注:

  • ABC Dataset:百万个CAD模型的B-rep表示,常用于几何学习。
  • Fusion 360 Gallery:包含了参数化特征序列的模型库,标注了完整的重构历史,是目前最接近"天然教材"的数据集。
  • Onshape公共文档:大量公开的建模历史,被用来抽取"实体操作序列"。

这些数据集里的文本描述,一部分来自社区标签,一部分来自PDF技术手册的抓取,还有一部分是人工标注。实测下来,文本质量差距挺大,很多描述是"零件3"这种废话。数据清洗也是个重活:要去重、修复拓扑错误、把装配体拆成单个零件、把"STEP文件"这种格式标签改成真实语义描述。这块我不展开太多,但如果你想训练专用模型,这部分的工作量至少占整个项目的六成。

4. 从一句描述到能用的STEP文件:实操流程与工具链

4.1 我推荐的管线:文本到特征序列再到代码

下面这套流程,是我在多个小项目里跑下来的组合拳,完全基于开源工具,成本几乎为零:

  1. 描述标准化:把口语描述按"轮廓+特征+关系"拆成三段式工程描述。
  2. 让LLM先输出特征序列,不要直接跳代码。特征序列就像提纲,先保证设计意图理解对了。
  3. 再让LLM按特征序列生成CadQuery代码。
  4. 用FreeCAD或CadQuery自带环境执行脚本,导出STEP文件。
  5. 自动校验几何和尺寸,不合格就带着报错信息让LLM重写。

为什么选CadQuery而不是OpenSCAD?OpenSCAD的语法是纯函数式的CSG,做简单形状很快,但对"选面、建基准、打孔"这套CAD思维支持得不好。CadQuery的API直接对应CAD操作——选哪个面、进入什么工作平面、拉伸多高、挖多大孔,一句话一个动作,LLM极其容易理解。为什么执行环境用FreeCAD?因为FreeCAD可以纯命令行批处理Python脚本,适合嵌入自动化流程。CadQuery底层依赖OpenCASCADE,也能独立运行,看个人习惯。

4.2 一个能跑的实例:生成"带四个通孔的矩形法兰"

下面这个例子我让GPT系模型跑过很多次,只要Prompt写得清楚,几乎一次通过。目标是:一块80x60x10mm的矩形板,四个角各打一个直径6.5mm的通孔,孔距边10mm。

import cadquery as cq result = ( cq.Workplane("XY") .box(80, 60, 10) # 建底板,长80宽60高10 .faces(">Z") # 选中顶面 .workplane() # 进入顶面的工作平面 .rect(70, 50, forConstruction=True) # 画辅助矩形,构造线 .vertices() # 取辅助矩形的四个顶点 .hole(6.5) # 每个顶点打直径6.5的通孔 ) cq.exporters.export(result, "flange.step")

每一步都对应一个CAD操作,LLM只要理解"CadQuery里选面靠faces('>Z'),辅助线靠forConstruction=True",就能举一反三。导出的STEP文件可以直接拖进FreeCAD、Fusion 360打开,特征可编辑。

我建议你在Prompt里教会模型一种"模式":**先确定工作平面,再画构造线,再在关键点上打特征。**这个模式对应了大部分钣金和机加工零件的建模逻辑,一旦模型学会了,生成很多同类零件都顺了。

4.3 Prompt工程:如何让LLM稳定输出高质量CadQuery

直接说"帮我生成一个法兰的CadQuery代码",十次里有六次会翻车。我测试下来,最稳定的Prompt结构是这样:

你是一名熟练的CadQuery工程师。请根据以下需求生成Python代码:{需求描述}。要求:

  1. 先用自然语言描述你的特征操作序列,再写代码。
  2. 只输出可直接运行的代码,不要附带解释。
  3. 所有重复特征使用循环或阵列,禁止逐个坐标罗列。
  4. 所有尺寸使用变量定义,便于修改。
  5. 确保模型是单一闭合实体,没有未缝合面。

这五条约束每一条都有存在理由。第1条强制模型先理清设计意图再动手,极大降低逻辑跳步;第3条防止模型把"四个角打孔"写成四个独立的洞;第5条防止模型构建出内部不闭合的破壳。有个细节:把"可运行"写进Prompt,比写"请你写出正确代码"有效得多,模型会对"能不能跑"有本能的偏置。

4.4 口语描述转工程描述:三段式法则

很多人在text-to-cad工具面前输入的是"帮我做个支架",模型当然一头雾水。实操中我总结了一个三段式描述模板,把模糊口语变成机器能消化的工程语言,效果立竿见影:

  • 轮廓:说清楚整体外形和尺寸。"底板长120、宽80、厚8,四角倒圆角R5。"
  • 特征:说清楚上面的凸台、孔、槽、加强筋。"中心开直径20通孔,四角各一个M6螺纹孔,背面加两条高度3mm的加强筋。"
  • 关系:说清楚相对位置。"螺纹孔圆心距边15mm,加强筋平行于长边居中布置。"

你可能会说,这不就是把需求写详细了吗?对,精髓就在这。text-to-cad的体验好坏,很大程度取决于输入的"信息密度"。你给一段"底板+四角孔+中心孔+筋板"的描述,和给一句"帮我做个底座",生成的模型质量差着几个量级。

5. 实测中的边界与坑:尺寸漂移、约束失效与拓扑错误

5.1 LLM最常见的三类几何错误

纸上谈兵总是好看的,真正跑起来,LLM在CAD领域的错误五花八门。我归纳下来,最高频的是三种:

  • 轴向反直觉:LLM默认Z轴向上,但很多模型建模时习惯把拉伸方向放在Y轴,一旦Prompt里没强调,生成长方体时常有面朝向混乱。
  • 约束不一致:明明说"M6通孔",代码里抱着feeds的矛盾不深究的话,会变成直径6mm的孔,而M6标准孔应该是6.6mm过孔,卡得严丝合缝装不进去。
  • 拓扑断裂:两个特征"看起来"叠在一起,实际布尔后没有真正融合,导出的模型是个多实体装配体,不是单实体零件。

这些错误的共同根源,是模型对CAD的"隐性规则"缺乏训练。它会语言,会语法,但对"过孔要比螺纹大0.5~0.7mm"这种加工常识一无所知。所以别指望模型一次生成就能投产,必须配校验。

5.2 三层自动校验:几何有效性、尺寸、设计意图

我在自动化流程里挂了三个校验关卡,从上到下逐步加严:

第一层是几何有效性检查,用OpenCASCADE的内核检查模型是否为合法实体。CadQuery里可以这样快速验证:

import cadquery as cq shape = cq.importers.importStep("flange.step") solid = shape.val().Solids() print("实体数量:", len(solid)) # 如果长度不为1,说明是多实体或破壳,直接打回

第二层是尺寸抽查,把关键尺寸从Prompt和代码里同步提取成清单,生成后逐一比对。这一步可以用CadQuery的BoundingBox或者截面测量实现。第三层是设计意图审计,检查特征树里是否保留了参数变量、是否用了构造线驱动的点位、有没有写死坐标。我见过最典型的反面案例是:LLM为了避免"阵列出错",直接生成了十六个硬编码孔,几何上完全正确,但用户想改孔距就得重写代码,参数化彻底失效。

这三层校验通过后,我才允许STEP文件进入下游流程。你可以根据自己的行业标准简化成两层,但"几何有效性"这层无论如何不能省。

5.3 三个真实的翻车案例

案例一是卡扣外壳。需求是"两个半壳通过四个卡扣扣合"。LLM生成得非常顺利,外形、卡扣位置、壁厚全对,但拿去做模具评审时发现,卡扣是内倒扣结构,开模方向根本脱不出来。文本里没说"要考虑拔模",模型也完全不知道注塑工艺的存在。这种教训说明,生成结果的工艺合理性得靠人来兜底。

案例二是坡口。工艺写的是"30度坡口",LLM给做了一个横截面从厚渐变到零的楔形槽。单看几何,形似"坡",但对焊接来说这完全不可用。焊接坡口指的是两块板边缘按30度切出斜面,焊缝会在背面形成。这类语义差异,是自然语言模型永远会栽的坑,因为没有上下文,语言里的行业知识它学不全。

案例三是壁厚与材料。有人想打印一个外壳,描述里只说"结实一点",LLM直接把壁厚加到12mm——打印机材料成本暴涨四倍。换成铝合金CNC加工倒还说得过去,但如果是3D打印,这个结果就是灾难,因为打印件要的是"够用就行"的薄壁加加强筋。

这三个案例的共同教训:**text-to-cad给的是"几何草案",工艺常识、成本意识、可制造性,统统得靠人工在模型外面把关。**这不是工具的错,是目前技术在这个阶段的正常边界。

6. 落地要过质量关:验证规则、人工介入与工作流整合

6.1 把text-to-cad当"自动草稿机",而不是无人设计

我见过不少团队高估了这类工具,上来就要"让业务员自己生成图纸直通产线",结果很快被现实教育。正确的打开方式,是把它定位在需求收敛和方案比选阶段:售前工程师拿它快速出概念方案,3D打印爱好者拿它出第一版草稿,工艺人员拿它验证"描述是否完整"。

我自己在项目里的切身体会是:过去接到改型需求,先得和需求方来回确认半小时,然后花半小时建模。现在有了这套工具,建模时间压缩到几分钟,但确认需求的半小时一分都省不掉。省下来的半小时,是模型自动生成的。时间花在哪了?花在"把需求说清楚"上。换句话说,text-to-cad逼着需求方把自己的想法讲得更精确,这本身就是很大的效率提升。

6.2 建一套"行业验证规则库",让它替你盯细节

每个行业都有一些具体的"死规矩",比如机加工行业的最小壁厚、注塑行业的拔模角、钣金行业的最小折弯半径。这些规矩,LLM不知道,但你可以在校验环节替它兜住。

做法是把这些规则写成可自动执行的检查脚本,挂在校验管线里。比如:扫描实体,查找是否存在厚度小于1.5mm的区域;检测所有竖直面是否有至少1度的拔模角;把所有孔径和标准钻头规格比对一遍。规则库越厚,生成结果返工率越低。这一步投入不大,但回报非常明显,能让这套工具从"玩具"变成"工具"。

6.3 下一步:从"模型到文档"闭环

text-to-cad只是入口,真正要让它在企业里产生价值,得接上后段的文档自动化。热搜词里常年挂着"cad转pdf"、"cad图纸合并"、"cad导入layout步骤详解",说明模型生成之后,还要走工程图、拼图、交付PDF这一大串流程。

理想状态是:需求描述进去,STEP模型出来,同时自动生成工程图、导出PDF、挂上BOM。模型驱动图纸,图纸参数随模型联动,这其实就是老生常谈的"模型驱动设计",只是过去卡在"从描述到模型"这一段,现在这段终于有了被AI填上的可能。

我的建议是先从一个小团队、一条产品线试点,别一上来就全公司推广。挑那些模型数量大、描述相对规范、图纸管理成熟的产品线,把检索增强和脚本生成先跑起来,跑通了再横向扩展。技术方向上,未来大概率会走向多模态——用户拍一张参考照片,画一个粗略草图,再配一段语音说明,系统综合理解后建模。到那天,"不会建模"这件事,可能真的就不是门槛了。

最后再分享一个我实际操作中的小技巧:让模型先输出完整的特征操作序列、再生成代码,比直接让它一步到位写代码,出错的概率低非常多。你可以在Prompt里加一句"请你先用自然语言列出一个详细的建模计划,然后再写代码,并且把代码和计划逐行对应"。就这一句话,我的生成成功率提高了三成。文本到CAD这条路现在还远没走到终点,但至少,最让人头疼的开头这一段,总算有人替你扛了。