☰
text-to-cad深度拆解:从一句话到可用的CAD模型
2026/10/26 12:04:10 网站建设 项目流程

"给我做一个四孔法兰支架,外径80,中心孔20,四个安装孔6.5,均布在直径60的圆周上,厚度8。"这句话放在两年前,大概率只会得到一种回应:自己打开CAD软件,从新建草图开始,一个约束一个约束地画。而现在,把它原封不动丢给text-to-cad工具,几秒钟之后你就能拿到一个可以继续编辑的STEP文件,尺寸对得上、孔位均匀,虽然圆角和倒角还得碰点运气。text-to-cad这个词这两年被反复提起,但我发现大多数人对于它的理解,还停留在"文字生成了三维模型"这个模糊印象上,甚至把文生图、文生网格模型和文生CAD混为一谈。这篇就把text-to-cad彻底拆开讲:它解决的根本问题是什么、两条主流技术路线怎么选、实测生成一个零件要经历哪些环节,以及它离真正进入设计生产流程还差哪几步。不管你是机械工程师、产品设计师,还是刚接触AI辅助设计的新手,读完之后你至少能准确判断一件事:这个工具放在你自己的流程里,到底该放在哪个位置。

1. "文生3D"和"文生CAD"是两码事:网格模型为什么进不了车间

很多人第一次接触text-to-cad时,脑子里对照的是那些文生3D工具:输入"一只戴帽子的猫",输出一个可以旋转查看的三维网格。这类工具确实热闹,但严格讲,它和工程意义上的CAD差了十万八千里。搞清楚这个区别,是理解text-to-cad所有后续话题的前提。

1.1 STL网格模型和STEP实体模型到底差在哪

文生3D工具输出的通常是STL、OBJ这类网格文件。网格的本质是一堆三角面片拼出来的"外壳",它只有顶点坐标和法线方向,没有面与面之间的拓扑关系,更没有任何工程语义。拿来3D打印个手办、游戏里当个资产、或者渲染看个外形,完全够用;但如果你问它"这个孔的直径公差是多少""这个面能不能作为装配基准",它答不上来,因为它根本不知道什么是孔、什么是面。

CAD模型则完全不同。工程上通用的CAD文件走的是边界表示法,也就是B-rep,面、边、顶点之间是有明确的拓扑关系的,几何表面用精确的数学曲面方程描述,而不是一堆三角形的近似。这直接决定了下游能不能做NC加工、能不能做有限元仿真、能不能出工程图。

1.2 特征树和参数:CAD的灵魂不在"外观",在"历史"

比几何表示更关键的一点,是CAD模型自带"历史",也就是特征树。一颗法兰螺钉,在建模软件里不是一堆曲面的合集,而是一串操作记录:先拉伸一个圆柱、再打一个中心孔、再阵列四个小孔、最后倒角。你改一个参数,整棵树往下重算,模型就跟着更新。这就是参数化设计。

文生3D的网格模型没有这个"历史"。哪怕它长得再像CAD,你也没法双击它的某个特征去改尺寸。而text-to-cad的目的,恰恰是要生成这种带特征、可编辑、能被下游直接消费的模型——而不是一张勉强可看的"图片"。

1.3 两种产物的对比:一张表说清楚

维度文生3D网格模型文生CAD参数模型
常见输出STL、OBJ、GLBSTEP、OpenSCAD、CadQuery代码
几何表示三角面片近似精确B-rep实体
工程精度无公差概念可到小数点后毫米级
可编辑性基本不可编辑参数可改、特征可追溯
下游用途预览、渲染、业余3D打印加工、仿真、出图、再设计

所以再听到"text-to-cad",你得意识到它瞄准的是制造端和工程端,而不是视觉端。它要给工程师省掉的,是从"文字想法"到"第一个可用的三维模型"这段最枯燥的冷启动时间。

2. 两条技术路线分岔口:LLM写代码建模 vs 端到端生成B-rep

明确了目标之后,接下来的问题就是:怎么从自然语言走到一个精确的实体模型?目前市面上的text-to-cad工具,技术路线基本分成两大类。理解这两条路,你才知道手上工具输出的结果为什么是这个样子。

2.1 路线A:LLM生成代码,CAD内核负责算实体——为什么最稳

这是目前落地最多、成功率最高的路线。思路很简单:让大语言模型不直接生成几何,而是生成一段建模代码——用CadQuery、OpenSCAD这类程序化建模库去描述这个零件,然后由本地或云端的几何内核去执行这段代码,算出真正的B-rep实体。

为什么这条路稳?因为编程语言本身就是结构化、强约束的。LLM经过大规模代码训练,写代码的能力远比直接"画"几何拓扑可靠。你让模型凭空想象一个法兰盘的所有面,它很容易在拓扑闭合上出错;但让它调用circle().extrude().hole()这种成熟API,它只要把参数写对,几何正确性由CAD内核保证。

