text-to-cad全解析:从自然语言到可编辑CAD模型的生成之路

发布时间:2026/10/27 3:59:15
text-to-cad全解析:从自然语言到可编辑CAD模型的生成之路

前阵子有个做非标自动化的朋友拿着一份需求表来找我,上面列着"法兰盘、四个均布安装孔、外圈倒角"这类描述。聊到一半他问我:像这种标准件建模,有没有办法用一句话搞定?我说有,方向就是text-to-cad。所谓text-to-cad,就是把自然语言描述直接变成可编辑CAD模型的工具与技术的总称。你给它一句"直径60mm、高度20mm、带四个均布安装孔的圆柱底座",它就能生成一段程序化建模脚本,让CAD软件自动把模型搭出来。这个概念近两年在学术界火得很快,工业界跟进的速度也不慢,BricsCAD、Autodesk都在往这个方向布局。这篇文章我会从底层原理、主流模型、实测过程和能力边界四个角度,把这段时间折腾text-to-cad的经验完整梳理一遍,给想入坑的朋友一份能直接上手的参考。

1. 从"说人话"到"画出模型":text-to-cad到底在解决什么问题

1.1 传统CAD建模流程的效率瓶颈

干过机械设计或结构设计的人应该都有同感:真正留给创造性设计的时间,往往不到一天的三分之一。剩下的大部分时间去哪了?答案是画标准件、改参考图、重复拉特征。一个法兰底座,抛开前置的计算和选型,单说建模——打开软件、选基准面、画草图、约束尺寸、拉伸、开孔、倒角——动作不算复杂,但整套流程走下来起码三十分钟。如果客户中途改一版尺寸,又得回到草图里重新标注、重新约束,时间翻倍。

text-to-cad想改变的就是这个环节。它不是要替代CAD软件,而是充当一个人和建模内核之间的"翻译层":把人能理解的自然语言,翻译成CAD软件能执行的程序化指令。你可以把传统建模理解成手写代码,text-to-cad则相当于你用自然语言描述需求,让编译器帮你把代码写出来——建模者从"动手画"变成"提需求"。

1.2 为什么主流路线是"生成脚本"而不是"AI直接出图"

很多人第一次听到text-to-cad,会觉得它像那些文生图工具一样,让神经网络直接"画"出一个三维网格或者体素模型。但实际做工程的朋友都知道,这条路在CAD场景里根本走不通。原因在于CAD模型的本质不是"形状",而是参数化特征树。

一个正规的CAD模型,背后是一整套历史记录:先建哪个草图、用了什么约束、拉伸多深、倒角半径多少、孔是不是通孔、特征之间有没有父子关系。这些信息决定了模型改起来方不方便、能不能进CAE/CAM流程、能不能做装配约束。如果神经网络只输出一个光溜溜的网格模型,设计师拿过来根本没法改——就像拿到一张打印出来的雕塑照片,看着像,但摸不着、改不了。

所以现阶段真正可用的text-to-cad,几乎都是"LLM生成程序化建模脚本"的路线。让大语言模型学过大量建模代码之后,把你的自然语言描述转成一段CADScript、CadQuery、OpenSCAD之类的脚本,再由CAD内核执行。这样生成的模型天然保留参数化特征,尺寸改了约束还能跟着变,下游流程也不会断。

1.3 谁最适合吃这波红利

我实际接触下来,最受益的是三类人。第一类是机械、结构、非标自动化工程师,他们天天跟标准件、钣金件、支架底座打交道,这类零件结构高度套路化,最容易被一个"参数化模板生成器"替代掉重复劳动。第二类是3D打印玩家和创客,他们没有系统学过CAD,但能清楚说出自己想要的形状,配合开源的OpenSCAD、CadQuery,低保真快速出模型特别好用。第三类是设计教育场景——学生学建模的第一步往往卡在"不知道从哪里下手",text-to-cad能让他们先看到结果,再回头看特征树,理解效率高很多。

2. 拆开看:自然语言变成CAD模型的三条技术路线

2.1 路线一:文本→程序化建模脚本(当前绝对的主流)

这条路线最典型的代表是2024年MIT的工作Text2CAD。它的玩法清晰得像教科书:先用一个大规模CAD数据集把真实设计解析成CADScript程序序列,再拿这些"描述-代码"对去微调一个开源大模型(Text2CAD用的是Llama-3),让模型学会把自然语言指令对应到建模序列上。推理的时候,你输入一句英文描述,模型输出一段CADScript,把这脚本丢进AutoCAD或者BricsCAD执行,模型就自动画出来了。

