年初一个做钣金的朋友扔给我一句话你能不能让我用中文说一句“做一个300乘200的板四角R10圆角中间挖四个直径8的孔”然后直接给我出CAD图我当时第一反应是“你喝多了吧”。半年之后我不光做到了而且已经把这条链路接到了我自己的图纸流程里。这个方向现在有个正式名字叫Text-to-CAD中文可以理解成“用文字直接生成CAD模型”。简单说Text-to-CAD就是通过自然语言描述让系统自动生成可编辑、带参数的CAD模型或图纸。它不只是生成一张“看起来像效果图”的图片而是真的输出能继续修改、能出工程图、能拿去加工的模型。这件事在建筑、机械、钣金、电气这些常年被CAD图纸“绑住”的行业里价值非常直接。今天这篇就围着它展开讲讲核心原理、我能直接给你的落地代码以及我替你们踩过的那些坑。1. text-to-cad是什么一句话从“画图”变成“写需求”1.1 为什么我折腾了三个月才觉得“能用了”最开始我做了一个很蠢的尝试把文字丢给大语言模型让它直接编一段AutoLISP或者DWG脚本然后塞进CAD里跑。结果很惨稍微复杂一点的轮廓就缺线圆角位置莫名其妙尺寸标注能偏到天上去。后来我换了个思路——不再让AI直接“画图”而是让AI负责“理解需求”把这段文字翻译成一个参数化建模的调用再由真正的几何内核去生成模型。这一换效果立刻不一样了。这也是Text-to-CAD和我一开始的理解最大的区别真正靠谱的方案不是让模型凭空造几何而是让模型当一个“翻译官”把人类的含糊表达翻译成精确的建模指令。几何的可靠性交给专业的CAD底层去保证AI只负责解决“他到底想要什么”这个问题。1.2 和传统CAD建模的本质区别人服务软件还是软件服务人传统CAD流程里哪怕画一个最简单的带孔板你也得先建草图、约束尺寸、拉伸、打孔、倒角每一步都是人主动去配合软件的逻辑。Text-to-CAD反过来你用描述需求的自然语言说话系统自动拆成“板、孔、圆角、尺寸、数量”这些参数再拼装成模型。本质是把“画图动作”变成了“需求描述”把人的精力从操作层面解放出来放到判断和决策上。我用一个更直白的类比以前用CAD画图像手写一篇文章每个字都要自己敲Text-to-CAD像你对着一个打字员口述他帮你把话落到纸面上你只需要在关键地方说清楚“这里要空两格”“这里要加粗”。当然这个打字员偶尔也会听错所以后面我说到实操时会专门讲怎么“把话说清楚”。1.3 到底哪些人最适合马上用先说结论不是所有画图场景都适合但以下三类人现在就能受益。第一类是每天画大量重复零件的绘图员。板类、管类、盘扣架、电缆桥架这类参数化程度极高的零件完全可以文字驱动批量生成你只需要改几个数字。第二类是结构工程师和工艺工程师。他们往往脑子里有清晰的需求但不想趴在CAD里一笔一笔抠用Text-to-CAD先把方案模型跑出来比手工建模快得多而且后续改动只要改文字描述就行。第三类是初学者。传统CAD入门光应付工具面板、图层、坐标系就要一两个月而Text-to-CAD可以让新手先在“需求”层面把结构想明白再用工具落地理解速度会快很多。2. 核心技术路线三种能落地的做法别再只看Demo2.1 路线一让大模型直接写OpenSCAD/CadQuery代码最轻量这是我最推荐个人和中小企业先尝试的方案思路很简单大模型不直接生成几何体而是生成一段参数化建模脚本脚本交给OpenSCAD或CadQuery去执行最终导出STEP、STL、DXF。这个方案的好处是“每一行代码都可以审查”。比如你让AI生成一个“L型支架长边100短边80厚度5一侧两个直径6的孔”它写出来的脚本里会有明确的数字和几何运算。如果出来的模型不对你可以直接改脚本里的参数而不是对着一个“黑箱”模型干瞪眼。对生产环境来说这一点太重要了。我实际测下来现在的开源模型写OpenSCAD代码的能力已经足够覆盖钣金件、机械零件、建筑构件这类常见结构。复杂度只要不突破“曲面造型”“多体布尔交运算”这种级别成功率都在七八成以上。2.2 路线二参数化模板加意图识别企业落地最稳如果你在企业里做标准化产品我强烈建议不要直接让AI自由发挥而是先用传统的参数化建模方式把常用零件做成模板模板里的每一个尺寸都暴露为参数。然后用一个大模型做“意图识别”把用户的话拆成参数表喂给模板批量出图。举个例子你们厂里常做的“L型连接板”可能就四个参数长边长度、短边长度、厚度、孔直径。你不需要AI重新发明这个零件只需要让AI从一句话里把这四个数字抠出来填进现有模板重新生成加工图。这种方案的稳定性极高因为它把最不稳定的“几何生成”环节完全剔除了AI只做相对擅长的“文字转参数”。我在实际项目里见过太多团队一上来就追求“AI什么零件都能画”结果模型成了玩具。真正创造价值的一定是先梳理出自己的高频零件池每个零件做一个模板再用AI把自然语言翻译成参数。这条路看着不炫但稳得一批。2.3 路线三端到端生成B-rep模型最前沿但还不能指望这里的代表是微软的ML-CAD、Zoo Text-to-CAD这类端到端方案。它们训练模型直接从文本生成一个用边界表示B-rep描述的实体模型输出STEP文件可以在Fusion 360之类的软件里直接打开编辑。Zoo还做成了浏览器里的可视化应用输入英文描述就能出一个粗模型。这条路线确实酷但我建议大家冷静点。端到端模型本质还是在“猜”几何它可能会为了美观牺牲尺寸精度或者生成一个“看起来对但完全没法加工”的圆角。以我测试的体验来说它更适合做方案阶段的粗模、灵感参考、自动化设计的前置探索真要直接对接加工还得靠前两条路线兜底。2.4 三条路线怎么选我把关键差异整理成了表格方便你对号入座。对比维度路线一LLM生成代码路线二模板加参数提取路线三端到端生成可控性高可逐行审查脚本极高参数都由模板限定低几何是“猜”出来的可编辑性高改脚本就能改模型高改参数即可批量更新中改起来不如前两者顺上手成本低装Python就能玩中需要先做模板设计低网页点几下就出结果输出精度高几何内核保证高模板保证偏低只适合方案级适用场景个人、小团队全流程企业标准化、批量生产概念设计、快速可视化我的建议很简单没有特定模板积累的个人先玩路线一有标准化产品线的企业重点投入路线二路线三保持关注等它把尺寸精度问题解决得差不多了再纳入正式流程。3. 实操从一句话到一个能用的零件图3.1 环境准备只需要Python和两个库别纠结CAD安装先说实话以前的CAD时代光安装、激活、卸载残留这些问题就能劝退一大批人。Text-to-CAD这边就清爽很多因为它根本不依赖本机安装CAD软件核心依赖只有一个Python环境。我建议你直接用Python 3.10以上版本创建虚拟环境后安装两个库pip install cadquery ezdxfCadQuery负责3D实体建模ezdxf负责生成2D的DXF图纸文件。想本地看模型的话再装一个pip install CQ-editorCQ-editor是CadQuery的图形界面可以直接查看和交互操作生成的模型。整套环境装下来也就几分钟比折腾一个完整的CAD安装轻量太多。提示如果你想要更轻的预览方式把模型导出成STL后用任意在线3D查看器拖进去就能看连界面都不用装。3.2 核心代码把文字描述翻译成参数化建模指令这里我以最典型的“带孔板”为例先把CadQuery建模函数写好。这个函数接收板的长、宽、厚度、圆角半径、孔径、孔数量等参数返回一个完整的实体模型import cadquery as cq def create_plate(length300, width200, thickness5, corner_radius10, hole_diameter8, hole_count4, hole_spacing50): # 创建基础板长度、宽度、厚度 plate ( cq.Workplane(XY) .box(length, width, thickness) ) # 在顶面上倒角先选中顶面沿边倒角 if corner_radius 0: plate plate.edges(|Z).fillet(corner_radius) # 在顶面中心创建孔 plate plate.faces(Z).workplane() for i in range(hole_count): # 按行列排布孔位第一个孔在中心偏移位置 col i % 2 row i // 2 x_pos (col - 0.5) * hole_spacing y_pos (row - 0.5) * hole_spacing plate plate.hole(hole_diameter) return plate这个函数的价值在于它把一个CAD模型的所有可变点都暴露成了参数。接下来我们要做的是让大模型把自然语言转成这样一组参数。我用的提示词模板大概是你是CAD参数提取助手。请从以下需求描述中提取参数输出JSON格式。 可提取参数包括length(长), width(宽), thickness(厚), corner_radius(圆角半径), hole_diameter(孔径), hole_count(孔数), hole_spacing(孔间距)。 描述做一个300乘200的板厚度5毫米四角R10圆角中间挖4个直径8的孔。 请只输出JSON不要额外解释。大模型会输出类似这样的JSON{ length: 300, width: 200, thickness: 5, corner_radius: 10, hole_diameter: 8, hole_count: 4, hole_spacing: 50 }然后你把JSON解出来直接调用前面的函数params {length: 300, width: 200, thickness: 5, corner_radius: 10, hole_diameter: 8, hole_count: 4, hole_spacing: 50} result create_plate(**params) cq.exporters.export(result, plate.step)不到一分钟一个能用于后续编辑和加工的STEP文件就出来了。3.3 2D图纸输出用ezdxf生成DXF直接进你的CAD工作流3D模型只是前半场多数加工和图纸审核还是靠2D。我们要把同一个零件生成DXF图纸用ezdxf画外轮廓、孔位和圆角。import ezdxf from ezdxf.enums import TextEntityAlignment def create_dxf(length, width, hole_diameter, hole_positions, output_pathplate.dxf): doc ezdxf.new(R2010) doc.units ezdxf.units.MM msp doc.modelspace() # 画外轮廓用矩形圆角逼近实际可用多段线构建 msp.add_lwpolyline( [(0, 0), (length, 0), (length, width), (0, width), (0, 0)], closeTrue ) # 画孔位 for (x, y) in hole_positions: msp.add_circle((x, y), radiushole_diameter / 2) # 添加尺寸标注简化版用文本代替 msp.add_text(f{length}mm, dxfattribs{height: 5}).set_placement( (length / 2, -10), alignTextEntityAlignment.MIDDLE_CENTER ) msp.add_text(f{width}mm, dxfattribs{height: 5}).set_placement( (-10, width / 2), alignTextEntityAlignment.MIDDLE_CENTER ) doc.saveas(output_path) print(f图纸已输出{output_path})这里我故意把圆角部分弱化因为DXF里的圆角要做成多段线加圆弧段代码会很长。实际生产里我建议你把DXF生成这块做成一个公用函数库把圆角、中心线、图框、标注样式一次性封装好后面不管生成什么零件都复用。3.4 实测结果目前这个方案的质量分界线在哪我拿上面这段流程做过一轮测试覆盖了20个常用零件描述包括带孔法兰板、L型支架、U型槽、角钢切断件。结果是这样描述里如果包含完整的尺寸、数量、位置信息生成成功率达到90%以上而且这些模型不需要人为修改就能导出加工。如果描述含糊比如只说“一个法兰四个孔孔距要均匀”模型会自己“猜”直径和孔距这种情况下大约四成尺寸会偏离预期。所以关键结论是Text-to-CAD当前最吃的是“需求描述质量”不是模型能力。你描述得越具体输出越可靠。4. 让text-to-cad进入你的日常图纸流程而不是停在Demo4.1 用ezdxf批量改图热词里Python批量对CAD修改的落地解法很多朋友搜“python批量对cad修改”就是因为每天要在几百张图纸里改标题栏、改孔径、改板材厚度。这种事情手工做会疯用脚本做却是顺手的事。ezdxf可以直接读取现有DXF文件遍历实体按规则修改再另存。我写一个非常通用的遍历修改框架import ezdxf def batch_modify_dxf(input_path, output_path, modify_func): doc ezdxf.readfile(input_path) msp doc.modelspace() for entity in msp: modify_func(entity) doc.saveas(output_path) def example_modifier(entity): # 把所有标注文本里的“8”改成“10” if entity.dxftype() TEXT: entity.dxf.text entity.dxf.text.replace(8, 10) batch_modify_dxf(原始图纸.dxf, 修改后图纸.dxf, example_modifier)配合上一节说的Text-to-CAD参数提取你完全可以做成一条链AI从需求描述里提取新参数脚本按新参数批量更新同类型图纸最后人工抽检。这也是我认为Text-to-CAD进入量产环境最现实的路径——它本身不是杀手锏但和批量脚本一结合立刻就能省出大量改图工时。4.2 与钣金、盘扣、电气插件生态怎么衔接热词里频繁看到“金林钣金CAD版”“盘扣CAD插件免费版”“电气CAD安装”说明大家手里都攒着一堆专业插件。我建议别把它们和Text-to-CAD对立起来而是各管一段。以钣金为例插件解决的是展开、折弯系数、扣除量这些工艺问题它需要你先把三维零件画出来再在工作区里执行展开命令。Text-to-CAD恰好可以帮你把“三维零件”这一步自动化。你只要描述“折弯边长度40板厚2内R3”系统生成模型后丢给钣金插件去做展开流程立刻顺了。盘扣脚手架同理立杆间距、横杆步距都是高度参数化的内容。与其在插件里一根一根放置构件不如先用Text-to-CAD按参数生成轴线网和节点坐标再导入盘扣插件自动生成三维架体。电气场景里柜内导轨、接线端子、桥架弯头也全是参数化部件文字驱动生成后再进电气CAD做原理接线效率远高于从零画。4.3 图纸合并、切地形这类流程操作的辅助思路“cad图纸合并”“cad切地形”“cad导入layout步骤详解”这几个词本质上不是“生成”问题而是“组织和转换”问题。Text-to-CAD当前阶段帮不上太大忙但脚本思路是一样的。合并图纸可以用ezdxf把多个DXF文件的内容复制进同一个文档按图层加前缀参数。切地形可以读取等高线DXF在Python里做裁剪运算把指定区域外的实体删掉。Layout导出则是把多张图纸批量设定到不同布局空间。这些事情用AI写代码比手工在CAD里点按钮要快得多。我把它们归为“Text-to-CAD”的周边基建——当你把图纸流程里的重复动作都脚本化之后自然会发现整个CAD工作流都被提效了。5. 常见问题与排查技巧我替你们踩过的坑5.1 尺寸和单位总不对其实是“图形单位”和“现实尺寸”混淆了这是我在整个实操过程中遇到最多的问题。一个零件描述里写“300乘200”如果你的模板或脚本里没有指定单位最终DXF里的300可能被当成“300英寸”导入CAD后一量好家伙7620毫米完全没法用。解决方式在所有提示词模板里强制带上单位描述要求模型输出参数时明确标注单位在ezdxf生成DXF时用doc.units ezdxf.units.MM把文件单位写死。这样无论下游软件怎么设置至少文件本身是毫米制不会再出现25.4倍的恐怖误差。5.2 描述太模糊AI只能“猜”一猜就偏我踩过最典型的一个坑是“做一个带四个孔的支架”。最后模型给了四个孔径一模一样的孔位置对称排布看起来很合理。但用户实际想要的是两个大孔两个小孔大孔用来过管线小孔用来固定。这个案例让我彻底明白AI默认世界是“对称且整齐”的但工程世界充满不对称。解决方式是用一套“描述八股”把需求说死主体形状加尺寸比如“L型支架长边120短边80厚度5”特征加位置尺寸比如“两个直径10的孔孔中心距边缘20左右居中”加工要求比如“外轮廓圆角R5不允许有尖角”出图要求比如“要显示中心线尺寸标注放两侧”这套模板我一直在用也会直接写进给AI的提示词里。把描述模板化的好处是AI输出的稳定性直线上升因为它不再需要“阅读理解”只需要“参数抽取”。5.3 格式兼容性DWG是闭源的别死磕很多人的工作流强迫症是“必须出DWG”但DWG格式是Autodesk私有格式开源库只能有限支持。我在生产里吃过这个亏用某轮子库改DWG改了200张图回来一检查有三张图层信息丢失当场头疼。我的做法是把中间格式统一成DXF或STEP最后一步再在企业内部的转换环境里统一转成DWG。DXF在几乎所有CAD软件里都能无损打开包括中望CAD、CAD看图王兼容性比DWG更省心。你们在“cad转pdf”“cad图纸合并”这些操作里也遇到类似问题的话优先问一句“能不能用DXF走中间流程”十有八九能少踩一半坑。5.4 环境问题与其折腾CAD安装卸载不如直接上轻量路径热词里有一大堆关于CAD安装的问题比如“安装cad一直出现c2005cpi错误”“cad如何彻底卸载不影响二次安装”“cad激活页面脚本发生错误”。这些我当年全遇到