2.2 路线B:端到端直接输出B-rep——为什么难

另一条更激进的路线,是训练专门的模型,从自然语言直接输出B-rep/STEP文件,比如Zoo开源的text-to-cad系列模型走的就是这个方向。这类模型不需要中间代码层,看起来更"智能"、端到端。

但难点也摆在那:B-rep不是像素,它是几十个面、边、顶点之间的相互约束关系。模型推理时要保证所有面闭合、没有裂缝、没有退化几何,这在数学上是组合爆炸级别的问题。就算跑通了,工程师拿到STEP文件后一旦想要改参数,就得回CAD软件里把特征重建一遍——因为模型直接输出的是"结果",而不是"历史"。

2.3 两条路线的选型逻辑:填空 vs 写作文

打个比方,路线A像填空题:代码框架是给定的,LLM负责把数字和调用关系填对,错了局部改改就行。路线B像写作文:自由度大、上限高,但跑题、漏细节的概率也高。

所以我的选型建议很直接:如果你要的是"快速拿到一个能进CAD继续修的模型",优先用代码生成路线,输出CadQuery/OpenSCAD代码再转STEP;如果你要的是"一句话直接出一个STEP",可以试试端到端服务,但要有心理预期——生成的零件可能需要修复几何,或者需要回到CAD里重新做参数化。

3. 实测:一句话生成四孔法兰支架,从Prompt到STEP的完整记录

光谈原理容易飘,落地的坑才是这篇文章最值钱的部分。下面是我完整跑通的一个案例——用自然语言让text-to-cad生成一个四孔法兰盘,并把每一步的输入、输出和问题都记录下来。

3.1 工具准备:在线服务和本地开源两条路

实测前先说工具。在线服务最省事,比如Zoo的Text-to-CAD平台,界面就是一个输入框,提交自然语言之后能返回CadQuery、OpenSCAD或者直接导出的STEP文件。它的底层逻辑属于"AI生成代码+后端CAD内核计算",体验上很接近"给了句话,收到一个文件"。

如果你有数据保密要求、或者想完全掌控流程,可以走本地开源路线:装一个CadQuery库和Jupyter环境,再通过本地推理框架跑一个开源代码模型(比如Qwen2.5-Coder这类)来生成CadQuery代码,剩下的计算全部在本地完成。这条路初期配置成本略高,但胜在可控、可二次修改。

3.2 提示词三次迭代:从"做一个法兰"到"能用的法兰"

第一次输入,我只写了"做一个法兰"。结果生成的代码勉强能跑出一个圆盘,完全没有孔、没有厚度逻辑,倒角更是想都别想。问题在于提示词没有给出任何约束,模型只能按统计概率猜。

第二次输入,我补上了关键尺寸:"做一个法兰,外径80毫米,中心孔直径20毫米,四个安装孔直径6.5毫米,均匀分布在直径60毫米的圆周上,厚度8毫米。"这次结果好了很多,孔的个数、位置、直径都对上了,中心孔也打出来了。但有两个问题:模型没加倒角,而且代码里所有尺寸都是硬编码的数字,没有定义成变量——也就是说,这不是真正的参数化模型。

第三次输入,我在提示词里明确要求了结构和变量:"用CadQuery生成一个法兰盘。将所有尺寸定义为变量:外径80毫米,中心孔直径20毫米,厚度8毫米;四个直径6.5毫米的安装孔,均匀分布在直径60毫米的分布圆上;最后给顶部边缘和孔的边缘添加0.3毫米的倒角。输出完整代码。"这次得到了下面这样基本可用的结果:

import cadquery as cq # 定义可变参数 flange_od = 80.0 # 法兰外径 center_id = 20.0 # 中心孔直径 flange_thk = 8.0 # 法兰厚度 bolt_pcd = 60.0 # 安装孔分布圆直径 bolt_dia = 6.5 # 安装孔直径 chamfer_size = 0.3 # 倒角尺寸 result = ( cq.Workplane("XY") .circle(flange_od / 2) .extrude(flange_thk) .faces(">Z") .workplane() .hole(center_id) .circle(bolt_pcd / 2, forConstruction=True) .vertices() .hole(bolt_dia) ) result = result.edges(">Z").chamfer(chamfer_size) cq.exporters.export(result, "flange.step")

3.3 拿到代码之后的检查与修复流程

不要天真地以为生成完就能直接用。我的习惯是走一遍"渲染预览-参数检查-逻辑检查"三件套。

