几周前,我受到最近使用LLM驱动Blender的启发,Blender是广泛用于动画的开源建模工具。鉴于LLM在生成代码方面非常出色,也许CAD建模的编程接口可以用于以类似的方式生成实体模型。我立刻想到了OpenSCAD,这是一个开发了15年多的开源编程CAD工具。代替使用点击软件来创建实体模型,用户编写软件脚本,然后将其渲染到实体CAD模型中。
LLM 擅长编写 OpenSCAD 为了测试它,我在 Cursor 中创建了一个简单的项目,制作了一个空白的 OpenSCAD 脚本(Cursor.scad),并添加了一些 Cursor 规则:
# Your rule content
|
然后,我开始使用 Cursor 创建实体模型。
第一次尝试并没有成功,但经过几次迭代(包括提供屏幕截图),我们创建了一个基本案例。
您还可以利用 OpenSCAD 库(有很多公共库)。在这里,我使用库来为法兰制作螺纹。
非常巧妙的是,LLM 可以运用其机械工程方面的常识:例如,Cursor 在管道上为 M6 螺栓创建了孔,并且正确地将直径设置得略大于 6 毫米,以便螺栓可以穿过。
bolt_hole_d = 6.5; // Diameter for M6 bolts |
当然,这种方法的一大优点是文件可编辑,并且 Cursor 默认会参数化设计的所有关键元素。
在上面的例子中,我要求它添加安装螺栓的孔,它确实做到了,然后我手动将孔的数量从 4 修改为 3。
// Flange parameter flange_OD = 50; // Outer diameter of the flange in mm flange_thickness = 10; // Thickness of the flange in mm pipe_size = 1/2; // NPT Pipe Size // Bolt hole parameters num_bolts = 3; bolt_hold_d = 6.5; // Diameter for M6 bolts bold_hole_circle = 35; // Diameter for the bolt circle |
为 LLM -> OpenSCAD -> STL 构建评估 这些初步结果给我留下了深刻的印象,但我想了解更多。例如,模型的推理能力是否有助于它思考创建零件的步骤?因此,我决定开发一个评估工具,以测试各种 LLM 通过 OpenSCAD 生成实体模型的性能。
创建 CAD 设计评估的挑战之一是,大多数任务都有多个正确答案。例如,“制作一个 10 毫米长的 M3 螺钉”这样的任务可能会有多个正确答案,因为该任务中没有定义螺钉头的长度、直径和样式。为了解决这个问题,我决定在评估中编写任务,使几何形状只有一个正确的解释。
例如,这是评估中的一项任务:
这是一块厚度为 3 毫米、带有两个孔的矩形板。 该板的尺寸为 18 毫米 x 32 毫米。 当向下看接骨板时,它有两个穿过它的孔。在接骨板的左下角,有一个中心点距离短边(18 mm)3 mm,距离长边(32 mm)3 mm的孔。这个洞的直径为2毫米。 板的左上角大致位置有一个直径为3mm的孔,其中心点距离短边(18mm边)8mm,距离长边(32mm边)6mm。 |
这种方法的好处是,我们可以将每个任务评定为“通过”或“失败”,并且能够自动化完成。我总共编写了 25 个 CAD 任务,难度从单个操作(“一根 50 毫米长、外径 10 毫米、壁厚 2 毫米的管道”)到 5 个连续操作不等。对于每个任务,我都使用 Autodesk Fusion 360 设计了一个参考 CAD 模型,然后导出了 STL 网格文件。
然后,我开始编写自动化评估管道(当然,我实际上并没有编写太多代码)。
eval 管道的工作原理如下:
- 对于每个任务和模型,eval 通过 API 将文本提示(以及系统提示)发送到 LLM。
- LLM 发回 openSCAD 代码。
- openSCAD 代码被渲染成 STL
- 自动根据参考 STL 检查生成的 STL
- 如果任务通过了一系列几何检查,则该任务“通过”。
- 然后将结果输出到仪表板中。
几何检查的工作原理如下:
- 使用迭代最近点 (ICP) 算法对生成的 STL 和参考 STL 进行对齐。
- 然后通过以下方式比较对齐的网格:
- 其数量(通过 = <2% 差异)
- 它们的边界框(通过 = <1 毫米)
- 零件间平均倒角距离(通道数 = <1 毫米)
- 豪斯多夫距离(95% 百分位数)(通过 = <1 毫米)
- 为了“通过”评估,必须通过所有几何检查。
评估流程有几个地方可以改进。特别是,误报很常见(估计约为 5%)。我还注意到,自动几何检查偶尔会捕捉到一些不正确的小特征(例如小半径圆角)。尽管如此,评估流程仍然足够好,可以看到有趣的结果,并比较不同 LLM 的性能。
如果您想了解有关评估的更多信息、使用它或查看任务,请查看GitHub repo。
最后,有很多方法可以改进评估。以下是我下一步想做的几件事:
- 任务更多,覆盖范围更广
- 优化系统提示,特别是通过添加OpenSCAD文档和代码片段
- 创建一个使用草图和图纸作为输入的eval变体
- 添加另一个变体,测试 LLM 向现有 OpenSCAD 脚本和 STL 添加操作的能力
- 评估 LLM 修复现有 STL / OpenSCAD 代码中错误的能力
下一步是什么? 我认为这些初步结果很有希望。Cursor(或其他编码代理)+ OpenSCAD 提供了一种自动化生成实体模型的解决方案。
然而,我认为这种方法不会在 CAD 设计生态系统中迅速普及。目前的设置非常笨重,我认为需要对产品进行实质性的改进才能使其更好地发挥作用。与 Cursor、Windsurf 和其他工具为代码生成开发了特定的用户体验 (UX) 和 LLM 工作流程类似,我认为开发适用于 CAD 生成的工作流程和用户体验 (UX) 也需要大量的工作。以下是我认为值得在这方面尝试的一些想法:
- 将控制台日志和视口图像从 OpenSCAD 引入 Cursor 以进行迭代改进和调试的工具。
- 用于突出显示(和测量)零件的某些面、线或方面的 UI,这些内容将被输入到 LLM 以获取更多上下文。
- 绘图或草图输入,以便用户可以快速直观地传达他们的想法。
- 带有滑块的 UI 可以调整参数,而无需编辑代码。
那么,文本转 CAD 什么时候才能成为机械工程师常用的工具呢?随着初创企业积极打造产品,以及前沿模型的快速改进,我估计大概需要 6-24 个月。
从中长期来看(2-10年),我预计大多数零件都会采用某种形式的GenCAD来创建。请允许我进行一些推测。
- 最初,GenCAD 将用于创建可与现有组件配合的零件。例如,您可能会说:“我需要一个适合这里的支架。” GenCAD 工具将创建一个与现有组件完美连接的支架。想要使用 FEA 分析三种变体吗?那就提出要求吧。我预计主流 CAD 软件(Autodesk、Solidworks、Onshape)会将这些功能直接添加到其产品套件中。
- 从长远来看,我认为 GenCAD 将覆盖 CAD 套件的方方面面:草图、配合、装配体、爆炸视图、CAM 刀具路径、渲染可视化和 CAE。想象一下,在设计评审中,你突出显示一个子组件,并说“用 M6 沉头螺钉替换这些铆钉,并重新生成 BOM”。模型、图纸和采购电子表格都会在几秒钟内更新。