开发者经过数月迭代,实现了用 GPT-6 Astra 和 Opus 5.5 直接生成 LDraw 格式的乐高积木 CAD 模型,并封装为 Docker Web 应用。
给 AI Agent 一个模型创意,引导它、让它去构建,然后得到一个 LDraw LEGO© 模型。
构建完成后你会得到:
LDraw 语言的源代码。
多种视图:3D 查看器、3D 播放器、VR 交互(Meta Quest 3)、图片……
Blender 可编辑的 glTF 文件,.glb 格式,元信息作为 Blender 的自定义属性存储。
对话历史和 Agent 的思考过程。
请看视频:

Agent 用于寻找合适零件和示例模型的工具利用了 jev-rerank(我也是作者)。这是一个语义搜索工具,带有重新排序功能,由 TypeSafe 的 Jev System One AI 模型提供支持。
如果你有 TypeSafe API key(TYPESAFE_API_KEY),在 Web 应用的设置页面填入其值即可。
如果没有,重新排序搜索将不可用,Agent 会退而使用 FTS(全文搜索)作为备选方案,效果可能(大概)会更差。
需要 Git 和 Docker。
这个 Web 应用以 Docker 容器方式运行,构建 Docker 镜像需要两个同级的代码仓库:
ldraw-nova:当然是这个项目 😉
ldraw-nova-docker:提供 Docker 配置和 Web 应用。
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
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 代码
……比自己直接做数学强得多!
Agent 从生成模型的 Python 代码中学习
……比从模型本身学习效果更好(LDraw 的可恶几何,又是它……)
那么,剩下的唯一事情 🤔 就是创建一套基于 Python 的工具,包含所需的原语、动词、构建词汇表……让 Agent 通过示例学习,然后自己去做类似的事情。
这件事做起来非常困难,即使 vibe coding 也一样……直到 GPT-6 Astra 和 Claude Opus 5.5 出现…… vibe coding 成功了!🚀🚀🚀
ldraw-nova 提供了 Agent 设计真实 LDraw 零件模型所需的工具、示例和指令。
流程如下:
Agent 接收一个 prompt。
读取 instructions.md 及 LDraw 语言和 LEGO© 模型构建的相关文档。
规划如何构建模型:所需零件、要创建的子模型、美学设计……
迭代执行:
从模型/子模型渲染图像
检查渲染结果,调整定位、美学……然后回到渲染
……直到它认为模型完成,可以交付!
提供的工具帮助 Agent:
寻找合适的零件,以及可以此为基础的示例模型和子模型。
检测碰撞和间隙,以正确放置零件。
无头渲染,用于检查当前结果。
Agent 实际上并不是从放置零件开始的,除非是原型设计或通过修改已有的示例模型来学习的情况。
它生成模型的方式更像是:
从实验结果、文档和规划中收集所需信息。
构建一个或多个计划,完全描述模型和子模型的几何信息,例如 atlas-crane.plan.json
然后根据计划创建一个或多个生成器脚本,例如 generate.py
……执行后生成 LDraw 源文件(一种非常专业的 3D CAD 语言)
……例如 atlas-crane.mpd
总而言之,这个过程相当于:
Agent 创建一个生成器
……这个生成器产生 3D 模型
……用的是一种名为 LDraw 的汇编语言 🤯
可以说是一种编译器 🤓
flowchart TD
agent([agent]) -- produces --> plan[plan.json]
plan -- interpretation --> gen[generator.py]
gen -- execution --> model[model.mpd]
以下是提供给 Agent 的部分指南和参考资料,将其塑造为构建者:
作为首次发布,仍有许多工作需要完善:
VR on Meta Quest 3:模型操作存在许多问题,性能问题也比较明显。
适配低端 Agent:调整现有工具、文档和指令,以改善 Luna、Haiku 等低端模型的使用体验。
生成成本高昂:目前只有昂贵的高端模型才能生成大型且正确的模型。
提升效率:生成过程目前较慢。
添加和改善更多模型系列:
人像和动物:minifigs
Technic 模型:机械、引擎……
宇宙飞船:生成的模型效果不太好
从说明书构建模型:部分可用,如果页面说明书以图片形式提供效果更佳。
细粒度检查:用于检查子模型及其分步构建过程。
在此感谢:
LDView 的 Travis Cobbs(@tcobbs)及贡献者。
LeoCAD 的 Leonardo Zide(@leozide)及贡献者。
LDCad 和 Shadow Library,Roland Melkert。
ldraw.rs 的 Park Joon-Kyu(@segfault87)及贡献者。
pyldraw3 的 Harold Martin(@hbmartin)及贡献者。
……以及所有其他众多 LDraw 创作者!
NOTE:在这项工作中,我使用了来自许多来源的许多 LDraw 模型、库、工具、文档……
这里有非常多出色的人慷慨地贡献了自己的作品,有些甚至持续了几十年,将自己的心血无私地奉献给了公共领域和开源社区。
如果你认为自己应该被列入此致谢部分,请给我发邮件!
LEGO(R) 是乐高集团的商标,乐高集团不赞助、授权或认可本软件。