先在Jupyter里把代码跑一遍,用CadQuery的show()方法做三维预览。第一眼看外形:圆盘厚度对不对?孔位是不是均布?然后检查变量:把所有尺寸定义从头到尾读一遍,确认外径、孔距、倒角这几个关键数字没有贴错位置——AI生成的代码偶尔会把法兰外径和分布圆直径写反。

最后看建模逻辑:拉伸方向、打孔基准面、倒角作用边。我这次生成的代码在倒角这一步应用到了顶部外缘,但如果没有特别指定"孔的边缘也要倒角",模型默认只处理外轮廓。这个细节在实际零件中会影响装配手感,必须人工补上。补完代码后,调cq.exporters.export()导出STEP文件。

3.4 导出STEP并在CAD软件里验证

导出STEP只是第一步,真正验证要把文件丢进FreeCAD、SolidWorks或者在线STEP查看器里再打开。我实测的流程是:导入后测量最大外径、中心孔直径、安装孔间距,和设计值逐一比对;再检查特征树,看看软件能不能识别出"拉伸"和"打孔"这些特征。这里有个重要的经验:如果STEP文件是从端到端模型直接生成的,CAD软件可能只能看到一个"死"实体,特征树是空的;如果是代码生成的,特征识别通常会顺利得多。这也是为什么我更推荐代码生成路线——它留给你的不仅是一个几何,还是一条可以继续改的"来路"。

4. 参数化、公差和设计意图:AI最难补的工程课

几何对了,只是及格。真正把text-to-cad放进工程流程时,你会撞上三道墙:语言的歧义、公差的缺失、参数化的深度。这一节讲的就是这三堵墙怎么绕。

4.1 语言里的隐性假设:同一个"支架"有几十种含义

文字是人类最模糊的交流方式。你说"做一个支架",工程师脑补的是管道支架还是手机支架还是发动机支架?是塑料件还是钣金件?是受力件还是装饰件?这些背景信息根本没写进文字里,LLM只能从训练数据的统计分布里"猜"一个最常见的意思。

所以提示词里必须把工程语境交代清楚。我自己常用的做法是按"功能+外形+尺寸+加工方式"四个维度写:

  • 功能:法兰盘、轴承座、电机安装座
  • 外形:圆形、矩形、带加强筋
  • 尺寸:所有直径、厚度、孔位、数量
  • 加工方式:车削、铣削、3D打印(不同工艺对倒角、拔模角的要求完全不同)

这四要素写全,生成结果的可控性会提升一个量级。

4.2 公差和基准:生成的是几何,不是图纸

text-to-cad给你的是一堆精确到小数点后几位的数字,但这不代表它给了你公差。工程图纸上的关键信息——直径公差、位置度、平面度、基准符号——基本都不在这个流程里。生成模型输出的是"理想几何",而不是"可制造的零件定义"。

这个预期必须建立好:text-to-cad目前替代的是你"从想法到三维草图"这段工作,它替代不了"标注一张合格工程图"的职责。AI生成的STEP进去,你仍然要在CAD里补公差、定基准、出二维视图。好消息是,几何准确的话,这部分工作已经比从零开始建模型轻松太多了。

4.3 参数化不只是"能改尺寸",还要能联动

我前面说"把所有尺寸定义为变量"只是参数化的第一步。真正的参数化是"联动":把法兰外径从80改成120,四个安装孔是不是还均匀分布在60的圆周上?厚度变了,倒角是不是还保持比例?孔距离边缘太近,有没有触发工艺警告?

这些约束关系,代码里是可以写出来的,比如把分布圆直径定义成外径的某个比例,而不是写死60。但LLM默认不会主动这么干,除非你在提示词里明确要求"所有尺寸定义为变量,并让关键尺寸之间保持比例关系"。实测下来,加上这句话之后,生成的代码参数化水平会明显上一个台阶——这正是从"一次性的模型"到"能反复用的模板"的分水岭。

5. 生成结果进产线:格式转换、几何检查与"什么时候能用"的边界

很多人demo玩得开心,一接触到实际加工就发现处处是坑。这一节说清楚:从Demo到产线,中间还隔着哪几道工序。

5.1 为什么STEP是进产线的硬门槛

text-to-cad生成的结果可以直接导出STL,如果你只是要个外观件拿去3D打印,STL确实省事。但只要你涉及CNC加工、模具设计、装配仿真,就必须换STEP。原因很实际:CAM软件需要实体拓扑去生成刀路,模流分析需要精确的闭合实体去做网格划分,下游同事需要STEP放到自己的CAD软件里继续编辑。

就算工具给了STEP,你还要留意它是"原生B-rep"还是"从网格拟合出来的伪实体"。个别端到端模型为了省事,实际输出的是网格转STEP,那种文件导入CAD后一测量全是小平面,根本无法用于工程。怎么判断?导入CAD后用"检查几何"功能,如果系统提示大量面由近似平面组成,基本可以断定是伪实体,直接重跑或者换代码生成路线。

