
开头就直接写不从随着开始也不用大家好。写一个实际场景切入把读者拉到那个用嘴画图的兴奋感里。一句话喊出需求机器自动出参数化三维模型——这个text-to-cad说白了就是把自然语言描述翻译成CAD建模指令。你输入一个直径40mm、高度60mm的圆柱座中心开直径10mm的通孔孔口倒角C1它给你返回一个可直接编辑的STEP文件或者带参数特征的建模历史。这活儿前几年还停留在论文Demo阶段现在不少在线建模工具和插件已经把它做成了能进工作流的东西。对机械设计、产品打样、3D打印玩家来说这玩意儿最值钱的地方不是省掉画图时间而是把想法转成几何的门槛压到了极低只要你会说清楚你要什么剩下的事交给模型。这篇东西不聊太多底层网络结构也不扯那些发布会上花里胡哨的演示。我把它当成一个提示词工程CAD数据处理的实操项目来拆把怎么设计有效提示词、怎么定导出格式、怎么救回烂模型、怎么和主流CAD串起来跑通一条链路全部按我自己实际折腾的经验写出来。适合正在评估要不要在团队里引入文本建模流程的工程师也适合一个人捣鼓3D建模但不想学完整CAD命令的新手。1. 项目整体拆解text-to-cad到底在解决什么问题1.1 它解决的三个传统痛点先说痛点都是画图佬每天在吃的苦。第一个痛点是意图转几何的翻译成本。传统CAD里你想做一个带加强筋的支架脑子里想得很清楚但落到软件里要选平面、建草图、画轮廓、拉伸出实体、再选筋特征、定厚度方向。这一套操作熟练工也要三五分钟新手可能卡在草图完全约束上半天下不来。text-to-cad把我想做的东西和我下指令让软件做之间的距离缩到一句自然语言本质上是把设计意图的表达方式从操作序列换成了语义描述。第二个痛点是历史特征的可追溯性。很多AI生成模型尤其是基于体素或网格的那类吐出来是一个没法编辑的三角形网格看起来像那么回事真到了要改尺寸、加孔位、改圆角的时候直接歇菜。真正能进生产流程的text-to-cad系统输出的必须是参数化特征历史——就是你在建模软件里看到的那棵特征树。这让AI生成的模型和人画的模型在后续维护上没有区别改一个直径后面关联的孔位、倒角自动跟着变。第三个痛点是新手上手成本。我见过太多人想3D打印一个手机支架被SolidWorks的草图约束折磨到放弃最后去下载别人的模型随便改改。text-to-cad让这类人只需要描述清楚左边是手机宽度75mm右边开口放充电线底部留穿线孔就能拿到一个基线模型再进CAD微调。它不替代CAD它让你更快地到达需要精细操作的地方。1.2 技术线路为什么不是端到端文本生成网格现在市面上做text-to-cad的实现路径大概有三派。第一派是文本 → 参数化特征序列的直接生成把建模过程当成一个序列生成任务模型输出的是一个个特征命令比如拉伸草图1深度50mm然后在CAD内核里回放这些命令重建模型。这条路最贴近工程实际输出天然带特征树但难点在于特征序列的组合空间巨大模型稍微一错后面就全歪了。第二派是文本 → 代码生成让大语言模型输出Python脚本比如用cadquery或OpenCascade的API再执行脚本生成几何。这条路落地最快很多开源项目都在走最大的好处是脚本可读可改可复用缺点是对API文档的依赖强生成代码一跑就报错的情况很常见。第三派是文本 → 多视图采样 → 三维重建先用文生图模型出多视角图再重建出网格。这条路视觉效果好适合概念展示但几何精度差边界、圆角、孔位都是大概齐离能用还有距离。我自己做实验项目时基本以第二派为主因为它距离能干活最近而且调试成本低——生成错了看代码报错就能定位。这篇博文后面的实操流程也沿着提示词 → 结构化解构 → 脚本生成 → CAD再加工这条链路展开。2. 核心细节拆解把口语翻译成参数化建模指令的实操方法2.1 提示词设计的四条铁律text-to-cad的提示词写作和写文生图提示词完全是两码事。文生图你写一个赛博朋克风格的机器人模型给你发挥空间越大越好CAD生成你要是敢写做一个好看的支架出来的东西十有八九不能看。原因很简单几何描述必须封闭、无歧义、可度量。我总结了四条铁律。第一条尺寸必须全部显式给出。不要说大孔中等厚度标准螺纹孔必须说直径12mm的孔壁厚3mmM8螺纹孔深度20mm。CAD系统里没有一个中等的常量你给模糊描述模型只能瞎猜猜出来大概率不是你想要的。实测下来提示词里缺失尺寸参数的话生成模型的返工率超过一半。第二条空间关系要用基准和坐标系锚定。右边开孔这种说法有歧义因为模型不知道你是站在哪个方向看。正确的写法是以顶面为基准在距离前边30mm、左边20mm的位置打直径8mm的孔或者在圆心距离原点X方向25mm处。有坐标就给坐标没坐标就给某个特征的边/面为参照。第三条一个提示词只描述一个清晰的建模意图。不要试图一句话搞定一个包含五六个特征复杂零件。当你发现你的需求描述里出现且同时然后这些词时说明应该拆成多个提示词分步生成或者用我后面会讲的分段生成法。第四条明确约束类型和优先级。工程图纸里有的尺寸是功能性的必须保证有的是外观性的可以妥协。提示词里可以用必须/不得小于/尽量这种优先级词。比如孔径必须精确10mm壁厚不得小于2mm外形尽量接近椭圆柱。很多生成模型支持约束强度加权你把必须的项提出来生成效果会稳定非常多。2.2 一个能用的提示词结构化模板我自己在多次实验后沉淀了一套提示词模板核心思路是把自然语言描述拆成五个模块让模型每个模块都理解到位。模块作用示例零件类型声明限定整体结构方向这是一个法兰连接盘关键尺寸列表给出决定拓扑的尺寸外径80mm内径40mm厚度15mm特征位置描述锚定各个特征的方位和基准六个均布孔中心圆直径60mm孔径6mm加工约束说明精度/公差/工艺要求内孔公差H7所有锐边去毛刺输出格式要求指定建模方向请输出带参数特征的step文件实体建模一个组装出来的完整提示词长这样生成一个法兰连接盘用于连接DN40管道。外径80mm内径40mm厚度15mm。六个安装孔均布在直径60mm的螺栓圆上孔径6mm。内孔公差H7安装面表面粗糙度Ra1.6所有锐边C0.5倒角。输出为参数化特征实体step格式。这个提示词在好几个主流生成服务里跑出来的结果都不错虽然个别工具会漏掉表面粗糙度这种工艺信息因为在纯几何输出里工艺信息本来就不体现但关键的尺寸、数量、位置基本全对。2.3 复杂零件的分段生成法一个真正复杂的零件没法一段话讲清楚。我的做法是结构树拆解分段生成组装。拿一个电机支架为例。它大概是底板、侧板、加强筋、安装孔、线缆出口这么几块。我先写一个总提示词生成底盘和侧板的主体结构生成完导出step再写第二个提示词在主体上在左侧板上相对于顶边下移30mm、左移15mm的位置开一个直径20mm的过线孔得到第二个step最后我把两个step在CAD里装配或者直接在一个会话里让模型连续编辑有些工具支持多轮对话式建模每轮都基于上一轮的结果继续加特征。这种分段法有个好处是每个步骤的输入输出都清晰可控哪一步出错了就重新生成那一步不用推倒重来。坏处是特征之间的联动关系需要你在后续CAD里手动定义比如孔位关联到边线的距离变化得重新加约束但实际情况中大部分临时需求的几何关联都不复杂这个代价可以接受。3. 实操流程实录从一句话到可加工模型的完整链路3.1 工具链路选型和环境准备我自己跑通的链路是文本 → 脚本生成 → 本地执行 → CAD后处理。第一步是选一个支持代码生成方式的text-to-cad工具或服务。市面上的选择有在线版和本地开源版两类。在线版用起来省心浏览器打开就能用模型能力也强但对复杂工业零件的领域知识还是不够本地开源版的好处是可以自己微调还能完全离线跑适合有保密要求的项目。我建议新手先从在线版开始跑通全流程建立手感之后再决定要不要换本地方案。第二步是准备本地环境。既然要跑生成脚本就绕不开Python。装好Python 3.10以上版本再用pip安装cadquery库一个用Python写参数化CAD模型的库、OCPOpenCascade的Python绑定、gdt库处理几何尺寸与公差。有些工具生成的脚本不依赖cadquery而用OpenCascade原生API那你还需要把OCC环境配好。这块环境安装会有不少坑后面我单独列一节讲。第三步是明确输入输出规范。我规定自己的输入是一个自然语言描述段落输出是一条可复现的模型生成记录而中间产物只有两类生成脚本.py和模型文件.step或.brep。所有脚本都放到版本管理里方便追踪哪个提示词对应哪个脚本、哪个脚本生成了哪个模型。3.2 一个完整案例带加强筋的钣金底座拿我实际做过的一个零件——3D打印机热床底座的钣金支架——走一遍全流程。需求描述原始人话是做一个矩形底座长200宽150边缘向上折弯20mm四个角各有一个直径5mm的安装孔孔心距边缘10mm底面中间加两条纵向加强筋加强筋高10mm厚度3mm。这个描述已经比较结构化但还有几个信息缺口需要我来补折弯半径没说我按钣金常规取R2加强筋是从底面往下凸还是往上凸我理解为往内部空间折弯内侧凸保证底面平整这在描述里改成加强筋布置在底座内侧从底面向内凸起高10mm安装孔的沉头还是通孔没说我按通孔处理。补全信息后我把这个需求输入text-to-cad工具让它生成cadquery脚本。生成回来的脚本核心逻辑大致如下我用类似结构演示具体实现因工具而异import cadquery as cq result ( cq.Workplane(XY) .rect(200, 150) .extrude(3) # 底板厚度3mm .edges(|Z).fillet(2) # 折弯处圆角外侧 .faces(Z).workplane() .rect(200 - 2*20, 150 - 2*20) # 折弯线位置 .workplane(offset20) # 简化处理用box布尔来模拟折弯效果实际更复杂 ) # 加强筋两条平行于X轴的凸台 for offset_y in [-30, 30]: result ( result.faces(Z) .workplane() .center(0, offset_y) .rect(180, 3) .extrude(10, combinecut) )生成脚本可以跑通但跑出来的结果跟预期有出入折弯不是真正的折弯而是被简化成了直的延伸段加强筋用了布尔剪切而不是实体凸台。这说明生成模型的抽象能力还有限太复杂的钣金成型逻辑脚本生成器不一定能理解到位。我的处理方式不追求一步到位。让text-to-cad生成一个基础底板和孔位的毛坯模型然后我把它导入CAD软件在本地用折弯和加强筋两个特征手动补上。这个过程只花了不到十分钟比完全从零建模还是快得多。3.3 导出格式怎么选STEP、BREP还是原生文件text-to-cad的输出格式选择很关键。我建议按用途来分临时打印验证推荐STL。网格格式通用性最强但丢掉了所有精度和拓扑信息只能看外形。注意STL导出前一定要检查法线方向和封闭性不然切片软件会给出各种奇葩的错误。参数化复用的中间格式STEP是首选。STEP文件保存了B-rep边界表示几何能进所有主流CAD系统且保留了一定的精度定义。如果你的下游是SolidWorks、Fusion 360、FreeCAD这类导STEP基本不会出大问题。同一CAD系统内的深度编辑建议直接存原生的参数化格式比如某个软件的零件格式。只有在原软件里特征树、草图约束、关联关系才完全保留。如果你打算让AI生成后继续在同一个软件里做精细化设计那让模型直接输出该软件能识别的参数化格式少一次转换就少一次精度损失。我还特别提醒一句生成工具自带的下载预览按钮如果给的是网格文件别急着直接当最终模型用。网格模型看着再光滑放进CAM软件做刀路或放进仿真都是灾难。务必回到实体格式再往下走。4. 常见问题排查与避坑指南4.1 生成脚本一执行就报错怎么办这是text-to-cad实操里最让人崩溃的问题——模型自信地输出了一堆代码你一跑第一行就报ImportError。我的排查顺序是这样的第一步看是不是缺依赖库。代码里import了ocp、cadquery、gdt但本地环境没装全这是最常见的原因。解决方案是把代码里的import语句全部摘出来逐个pip install验证。第二步看是不是API调用错误。text-to-cad生成的代码经常把cadquery的旧版API混进新版本用典型的是Workplane.rect的调用方式变了、combine参数名不同。不确定的话去查当前安装版本的官方文档对比着看。第三步看是不是几何逻辑错误。这种情况代码不报错但生成的模型是空的或者明显不对。最常见的坑是用faces(Z)选面选错、workplane坐标系偏移算错、cut和union用反方向。我的调试技巧是在代码每步操作后加一句输出当前结果的对象数量比如print(after extrude:, result.solids().size())如果某一步之后结果是0那问题一定在上一步的布尔或选择器里。这种逐步打点的方法比盯着错误信息猜快十倍。4.2 生成结果尺寸对、位置却全乱的经验教训我遇到过最奇葩的情况零件整体尺寸完全正确但六个孔的位置整体偏移了90度。排查了半天发现是模型把螺栓圆均布孔理解成从X轴正方向开始排布但我心里想的是从Y轴正方向开始。CAD里的均布默认起点和方向是个隐藏的上下文信息大模型哪里会知道你的默认这个问题的解法是在提示词里主动定义起点和方向。六个孔均布起始位置位于3点钟方向或者起始孔中心位于X轴正方向。工程图纸里有明确的基准轴线概念text-to-cad的提示词里也必须把这个信息写死而不是依赖模型猜一个合理的默认值。从那以后我的所有涉及圆周分布特征的提示词都强制带上起始角0度/90度之类的描述。另一个经常错的是孔的方向。提示词里说打一个竖直孔但零件本身是倾斜放置在空间里的模型可能按零件局部坐标系的竖直来理解也可能按世界坐标系来理解。写提示词时要用沿Z轴方向的通孔而不是竖直孔用坐标系描述代替自然口语的方向词。4.3 特征树是歪的生成结果没法后续编辑的补救有些生成工具输出了伪参数化模型——表面上是个实体但特征树里只有孤立的一个B-rep导入特征完全没法回到步骤去改参数。这其实是工具走了捷径先用别的方式生成网格再转成STEP。这时候救模型的唯一办法是重新识别特征在CAD软件里对导入的实体做特征识别把倒角、圆孔、阵列这些结构识别成可编辑的特征主流软件都有自动识别或半自动识别工具。但识别成功率受模型质量和软件能力影响复杂、非正交的特征基本识别不出来。我的经验是把这种伪参数化模型当成图纸参考而不是可编辑模型我照着这个模型的外形和关键尺寸在CAD里快速重画一个真正的参数化版本。听起来费功夫但往往比重识别更快更可控。尤其当你本来就要在模型上加一堆新特征的时候重画一次的成本摊到每个新特征上反而是划算的。4.4 常见问题速查表症状可能原因快速解法模型尺寸漂移提示词中缺少尺寸单位或使用了模糊量词所有尺寸写死数字单位mm删除大约左右孔位偏移/旋转未指定均布起点或坐标系提示词补上起始角0、位于X轴正方向生成脚本ImportError本地缺依赖包逐个pip install代码头部引入的库实体为空心/破损布尔运算方向反了或草图未闭合检查cut/union参数检查草图轮廓是否封闭输出是网格而非实体模型走的是网格重建路线换用支持参数化特征生成的工具或手工重建特征树不可编辑工具内部做了伪参数化处理照外形重画一遍别硬啃识别圆角、倒角消失生成器简化了工艺特征提示词里单独强调C0.5倒角所有锐边生成后再检查5. 实操心得与后续扩展建议5.1 什么场景值得用、什么场景别硬用这套流程跑了几个月之后我心里有一本很清楚的账。值得用的场景有三类一是概念设计阶段的快速探索——早上有个想法中午就想看到大致形态text-to-cad能把你从打开软件建草图的流程里解放出来二是标准件库的快速扩充——像法兰、底座、支架、夹具这些结构相对规则的零件描述清楚就能批量生成变体三是跨专业沟通——机械工程师用一段话把需求描述给软件生成模型后直接发给电气工程师做干涉检查省去中间画图的时间。不适合的场景也很明确高精度配合面、复杂曲面自由曲面造型、对拓扑结构有严格要求的精密零件。这类活儿生成器目前还干不了它输出的模型要么精度不够要么特征逻辑不合理返工成本比纯手工建模还高。另外涉及多层嵌套的装配约束关系text-to-cad目前基本无能为力那已经不是单零件描述能覆盖的范畴。5.2 把text-to-cad接进现有工作流的一种组织方式我最终沉淀下来的工作流是需求评审 → 提示词结构化 → 批量生成多个候选方案 → CAD里快速验证 → 选中一个方案精细修改。这里有一个关键的习惯永远不要让text-to-cad输出唯一答案而是让它交3到5个变体每个变体在你给定的尺寸约束内做微小变化有些工具支持temperature参数调节让它放飞一点。多候选的好处是CAD验证时你往往能发现某个变体的加强筋角度更合理、某个变体的孔位布置更好走线这些意外之喜来自模型的尝试而不是你预先想好的方向。费这么点时间成本获得的设计启发是实打实的。我还做了一个内部沉淀的习惯每个跑通过的成功提示词都存进一个提示词库标注适用的零件类型和关键参数。下次遇到同类需求直接翻库改数字就行不用每次从头写。时间久了这个提示词库比模型本身还值钱——它相当于你自己团队的高频零件知识库。5.3 最后再分享一个小技巧当你想让text-to-cad生成有一圈孔的零件时别写一圈孔写8个直径8mm的孔均布在直径120mm的螺栓圆上。这个差距不仅是尺寸更精确的问题而是螺栓圆这个词给模型一个非常强的结构先验——它知道这是法兰类零件常见的螺栓分布模式会自动处理起始角、均布逻辑和孔深方向。这种术语触发的技巧在机械、钣金、管道类需求里特别好用提示词里带上行业标准术语如法兰加强筋沉头过孔钣金折弯系数生成结果的质量会有一个明显跃升。反过来如果模型不理解某个术语而你又必须用它那就拆成最基本的几何描述在一根直径30mm的圆柱上从端面中心沿轴向钻直径8mm、深20mm的盲孔——先保证几何正确再考虑加工术语的精确性。这类术语先行、兜底描述跟上的写法是我个人用过最稳的提示词策略没有之一。把text-to-cad当成一个聪明的、但需要明确指令的实习生来带——你把话说清楚到傻瓜级别它就能给你交付一个合格的初稿。这句话值得反复品味因为它决定了你在这个新工具上究竟是节省时间还是浪费时间。