用 LLM 生成 LDraw 乐高 CAD 模型:Python 智能体实战指南

用 LLM 生成 LDraw 乐高 CAD 模型:Python 智能体实战
用 Python 智能体串联大语言模型,通过结构化提示词生成 LDraw 代码,可直接转化为可交互的乐高 CAD 模型。这套方案的核心在于将自然语言需求拆解为精确的 PART 放置指令,并通过 Docker 容器化封装多模型后端,实现从文本描述到 .ldr/.mpd 文件的端到端生成。
LDraw 是什么与智能体架构设计
LDraw 是一种类似于汇编语言的低级文本格式,专门用于描述乐高零件的组装过程。每个 .ldr 或 .mpd 文件本质上是一个指令列表,指定了零件编号、位置和旋转角度。当我第一次尝试让 ChatGPT 直接生成完整的大型模型时,往往因为上下文过长导致指令混乱。因此,我设计了一个基于 Python 的智能体工作流:先由高层规划器拆解用户需求为子组件列表,再由生成器逐个输出零件指令,最后由验证器检查坐标和冲突。

这种分层架构让我能更好地控制生成质量。我使用了 openai 或 anthropic 的官方 SDK 作为底层驱动,配合一个简单的状态机来管理生成过程。智能体不仅仅是调用 API,它还负责维护当前的“已生成零件池”,以便在生成新部件时能正确引用已有结构。
Python 智能体的核心代码实现
在实际操作中,我定义了一个基础的 LDrawAgent 类。它接收自然语言描述,并通过系统提示词约束 LLM 的输出格式。以下是我常用的核心生成逻辑:
import json
from openai import OpenAI
class LDrawAgent:
def __init__(self, provider="openai", api_key=None):
self.client = OpenAI(api_key=api_key)
self.system_prompt = """
You are an expert LDraw generator.
Output ONLY valid LDraw command lines.
Format: 1 <PART_ID> <X> <Y> <Z> <Q1> <Q2> <Q3> <Q4>
Do not include any markdown or explanation.
"""
def generate_part(self, description: str, context_parts: list) -> str:
user_input = f"Generate part for: {description}. Context: {context_parts}"
response = self.client.chat.completions.create(
model="gpt-4o", # 或 opus/claude 等
messages=[
{"role": "system", "content": self.system_prompt},
{"role": "user", "content": user_input}
],
temperature=0.1
)
return response.choices[0].message.content.strip()
这段代码的关键在于极低的温度(0.1)和严格的系统提示。LDraw 对格式极其敏感,任何多余的字符都会导致渲染软件报错。我发现在生成复杂模型时,引入“上下文记忆”至关重要——将之前生成的部分坐标传递给下一次调用,能让模型保持整体结构的一致性。
Docker 化与多模型支持
为了让这套工具更易于部署和测试,我将其封装为 Docker 应用。这不仅隔离了依赖,还允许用户选择不同的后端,如 OpenAI、Claude 或 OpenRouter。在 docker-compose.yml 中,我配置了环境变量以动态切换提供商。
对于开发者而言,这种封装意味着无需本地安装复杂的 Python 环境即可体验 LLM 生成 CAD 的功能。我在测试中发现,使用 Claude 3.5 Sonnet 在处理长序列坐标时表现尤为稳定,而 GPT-4 则在创意性结构分解上更具优势。通过抽象出统一的接口层,切换模型只需更改配置文件中的 PROVIDER 变量。
常见问题与优化策略
在实际生成过程中,最常见的错误是“悬浮零件”——即某些部件没有与主体结构相连。我的解决方案是在提示词中加入“连通性约束”,要求模型在生成每个新零件时,必须至少有一个坐标点与现有结构重合。另一个常见问题是零件编号错误,这可以通过在后处理阶段加入一个校验脚本,对照官方 LDraw 零件库进行正则匹配来解决。
此外,生成的 .mpd 文件通常很大,直接渲染可能导致软件卡顿。我建议在执行生成任务后,自动运行一个优化工具,合并重复的变换矩阵,并压缩不必要的空行。这些细节上的打磨,是保证最终 CAD 模型可用性的关键。
下一步探索
你可以尝试修改提示词模板,引入更复杂的约束条件,或者将生成的 LDraw 数据直接映射到 3D 打印路径。深入了解 LDraw 协议规范及 Python 异步编程优化,将帮助你构建更高效、更精准的自动化建模系统。
本文首发于 用 LLM 生成 LDraw 乐高 CAD 模型:Python 智能体实战指南 — https://lyxq.com.cn/zh/blog/llm-generate-ldraw-lego-cad-python-agent
转载或引用请注明出处,商业使用请联系作者获得授权。