去年有一阵子我集中处理一批法兰图纸,算了下时间账:每张图从读需求到画完标注,平均要花37分钟。当时我就在想,能不能把"要和工程师确认半天"的需求描述,直接丢给某个东西,让它先出个能用的底图?后来我真正上手试了text-to-cad这个方向之后,才发现这条路比我想象的成熟得多,也比我想象的坑多得多。这篇文章就是把这一圈实测、拆解和踩坑记录下来,给所有在做CAD、用CAD、想省事的同行一个参考。
它适合谁看?如果你在做机械设计、非标自动化、建筑深化,或者你是个技术型创业者,正在评估"自然语言生成图纸"到底能不能落地,这篇都值得你花十分钟。我会把它背后的原理、工具、动手路径和翻车案例一次性讲透。
1. "text-to-cad"到底解决了什么问题
1.1 图纸生产流程里长期被忽略的"翻译成本"
做过设计的人都知道,真正的CAD操作本身并不慢,慢的是需求确认和方案翻译。你拿到一个口头需求:"这里加个安装板,四个角开孔,中间要过线"——这句话对应的可能是二十多个尺寸约束、公差标注、图层设置。传统流程里,这个"需求语言"到"图纸语言"的转换,靠的是设计师的经验和反复沟通。等你不小心把孔距理解错了,图出了,加工那边一刀下去,几千块就没了。
text-to-cad想干掉的就是这个翻译环节。它不是让你"不用学CAD",而是把"需求描述"直接转成"可编辑的CAD文件",把那个37分钟缩短到几分钟。我见过很多同行一开始觉得这玩意儿是噱头,等真正看到它输出带参数约束的STEP文件时,态度基本都会转变。
1.2 它能生成什么,不能生成什么
我得先把边界说清楚,不然你抱着不切实际的期望去试,大概率会失望。
它能干的:
- 标准机械零件:法兰盘、轴套、支架、壳体、齿轮毛坯这类几何规则、参数明确的零件。
- 建筑的规则构件:门窗洞口、标准层平面、幕墙分格。
- 批量变体:同一族零件改几个参数生成一堆变体,这个场景是它的强项。
它目前干不了的:
- 复杂的自由曲面:汽车A面、异形建筑表皮这类需要雕塑感的造型。
- 需要大量工程判断的内容:比如根据载荷选轴承,根据工艺决定是否开退刀槽,它目前基本只能给出"看起来合理"的解。
- 强制符合贵司图层标准、命名规范、图框样式的完整工程图——它能给底图,但最后的图纸表达还是得人来收尾。
1.3 一个反直觉的真相:它比你想象的更依赖CAD基础
这里有个特别有意思的地方:越是熟练的老设计师,越能用好text-to-cad;反而是完全不懂CAD的新手,拿到生成结果会手足无措。因为它生成的不是"一张不能改的图片",而是"一个待完善的起点"。你看不懂图纸,就不知道它哪里画错了,哪里漏了约束。所以我一直跟人强调:text-to-cad是给设计师的放大器,不是替代品。
2. 核心原理拆解:大语言模型怎么才能"画出"CAD图纸
2.1 大模型不懂图纸,但它懂"图纸的生成规则"
这里要说个本质:大语言模型处理的是文本,而CAD文件本质是数学描述。一个是符号序列,一个是几何拓扑。这两个东西怎么连起来的?
答案是"参数化脚本"。流行的路线不是我让AI直接吐DWG二进制文件,而是让AI吐一段能生成CAD文件的代码或命令序列。比如:
- OpenSCAD脚本:用CSG(构造实体几何)描述模型,文本形态,AI天然能生成。
- CadQuery Python代码:把建模过程写成Python语句,AI对Python的理解已经很成熟。
- AutoCAD的命令脚本(.scr)或AutoLISP:直接操作AutoCAD,老用户一看就懂。
AI真正擅长的不是几何计算,而是"把自然语言映射到API调用"。你说"法兰盘外径100,内径50,六个均布孔",它能写出一段循环语句来生成这六个孔,这个映射能力恰好是它的看家本领。
2.2 三种主流实现路线:各有各的命门
我实测下来,现在市场上的text-to-cad产品基本走三条路。
第一条叫"代码生成、外部执行"。AI生成CadQuery/OpenSCAD代码,然后在本地运行,导出STEP/STL。这条路最简单、最透明、最可控,也是我目前最推荐新手入门的。它的命门在于代码一旦报错,你得会看代码、会调试。我碰到过一个模型把变量名写错了,整个零件生成出来缺了个孔,你不检查代码根本发现不了。
第二条叫"视觉定位、草图合成"。AI先根据描述生成一张"意图图",再用专门的视觉模型提取轮廓,最后把轮廓转成CAD草图并拉伸。这条路的优点是处理异形轮廓更自然,缺点是尺寸精度很难保证。AI"看"到的轮廓通常和真实尺寸有偏差,目前还做不到严格的公差级输出。
第三条叫"API编排、内核直调"。通过NXOpen、SolidWorks API、AutoCAD .NET API这类接口,让AI直接调用CAD内核生成特征。这条路效果最接近"真正的建模",但成本高、依赖具体CAD版本,而且一旦调用链出错,排查难度直线上升。
2.3 尺寸精度问题的本质:大模型不擅长算术,但擅长"走流程"
很多人在试用后吐槽"它生成的图尺寸不对",这其实是没理解模型的运作方式。大模型在预测下一个token的时候,对"100mm"这样的数字没有天然的量级感,它只是觉得"这里应该有个数字,大概像100"。解决办法有两个:一是把尺寸计算放在代码里(比如孔位置用圆周均布的数学公式算),不让AI直接输出坐标数值;二是在提示词里明确给出全部参数,让AI做的只是"抄写"参数,而不是"计算"参数。
我自己的经验是,当你把提示词写成"法兰盘,外径=100,内径=50,孔数=6,孔径=10"这种结构化格式,生成结果的精确度会高很多。你让它"画个合适的法兰盘",它就只能给你个"看起来合适"的东西。
3. 主流工具盘点与选型建议:从Text-to-CAD到AutoCADGPT
3.1 值得关注的开源与商业工具清单
我在这段时间里集中测了几个代表性的东西,简单排个序:
| 工具/项目 | 类型 | 输出格式 | 适用人群 | 实测感受 |
|---|---|---|---|---|
| Zoo Text-to-CAD | 商业Web服务 | STEP文件 | 机械设计师、产品工程师 | 生成速度快,对标准件表现稳定 |
| McMaster-Carr Text-to-CAD | 免费Web工具 | STEP文件 | 做非标选型的工程师 | 基于GPT-4,零件库场景下很好用 |
| CadQuery + LLM | 开源代码方案 | STEP/STL | 喜欢自己折腾的Python玩家 | 可控性最强,调试成本也最高 |
| OpenSCAD + LLM | 开源代码方案 | STL/其他 | 参数化建模爱好者 | 语法简单,适合入门了解原理 |
| AutoCADGPT(社区项目) | 开源插件/脚本 | DWG | 以AutoCAD为主力的人群 | 能直接在你现有环境里跑,最接地气 |
这里多说一句Zoo那个。它最打动我的不是生成速度,而是它生成的STEP文件可以直接导入Fusion 360等主流CAD,而且特征树是干净的,不是一堆乱七八糟的碎面。这一点对后续编辑特别关键。
3.2 按需求场景选型的决策逻辑
工具选型不能只看名气,得看你的使用场景。
如果你是机械设计师,主要画的是回转体、板类件、标准连接件,我建议直接用Zoo或McMaster-Carr,先跑通"文本→STEP→导入软件"这条路,把时间省下来。如果你是CAD管理员或者企业内部做提效工具的,我更推荐开源方案。你自己封装一个服务,让同事们用网页提交描述,后端调大模型生成CadQuery代码再执行,导出STEP,这样数据全在公司内部流转,不会有泄密风险。如果你天天泡在AutoCAD里画施工图、做深化,那AutoCADGPT这类能直接在DWG环境里生成实体的方案更对胃口。
3.3 我个人的选型结论
目前我没有把text-to-cad放进正式生产流程,但我已经把它用在"方案前期"和"报价草图"环节。以前客户要个概念图,我得正儿八经建个模,现在直接让AI生成,转成图片发过去,确认个大方向再细化。这一步省下的时间非常可观。生产级的图纸,我仍然坚持自己把关——不是因为AI不行,而是因为图纸是要担责任的。
4. 用pyautocad跑通最小闭环:从一句中文到一张法兰盘图纸
4.1 为什么要选这个方案做上手实验
如果你想亲手感受"文本→CAD"的完整链路,又不想被云端服务限制,我推荐一个特别适合入门的最小方案:大模型生成Python脚本,用pyautocad驱动AutoCAD画图。选它的理由有三个:
- AutoCAD是绝大多数工厂和设计院的标配,你不用额外装新软件。
- pyautocad是成熟的Python库,封装了ActiveX COM接口,语法对人的理解负担很小。
- 这个方案能让你清楚看到"文本→代码→CAD实体"每一步的产物,对理解text-to-cad的本质最有帮助。
所谓"最小闭环",就是我不追求一次生成完整复杂零件,而是用一个法兰盘作为测试对象,把流程里的每个环节都跑通。以后你换任何零件,流程都是一样的。
4.2 环境准备与核心代码
先说基础配置:
- 安装AutoCAD(2016以上版本即可,我用的2020)。
- 安装Python 3.8+,然后执行
pip install pyautocad。 - 确保AutoCAD能正常打开,pyautocad通过COM接口连接正在运行的AutoCAD实例,不需要额外开服务器。
下面是一段核心示例代码。这段代码的作用是:接收一个包含外径、内径、孔数等参数的法兰盘描述,然后自动在AutoCAD里画出中心线、外圆、内孔和均布螺栓孔。
import math from pyautocad import Autocad, APoint acad = Autocad(create_if_not_found=True) acad.app.Visible = True def draw_center_line(pt1, pt2, layer="中心线"): """画中心线:AXIS实体""" line = acad.model.AddLine(APoint(pt1[0], pt1[1]), APoint(pt2[0], pt2[1])) line.Layer = layer line.Linetype = "CENTER" line.lineweight = 25 return line def draw_circle(center, radius, layer="粗实线"): """画圆""" circle = acad.model.AddCircle(APoint(center[0], center[1]), radius) circle.Layer = layer return circle def draw_bolt_circles(center, PCD, bolt_count, bolt_dia): """按节圆直径(PCD)画均布螺栓孔""" r = PCD / 2 for i in range(bolt_count): angle = 2 * math.pi * i / bolt_count x = center[0] + r * math.cos(angle) y = center[1] + r * math.sin(angle) draw_circle((x, y), bolt_dia / 2, layer="粗实线") # 参数:法兰盘外径100,内径50,PCD=80,6个M10螺栓孔 params = { "outer_dia": 100, "inner_dia": 50, "pcd": 80, "bolt_count": 6, "bolt_dia": 10, "center": (0, 0) } center = params["center"] draw_center_line((center[0]-70, center[1]), (center[0]+70, center[1])) draw_center_line((center[0], center[1]-70), (center[0], center[1]+70)) draw_circle(center, params["outer_dia"]/2) draw_circle(center, params["inner_dia"]/2) draw_bolt_circles(center, params["pcd"], params["bolt_count"], params["bolt_dia"])跑完这段代码,你会看到AutoCAD里多了一张法兰盘的二维视图,中心线、外圆、内孔、螺栓孔都在,图层也已经分好了。这本身就是一次"从结构化文本到CAD图纸"的完整转换。
4.3 把自然语言变成结构化参数:提示词的关键
有了代码,剩下的核心问题就是怎么让大模型把你的口头描述变成上面这种结构化参数。我实测的一个稳定模版是这样写的:
你是一个AutoCAD参数化绘图助手。 根据以下需求,提取法兰盘的参数,严格输出JSON格式,不要输出其他内容: 需求:外径100毫米,内径50毫米,螺栓孔节圆直径80毫米,6个螺栓孔,孔径10毫米。 输出示例: { "outer_dia": 100, "inner_dia": 50, "pcd": 80, "bolt_count": 6, "bolt_dia": 10, "center": [0, 0] }这个模版有几个讲究:一是明确说了"只输出JSON",防止模型废话连篇;二是给了输出示例,模仿学习能让模型稳定输出;三是把单位统一成毫米,避免英制公制混用(后面我会专门讲这个坑)。
把模型输出的JSON喂给你的Python脚本,一个新的法兰盘就自动进图了。到这里,一个完整的"text到CAD"链路就跑通了:自然语言描述 → LLM提炼参数 → Python脚本 → AutoCAD图形。
4.4 跑通之后再提升:引入CadQuery生成三维实体
二维图跑通之后,你可以再往前一步:让模型生成CadQuery代码,在你的本地Python环境直接产出STEP三维模型。CadQuery的好处是代码即几何,一个Box、一个Cylinder、一个fillet都非常直观,特别适合让AI生成。下面是个很简单的例子:
import cadquery as cq # 底座 100x50x10 base = cq.Workplane("XY").box(100, 50, 10) # 中间立柱 R25 高40 post = cq.Workplane("XY").circle(25).extrude(40) # 组合 result = base.union(post) # 打通孔 result = result.faces(">Z").workhole(10) cq.exporters.export(result, "part.step")这种方案的优点是生成的是真正的三维实体,可以进任何主流CAM/CAE流程;缺点是调试依赖你的Python能力。我建议先把pyautocad方案跑通,再进阶到CadQuery。
5. 实测翻车现场与排查思路:命令失效、单位错乱、脚本报错
这部分我专门讲讲我实际踩过的坑。很多文章只给你看成功案例,但真实生产里,翻车才是常态。我把几个典型问题按"排查链路"展开,你能照着思路自己定位。
5.1 现象:AutoCAD里F命令用不了,生成的脚本一键倒圆角失败
有一天我让模型生成一段给矩形四个角倒圆角的脚本,模型给了F命令加R设置。我满心欢喜跑下去,结果AutoCAD命令行直接提示未知命令,F怎么按都没反应。我当时第一反应是"模型把命令名写错了",检查半天代码没问题。后来才排查出来,是系统的FILEDIA、CMDECHO这些系统变量被之前一个插件改掉了,而且当时激活的图层被锁定了,命令界面根本没接收到我那个回车。
正确的排查顺序应该是这样的:
- 先确认命令是否被外部程序屏蔽:输入
FILEDIA检查值,如果为0,很多对话框类命令会失效。 - 再查当前图层状态:用
-LAYER命令看当前层是否锁定/冻结。我之前因为图层锁定,所有编辑类命令全部静默失败。 - 然后查是否有同名命令被插件覆写:用
UNDEFINE相关的命令别名检查。 - 最后才怀疑代码本身。
这个坑对我的启发是:text-to-cad生成的命令脚本,默认假设CAD环境是"干净"的。但实际工地、设计院的CAD环境,长期被各种插件改得面目全非。所以在生产中使用AI生成脚本,第一步必须加一条"环境自检"逻辑——把关键系统变量恢复到基线值,再执行绘图命令。
5.2 现象:生成的法兰盘尺寸比要求的整整大了25.4倍
这个坑特别经典。我有一次要求"外径1英寸",模型可能在内部训练数据里见多了英制写法,直接给我生成的代码用了25.4这个数。本来想要的25.4mm外径,它画出了直径645mm的怪物。
根因是模型对"单位"这件事没有固有理解。它在文本里看到"1英寸",本能地在数字后面补了一个"25.4",但单位换算的上下文它没抓住。
排查思路:
- 第一步,检查代码里是否存在硬编码数值。AI特别喜欢把描述里的数字直接抄进代码,但如果换算因子没带上,尺寸就出错。
- 第二步,检查生成代码里的单位假设。OpenSCAD/CadQuery默认按毫米,但AI训练数据里大量混着英寸、英尺。
- 第三步,在提示词里强制声明单位,并且让AI输出单位字段。
我现在的习惯做法是,在提示词末尾加一句:"所有尺寸一律以毫米为单位,如果原文提到英寸,先转换为毫米再输出参数。"这一句话就能治掉八成单位错乱问题。
5.3 现象:运行生成的Python脚本时,直接弹"C++ Runtime Error"闪退
这个坑也很常见,特别是那些在本地装了多版本AutoCAD或绿色版CAD的人。有一次我跑一个调用了COM接口的脚本,AutoCAD直接闪退,弹窗提示C++运行库错误。我当时第一反应是脚本写崩了,仔细一看,其实是pyautocad去连的AutoCAD版本和我实际打开的不是同一个。机器上装了两版CAD,COM注册信息错乱,pyautocad默认连到了旧版或者损坏的实例上。
这类问题的排查链路参考:
- 先确认AutoCAD是否以管理员身份运行。COM调用在某些权限组合下会异常。
- 再确认Python进程的位数和CAD版本位数一致。如果你是64位Python去连32位CAD的COM接口,崩的概率极高。
- 然后检查机器上是否有多版本CAD。如果有,在注册表里清理多余COM注册项,或者干脆指定ProgID连接。
- 最后,把CAD命令行窗口开着,看脚本执行时CAD报什么错。很多COM错误不会弹到Python这边,但会在CAD命令行里留下痕迹。
因为热词里有"安装cad一直出现c++2005错误""cad如何彻底卸载不影响二次安装"这些高频问题,我多说一句:环境问题往往是最大变量。搞text-to-cad之前,先保证你的CAD本体安装干净、版本单一、能正常启动,否则后面排查成本会指数级上升。建议装完CAD后先用命令行跑一遍(vl-load-com),确认LISP/COM环境完整,再上pyautocad。
5.4 把"翻车"本身当成必备技能
说实话,现在我对text-to-cad的态度已经变成:不是看它能不能成功,而是看它失败时我能不能快速知道为什么。因为生成式工具的随机性,它一定会犯错。你的价值不在于让AI不出错,而在于让错误的代价变低。我的做法是:
- 脚本执行前,先做参数合法性校验(直径>0、孔数>=3等)。
- 执行完自动导出一个DWG快照,方便对比预期。
- 生成结果永远放在单独图层组里,和正式图分开,确认无误后再合并。
6. 给不同阶段从业者的上手路线与提示词建议
6.1 新手怎么入门:先建立"提示词→参数→实体"的闭环感
如果你是刚接触这块的CAD制图新人,别一上来就追求高大上的多模态生成。先用我上面说的方法,找一个最简单的矩形板或法兰盘,把流程跑通。目标不是画得漂亮,而是理解"文本和几何之间有一条代码的桥"。等你熟悉了这条桥的每一块木板——提示词怎么结构化、参数怎么提取、代码怎么执行——再去看Zoo那类产品,你会一眼看穿它们的实现逻辑。
我推荐新手的学习顺序:
- 学会手写CadQuery画一个带孔矩形板(半天)。
- 学会用大模型生成CadQuery代码(半天)。
- 学会在提示词里要求模型输出JSON参数,并接进自己的脚本(一天)。
- 尝试用不同描述方式测试同一零件,观察模型对同义句的理解差异(一天)。
- 把pyautocad方案用在AutoCAD日常画图上(随缘)。
6.2 熟练设计师怎么提高生产力:把重复劳动交给"提示词模板"
对每天要画大量相似零件的设计师,我建议整理一套自己的"提示词模板库"。比如:
- 模板一:回转体类。关键词包括外径、内径、长度、倒角、孔位、退刀槽。
- 模板二:钣金类。关键词包括板厚、折弯半径、展开方向、孔类型。
- 模板三:装配接口。关键词包括螺栓规格、孔距、配合公差。
模板的价值不是固定死,而是把你脑子里的设计习惯外化成参数结构,让AI替你抄写。我把用了三个月的法兰盘模板贴出来,你感受一下结构化的力道:
请根据以下参数绘制法兰盘并生成CadQuery代码: - 法兰类型:平焊法兰(板式) - 外径:D - 内径:d - 厚度:t - 螺栓孔节圆直径:PCD - 螺栓孔数量:n - 螺栓孔直径:bd - 单位:毫米 要求:所有尺寸参数使用变量,不得硬编码;倒角C1.5;生成代码后导出STEP。这套提示词里有几个关键设计:强制使用变量参数,方便后续批量改尺寸;明确倒角;要求导出STEP。这些全是我用过之后觉得最省事的细节。
6.3 从"生成图纸"到"生成设计":边界意识和模型选择
最后聊点更远的。text-to-cad目前还在"生成图纸"阶段,距离"生成设计"还有很长路。我自己判断,未来两三年里最落地的应用不是"给一句话生成一张图",而是"给一批约束条件生成一批候选方案"。比如"长宽高都不能超过500,承重300公斤,用钣金工艺",AI给你出三个结构方案,你再挑一个细化。这种模式会把设计师从"从零开始想"变成"从候选里挑"。
模型选择上我的建议是越具体越好。通用大模型能完成任务,但如果你在AutoCAD生态里,优先选微调过的模型或特定插件;如果你主要用CadQuery,可以试试找专门训练过CadQuery语法的开源模型。实测下来,专用模型在命令序列的合法性上确实比通用模型靠谱。
再说一句我对这个领域真实体会:text-to-cad不会让CAD消失,也不会让设计师失业。它消灭的是"重复劳动",放大的是"设计判断"。那些天天喊AI要取代设计师的人,多半没经历过图纸出问题导致车间停工的那种压力——那种压力下,你需要的不是省掉设计师,而是让设计师更快地试错、更快地产出好方案。