上个月有个做机械零部件加工的朋友跟我抱怨,接了个小单子,对方只发来一段文字描述:“底板长100、宽80、厚5,四角倒圆角R10,中间开六角孔,间距25”,他对着屏幕画了半个小时。我当时就说:这种活,其实已经可以用text-to-cad来做初步落地了。所谓text-to-cad,简单讲就是把你对图纸的自然语言描述,交给AI去解析并生成CAD模型或图纸。它并不是一个空概念,而是两条非常明确的技术路径,今天我想用实战经验把这两条路讲透,并且给出一套你自己也能在电脑上跑通的最小流程。这套东西对机械加工、室内设计、建筑草图、电气布局这些经常要画重复图纸的领域特别有用,适合那些已经被CAD重复劳动折磨到想换行的工程师,也适合刚学CAD、想找新工具的初学者。
1. text-to-cad 到底是什么:两个技术路线的选择
1.1 端到端模型:现阶段更适合造玩具
所谓端到端,就是输入一段文字比如“一个咖啡杯”,模型直接输出一个三维网格或者点云文件。这类方案以OpenAI的Point-E、以及一系列基于CLIP的生成模型为代表,近几年发论文发得很热闹。你确实能在几秒钟内看到杯子形状的雏形,问题在于,这个“杯子”是艺术家眼里的杯子,不是机械设计师眼里的杯子——它没有壁厚、没有精确的底部圆角半径、没有标注中心孔的位置,更不要说公差要求。
工程图纸跟美术模型完全是两码事。CAD建模的核心价值是可度量、可修订、可下游加工。端到端生成的网格一旦落到加工环节,要么没法标注尺寸,要么转成STEP之后拓扑烂得一塌糊涂。所以目前它在游戏资产、概念设计、3D打印小摆件这些“不较真”的场景比较合适,在正经工业流程里只能当灵感草图用。换句话说,你让它生成“一台减速器”的精确装配图,现阶段就是天方夜谭。
1.2 脚本中间层:让 LLM 替你写 CAD 代码
第二条路线更有意思,不直接生成几何体,而是让大语言模型根据文字描述去写一段CAD软件能执行的脚本代码。比如AutoCAD的AutoLISP、中望CAD的Python API、FreeCAD的Python脚本,甚至直接生成DXF文件的纯Python代码,然后由CAD软件或代码库去执行这段脚本,最终得到一个精确、干净、可以继续编辑的图纸或模型。
打个比方,端到端模型像你直接找画家手绘草图,画家理解多少画多少,细节靠猜;脚本中间层则像你给一个精通CAD命令的实习生下达明确操作指令,实习生不是自己想象你画什么,而是去调用命令帮你画出来——实习生可能偶尔听错、偶尔写错命令,但我们能看见他到底执行了什么,错了还可以改命令,改完重新执行。
这个区别非常关键。脚本中间层生成的图纸是“真图纸”,里面的圆角是带R10参数的标准圆角,孔是带定位坐标的孔,图层、线型、颜色都遵循工程约定。而且因为脚本是可读的,任何人检查脚本就能知道这张图是怎么画出来的,改参数就可以改图型,可复用性极高。
1.3 为什么我选择脚本中间层
我一开始也试过端到端方案,折腾了几天就放弃了。原因很简单:客户要的不是“看起来像”,而是尺寸准确、能加工。端到端模型生成一个所谓的“底板”,我量来量去尺寸飘忽不定,横截面还经常破面,这电话我没法打。
脚本中间层则不同。哪怕大模型生成了代码,代码执行报错,我也能根据错误信息去修正;哪怕它偶尔把长度100写成了1000,我在校验阶段用程序检查一下实体边界就能抓出来。整个过程完全可控,就像带一个新手助理画图,你随时可以纠正他,而他永远不嫌累、不闹脾气、随叫随到。
所以我的结论很直接:如果你关心的是“生成一个能进生产链路的CAD图纸”,脚本中间层是当前唯一靠谱的地基。后面满篇讲的都是这条路的具体玩法。
2. 环境与选型:别再卡在安装和插件上了
我看后台关于cad下载、cad安装、cad插件、cad安装教程的热搜词每天都有人问,说实话,text-to-cad的第一步往往不是模型选得有多好,而是基础环境能不能跑起来。这里我先把输出格式搞清楚,再给你三套方案做对比,最后给出我最顺手的组合。
2.1 先搞清楚你要输出什么格式
做text-to-cad前,先想清楚产物要给谁用。
- DXF:Autodesk开放出来的图纸交换格式,几乎所有2D/3D CAD软件都能打开,纯文本化,适合程序生成。
- DWG:AutoCAD原生格式,闭源且版本混乱,直接生成难度高,通常需要借助AutoCAD或中望CAD做转换。
- 脚本文件:比如AutoLISP、Python文件,不是最终图纸,但可以在CAD软件里执行后生成实体模型。
我强烈建议个人项目从DXF入手。理由是DXF本质是一种结构化的文本文件,用Python生成完全不需要安装大型CAD软件,写一个脚本就能产出一个可用图纸,随后用你电脑上的CAD看图王、中望CAD或者AutoCAD打开都能识别。等流程跑通了,再考虑DWG兼容或脚本接入。
2.2 三套常用方案对比
市面上并不是只有一条路,我在三个方向上都做过测试,这里直接给个对比表方便你对号入座:
| 方案 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| AutoCAD + AutoLISP | 与AutoCAD原生命令无缝衔接,能直接生成DWG和DWF | AutoLISP语法怪异,且必须安装AutoCAD本体,授权成本高 | 公司已有AutoCAD,你只想给LLM提供一个新出口的场景 |
| FreeCAD + Python | 完全开源免费,Python API成熟,能生成带拓扑信息的模型 | 软件体量大,脚本对新手有一定学习曲线,曲面建模能力一般 | 需要生成STEP等三维实体,且不想掏钱的预算受限团队 |
| Python + ezdxf | 轻量,pip安装一个库就能写出DXF,可跑在服务器上 | 不依赖CAD也能出图,但有复杂三维建模需求时会吃力 | 自动化大批量生成2D图纸、做批量标注、做二次开发前的验证 |
2.3 我最终使用的环境清单
我平时最常用的组合是“Python + ezdxf + 一个支持工具调用的LLM”。Python负责调度,ezdxf负责生成DXF,LLM负责把用户描述翻译成ezdxf代码。有人问为什么不用AutoLISP?因为AutoLISP这段逻辑只活在AutoCAD进程里,不方便我自动化测试;而ezdxf只要能跑Python,在哪都能运行,出错了也能直接在终端看到堆栈,调试效率天差地别。
安装也非常简单,在一个干净环境里执行:
pip install ezdxf其他依赖比如OpenAI的SDK或者HuggingFace的Transformers,按你用的模型去安装。我在本地测试时也试过用开源模型跑,不过目前能用API或者本地跑量比较大的模型效果更好。
提示:如果你是在国内环境使用在线大模型API,请务必先确认服务商网络策略,不要使用任何不合规的代理方式访问外部模型。更稳妥的做法是使用国内厂商提供的合规API,或者直接在本地部署可商用开源模型。
3. 核心实操:用 LLM 把一段中文描述变成可编辑的 DXF 图纸
现在进入真正动手环节。我会带你完整过一遍从“用户文字描述”到“生成DXF文件”的最小流程。这个流程我第一次跑通大概花了两个小时,你照着走,应该更快。
3.1 第一步:准备LLM与代码运行环境
首先准备好Python环境,最好用虚拟环境隔离依赖:
python -m venv cad_env cad_env\Scripts\activate # Windows # 或者 macOS/Linux 用 source cad_env/bin/activate pip install ezdxf openai这里我以OpenAI SDK为例调用大模型,你换成其他任何一家提供OpenAI兼容接口的厂商都能套用。如果你用的本地模型,比如Qwen或DeepSeek,也可以使用对应接口。
3.2 第二步:写一个清晰的Prompt
很多人text-to-cad翻车,翻在prompt太随意上。你问LLM“帮我画个底板”,它给你生成的代码千奇百怪。后来我总结出一套稳定的提示词模板,核心是把“角色、输出格式、技术约束、用户描述”四件事交代清楚。
下面是我实测效果不错的一套中文模板:
你是CAD领域资深工程师,擅长使用ezdxf库编写Python脚本生成DXF图纸。 请根据用户的描述,生成一段完整的Python代码。 代码要求: 1. 使用ezdxf库,版本不低于1.1.0。 2. 坐标系采用世界坐标系,默认单位为毫米。 3. 实体必须添加到doc.modelspace(),最后用 doc.saveas("output.dxf") 保存。 4. 图形几何必须与用户描述里的参数严格一致,尺寸不能随意缩放。 5. 只输出代码,不要输出任何解释和备注,不要使用Markdown代码块。 用户描述:{在这里填入用户的原始文字}关键点在于第5条——“只输出代码,不输出解释”。为什么非要这么严格?因为后面我要把返回的文本直接保存成.py文件来执行,如果模型夹带markdown围栏或译文,exec起来就会报错。用了这个约束,代码提取成功率会大幅提升。
3.3 第三步:生成代码,执行并检查
下面是一个简化的调用示例,用来演示完整链路怎么串起来:
import openai client = openai.OpenAI(api_key="你的key") user_desc = "底板长100毫米、宽80毫米,四角倒圆角R10,中心位置开一个直径为20毫米的圆孔。" prompt = """你是CAD领域资深工程师,擅长使用ezdxf库编写Python脚本生成DXF图纸。 请根据用户的描述,生成一段完整的Python代码。 代码要求:... 用户描述:""" + user_desc response = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], temperature=0.1 ) code = response.choices[0].message.content with open("generated_cad.py", "w", encoding="utf-8") as f: f.write(code) import subprocess result = subprocess.run(["python", "generated_cad.py"], capture_output=True, text=True) print(result.stdout) print(result.stderr)跑通以后你会在当前目录得到一个output.dxf。如果代码报错,别急,把stderr里的错误信息直接塞回给LLM,让它修正后重新生成,这个“错误反馈迭代”是提高成功率的关键。
3.4 第四步:用中望CAD/AutoCAD打开验证
生成DXF后,我用中望CAD打开过,也用过AutoCAD和CAD看图王,都没有问题。打开后你要重点检查四样东西:尺寸数值是否与描述一致、圆角是否真的生成成功、圆孔中心位置对不对、图层结构是否干净。
如果你不想打开CAD软件,也可以直接用ezdxf写一段校验脚本,把模型空间里的实体数量、包围盒尺寸、图元类型都打印出来:
import ezdxf doc = ezdxf.readfile("output.dxf") msp = doc.modelspace() print("实体数量:", len(msp)) bounding = ezdxf.bbox.extents(msp) print("包围盒:", bounding) for e in msp: print(e.dxftype(), e.dxf.handle)看一眼包围盒,长宽方向与800x100是否吻合,心里就有底了。这一步我建议每次都做,别嫌麻烦。生成得多了,你会意识到这是整个流水线里最值得花功夫的保险环节。
4. 调优与避坑:为什么生成代码频频翻车,以及我怎么驯服它
跑了十几次之后你会发现,LLM写代码不是每次都能一次过。我统计过自己一个月的实验数据,在基础几何描述下,一次通过率大约在80%,但一旦涉及多个圆角、阵列、图层合并这些相对复杂的操作,一次通过率直接掉到50%以下。好消息是,利用错误反馈迭代,最终成功率能拉到95%以上。这里把最常见的坑和根治办法都摊开讲。
4.1 最常见的四类报错与根因
| 报错类型 | 常见表现 | 根本原因 |
|---|---|---|
| 单位不一致 | 生成的矩形边长是3.937,而不是100 | LLM混淆了英制/公制,或者默认库单位与客户单位不同 |
| 实体未进入模型空间 | 代码执行没报错,但打开图纸是空的 | 模型只建了doc,忘了add到modelspace |
| 圆角半径过大 | Radius is greater than line length | R值比边长还大,几何上根本倒不出来 |
| 版本兼容报错 | Invalid DXF version,或无法读入 | 生成代码里用了太旧的DXF版本,或没指定version |
这些坑都不是不可破解的,核心原因是LLM对“CAD领域专家”这个角色理解得还不够精确。你要喂它更具体的标准。比如在prompt里明确写“使用毫米单位,R10倒角的圆弧必须存在于四条边的内切位置”,模型翻车的概率就会降很多。
4.2 让LLM更懂CAD的三个技巧
我总结了三招,专门用来驯服大模型,让它从“一本正经胡说八道”变成“靠谱实习生”。
第一招,上下文注入。在prompt里附带一小段ezdxf官方用法示例,比如画矩形的样板。模型对语言模板的模仿能力极强,你给它一个正确的范例,它产出的代码在结构上会无限接近范例。
第二招,错误反馈闭环。代码跑挂后,把完整traceback文本再作为新的上下文拼到Prompt末尾,让LLM看到自己刚才写的代码和报错,它修正类问题的能力远超一遍生成的同期水平。我测过,这种闭环修正一次就能解决六成以上问题。
第三招,脚本约束前置。把“最后保存后必须执行audit检查”写在Prompt中。ezdxf有doc.audit()方法,会扫描内部结构一致性,哪怕只是轻微的问题也能自动修复标出。要求模型在代码结尾加上这个检查,能挡掉大量低级错误。
4.3 实测成功率的表现
我会按复杂程度把任务分成三档:单图形、多图形组合、带参数阵列。单图形比如“一个矩形底板加四个角孔”,带错误反馈后成功率基本在95%-100%;多图形组合比如“底板加四个凸台,凸台上再各开三个等距小孔”,一次成功率约70%,迭代2-3次后能到90%;带参数阵列比如要求按25mm间距排布6行5列出孔,迭代次数会更多,但最终也基本能通过。
这说明一个事实:目前text-to-cad的生产力,不在“一次生成完美”,而在“AI初稿+人工迭代+程序校验”这套闭环。谁把这套闭环做得越顺滑,谁的文字转图纸效率就越高。
5. 进阶玩法:将 text-to-cad 接入日常工作流
跑通最小流程只是开始,真正让这个技术产生价值的是把它接到现有工作流里。下面这几个点我都在实际用,分享给你。
5.1 批量生成参数化图纸
最常见的场景是批量生成规格系列图纸。比如电气柜底板,尺寸随型号变化,孔位随元器件布局变化,人工改图画半天。你完全可以把Excel表格里的参数读出来,一行数据拼一个描述文本,然后往LLM的prompt里批量塞,循环调用并保存成不同文件名的DXF。
我这里用了个最简单的循环:
import csv with open("params.csv", encoding="utf-8") as f: rows = list(csv.DictReader(f)) for row in rows: desc = f"底板长{row['length']}宽{row['width']}厚{row['thickness']},倒角R{row['corner_r']},按间距{row['hole_pitch']}均匀排布{row['hole_rows']}行{row['hole_cols']}列孔,孔直径{row['hole_diameter']}。" # 调用LLM生成代码并执行 # 保存为 output_{型号}.dxf这样做一天的产量比你手画一个月还多。而且因为程序可复现,设计变更时只要改一行Excel,重新跑一遍就得到整套更新后的图纸,这对工程管理来说是质变。
5.2 与现有cad插件、cad教程生态结合
另一个方向是给text-to-cad接上“图层规范”和“标注规范”。我看到热词里很多人在找盘扣cad插件、金林钣金cad版、电气cad安装这类垂直工具,其实它们背后都是让图纸更符合特定行业规范。你也可以让LLM在生成代码时强制设置图层策略,比如“标注放在Dim层,中心线放在Center层,轮廓放Main层”,然后再用ezdxf进一步整理。
我自己在做一个类似“豆腐块”的插件,输入一段工艺描述,自动生成带图框、带图层、带标注的DXF,然后用中望CAD批量打开审阅。整个过程没有人工手绘,只有人工审。这个配合度一旦跑起来,团队里最枯燥的那部分画图任务基本就消失了。
5.3 加校验层:文本到精确图纸的最后防线
校验层是我认为整个链路里最重要、也最容易被忽略的一环。文本转图纸出错是必然的,关键是如何在交付前揪出错误。我常用的校验规则有四条:
- 检查实体数量是否符合预期:比如要求4个孔,程序统计出模型空间里圆实体数量必须是4个。
- 检查包围盒尺寸是否落在描述容差范围内:长宽只能有小幅误差,不允许差10毫米以上。
- 检查是否有未闭合的Polyline:多段线不闭合会导致加工问题。
- 检查是否存在重叠实体:重叠会导致后续标注混乱。
这些规则都可以用ezdxf读取生成后的DXF自动执行,不需要打开CAD。把规则集合成一个validate_dxf()函数,不合格就触发重新生成或报给人工处理。这套层级的水平面更高,也决定了你是否敢把AI生成的图纸直接推给下游。
5.4 我踩过更多的坑,最后想说的
走了这条路快一年,我踩过最痛的坑有两件事。一是太信任AI一次成图,导致一批图纸里有几份尺寸标注不一致,后来返工了整整一个下午。从此我立下规矩:AI生成的图纸,没有经过自动校验和人工抽查,绝不发出去。二是试图样样都在Python里搞定,连三维曲面也想生成,结果发现ezdxf在三维曲面表达上很吃力。后来我调整了定位,把“文本转图纸”框定在二维工程图和简单三维棱柱体上,复杂曲面依然交给人去做,工具焦虑瞬间就解决了。
如果你决定上手text-to-cad,我建议从最简单的矩形底板加孔位这种任务开始,先跑通链路,再慢慢增加复杂性。不用担心AI抢你的图饭碗,目前它更像一个给你递工具、替你跑腿的画图实习生,而真正的工程判断力,还得靠你。最后再加一句,工具可以自动化,但该有的校验和审核一步都不能省——这句话,是我用一整个下午的返工换来的。