
去年年底开始text-to-cad这波风气突然就刮起来了。我最早是在推特上刷到有人拿一段自然语言直接生成一个带螺纹孔的机械零件模型第一反应是这玩意儿是不是拿Mesh网格糊弄人的毕竟那几年AI生成3D模型比如文本生白模、图片生体素基本都停留在“远看像那么回事近看全是破面”的阶段。但等我真正上手试了一圈开源项目和在线工具之后发现这个赛道跟我想的完全不一样——它走的是参数化建模的路子生成的不是一堆三角面片而是可以编辑、可以改尺寸、可以直接进CAM编程的实体模型。这事的核心价值我得先跟各位说清楚它不是帮设计师偷懒画图的而是把“从需求到几何”这段最烦人的前置沟通给自动化了。你不需要记住某个卡簧槽的标准尺寸也不用翻手册查沉头孔参数直接告诉模型“我要一个用于直径8mm轴的卡簧槽”它把该有的槽宽、槽深、甚至倒角都给算明白了。这篇内容我就结合我自己跑过的开源项目、在线工具和几个商用平台的测试结果把text-to-cad到底怎么做、不同工具之间的差别、以及想在生产环境里用它该避哪些坑一次性说透。不管你是机械工程师、结构设计师、3D打印玩家还是搞自动化产线的这篇文章应该都能给你省下不少试错时间。1. 内容整体设计与实现思路拆解1.1 这个方向到底在解决什么问题先把传统CAD建模的痛点摆出来。一个零件从想法到图纸就算是用SolidWorks或者Fusion 360这样的主流软件也得经历“查手册定参数—选基准面—画草图—标约束—拉伸切除—倒角”这么一大串流程。这里头真正考验工程师水平的不是鼠标点的快慢而是脑子里有没有那个“结构方案”。text-to-cad想干掉的就是这前半段把结构方案直接变成参数化草图或特征历史树。它不是靠神经网络硬猜顶点坐标而是让模型学会调用CAD内核的API像人一样“画”出这个零件。最典型的开源方案是Zoo也就是后来的Text2CAD项目组做的那个以及后来的CADmium、MLCADSamples这批东西。我在本地搭环境跑过Zoo的推理脚本发现它的工作流其实分两截先用一个LLM大语言模型解析自然语言里的几何意图、尺寸信息和特征约束然后通过一个对齐网络把这些意图映射成一系列带参数的动作序列比如“画一个矩形边长100、宽50然后做一个深度10的拉伸”。整个流程走下来本质上是在模仿一个CAD操作员的操作日志。1.2 为什么不用传统AIGC的Mesh生成路线这个点是很多人刚接触text-to-cad时的第一个困惑。早几年像OpenAI的Point-E、英伟达的GET3D还有那些文本生成纹理模型的工具生成的都是Mesh网格。Mesh在游戏、影视资产里够用但在机械设计领域就是个灾难没有历史特征、没有参数约束、转成STEP进CAM编程直接报错。更重要的是Mesh模型无法做装配约束。你让AI生成一个法兰盘Mesh版看着圆是圆的、孔是孔的但真要拿它去和轴承配合孔到底是以哪个圆心为基准生成的根本无从改起。而text-to-cad走的是B-Rep边界表示路线生成的是正经的实体每个孔的圆心坐标、直径、深度全部在历史树里随时可以改参数重新生成。我实际测试过一个商用平台生成的联轴器模型导出STEP后在Fusion 360里打开特征历史是完整的拉伸、切除、圆周阵列一个都不少。这意味着我可以在它的基础上改孔的数量、改外径、调整壁厚就像自己画的一样。2. 工具选型与核心方案拆解2.1 主流工具的真实能力对比我自己跑了整整两周把市面上能上手的主流工具都试了一遍包括开源的和在线的。底下这个表是我实际测试下来的感受参数化的完整度是我最看重的指标。工具/项目基础模型输出格式参数化还原度上手难度适合场景Zoo / Text2CADGPT-4V Llama系列STEP / Brep高带完整特征历史中需配置Python环境机械零件、规则体建模CADmium本地小模型 推理对齐STEP中能出基础体低Web界面教学演示、快速原型Meshy / Tripo等Mesh生成自研扩散模型OBJ / glTF低纯网格低概念模型、3D打印外观件Autodesk商业方案不明原生CAD格式高但封闭低企业内落地FreeCAD LLM脚本桥接任意LLMFCStd / STEP中高取决于脚本中熟悉FreeCAD的极客玩法这个表里最值得说两句的是CADmium它是目前唯一一个我见过把“用LLM直接调用CAD内核”这件事做成了网页应用的开源项目。它的做法是让LLM输出特定格式的JSON序列然后由前端的OCCTOpenCascade内核去执行。这跟Zoo的思路一脉相承只是把生成动作序列和实际建模的过程分离得更干净了。2.2 机器配置和环境准备要点跑text-to-cad的本地推理对机器要求没有想象中那么可怕。Zoo的推理脚本在后端调用LLM时可以直接接OpenAI的API所以本地显卡的负担主要在跑对齐网络类似一个小号的视觉编码器上。我这边实际用的是一张RTX 3060 12GB推理一个中等复杂度的零件比如带6个孔的安装支架大约需要15到20秒显存占用峰值大概6GB左右。如果你用CADmium这种小模型配置要求更低集显都能跑但生成效果确实糙不少。有一点必须提醒环境变量里的API Key配置一定要放在.env文件里不要硬编码在脚本里。我一开始贪省事直接写在代码里后来推到GitHub仓库准备开源自己的修改版突然意识到Key已经泄露吓得赶紧去控制台轮换了一波密钥。这种细节坑一次就长记性了。3. 实操过程与核心环节实现3.1 用Zoo跑通第一个零件Zoo这个项目是text-to-cad赛道里目前最完整、文档也相对清晰的开源实现。它的安装过程不复杂但有几个细节容易卡住新手。我把自己跑通的步骤整理一下照着做基本不会出大问题。# 克隆项目 git clone https://github.com/Text-to-CAD/Zoo.git cd Zoo # 创建虚拟环境我用的Python 3.10 python -m venv venv source venv/bin/activate # 安装依赖这里推荐用poetry项目的pyproject写得比较全 pip install poetry poetry install # 设置OpenAI API KeyZoo默认用GPT-4V解析图片和文本 export OPENAI_API_KEYsk-你的key # 跑一个推理示例 python run_inference.py --prompt a flat bracket with two mounting holes at each end这里有个关键点Zoo的完整pipeline其实分两步走第一步是让GPT-4V把文本描述解析成结构化的JSON第二步是对齐网络把这个JSON映射成CAD动作序列。如果你只想快速看效果可以跳过微调对齐网络直接用它的预训练权重。我第一次跑的时候因为网络问题连HuggingFace的模型下载一直超时后来换了镜像源才把权重拉下来。这里也想提醒一句如果你在公司内网且有防火墙限制最好提前把huggingface_hub的镜像环境变量配置好否则会在下载阶段卡很久。# 这是我从项目里抽出来的核心调用逻辑稍微做了一点注释 from zoo import load_pipeline pipeline load_pipeline(zoo-v0.1) # 输入自然语言描述 result pipeline.generate( promptMake a rectangular base plate 120mm long, 80mm wide, 10mm thick, with 4 holes at corners for M6 screws, temperature0.2 # 温度调低让输出更稳定 ) # 导出STEP文件这一步是真正的B-Rep格式 result.export(base_plate.step)跑完之后检查一下生成结果你会看到一个正儿八经的带四个孔的长方形板子每个孔的直径都是6.5mmM6螺钉的标准过孔尺寸位置在距离四边各10mm处。这组数据它不是从模型里随便猜的而是LLM在训练语料里学到的机械设计常识。这是我认为这个方向最惊艳的地方——模型不只是理解了“四个角有孔”还理解了“M6螺钉应该配多大过孔”。3.2 用CADmium实现零代码体验如果你不想折腾Python环境或者只是想先感受一下text-to-cad的效果CADmium是目前最友好的选择。它直接在浏览器里跑不需要本地装任何CAD软件。CADmium的使用流程非常简单打开网页在输入框里用英文描述你要的零件点击生成它会在后端调用本地模型或者你配置的API把结果渲染在网页的3D预览区里。我测试过几个典型的描述a simple rectangular table with four legsa cup with two handlesa flange with six holes arranged in a circle结果最有意思的是那个“带六个孔的法兰”它真的生成了一个圆环然后在圆周上均匀排布了六个孔。你用它的编辑工具点开历史树能看到AI是怎么一步步“画”出这个法兰的——先建一个圆柱再画一个圆环草图然后圆周阵列六个切除特征。虽然尺寸精度和商业软件不能比但这个思路完全正确。CADmium还支持导出STEP文件我用FreeCAD打开过它生成的法兰虽然特征树跟Fusion 360里不一样它用的是OCCT的内核导出但几何体本身是完整的实体可以正常做布尔运算和装配。3.3 提升生成质量的提示词技巧很多人拿到text-to-cad工具后第一反应是“这玩意儿生成的东西怎么这么蠢”其实大部分时候不是模型不行是提示词写得太含糊。我总结了几个实测下来对成图质量影响最大的技巧用具体数值替代抽象形容词。“a thick plate”肯定是废的要写“a plate with 10mm thickness”。模型对数值的敏感度远高于形容词你把厚度从“thick”改成“10mm”生成结果就是天壤之别。明确孔的用途。如果你只说“make a hole”得到的孔径大概率不匹配实际使用场景。但如果你说“with holes for M8 bolts”模型会按照M8的标准间隙8.5mm或9mm来生成这个细节能省去后续很多修改工作。指定坐标系和参考点。对于更复杂的装配件最好明确描述孔的位置基准。比如“holes centered on the long edges, 15mm from each end”这样输出的坐标系定位会稳定很多。一次只描述一个主体。如果你让AI一口气生成一个完整的上盖加四个螺丝柱加一个卡扣大概率会有特征丢失或位置错乱。更稳妥的做法是先生成主体然后在历史树里一步步追加特征。虽然text-to-cad号称是端到端但至少现阶段分步走的效果远强于一步到位。4. 参数化输出才是text-to-cad的命根子4.1 从“生成模型”到“生成图纸”的距离我在跟一些朋友聊这个方向时发现大家最大的误解是以为text-to-cad的最终产物是一张图或者一个模型文件。实际上这个方向真正有价值的产出是“带参数的可编辑模型”甚至可以直接说是那个“特征历史”。拿前面那个带四个孔的底板举例。在传统工作流里我拿到一块90mm×60mm的电路板要在四个角打孔固定孔径3.2mm、孔距是标准的80mm×50mm。我如果用text-to-cad生成一个底板它在历史树里应该保留这几个信息底板的长宽高、孔的直径、孔距基准。我后续想改成100mm×80mm的板子不必重新生成直接改参数即可。这也是为什么我一直强调要选支持B-Rep输出和参数化特征的方案。那些只输出STEP实体而没有历史特征的工具本质上还是个“升级版图库”离真正的AI辅助设计还差得远。从我个人实际感受来说Zoo和CADmium目前是把这个链路走得最完整的。Text2CAD的论文里还提到了一个很有意思的评估指标——生成结果和原始模型的“特征相似度”它不只是看几何形状像不像还看CAD操作序列是否一致。这意味着模型不光是“画得像”而且“画法也对”。4.2 如何把生成结果接入现有设计流程说了这么多最实际的问题是我拿到了AI生成的文件下一步该怎么办我的经验是分两条路走。如果你是做机械结构设计的公司用的是SolidWorks或Fusion 360这类闭源商业软件直接打开AI生成的STEP文件通常只能拿到一个“哑实体”——看得到摸得着但改不了参数。这时候比较建议的做法是把这个哑实体当作参考用你自己习惯的方式重新画一遍或者在它基础上用直接建模工具做修改。如果你是3D打印爱好者或者创客用FreeCAD或DesignSpark Mechanical这类开源工具接起来会更顺滑。CADmium导出的STEP可以直接在FreeCAD里识别为实体配合Part Design工作台里的“重新关联草图”功能我甚至可以半自动地把AI生成的特征转成可编辑的草图。这一步虽然还不够完美但已经能省掉大概一半的重画时间了。还有一条比较极客的路线把LLM和FreeCAD的Python宏命令桥接起来。你自己写一个脚本把自然语言描述发给LLM让LLM输出一段FreeCAD的Python API调用代码然后由FreeCAD执行。这个方案本质上就是自建一个text-to-cad工作流好处是不依赖任何平台想怎么改就怎么改。我试过用这个方法生成一些带参数的基础几何体比如“一个内径30mm外径50mm高度20mm的垫片”它生成的代码是可以直接跑通的。5. 常见问题与排查技巧实录5.1 生成结果不是实体而是片体这个几乎每个玩text-to-cad的人都会遇到。原因在于LLM生成的动作序列里某个草图没有正确闭合或者拉伸方向选反了导致生成的几何体只是一个面而不是封闭实体。我的排查思路是分两步。第一步检查对齐网络输出的动作序列日志看草图是否闭合、拉伸深度是否为正值。第二步把生成的STEP文件导入FreeCAD用Part工作台里的“检查几何体”功能跑一遍看报错信息。大部分情况下都是草图约束不全导致的补一个重合约束就解决了。5.2 特征缺失或尺寸错误有时候你明明描述了六个孔生成出来只有四个或者孔径总是偏大偏小。这通常是两个原因一是提示词的上下文太长模型在生成动作序列时丢失了早期信息。这个可以通过简化描述来缓解把最关键的尺寸信息放到描述的最后面。第二个原因是温度参数设置太高导致模型生成时随机性增大。我的经验是把温度参数调到0.1~0.2之间特征遗漏的情况会明显减少。不信你可以试试用同一个提示词跑十次温度0.5的时候特征全的概率不到一半温度0.1的时候能到八成以上。5.3 单位不统一带来的“尺寸灾难”这是我踩过最深的坑。text-to-cad工具内部处理的时候有的用毫米有的用英寸有的甚至连单位都不标注。如果你在一个默认英寸的平台上输入了“100mm”它可能直接生成一个100英寸的巨型零件。解决方案是在提示词里强制标注单位并且确认工具的默认设置。Zoo的默认单位是毫米CADmium也是但如果你接入了其他模型最好先在提示词里加上“all dimensions in millimeters”这个强化提示。还有一个更保险的做法生成之后马上用测量工具检验关键尺寸别等装配的时候才发现差了25.4倍。5.4 平台锁定与数据安全问题这个点想拿出来单独说是因为它特别容易被人忽略。现在很多在线text-to-cad工具尤其是免费的那几个你上传的设计数据其实是在帮它训练模型。如果你的设计涉及公司机密或者未发布的产品专利一定要看清楚服务条款。我自己的原则是公司项目的敏感零件绝不上传到免费在线平台宁可本地跑开源模型或者把描述里的关键尺寸脱敏再输入。这个底线得守好AI辅助设计再怎么香也不能拿商业机密去换便利。6. 这个方向往后还能怎么玩text-to-cad目前还处在很早期的阶段但它打开的想象空间已经足够让人兴奋了。往大了说这是把“工程语言翻译成几何操作”的一次标准化尝试往小了说它就是每个工程师梦寐以求的那个“会看图懂需求的下级”。我自己接下来打算做两件事。一是把CADmium本地化部署到一台闲置的Linux服务器上给团队内部搭一个共享的AI建模服务谁想快速出方案直接浏览器打开就能用。二是尝试把text-to-cad的生成结果和参数化仿真结合起来用自然语言描述一个零件的负载工况让它自动生成优化后的形状。如果你也对这个方向感兴趣我的建议是先别急着买课或者追新模型静下心来玩熟Zoo或者CADmium任何一个开源项目。理解了“LLM变成CAD操作员”这条链路后面不管模型怎么迭代你都能快速跟上。最后分享一个我最近才琢磨明白的小技巧text-to-cad在生成对称零件时的表现远好于非对称零件。所以如果你要的零件是对称的尽量在描述里直接说“symmetric along both axes”或者“circular pattern”模型会非常听话地按照阵列来生成特征的规整程度会高一个台阶。这个小经验值不值得你少走弯路等你自己试过就有体会了。