给 AI agent(代理)一个模型创意,引导它动手构建,就能得到一个 LDraw LEGO 模型。构建结束后会产出一套用 LDraw 语言写成的源代码,还有多种呈现方式:3D 查看器、3D 播放器、面向 Meta Quest 3 的 VR 交互,以及图片等。除此之外,还能拿到可在 Blender 中编辑的 glTF 文件,格式为 .glb,元信息存为 Blender 的自定义属性,以及聊天记录和 agent 的思考过程。
正文
给 AI agent 一个模型想法。引导它、让它去搭建,就能得到一个 LDraw LEGO© 模型。
搭建完成后你会得到:
- 它的源代码,用 LDraw 语言写成。
- 多种形式的成品:3D 查看器、3D 播放器、VR 互动(Meta Quest 3)、图片……
- Blender 可编辑的 glTF 文件,
.glb格式,元信息以 Blender Custom Properties 保存。 - 聊天记录和 agent 的思考过程。
- 还有更多 👌
有视频演示可以看。
安装
agent 用来寻找合适零件和示例模型的重要工具用到了 jev-rerank(我也是作者)。这是一个带重排序的语义搜索工具,由 TypeSafe 的 Jev System One AI 模型支撑。如果你有 TypeSafe API key(TYPESAFE_API_KEY),在 web 应用的 Settings 区域填入。没有的话,重排序搜索不会工作,agent 会退回 FTS(全文搜索)策略,可能(也许)得到更差的模型。
用 Docker 把 ldraw-nova 当作 web 应用运行。需要 Git 和 Docker。
这个 web 应用以 docker 方式运行,构建镜像需要两个并列的仓库:
- ldraw-nova:就是这一个 😉
- ldraw-nova-docker:提供 Docker 配置和 web 应用。
- 在同一 tag 下把两个仓库克隆到并列位置,它们才能配合工作:
git clone --branch v0.6.0 https://github.com/anteloc/ldraw-nova.git git clone --branch v0.6.0 https://github.com/anteloc/ldraw-nova-docker.git
- 构建 Docker 镜像。首次构建要花些时间,需要约 5 GB 磁盘空间:
cd ldraw-nova-docker docker compose build
- 启动应用:
docker compose up -d
- 用浏览器打开:
https://localhost:8443:Meta Quest 3 上的 VR 需要这个地址。证书是自签名的,第一次要接受浏览器警告。 http://localhost:8765:纯 HTTP,没有证书警告。自签名证书碍事时就用它,但 VR 在上面用不了。
同一网络里的其他设备可以用你电脑的 IP 代替 localhost 访问,比如从 Quest 3 访问 https://192.168.1.20:8443。应用没有登录,所以只在信任的网络上运行。
停止:
docker compose down
为什么要做这些?
简单说:我这么做是为了得到能设计可搭建的实体物品的 agentic LLM!
发现 LDraw —— 一门汇编语言(双关 😜),既简单、底层,又能执行并生成 3D CAD 模型 —— 让我想到用 ChatGPT 和 Claude 做实验,试着让它们用 LDraw 写代码,就像它们用其他编程语言那样。
让我意外的是,尽管这门语言极其偏重数学(零件旋转、定位……),而 LLM 通常不擅长这个,agent 在初步测试中却做得相当好,后续项目也有不错结果,但始终不足以认为生成的模型是正确的:
- 初期研究:ldbuilder-ai
- 第一次尝试 agentic python 工具:py2bricks
- 第二次尝试:py4bricks
这三次尝试以及不少其他实验,让我得出以下结论:
💡 结论 1:对 agent 来说存在一条通往几何数学的最小阻力路径,即给 agent 提供生成 LDraw 源码的工具,就能绕开(邪恶的!)几何数学……因为它们在生成「能算出数学的 python 代码」上表现好得多,而不是自己做数学!
💡 结论 2:agent 从「产生模型的 python 代码」中学习,比从模型本身学习表现更好(又是 LDraw 邪恶的几何……)。
那么剩下的唯一一件事 🤔 就是做一个基于 python 的工具,带上必要的原语、动词、构造性词汇……这样 agent 就能通过示例学习,再自己做类似的事。
这真的很难做对,哪怕是 vibe coding……直到 GPT-6 Astra 和 Claude Opus 5.5 出现……然后 vibe code 成功了!🚀🚀🚀
工作原理
ldraw-nova 提供 agent 用真实 LDraw 零件设计模型所需的工具、示例和指令。
流程如下:
- agent 接收一个 prompt。
- 阅读 instructions.md 以及与 LDraw 语言、LEGO© 模型搭建相关的文档。
- 规划怎么搭建:需要哪些零件、要创建哪些子模型、美观等。
- 迭代进行:从模型/子模型渲染图像 → 检查,调整定位和美观…… → 再回头渲染……直到它认为模型完成、可以交付。
提供的工具帮助 agent:
- 找到合适的零件。
- 还有可作为起点的示例模型和子模型。
- 碰撞和间隙检测,用于正确放置零件。
- 无头渲染,用于检查当前结果。
- 以及更多……
agent 实际上不会一开始就放零件,除非是比如做原型、或通过修改已有示例模型来学习。
它产出模型的方式更像是:
- 从实验结果、文档和规划中收集所需信息。
- 建立一个或多个 plan,完整描述模型和子模型,包括几何,比如 atlas-crane.plan.json。
- 有了 plan,它创建一或多个生成脚本,比如 generate.py,执行后产出 LDraw 源文件——一门非常专门化的 3D CAD 语言——比如 atlas-crane.mpd。
概括地说,就像是:一个 agent 创建一个生成器,生成一个 3D 模型,用的是一门叫 LDraw 的汇编语言 🤯,可以说是某种编译器 🤓
agent →(produces)plan.json →(interpretation)generator.py →(execution)model.mpd
agent 的信息来源
这些是交给 agent、让它成为搭建者的一些指南和参考资料。
开发
这是首个版本,还有不少地方需要完善:
- Meta Quest 3 上的 VR:模型处理有很多问题,还有性能问题。
- 适配低端 agent:调整现有工具、文档和指令,改善 Luna、Haiku 等低端模型的使用体验。
- 生成成本高:目前只有昂贵的高端模型能生成大型且正确的模型。
- 提升效率:生成过程目前较慢。
- 增加并改进更多模型家族:人仔等人物和动物;Technic 模型如机器、引擎……;飞船方面生成的模型不太好。
- 从说明书搭模型:部分可用,把整页说明书以图片形式给出效果更好。
- 细粒度检查:用于检查子模型及其逐步搭建过程。
贡献
COMING SOON
致谢
我要感谢:
- LDraw 社区
- LDView 的 Travis Cobbs(@tcobbs)及贡献者
- LeoCAD 的 Leonardo Zide(@leozide)及贡献者
- LDCad 和 Shadow Library 的 Roland Melkert
- ldraw.rs 的 Park Joon-Kyu(@segfault87)及贡献者
- pyldraw3 的 Harold Martin(@hbmartin)及贡献者
- 以及所有其他众多 LDraw 创作者!
注意:这项工作中我使用了很多来源的 LDraw 模型、库、工具和文档。有许多了不起的人慷慨地把最好的作品捐献给公共领域和开源社区,有的人这样做已经几十年。如果你认为自己应该出现在这一节,请给我发邮件!
商标
LEGO(R) 是 LEGO 集团公司的商标,该公司不赞助、授权或认可本软件。
评论
社区整体氛围是惊喜和好奇居多,作者把 LLM 接到乐高 CAD 的底层描述语言上,让模型直接生成可交互的三维模型,不少人觉得这是 LLM 走向真实制造的一块拼图。分歧主要在情感层面:一部分人认为 AI 侵入乐高这块纯粹靠想象的领地,把乐趣抽走了;另一部分人则把它当成通用的「让模型设计实体物件」的验证案例。
认为这是在剥夺乐高最纯粹的乐趣
- 有人直言看到 LLM 渗入乐高的纯想象世界会本能地不适(少数人)
- 更激烈的声音认为这类工具把什么都变得没意思了(少数人) > 行吧,什么好玩的东西都要被搞没。(@cyclopeanutopia)
把它视作让 LLM 设计实体物件的通用路径
- 有人最近用 FreeCAD 加 MCP 配合 Claude 做设计,三个零件——显示屏外壳、铝制热端转接件、笔与压力传感器支架——首次硬件版本就装配成功,只补充了零件编号和几处卡尺测量值(较多人)
- 相邻领域的经验是直接把 3MF 模型文件喂给 Claude 提改造需求,比如把纯压配改成内嵌螺栓螺母结构,比手工在 CAD 里调整快得多(较多人)
装配与空间干涉仍是模型的盲点
- 上述 FreeCAD 实践里最卡的地方不是造型而是装配顺序,有个零件需要穿过略窄的缝隙才能到位,模型没意识到,人也没意识到(较多人)
相关研究已有先例,约束零件集是有效手段
- 去年有一篇论文做的正是同一件事,让模型在给定零件集合的约束下「造工具」,当时用的是 Opus 4.5,换成更强的模型应该会更好(较多人)
期待延伸到机器人、物理仿真与更大尺度建造
- 有人关注它在机器人上的用途,但认为要做得好得引入物理仿真(少数人)
- 有人正和孩子用物理建模做 FLL 项目,看到这条路线很受启发(少数人)
- 也有人顺势畅想下一步是让 AI 和机器人去盖真房子(少数人)
关心实际生成成本
- 有人追问生成示例模型时各家模型的 token 开销大概是多少(少数人)
有价值的补充
- Arxiv 论文 2512.15743 做过同类实验:给模型固定一套零件作为约束,要求它用现有零件「搭」出工具,与纯自由生成相比更能保证可建造性。
- 有人在 FreeCAD 流程中发现,只要提供在线查不到的零件型号加几处关键尺寸,模型两三轮改版后就能产出可直接上机床或打印的零件。
- 有人提议做反向工具:拍一张散装乐高零件堆的照片,自动生成整个收藏的零件目录——这条更像社区情绪的玩笑,但也点出了零件库存管理的真实痛点。