用 LLM 进行实体建模
文本到CAD何时会成为机械工程师常用的工具?随着初创公司正在积极构建产品以及前沿模型的快速改进,我的猜测是大约6-24个月。
代码生成是LLMs的第一个突破性应用。一个AI代理会是什么样子的呢?对于机械工程来说,材料选择、面向制造的设计、计算机辅助制造(CAM)以及现成零件比较都是重要的功能。也许最重要的是,一个AI机械工程师将设计和改进CAD模型。机械工程师通常使用点对点软件(如Fusion 360、Solidworks和Onshape)来设计CAD。AI如何代替这些实体模型呢?
1、代码生成与CAD
一个有希望的方向是训练生成模型在数百万个现有的CAD文件上进行学习。这一方法正在被多个 团队积极研究,他们正在调查扩散和Transformer架构。特别是,我喜欢Autodesk Research 将参数化原始(点、曲线、形状、拉伸等)编码到Transformer架构中的方法。然而,据我所知,这些项目中的模型目前还不能接受任意输入命令并生成所需的形状。
几周前,我受到最近使用LLMs驱动Blender的启发(blender-mcp,一个广泛用于动画的开源建模工具)。鉴于LLMs在生成代码方面非常出色,或许可以使用CAD建模的程序接口以类似的方式生成实体模型。我立刻想到了OpenSCAD,这是一个已经开发了15多年的开源程序化CAD工具。用户不是使用点对点软件创建实体模型,而是编写软件脚本,然后将其渲染为实体CAD模型。
2、LLM 擅长编写 OpenSCAD
为了测试这一点,我在Cursor中创建了一个简单的项目,制作了一个空白的OpenSCAD脚本(Cursor.scad),并添加了一些Cursor规则:
# Your rule content
- We're creating files to model things in open scad.
- All the OpenScad files you create will be in Cursor.scad. I've set up this file such that if you edit it, it will automatically be read by OpenScad (it's the open file in the program).
- If I want to save what you've done, I'll tell you and you should create a new file and put it in the Saved folder.
- That's it! Overtime, if needed, we could create documentation about how to use OpenScad.
- If I'm asking you to create a new design, you should delete the current contents of cursor.scad and add the new design into it.
- When I make requests you should always first develop a step by step plan. Then tell me the step by step plan. And then I'll tell you to start modeling.
- When you're going through the step by step plans, only execute one step at a time.
- When you've executed a step, ask the user if its right.
然后,我开始使用Cursor创建实体模型。
这里有一个例子:“创建一个iPhone外壳”。

第一次尝试没有成功,但经过几次迭代(包括提供截图)后,我们创建了一个基本的外壳。
您还可以利用OpenSCAD库(有许多公共库)。在这里,我使用一个库来为法兰制作螺纹。

有一件事相当不错,就是LLM可以利用其对机械工程的一般知识。例如,上面,Cursor在管道上创建了M6螺栓的孔,并且正确地将直径稍大于6毫米,这样螺栓就可以通过。
bolt_hole_d = 6.5; // M6螺栓的直径
当然,这种方法的一个好处是文件是可编辑的,而Cursor默认对设计的关键元素进行参数化。在上面的例子中,我要求它添加安装螺栓的孔,它确实做了,然后我手动将孔的数量从4改为3。
// 法兰参数
flange_OD = 50; // 法兰外径,单位为毫米
flange_thickness = 10; // 法兰厚度,单位为毫米
pipe_size = 1/2; // NPT 管道尺寸
// 螺栓孔参数
num_bolts = 3;
bolt_hold_d = 6.5; // M6螺栓的直径
bold_hole_circle = 35; // 螺栓圆的直径
3、构建 LLM -> OpenSCAD -> STL 的评估
我对这些初步结果印象深刻,但我想要了解更多。例如,模型的推理能力是否帮助它思考创建零件的步骤?因此,我决定开发一个评估,以测试各种LLMs通过OpenSCAD生成实体模型的性能。
创建CAD设计评估的一个挑战是大多数任务都有许多正确的答案。例如,“做一个长10mm的M3螺丝”可能有多个正确的答案,因为任务中未定义长度、直径和头部样式。为了应对这一点,我决定在我的评估中编写任务,使得对几何形状只有一个正确的解释。
例如,这是评估中的一个任务:
这是一个3mm厚的矩形板,有两个孔。
1. 板的尺寸为18mm x 32mm。
2. 从下往上看,板上有两个钻通的孔。在板的左下角,有一个孔的中心点距离短边(18mm)3mm,距离长边(32mm)3mm。这个孔的直径为2mm。
3. 在板的左上角附近,有一个直径为3mm的孔。它的中心点距离短边(18mm边)8mm,距离长边(32mm边)6mm。
这种方法的好处是我们可以将每个任务评分通过或失败,并且可以自动化进行。我总共编写了25个CAD任务,难度从单个操作(“一个长50mm、外径10mm、壁厚2mm的管道”)到5个连续操作不等。对于每个任务,我使用Autodesk Fusion 360设计了一个参考CAD模型,然后导出了STL网格文件。
然后,我着手编程自动化评估流程(当然,我没有实际写很多代码)。
以下是评估流程的工作方式:
- 对于每个任务和模型,评估通过API将文本提示(连同系统提示)发送给LLM。
- LLM返回OpenSCAD代码。
- OpenSCAD代码被渲染为STL。
- 生成的STL自动与参考STL进行比较。
- 如果通过一系列几何检查,则任务“通过”。
- 结果输出到仪表板。

