text-to-cad实战:从提示词到可编辑参数化模型的完整工作流
在CAD软件前面坐了一个小时就为了把一个法兰盘上的八个孔均匀分布出正确的分度圆直径这种体验做过机械设计的人应该都不陌生。text-to-cad 这个词听起来很科幻但我最近一年实际试用下来发现它已经不再是论文里的演示而是真的能分担一部分建模工作了——前提是你要知道怎么用它。这篇文章我就围绕 text-to-cad 这个方向讲讲我实测下来的完整工作流、工具选型、提示词写法和最容易翻车的几个坑。内容包括我从一句自然语言到拿到可编辑模型的全过程以及如何让生成结果从“能看”升级到“能生产”。如果你是一个经常画图的产品设计师、做验证的机械工程师或者平时喜欢折腾3D打印的创客这篇文章应该能帮你少走不少弯路。先说明一下我的边界这里聊的 text-to-cad不是那种“输入一句话就给你一个花里胡哨的3D模型文件”的演示级工具而是指真正能进入工程流程的文本驱动建模方法。我实测下来最稳定的落地路径是让大语言模型输出参数化建模脚本再配合传统CAD内核生成实体模型。这个路径的好处在于你拿到的不是一个“死”的网格文件而是一份可以随时改参数的源码这跟现代CAD的设计理念完全兼容。1. 为什么“文字变模型”值得重新审视从生成玩具到可用资产1.1 text-to-cad 到底在解决什么真实痛点CAD建模的工具门槛一直都很高。SolidWorks、Fusion 360、FreeCAD这些软件界面里几百个按钮新手光是把草图约束搞清楚就得耗上几个星期。但真正卡住产品开发进度的往往不是软件操作本身而是“想法到模型”之间的翻译成本脑子里想的是一个结构手上却要一步一步去点拉伸、切除、阵列每一步操作都得考虑坐标、基准面、草图关系。text-to-cad 要解决的正是这层翻译成本。它不是让AI替你想方案而是让AI把你已经想清楚的零件结构直接转换成参数化建模指令。比如你说“我要一个L型支架底板厚度8毫米立板高60毫米底板上四个直径6毫米的沉头孔孔距边缘15毫米”这套描述如果写成提示词交给合适的模型它生成的脚本可以一步到位把几何体建出来甚至把孔位、壁厚都做成变量。早期这类的AI生成模型普遍只能输出一个STL网格而且精度很差网格三角化之后完全没法进工程评审。所以我一开始对text-to-cad是带着怀疑的。直到我试着让它生成OpenSCAD脚本再用脚本导出STEP文件放到FreeCAD里检查几何才发现这条路真的能把“自然语言”和“工程实体”串起来。1.2 不是“AI画图”而是“描述驱动建模”这件事的底层逻辑很多人把text-to-cad和文生图、文生3D混为一谈这其实是个根本性的误解。文生图的目标是“看起来像”AI用扩散模型生成像素分布文生3D的目标是“轮廓接近”AI生成网格顶点坐标。但CAD模型的核心不是形状外观而是拓扑关系、几何约束和参数体系——两个面是否垂直、孔是否贯穿、壁厚是否均匀、尺寸是否可修改这些才是工程师真正关心的。text-to-cad 的底层逻辑是把自然语言拆解成一组结构化的建模指令然后交给一个确定性的建模内核去执行。自然语言负责表达意图建模内核负责保证几何正确性。这就好比你不是让实习生替你设计零件而是让一个执行力很强的人听懂你的话之后严格按照你的尺寸去画图。AI负责“听懂”内核负责“画对”两个环节分开反而比端到端生成一个网格文件可靠得多。2. 主流路线的全景对比与我的选型逻辑目前市面上所谓text-to-cad方向的方案大致能分成三条路线。我逐个试用过差别非常明显。2.1 路线一生成原生三维几何这一派的做法是直接用AI模型生成完整的几何数据常见输出是体素、点云或者网格模型。典型的特点是“一次性生成、不可编辑”模型就像一张照片你用3D打印切片软件把它切开可以但要调整某个孔的直径、把某块壁加厚基本等于重来。这类工具对概念验证、艺术创作、游戏资产生成有帮助但对产品开发来说是灾难。工程上需要反复修模一个不能编辑的模型等于废品。再加上网格模型的精度和内存开销问题我基本不推荐把它用在需要出图、加工或者装配的场景里。2.2 路线二生成中间表示中间表示这个概念听起来高深其实就是让AI直接生成CAD内核能识别的实体数据结构比如B-REP边界表示或者CSG树构造实体几何。CSG树比较好理解它是一棵记录“怎么组合基本体”的树先放一个圆柱再放一个长方体然后做布尔差集把中间的孔挖掉。B-REP则是描述实体表面的拓扑结构。这条路比网格生成前进了一大步因为它的输出自带几何拓扑信息理论上可以被传统CAD识别和编辑。但实际用下来问题也不少一是当前的AI模型对复杂B-REP结构的生成成功率还不高二是产物往往缺少参数化能力——你能得到实体但你在生成那一刻没有把尺寸暴露为变量改起来依然得回到传统环境里做“布尔修补”。我测了几个项目成功率约在六到七成用于高精度设计还是有点勉强。2.3 路线三LLM生成参数化脚本这是我实测下来最稳定、也最贴近工程实际的路线。做法很简单把需求写成自然语言提示词让大语言模型生成一段参数化建模脚本比如OpenSCAD的.scad文件、CadQuery的.py脚本或者是FreeCAD的Python宏。然后在对应软件里执行脚本由软件内核完成精确建模。这条路线的好处非常明显维度原生三维几何生成中间表示生成LLM生成参数化脚本可编辑性几乎不可编辑有限编辑完全参数化几何精度低网格近似中等需大量验证高由内核精确计算与工程流程兼容度低尚可高可导出STEP/STL上手难度低高中调试成本低但改不了高中低改脚本即可适合人群创意展示研究人员工程师、创客、设计师我最终选择第三路线不是因为其他两条完全没有价值而是因为第三路线最符合“CAD”这个词的本义**Computer-Aided Design计算机辅助的是“设计”过程而不是“生成”结果。**脚本本身就是设计草图参数就是设计意图这让AI介入建模不再是一次性的投机取巧而是可以反复迭代的日常工具。3. 从一句自然语言到可编辑模型完整工作流拆解3.1 工具链准备一套免费可复现的组合在开始之前先把我实测配置列出来。这套组合的好处是完全免费而且脚本和模型文件都能进版本管理方便回溯。OpenSCAD轻量专注程序化建模适合快速验证几何逻辑。语法简单几乎没有任何图形界面操作全靠代码驱动和LLM生成的脚本契合度最高。CadQuery一个用Python写参数化模型的库它的理念是“代码即建模步骤”生成的模型可以导出STEP精度比OpenSCAD高适合需要进入机械设计流程的场景。FreeCAD作为最终的检查和修模环境能打开STEP文件也能执行Python宏。我用它来做实体检查、测量和最后的工程标注。大语言模型任意主流代码生成能力强的模型都可以比如GPT-4这个级别的对话产品。我用过多个版本结论是“模型对OpenSCAD语法的掌握程度普遍高于对CadQuery的掌握”但CadQuery生成内容可以用FreeCAD自动校验问题也不大。这套工具链装着也方便OpenSCAD官网下载解压就能用CadQuery可以用pip安装FreeCAD也有各平台安装包。装一次之后后面所有尝试都在这个环境里跑。3.2 提示词工程把“人话”翻译成建模指令很多人第一次用text-to-cad写提示词就像在和朋友说话“帮我画一个带孔的外壳。”这种写法不是不能用但生成结果大概率差强人意。我的经验是提示词里必须把意图、尺寸、约束、输出格式四类信息分开写清楚。我日常用的模板长这样我要生成一个__零件建模工具用__。 请按以下顺序建模 1. 先用拉伸/基本体创建__基体长__毫米宽__毫米高__毫米 2. 在__位置创建__个直径为__毫米的通孔注意使用布尔差集挖孔 3. 所有尺寸单位统一为毫米不得使用英制 4. 输出的脚本必须可以直接运行无法运行的代码不要出现 5. 如果有会导致自相交或破面的操作请先调整建模顺序再输出。不要小看这几条每一条都是我踩坑踩出来的。比如“使用布尔差集挖孔”是因为模型经常会把孔写成一个独立的圆柱体放在旁边而不会真正减掉“不得使用英制”是因为我遇到过一次提示词里写了板厚0.25英尺结果模型画出了一个板材装甲车。再举一个具体例子。我想要一个散热器安装座需求是“一个长方形底板长80毫米宽50毫米厚5毫米中间挖一个直径30毫米的圆孔四角各有一个直径6毫米的安装孔孔距边缘8毫米。”用OpenSCAD生成的脚本大概是这样的plate_length 80; plate_width 50; plate_thickness 5; center_hole_r 15; mount_hole_r 3; edge_offset 8; difference() { // 底板基体 cube([plate_length, plate_width, plate_thickness], center true); // 中心圆孔 cylinder(h plate_thickness 2, r center_hole_r, center true, $fn 64); // 四角安装孔 for (x [-1, 1], y [-1, 1]) { translate([x * (plate_length / 2 - edge_offset), y * (plate_width / 2 - edge_offset), 0]) cylinder(h plate_thickness 2, r mount_hole_r, center true, $fn 32); } }这段代码一执行一分钟内就能得到一个可旋转、可剖切、可导出STL或STEP的实体模型。而且所有尺寸都是变量改任何一个数值重新渲染就行。3.3 生成与校验闭环拿到零件后怎么验证、怎么迭代拿到AI生成的脚本不能直接当“真理”用。工程上讲究闭环我每次都会走四步几何粗查在OpenSCAD里按F5快速预览再用F6完整渲染。看有没有明显破面、悬空体、异常弯曲的面。尺寸抽查用Caliper模式或者FreeCAD的测量工具抽查三个关键尺寸是否和需求一致。常见问题是孔位偏移、壁厚等于零、尺寸被写死在脚本里而没有参数化。导出STEP如果只是3D打印验证模型直接导STL就行。如果需要进SolidWorks或FreeCAD做工程图最好导出STEP保留真实几何边界。迭代修改把问题反馈给模型。比如“中心孔位置偏左了2毫米请修改为keep center”这种自然语言交互比手动修脚本快得多。我测过几十个项目之后发现一个规律**第一次生成的脚本平均有七成概率能直接跑通剩下三成需要一到两轮对话修bug。**所以不要把期望值定在“一次成功”而是把整个流程当作“人机协作的迭代设计”。4. 实测中最容易翻车的五个场景与修复方案这一节是干货。以下五个坑我几乎每个都踩过两遍以上有的是尺寸问题有的是逻辑问题甚至还有一个是刻板印象造成的“死局”。4.1 场景一尺寸单位被模型“自由发挥”症状明明提示词里写了“毫米”生成出来的零件尺寸还是不对。比如要求柱体直径10毫米切片后发现实物直径只有6.35毫米这个数字其实是1/4英寸。根因大语言模型的世界知识里英美工程资料使用英制尺寸的比例相当高如果提示词没有明确压制模型偶尔会把英制数值混进来。更有迷惑性的是模型不会告诉你它切换了单位只会默默地把“0.25”当成“0.25英寸”处理。修复方法提示词的第一行就必须写明“所有尺寸统一使用毫米禁止使用英寸/英尺”。生成脚本后在OpenSCAD里渲染一个已知参考尺寸的立方体比如画一个20毫米的标准方块对比一下视角里的比例关系。如果明显不协调直接让模型重新改。注意这个坑最容易在导入3D切片软件时爆发。很多切片软件不检查单位模型显示的是“10”但实际导出时可能被缩放。养成“先检查模型尺寸再切片”的习惯能省掉一整卷耗材。4.2 场景二生成出来的零件是一整块没有孔位和特征症状让模型建一个“带通风孔的侧板”生成的脚本里确实有侧板但通风孔不见了。翻看代码发现孔写成一个圆柱体放在实体旁边根本没有做布尔减运算。根因自然语言里的“带孔”模型有可能理解成“在场景里添加一个圆柱体来表示孔”而不是“用布尔运算从实体中减去圆柱”。尤其是OpenSCAD这类需要显式写difference的语法模型不熟悉时特别容易出现这种“添加实体”而不是“减去材料”的逻辑错误。修复方法提示词里必须明确“请用difference()布尔差集创建通孔”“所有孔必须基于已存在的实体做减法”。另外可以要求模型把建模步骤列成清单先建基体、再挖孔、最后倒角。特征步骤越明确生成结果越可靠。我自己还发现一个技巧让模型在写脚本时顺便输出一个【特征清单】例如特征清单 1. 基体80x50x5mm立方体 2. 中心圆孔直径30mm贯穿 3. 四角安装孔直径6mm贯穿位置距边缘8mm这不仅方便你核对代码也方便你在发现某个特征缺失时单独指出“特征清单第2条没有实现”。4.3 场景三自相交几何与破面症状模型能跑出渲染图但导出STL后用切片软件打开发现层切面出现异常空洞或者FreeCAD提示“BOP Algo failed”“无法构建拓扑”。这种问题最气人——看着像模像样一加工就露馅。根因脚本里多个形体简单地叠加到一起没有做合并或者两个圆柱体穿过了同一个实体表面产生内部交线。OpenSCAD的F5预览模式下对这种问题不敏感到了切片阶段就直接报错。修复方法一是把多个组件用union()显式合并之后再做下一个特征避免悬空内部面二是如果做复杂布尔运算用render(convexity 10)强制完整计算确认实体封闭三是导出前在FreeCAD里用Part模块的“Check geometry”功能跑一遍它会直接列出无效面、无效边。遇到这类问题我通常会这样和模型沟通“你的代码导致实体自相交请用union合并所有体后再执行差集并确保没有两个完全贴合的重叠面。”模型一般都能给出修正版。4.4 场景四复杂装配关系完全失控症状有人指望AI一次性生成一个“带四个轮子的底盘包含电机座、轴承位和螺丝孔的总成”。我试过结果基本是灾难——每个零件都出现在模型空间里但彼此之间要么完全错位要么重叠在一起没有约束关系。根因装配体的本质是“零件间的位置约束和配合关系”自然语言很难一次性把所有配合面、基准轴、偏移量说清楚。AI模型目前对“空间装配逻辑”的理解能力远低于对单一零件的特征建模能力。修复方法严格按“一次一个零件”来做。生成完每个零件后设置好全局坐标系再让下一个模型在同一个坐标基准下生成。比如先建底板把底板的上表面定义为Z0平面再在底板对应孔位上生成支架底座。最后导入CAD软件做装配。装配不是AI的活是CAD的活。4.5 场景五提示词太长反而更差症状把设计需求、背景故事、材料要求、加工工艺、颜色偏好全部塞进一段话里模型的生成结果反而丢了核心尺寸或者只实现了前半段描述。根因大语言模型对超长指令存在“注意力漂移”尤其当后面出现和“尺寸”无关的信息时模型会误判这些信息更重要。我曾经在提示词末尾加了一句“颜色用深灰色”结果模型在脚本里写了一个颜色指令却把安装孔的直径参数彻底忘了。修复方法把提示词拆成三段目标段一句话说清楚零件是什么、干什么用。约束段列尺寸、单位、材料、加工方式。输出段写清楚脚本格式、要输出几份文件、是否需要注释。三段之间用空行隔开让模型把约束段当作最高优先级。这样生成结果的质量稳定得多。我试过把同样的需求用长段落和分段结构各提交一次分段结构的尺寸正确率明显更高。我把这五个场景汇总成一张速查表症状根因最快修复动作尺寸比例不对英制/公制单位混用提示词第一行标明禁用英制生成后做参考尺寸核对孔位缺失或实体没扣孔模型只“加实体”没做布尔差集明确要求用difference()要求输出特征清单切片报错/破面形体未合并、表面重叠用union()合并用render()粗查用FreeCAD检查几何多个零件相对位置乱一次生成装配体超出模型能力一次只生成一个零件固定全局坐标系分开装配长提示词丢关键参数注意力漂移提示词拆分三区约束段置顶5. 让生成结果从“能看”到“能生产”的进阶技巧前面聊的是怎么跑通流程、避开常见坑。接下来这几条是我在把text-to-cad用到真实项目里之后总结出来的经验能让生成结果真正进入生产环节。5.1 用“特征树思维”写提示词传统CAD里建模过程就是一棵特征树先草图、再拉伸、然后切除、最后倒角。text-to-cad的提示词也应该按照这个顺序去组织而不是按照“零件的语言描述顺序”。举个例子如果描述是“底部有法兰盘中间有立柱顶部有安装板”很多人会把这个顺序原样写给AI。但对CAD来说更合理的建模顺序可能是“先整体旋转或拉伸一个主体再在底部加法兰再在顶部切出安装面”。提示词里按特征树顺序写模型生成的脚本逻辑就是干净的。我实践中的标准句式是“先创建基体再依次执行以下特征操作拉伸___、切除___、阵列___、倒角___。”这样模型不会漏掉几何关系。5.2 参数约束把可变尺寸和固定尺寸分开这一点特别重要。如果你希望生成的是一个“能用很久”的参数化模型不要把所有尺寸都写成变量也不要全部写死。最好在提示词里加一句请把以下尺寸定义为可变参数板厚、安装孔直径、中心圆孔直径。 其余尺寸写死并保持固定孔距边缘位置、法兰外径。这样后续调整设计时只需要改脚本顶部的几个参数而不会误改到不应该变的位置。参数化建模的优势正在于此——文本到CAD生成的不应该只是一个零件而是一族零件。5.3 与现有CAD工作流衔接输出格式与建模规范text-to-cad的最终产出取决于你的下游是什么。如果只是快速原型和3D打印验证导出STL检查单位、壁厚是否满足打印最小厚度加一点支撑余量。如果要做机械加工或者出工程图导出STEP在FreeCAD里重新定义基准面和坐标系再补表面粗糙度等标注。如果要做装配干涉检查所有零件统一导出STEP后导入同一装配环境按关键尺寸一一检查配合。还有一条经验生成脚本时要求模型给所有特征加上注释。OpenSCAD和CadQuery都支持行注释一行注释能让后续人工修模时节省大量时间。实际项目里AI生成的脚本本来就是草稿真正签字确认的还是工程师。带着质量意识和工程规范去修改AI的草稿这才是“人机协同”最舒服的姿势。根据我自己的经验text-to-cad最有价值的场景其实不是让AI取代建模师而是把“模糊需求”快速固化成“可讨论的实体”。我在几个项目里最常用的流程是和同事或者客户沟通需求时现场用几句话让AI生成一个初版模型然后大家在实体上标注问题、讨论修改方向。这个过程比“用语言描述一个还没存在的东西”高效太多了。第一次做散热壳体的粗模时我只花了不到十分钟就在OpenSCAD里拿到了可以导出切片打印的比例底稿后续的圆角和加强筋是在FreeCAD里手动补的。这个体验颠覆了我对AI建模工具的认知——它不需要一次生成完美的零件只需要生成一个足够可靠、足够可改、足够便宜的起点。顺着这个思路往下走text-to-cad的边界其实还在扩大但核心逻辑不会变真正决定模型质量的永远是你表达设计意图的清晰程度。