前阵子有朋友拿着一张零件照片问我:这种支架能不能直接用一句话生成出来?我第一反应是"你想多了",但转头一想,text-to-cad 这个方向确实已经从论文标题变成了可以上手跑的东西。从 2025 年开源社区出现 Text2CAD 这类项目开始,用自然语言描述一个机械零件、然后直接拿到 STEP 模型的路径,已经不再是科幻。这篇文章我就从自己的实际体验出发,聊聊这个方向到底怎么工作、哪些工具值得试、以及它离真正替代常规建模还有多远。
先说清楚一个最容易混淆的点:text-to-cad 不等于 text-to-3D。市面上很多"输入一句话生成三维模型"的工具,生成的是网格模型(mesh),拿来渲染、游戏、3D 打印看个外形还行,但到了机械加工、装配、工程图阶段就完全不够用。text-to-cad 的目标是直接生成参数化 CAD 模型,也就是带特征树、带约束、能改尺寸、能导出 STEP 的那种。这篇文章适合所有对 AI 辅助设计感兴趣的工程师、产品经理和创客,不管你是用 SolidWorks、Fusion 360 还是 Onshape,读完应该都能建立一套自己的判断标准。
1. 从"画图"到"描述":text-to-cad到底改变了什么
1.1 我为什么盯上这个方向
做机械设计的人都有这种体验:接到一个需求,脑子里其实已经有大概的形状了,但落地到建模软件里,还是要一个草图一个草图地画,一个特征一个特征地拉。尤其是那种"标准件改尺寸"的活儿——开孔位置挪一下、板厚加两毫米、倒角从 R1 变到 R2——重复劳动占了日常工作的大半。
text-to-cad 这个方向真正打动我的点是:它可以跳过"操作"这个中间层,直接让设计意图变成模型。你不需要记住某个特征命令在软件菜单的哪个位置,也不需要纠结草图的约束顺序,只需要把"我要什么"说清楚。对于一个有十年建模经验的人来说,这不是"不会画",而是"不想花时间画";对一个非机械背景的产品经理来说,这是第一次有能力把脑子里的想法变成一个能加工的真实零件。
1.2 一句话说清它的技术本质
如果只能给一句话,我会这样总结:text-to-cad 的本质是"用 LLM 生成一段可执行的 CAD 操作序列,再由建模内核把它变成带精确几何的实体模型"。
这里有两个关键词。第一是"可执行"。模型输出的不是一张图片,也不是一堆三角面片,而是一串结构化的建模指令,比如"画一个 100mm 乘 50mm 的矩形草图,拉伸 5mm,在四角打直径 10mm 的通孔"。这种指令可以被 OpenCASCADE 这类建模内核真正执行。第二是"精确"。因为执行的是参数化指令,最终模型的尺寸、位置、约束关系都是确定的,不是概率采样出来的近似形状。这一点决定了 text-to-cad 有可能进入工程流程,而不只是停留在概念展示。
2. 拆开引擎看原理:文本怎么变成参数化模型
2.1 核心链路:LLM + CAD操作序列 + 参数约束
我复现过几个开源框架之后,发现它们的架构虽然有差异,但核心链路基本一致,可以归纳成四步:
- 接收自然语言描述,拆解设计意图。这一步会提取出形状类型、关键尺寸、特征数量、位置关系等信息。
- 将设计意图映射为 CAD 操作序列,也就是"宏程序"。常见操作包括草图绘制、拉伸、旋转、倒角、布尔运算等。
- 把操作序列交给建模内核执行。内核负责实际的几何计算和约束求解。
- 导出标准格式文件,一般是 STEP,附带可视化渲染结果。
Text2CAD 这个开源项目的做法比较有代表性:它先构建了一个"文本-CAD 操作"的配对数据集,用真实 CAD 模型的特征树和对应的自然语言标注做监督,然后微调开源 LLM。推理时还用到了最近邻检索——先在库里找到和用户描述最相似的参考模型,把它作为少样本示例喂给模型,再让模型生成新的操作序列。这个"检索增强生成"的设计很聪明,相当于给 LLM 配了一本随时翻看的案例集,比让它凭空想象靠谱得多。
2.2 关键设计:为什么选STEP而不是网格
很多第一次接触这个方向的人会问:直接用现成的 text-to-3D 模型,输出 OBJ 或 STL 不行吗?为什么非要折腾 STEP?
答案要从制造端说起。STL 网格描述的是外形,它没有面与面之间的拓扑关系,更没有特征历史,工程师拿到一个网格模型之后几乎无法做进一步修改。你没法在网格上直接加一个螺纹孔,也没法把网格里的某个圆角改小。而 STEP 文件描述的是精确的边界表示(B-rep),包含完整的几何拓扑信息,可以直接进入 CAM 编程、有限元分析、装配干涉检查这些下游环节。
我自己的一个直观体验是:网格模型像一张照片,好看但改不了;STEP 模型像一份可编辑的 Word 文档,每个句子都能改。对一个面向制造的流程来说,后者才是真正能进入生产链路的格式。所以 text-to-cad 坚持走参数化+STEP 的路子,不是因为技术上排斥网格,而是因为它瞄准的本来就是工程场景。
2.3 让模型"会说CAD话":数据与微调
一个很现实的问题:LLM 训练时见过大量自然语言,但"ChatCAD 指令"这种方言它几乎没见过。怎么让模型学会这门方言?答案是数据。
Text2CAD 团队做的核心工作之一,就是把已有的 CAD 模型逐层拆解,将每个特征的操作参数与对应的文字描述对齐。比如一个零件特征树里记录了"extrude depth=10mm",他们就会配上"厚度为 10 毫米"这样的描述。这样成对的数据积累到一定规模,再用 LoRA 或全参数微调,模型才逐渐学会把自然语言翻译成操作参数。
这个环节有个容易被忽略的细节:CAD 操作是有严格顺序依赖的。先画草图再拉伸、先拉伸再打孔,顺序错了模型就生成不出来。所以训练数据里必须保留操作序列的上下文,而不是把每个特征当成独立样本。实际测试中我也发现,模型对"串行特征链"的处理能力,决定了它的最终成功率。
3. 主流方案横评:开源框架与商业产品的取舍
3.1 先看基准:Text2CAD开源项目能做什么
目前最容易上手复现的,还是 2025 年初开源的 Text2CAD 项目。它能处理的典型任务包括:带孔的法兰盘、L 型支架、轴类零件、齿轮坯体这类以拉伸、旋转、孔系、倒角为主的机械零件。输出格式是 STEP,同时能给出渲染图和质量评估指标。
它的框架里包含了训练和推理两条路径。如果你有 GPU,可以自己微调模型;如果只想体验效果,也可以直接调用云端 LLM API,走"检索+生成+执行"的完整链路。实测下来,对一个描述清晰的零件,生成成功率在五成到七成之间,主要取决于零件复杂度和提示词的规范程度。
3.2 商业产品:Zoo、Bernini这些在卷什么
商业产品的进度比开源项目更快,但方向上各有侧重。Zoo 这家公司(前身是 KittyCAD)推出了自己的 Text-to-CAD 产品,底层用了多个 AI 智能体协作的架构,强调生成结果的"无缺陷"——也就是生成出来的模型可以直接进入 CAD 环境继续编辑。它的实现思路是让不同智能体分别负责识别设计意图、规划特征顺序、检查几何合理性,相当于把一个大任务拆成了几个专业角色分工完成。
Autodesk 的 Project Bernini 是另一个值得关注的方向。它不完全走"文本生成操作序列"这条路,而是尝试用生成模型直接输出功能性设计结果,甚至能处理 2D 图纸和 3D 形状的双向转换。从目前的公开信息看,它更像一个探索性项目,离产品化还有距离,但方向证明了主流 CAD 厂家对 AI 生成建模的重视程度。
3.3 选型建议
| 维度 | 开源框架(代表:Text2CAD) | 商业方案(代表:Zoo) |
|---|---|---|
| 上手成本 | 需要配置 Python 环境和建模内核 | 注册即可体验 Web 端 |
| 可控性 | 模型可微调、流程可改 | 黑盒,无法干预内部逻辑 |
| 文件格式 | 标准 STEP,可离线执行 | 提供 API 和云端工作流 |
| 成本 | 自备算力和 API 费用 | 订阅制或按调用量计费 |
| 适合人群 | 研究者、二次开发者、技术爱好者 | 想快速看效果的企业团队 |
我的建议是:如果目的是理解原理、做实验、或者把生成能力嵌入自己的工具链,优先选开源框架,因为你能看到每一步发生了什么,出问题也知道从哪里修。如果目的是给团队快速搭建一个"自然语言出模型"的演示流程,商业 API 见效快得多。两个不冲突,可以先用商业方案验证场景,再决定要不要回到开源框架自建。
4. 实操复现:跑通一条text-to-cad的最小链路
4.1 环境准备
我以开源路线为例,说下最小环境怎么搭。需要准备的包括:
- Python 3.10 以上版本,建议单独建一个虚拟环境,避免依赖冲突。
- 建模内核依赖,通常是 OpenCASCADE 的 Python 绑定,用来执行生成的 CAD 操作序列。
- LLM 推理入口,可以是云端 API,也可以本地部署量化后的开源模型。本地部署的好处是不用担心请求体量,坏处是生成质量会受模型能力影响。
- 数据文件,包括检索用的参考模型库和少样本示例。
配置过程中最容易踩的坑是内核版本冲突。OpenCASCADE 的 Python 绑定如果版本太旧,某些新生成的操作指令会执行失败,而且报错信息不直观,经常是底层崩溃而不是 Python 异常。建议严格按项目文档锁定的版本安装,不要随意升级。
4.2 生成一个零件:命令与参数
跑通链路后的调用方式大致长这样。我先用一个简单的平板零件做测试:
from text2cad.generator import TextToCADGenerator generator = TextToCADGenerator( model_name="qwen2.5-cad-7b", retrieval_index="./cad_library" ) result = generator.generate( prompt="A rectangular plate, 120mm long, 80mm wide, 5mm thick, " "with four holes of 8mm diameter, each hole is 10mm " "from the nearest edge, fillet all edges with radius 2mm", output_format="step" ) result.save("plate.step") print(result.macro_sequence)我故意把提示词写得很具体——长度、宽度、厚度、孔径、孔边距、倒角半径全部明确。这是因为实测下来,模型对"在角落打四个孔"这种模糊描述很容易把孔位算偏,但只要你给出"距边 10mm"这个约束,生成结果就会稳定很多。
生成完成后,建议立即用免费查看器把 STEP 导入检查一遍,确认轮廓和尺寸。我习惯的做法是再写一个脚本自动读取 STEP 里的边界框和孔中心坐标,跟预期值比对,偏差超过 0.5mm 就重新生成。这一步虽然简单,但能避免把明显错误的模型直接发出去丢人。
4.3 实测效果与常见问题
我在测试过程中遇到的高频问题可以归纳成这几类:
- 倒角失败:提示词里写"所有边倒角 2mm",但模型选的边不符合几何约束,导致内核报错。解决办法是给倒角加上限定条件,比如"只对顶面的外边缘倒角"。
- 孔的位置整体偏移:这通常不是模型笨,而是提示词里没有明确基准。加上"以零件中心为基准对称分布"这类描述后明显改善。
- 生成成功但特征树混乱:比如模型先生成了两个拉伸体再做布尔合并,而不是直接在一个草图里画完。结果虽然一样,但后续编辑体验很差。这种情况可以把"请在一个特征中完成"写进提示词。
- 内核执行偶尔崩溃:目前没有特别好的根治办法,稳妥的做法是在脚本里加异常捕获,出错了就换一个随机种子重新生成。
5. 它的边界在哪里:我踩过的坑和识别到的硬限制
5.1 几何复杂度天花板
用了一段时间之后,我对这个技术的能力边界有了比较清醒的认识。现在的主流模型处理"10 到 30 步以内的串行特征序列"效果不错,但一旦遇到曲面扫掠、放样、多实体装配这类高阶操作,成功率就断崖式下降。
原因也很容易理解。LLM 本质上是按统计规律预测下一个 token,它没有真正的空间想象力。让它生成一个"外方内圆、带六条加强筋、筋上还要开减重槽"的零件,它需要同时维护的约束关系太多,序列一旦拉长,前面的参数错误会一路传导到后面,最终不是几何自相交就是干脆执行失败。
5.2 提示词里的隐藏学问
很多人第一次玩 text-to-cad 都会觉得"我话都说清楚了,它怎么还是生成不对"。实际上,自然语言描述和 CAD 操作之间隔着巨大的信息鸿沟。我总结出几条实测有效的提示词技巧:
- 把所有尺寸写全,包括单位。只写"一个支架"和写"一个 L 型支架,长 80mm、宽 60mm、高 30mm、板厚 3mm、底部两个直径为 6.5mm 的安装孔",生成效果天差地别。
- 用操作语言描述,而不是名词描述。"拉伸一个 60mm 乘 30mm 的矩形到 3mm 高度"比"做一个平板"更符合模型的训练数据分布。
- 一次性给足约束。不要指望模型自己推断"四个角上的孔离边应该一样远",你要亲口说"四个孔均匀分布在四角,孔心距相邻边 10mm"。
- 保持特征顺序符合常规建模思路。先主体、再细节、最后修饰,会让最终特征树更干净。
5.3 工程化落地的现实问题
技术之外,真正要落地还需要面对几个非技术问题。一个是"责任归属"——AI 生成的模型出了问题,是提示词作者负责还是模型提供方负责?企业内部不能没有这条规定。另一个是版本管理——提示词会改、模型会换、生成结果不可复现,工程上需要像管理代码一样管理"提示词到模型"的溯源链条。
还有一个经常被忽略的问题:生成模型的许可证和知识产权状态。开源框架本身没问题,但微调用的基础模型和训练数据如果包含商业软件生成的 CAD 特征,生成的模型能不能直接用于商业产品,需要仔细核查授权条款。
6. 从demo到生产力:哪些场景真正值得用
6.1 标准化零件库生成
目前落地价值最明确的场景,是行业标准零件和通用件的参数化生成。比如某种规格的传感器安装支架、标准的走线卡扣、钣金折弯件,这些零件的特点是结构成熟、参数固定、但规格型号繁多。过去每个型号都要建一个模型,现在只需要维护一套提示词模板,把尺寸参数留空填入即可。相当于用 text-to-cad 做了一台"模型自动售货机"。
6.2 概念设计与评审
在项目早期,方案评审的痛点往往不是精度,而是速度。设计师脑子里有三个方案,但每个都要花两三个小时建模才能拿到评审会上讨论。用 text-to-cad 的话,三个方案可能半小时就出来了,虽然细节不完整,但足以支持"布局合不合理、外形有没有竞争力"这种层级的讨论。
我个人的经验是:把 text-to-cad 的输出当作"高保真草图"来用,而不是当作成品。评审通过后,再由设计师在传统 CAD 环境里重新建模或精细调整。这比从零开始省一半时间,又没有把最终质量押在模型的随机性上。
6.3 教育场景与新人上手
这个方向的教学价值被我严重低估了。以前教新人建模,最头疼的是他们理解不了"操作顺序"这件事——为什么不能先打孔再画外轮廓。现在可以反着教:先让新人用自然语言描述一个零件,再展示模型生成的宏指令和特征树,让抽象的操作流程变成可视化的步骤清单。这种"先想明白,再学操作"的方式,对新人的空间想象力和建模思维培养很有帮助。
用 text-to-cad 作为辅助教学工具还有一个额外好处:它天然要求使用者把话说精确。一个能清晰描述"孔心距边 10mm、倒角 2mm、两孔间距 40mm"的学生,建模时也不会含糊。
我自己跑了几个月之后,最深的体会是:别把它当"自动设计机器人",而是当"一个用自然语言驱动的建模副驾"。它能帮你把大段常规操作变成一句话,能帮你快速试出多个方案,但最终决定设计质量的关键还是你脑子里的工程判断。现在最值得做的事情,就是把你自己常做的那几类零件整理成结构化的提示词库,这个积累越早开始越值钱。