论文里配套发布的CAD-AI数据集是关键。它基于Fusion 360的公开设计库,把每个零件的特性树解析成程序化指令集,规模大概十几万条。模型学的不是简单词汇映射,而是"看到描述后规划建模步骤"的思维链。举个简单的例子,你说"创建一个带四个通孔的矩形底座",模型脑子里生成的其实是这样的指令序列:

# 简化的CADScript示意,实际输出格式取决于目标软件 RECTANG 0,0 100,80 EXTRUDE 10 # 在顶面定位四个孔心 HOLECENTER 10,10 HOLECENTER 90,10 HOLECENTER 10,70 HOLECENTER 90,70 # 执行通孔开孔 DRILL 6, THROUGH_ALL

生成脚本的好处前面说了:可编辑、可参数化、可复用。这个路线目前的主要限制在于,生成质量严重依赖训练数据的覆盖度——常见的板类、轴类、壳体特征还行,一旦碰到自由曲面或者复杂造型,模型就容易"胡言乱语"。

2.2 路线二:端到端神经网络直接生成几何

这条路线更"AI味",代表工作是DeepCAD这一类。它把CAD建模过程看成有序的操作序列,比如"画圆→拉伸→再画矩形→布尔减运算",用自编码器把这些序列压缩成潜在向量,然后通过一个序列生成模型直接从文本解码出几何。

好处是端到端,训练好之后不需要调用外部CAD软件,模型自己就能输出一个可识别的CAD特征序列。坏处也很明显:生成结果的可控性差,模型不理解"为什么"要这样建模,只知道"统计上"这样建。你在提示词里稍微改一个尺寸,它可能整个输出结构就崩了。实际体验下来,DeepCAD更适合对已有设计做小修小改,比如把孔从4个变6个、把板厚改薄,从零生成复杂模型不太行。

2.3 路线三:检索增强加参数改写

还有一条相对务实的路:不要求模型凭空生成整个模型,而是让LLM先在标准件库、历史模型库里做检索,找出最匹配的候选,再根据自然语言描述对库里的参数做改写。这条路线特别适合螺栓、轴承、法兰这类高度标准化的零件,本质上属于"智能选型+参数定制",命中率比前两条路线高得多。

缺点是泛化能力弱,库里没有的东西它永远生成不出来。所以这条路线更像是一个企业内部的效率工具,而不是通用建模能力。

2.4 三条路线怎么选

技术路线代表工作输出形式可编辑性成熟度适合场景
文本→脚本Text2CADCADScript / CadQuery / OpenSCAD 代码强,保留特征树较高新零件设计、标准件变体
端到端几何DeepCAD特征操作序列弱,编辑困难中已有设计的小改款
检索+参数改写各厂商内部方案参数化模板 + 参数表强,前提是库里匹配中标准件选型

我的判断是,至少在接下来两三年内,路线一都是最值得投入的方向。原因很朴素:工程领域最看重的是"改得动",而脚本天然满足这个要求。路线二的模型生成出来再漂亮,改不了尺寸就等于废品。

3. 主流模型与工具实测:谁真能打,谁在画饼

3.1 MIT Text2CAD:当前最值得试的开源方案

先说结论:如果你只有时间试一个模型,首选Text2CAD。它是基于Llama-3微调的,HuggingFace上有开源权重,显卡有8GB显存就能跑量化版本。我实测的感受是:结构简单的机械零件,比如底座、支架、法兰、带孔的板,大约六七成的生成结果能用,直接进CAD执行没问题;但凡是设计稿里涉及自由曲面、复杂扫掠、多特征强耦合的,基本就等着翻车。

它输出的CADScript需要在AutoCAD或者BricsCAD里跑。如果你手头没有正版软件,也有替代方案——用CadQuery的Python环境来执行,导出的STEP或STL模型一样能进下游流程。别被"必须装AutoCAD"吓到,路子很多。

3.2 DeepCAD:老牌工作,适合轻度改款

DeepCAD是更早的经典工作,严格说属于2.2里"端到端"路线。它不开源交互界面,但论文代码能跑通。实话说,现在的模型能力已经明显比它强了,但我提它是因为它的思路很值得学——它是极少数能输出"可解析CAD特征序列"的端到端模型,很多后续工作都在它的序列表示基础上改进。如果你研究技术方案,它的代码值得一读;但如果你只想拿来生产,有点鸡肋。

3.3 工业软件厂商的AI布局:方向对,火候未到

BricsCAD最近几年在AI辅助上动作不小,它的AI助手可以理解一些自然语言命令,做特征调用和参数调整,体验上更像"语音操作CAD",离"一句话生成整个零件"还有距离。Autodesk的Project Bernini更接近text-to-cad的愿景,支持从文字和图像生成三维模型,但目前还在预览阶段,公开可用的范围非常有限。传统巨头SolidWorks这边,更多精力花在AI辅助草图识别和命令预测上,属于"提效"而非"替代建模"。