[注意:评估运行每个任务x模型组合的多个重复。并且评估是并行执行的,因为当运行完整评估时,可能会有1000多个任务。]
这里是几何检查的工作方式:
- 生成的STL和参考STL使用迭代最近点(ICP)算法对齐。
- 对齐后的网格通过以下方式进行比较:
- 它们的体积(通过 = <2% 差异)
- 它们的边界框(通过 = <1 毫米)
- 零件之间的平均倒角距离(通过 = <1 毫米)
- 哈斯多夫距离(第95百分位)(通过 = <1 毫米)
- 要“通过”评估,所有几何检查都必须通过。
评估流程有几个地方可以改进。特别是,假阴性很常见(估计:~5%)。我还注意到,偶尔一些小特征(比如小半径的圆角)不会被自动几何检查捕捉到。尽管如此,评估流程仍然足够好,可以看到有趣的结果并比较不同LLMs的性能。
如果您想了解更多关于评估的信息,使用它,或者查看任务,请查看 GitHub repo。
最后,还有许多方式可以改进评估。以下是我下一步想做的事情:
- 更多覆盖范围的任务
- 优化系统提示,特别是通过添加OpenSCAD文档和代码片段
- 创建一个使用草图和图纸作为输入的评估变体
- 添加另一个变体,测试LLM向现有OpenSCAD脚本和STL添加操作的能力
- 评估LLM修复现有STL / OpenSCAD代码错误的能力
4、前沿模型的快速改进
这是在2025年4月22日执行的评估结果。在评估运行中,15种不同的模型在25个任务上进行了测试,每个任务有2次重复。运行的所有结果和配置细节都可以在 这里 找到。
结果显示,LLMs最近才开始擅长OpenSCAD实体建模。

前三名的模型都是在我项目进行期间推出的,前七名的模型都是推理模型。这些模型相比其前代非推理模型有显著的性能提升。Sonnet 3.5 是最好的非推理模型,而 Sonnet 3.7 在评估中表现略好(对于 Sonnet 3.7,使用了2500个标记的预算进行思考)。
深入分析结果提供了有趣的见解。首先,LLMs在生成可以正确编译并能渲染为STL的OpenSCAD代码方面做得非常好。换句话说,只有少数失败来自于像OpenSCAD语法错误这样的问题。Anthropic的Sonnet模型在这方面表现最好。

此外,我们可以查看成功渲染STL的任务的成功率。o3-mini表现非常强劲,几乎与全尺寸o3模型相同,而Sonnet 3.7似乎落后于领先的Gemini 2.5 Pro和o1, o3, o4-mini, 和o3-mini模型。

最后,正如预期的那样,Gemini 2.5和o4-mini的运行成本要低得多,速度也稍微快一些,比全尺寸的o3和o1模型。


不出所料,有些任务容易完成,有些任务很难完成。

一般来说,操作越多的任务更具有挑战性。

任务2、任务3和任务6是最容易的任务,模型的正确率超过80%。以下是这些任务的示例成功情况。