5.2 三步几何合法性检查,肉眼看着对不算对

AI生成的CAD模型,最阴险的坑是"看起来完美,拓扑上夭折"。我总结了一套三步检查法:

  1. 测量检查:导入CAD,实际测量外径、孔距、厚度,确认和设计值一致。
  2. 内核检查:用软件的几何检查工具(如FreeCAD的Shape Check、SolidWorks的"检查"),看有没有自由边、退化面、缝隙。
  3. 布尔运算测试:把模型和一个简单方块做一次差集。如果布尔运算报错或崩溃,说明拓扑有严重问题,这文件不能进CAM。

按我的经验,端到端生成的模型,大约每三四个就有一个需要几何修复;代码生成路线的失败率低得多,但偶尔也会因为代码里的布尔操作顺序问题产生不可靠实体。把这三步变成肌肉记忆,能省掉大量下游返工。

5.3 哪些场景真能提效,哪些场景别硬上

  • 真能提效的场景有:标准件快速生成、概念方案多轮对比、教学演示模型、夹具和支撑件的粗稿。这些场景的共同特点是"要快、要够用、后续反正要改"。
  • 别硬上的场景包括:有安全认证要求的承力件、需要复杂自由曲面的工业设计件、需要严格装配约束和运动学关系的部件。这些场景对精度和设计意图的要求,远超当前text-to-cad的能力边界。

我现在的习惯是把text-to-cad放在设计流程最前面当"想法加速器":头脑风暴阶段用AI快速把脑子里的方案变成看得见摸得着的三维模型,选定方向之后再由工程师导入正式CAD做标准化修正。等于把最费时的手工草图阶段压缩掉了,其余流程一分没省,但整体效率提升非常明显。

6. 提示词、工作流与工具清单:我踩过坑之后留下的建议

最后一部分,把我实操中攒下的经验打包成可直接抄作业的建议。这些都不是什么高深原理,但每一条都是真金白银换来的。

6.1 提示词的四条铁律

第一,单位写清楚,毫米就是毫米,英寸就是英寸,别让模型猜。第二,凡是数量相关的词都改成数字:"四个孔"要写"4个孔","间隔均匀"要写"均匀分布在直径60毫米的圆周上"。第三,明确指定建模策略:"用CadQuery""生成OpenSCAD代码"这种话直接告诉模型用什么工具,比让它自己选靠谱得多。第四,把"添加倒角""添加圆角""加加强筋"这类特征要求写进提示词,因为模型默认倾向于只做主形体,不做细节。

6.2 把text-to-cad当"超级草图员",搭好迭代循环

我见过不少人用一次就放弃,因为"生成的东西没法直接用"。问题出在预期:text-to-cad不是给你一个"成品工程师",而是一个"超级草图员"。它画得快、不怕烦、不会累,但你需要像带新人一样给它反馈。我建议你建立这样的循环:生成→检查→修改提示词→再生成,每次只改动一个维度。比如这次发现倒角缺失,就只补倒角描述;下次发现孔位不匀,就只修正分布圆的表达方式。这样迭代三五轮,结果会从"能看"推进到"能用"。

另外,务必把每次的提示词和输出文件存好,用命名规范管理起来。迭代到满意的版本后,回看历史版本的失败原因,其实是最清晰的需求说明书。

6.3 工具清单和我的默认选择

按使用场景整理一份清单,都是这个方向上主流的选择:

场景我的选择说明
在线快速生成Zoo Text-to-CAD 等在线服务输入自然语言,可导出CadQuery/OpenSCAD/STEP
本地代码生成CadQuery + 本地开源代码模型数据不出本机,可编程可控
建模脚本语言CadQuery,其次OpenSCADCadQuery的Python API对AI更友好,OpenSCAD适合纯几何逻辑
预览调试Jupyter + CadQuery渲染迭代速度快,适合边改边看
验证导入FreeCAD或SolidWorks检查特征树、测量、布尔测试

我个人的默认组合是:在线服务跑第一版快速找方向,本地CadQuery跑第二版做参数化收敛,最后导入FreeCAD做几何合法性检查。这套组合至今帮我稳定地把AI生成时间压缩在十分之一以内。

最后分享一个我认为最宝贵的经验:text-to-cad能不能在你的流程里扎根,不取决于生成模型有多聪明,而取决于你的提示词工程有多扎实。每一次迭代都是在教AI理解你的设计习惯,就像带新人一样,前期多花一点时间把需求讲透,后期省下的时间是几何级的。这套思路,值得每个想把AI放进设计流程里的人认真试试。

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

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

立即咨询