我个人的看法是:这些工业级动作是风向标,但现阶段别指望它们能端到端替代你的日常建模。真想尝鲜,开源模型反而更灵活,至少你能看到每一行脚本是怎么生成的。

3.4 评估指标怎么看

论文里常用一个指标叫CSAB(CAD script accuracy),做法是把模型生成的脚本解析成指令树,再和参考脚本逐节点比对,算匹配度。这个指标能反映模型"在多大程度上学会了套路化的建模流程",但说实话,它跟最终生产力不一定划等号。我更建议你在评估模型时看三个更实际的东西:第一,生成脚本能不能被CAD软件正常执行,语法错误率是多少;第二,生成模型的尺寸和描述给的数值对不对得上;第三,模型有没有保留合理的参数化特征,方便你后期修改。这三个都过了,CSAB多少分反而无所谓。

3.5 我给能力边界画个像

需求类型实测效果说明
简单实体零件(底座、支架、法兰)可用六到七成结果能直接进CAD
多特征交互的复杂零件翻车率高孔位、倒角、加强筋常互相冲突
自由曲面、复杂扫掠基本不行模型缺乏这类训练数据
装配体、多零件约束不支持目前只能单零件
精确数值尺寸不稳定提示词里写清楚±几个毫米还能控住

这个表不是我拍脑袋编的,是我实际跑了一周模型之后的状态。你可以把text-to-cad当成一个"很会画标准件的实习生",而不是"资深结构工程师"。

4. 我跑通一次"文字→模型"的完整过程

4.1 环境准备:从零到能跑的最小配置

我本地的配置是Python 3.10、PyTorch 2.1、一张12GB显存的显卡。如果你只有8GB,建议用4-bit量化加载模型,效果损失不大。整个准备流程分成四步:

  1. 创建Python虚拟环境,安装transformers、torch、accelerate这几个基础库。
  2. 从HuggingFace下载Text2CAD的微调权重,注意看模型说明里的基座版本,别和Llama-3的Base模型搞混。
  3. 安装CadQuery库,用于快速把生成的脚本转成可视化的STEP/STL模型;如果你有AutoCAD或BricsCAD,也可以直接用它们执行。
  4. 写一个Python推理脚本,加载模型、写提示词、把输出保存成CADScript文本文件。

这套配置跑下来,一次推理大约需要十几秒,速度完全可以接受。

4.2 提示词怎么写才靠谱

这一步是整个流程里我最想强调的。很多朋友第一次用的时候,上来就写"make a base with holes",结果模型输出的东西完全没法看。不是模型笨,是你的描述信息密度不够。模型没有读心术,它只能从你的句子里提取确定的指令。

我总结出一个好用的提示词公式:几何类型 + 关键尺寸 + 特征位置 + 特征参数 + 公差偏好。给你看一个正反对比:

反面示例:"做一个有孔的底座"。这句话缺了太多信息——底座是方的还是圆的?多高?孔多大?几个孔?通孔还是盲孔?模型只能瞎猜。

正面示例:"Create a rectangular base plate, width 100mm, depth 80mm, height 10mm, with four through holes of diameter 6mm at corners, each hole center is 10mm from the adjacent edges."

这句就把所有关键变量全部钉死了。我实测下来,这种高信息密度的提示词,生成成功率能翻一倍以上。

还有一个技巧:一次只生成一个特征组。别指望一句话把一个十特征的零件全描述完,模型大概率顾此失彼。正确做法是先描述主体形状,生成、执行、检查通过之后,再用第二句提示词加孔,第三句倒角,一步步叠加。

4.3 推理参数怎么调

推理阶段最影响结果的参数是温度和采样策略。我跑了十几轮,试出来一套比较稳的组合:temperature设为0.2,采用beam search并设置beam数量为5,比贪心采样稳定得多,也不会因为温度太高而胡编乱造。max_length要设大一点,我一般设到512,否则脚本容易在中途被截断,生成一个不完整的实体。

还有一个细节:模型有时会输出额外的解释文字,比如"Here is the CAD script:",这会污染渲染结果。我的处理办法是写一个后处理函数,只保留代码块里面的内容,其余全部滤掉。

4.4 在CadQuery里执行和校验

我因为手头没有AutoCAD授权,用的是CadQuery做执行环境。模型输出的CADScript语法跟CadQuery不完全一样怎么办?一个很实用的折中方案是:别死磕让模型输出CADScript,直接用提示词要求它输出CadQuery/Python代码。这样我可以用本地Python直接跑,快速看到STL预览。比如上面那个底座的提示词,生成的代码经过微调后长这样:

import cadquery as cq result = ( cq.Workplane("XY") .box(100, 80, 10) .faces(">Z") .workplane() .pushPoints([(10, 10), (90, 10), (10, 70), (90, 70)]) .hole(6.0) ) result.exportStep("base_plate.step")

我习惯把它存成脚本文件,反复跑、反复看,比每次走一遍CAD软件快得多。

4.5 出错之后怎么修

我实测下来,模型一次成功的概率大约只有一半,剩下的一半需要用迭代法修。语法层面的错误最好办——把报错信息复制回上下文,让模型"基于这个报错重新生成",它往往能自己改对。逻辑层面的错误要麻烦一些,比如孔位偏了、尺寸差了,这时候不要让它整体重做,而是直接追加修改指令,比如"move the four holes to coordinates (10,10), (90,10), (10,70), (90,70)"。

有一个坑我必须提一下:单位混乱。模型在多语言语料里训练过,如果提示词里没写单位,它可能默认英寸而不是毫米。我习惯在提示词最后加一句"All dimensions are in millimeters",能明显减少尺寸漂移。

4.6 实测中的意外情况

中文提示词的实际效果比英文差不少,这是训练数据决定的,模型语料里英文CAD数据占了绝大多数。我的做法是先写英文提示词,跑通之后再根据需要翻译成中文存档,而不是直接中文输入。

另一个意外是模型对"左右对称""四个角落"这类相对描述理解不稳定。最好直接把关键坐标写出来,不给模型自由发挥的空间。经验是:"描述得越像施工图,结果越像样;描述得越像口语,结果越抽象。"

最后,哪怕生成结果看起来挺好,也一定要在软件里转一圈视角检查破面、未闭合实体这些小毛病。AI生成的脚本本质上是统计推断,离"完美实体"还有距离,人工复查这步省不得。

5. 冷静评估:text-to-cad离"生产力工具"还有多远

5.1 当前最明显的短板

如果你在评估要不要把text-to-cad引入你的日常工作流,这四件事必须先想清楚。

第一,复杂装配体和多零件约束关系目前完全支持不了。你让它生成一个包含轴承座、端盖、密封圈互相约束的装配体,它直接懵。第二,工程语义缺失。公差、表面粗糙度、热处理要求、加工余量这些信息,模型既不会读也不会写。第三,格式割裂。Text2CAD输出CADScript,其他模型可能输出CadQuery或者OpenSCAD,互相之间没有统一的交换格式,迁移动辄重来。第四,训练数据以开源CAD库为主,行业内真正值钱的专用特征库、企业历史模型库,模型一个都没见过,所以你在航空叶片、精密模具这些领域基本指望不上。

5.2 比"生成整个模型"更有价值的用法

跑了一段时间之后,我发现text-to-cad最实用的用法反而不是"生成完整模型",而是下面这几件事。

标准件选型加参数化定制是最容易落地的场景。法兰、轴承座、安装底板这类高度套路化的零件,让模型根据参数生成设计稿,再人工复核,效率提升非常明显。设计早期的草模发散也很有用——你拿一句话换个参数跑一遍,几分钟就能看到十几种结构方案,角度完全不同,这种发散能力人工画很难比。

还有一类用法我特别推荐:给旧设计做变体。把历史模型转成脚本表述,再让模型根据新需求改参数,比从零开始生成靠谱得多。本质上是检索加改写,模型只需要理解"改什么",不需要理解"怎么建"。教育场景里,text-to-cad还能充当一个低门槛的建模教学工具,学生先看到结果,再往回研究特征树怎么做,学习曲线能平缓不少。

5.3 我给新手的最后几条建议

第一,把它当成"第一版草稿生成器",而不是"最终交付机器人"。我见过的所有成功案例,没有一个敢跳过人工审查直接交付。尺寸、单位、材料、加工约束,这些最后一定要靠人来把关。

第二,学会拆提示词。一个完整零件拆成三到五个小提示词逐步生成,远比一段话描述最终状态更稳定。这就像写代码,小函数好测,大模块难调。

第三,如果你不是专业CAD用户,完全不需要为了玩text-to-cad去装AutoCAD。LLM加OpenSCAD或者CadQuery的组合,零成本就能跑通全流程,生成的模型还能直接衔接3D打印。

我个人的体会是,text-to-cad真正值钱的不是"把一句话变成模型"这个魔术,而是它逼着你把脑子里模糊的需求,拆成"几何类型、关键尺寸、特征位置、特征参数"这些精确的表达。当你能把一句话讲清楚一个零件时,建模本身反而成了最简单的一步。如果你现在还拿不准要不要入坑,我的建议很简单:别等论文更新,直接找开源模型跑一个最简单的例子试试。哪怕只是让模型给你生成一个带孔的板子,也比看十篇综述来得直观。