只有2个任务的成功率为0%,任务11和任务15。以下是这两个任务的提示和代表性失败情况。

这些失败既有趣又完全不同。任务11是糟糕空间推理的典型例子。在图像中突出显示的具体失败中,模型将眼螺栓的杆垂直于环面(而不是在同一平面内)进行拉伸。任务15是另一种失败模式。在附带的图像中很难看到,但如果你仔细放大,可以看出生成的形状略微大于参考形状(这与生成的STL未能通过体积检查是一致的)。从查看该示例的OpenSCAD代码来看,失败似乎是由于使用了OpenSCAD的hull操作,这与loft操作并不完全相同。OpenSCAD没有内置的loft操作。
任务20-24都需要5个顺序操作,这些任务的平均成功率在3.3%到30%之间。以下是这些5个任务的提示,以及代表性成功和失败情况。
这些失败可能难以发现。失败图像中的绿色区域在生成的STL中应包含几何图形,但没有(参考点云以绿色绘制)。同样,红色区域在生成的STL中有几何图形,但不应该存在。

5、初创公司
在过去的几个月里,两家不同的初创公司推出了文本到CAD产品,AdamCad和Zoo.dev。Zoo.dev 提供了一个API来使用他们的文本到CAD模型。Zoo的API和文本到CAD产品的演示非常酷,看起来与我上面的Cursor -> OpenSCAD演示非常相似。
我把Zoo加入了评估流程,以与LLM -> OpenSCAD -> STL进行比较。Zoo.dev API直接返回STL,而不是生成OpenSCAD。Zoo表示他们使用专有的数据集和机器学习模型。令我惊讶的是,Zoo的API在与LLM生成STL(通过创建OpenSCAD)相比时表现并不特别好。尽管如此,我很期待看到Zoo.dev的发展,我将热切期待Zoo.dev未来模型的发布与LLM生成OpenSCAD的比较。
6、接下来是什么?
我认为这些初步结果很有希望。Cursor(或另一个编码代理)+ OpenSCAD 提供了一种以自动化方式生成实体模型的解决方案。
然而,我不认为这种方法即将迅速在CAD设计生态系统中普及。目前的设置严重笨拙,我认为需要大量的产品改进才能使这工作得更好。类似于Cursor、Windsurf和其他工具为代码生成开发特定的UX和LLM工作流一样,我认为需要大量工作来开发适合CAD生成的工作流和UX。以下是我认为值得在此方向上探索的一些想法:
- 从OpenSCAD获取控制台日志和视口图像,用于迭代改进和调试。
- 一个UI来突出显示(并测量)零件的某些面、线或方面,这些信息被提供给LLM以获得额外的上下文。
- 绘制或草图输入,让用户可以快速直观地传达他们的想法。
- 一个带有滑块调整参数的UI,而不是编辑代码。
此外,我预计进一步的模型进步将继续解锁这个应用。特别是,改善空间推理是一个活跃的研究领域。我想象着改进的空间推理可以极大地提高模型逐步设计零件的能力。
文本到CAD何时会成为机械工程师常用的工具?随着初创公司正在积极构建产品以及前沿模型的快速改进,我的猜测是大约6-24个月。
7、这将走向何方?
在中长期(2-10年),我想象大多数零件将使用某种GenCAD来创建。让我做些推测。
- 最初,GenCAD将用于创建符合现有装配的零件。例如,您可能会说:“我需要一个在这里的支架。” GenCAD工具将创建一个与现有装配组件完美结合的支架。想要分析三种变体的FEA吗?要求它们。我预计主流CAD套件(Autodesk、Solidworks、Onshape)会直接在其产品套件中添加这些功能。
- 更长远来看,我想象GenCAD将涉及CAD套件的各个方面:草图、配合、装配、爆炸视图、CAM刀具路径、渲染可视化和CAE。想象一下一个设计审查,您突出显示一个子装配并说“将这些铆钉换成M6沉头螺丝并重新生成BOM。” 模型、图纸和采购电子表格会在几秒钟内更新。
我们正在见证CAD开始退出手动输入的时代。就我而言,我对这一点感到非常兴奋。
原文链接:Teaching LLMs how to solid model
汇智网翻译整理,转载请标明出处