text-to-cad 一句话:把「自然语言描述 → 能直接开加工/打印的 CAD 文件」这件事,做成 Agent 的一条技能。你说一句「做个带 6 个定位孔的法兰盘」,它就在本地用 build123d 把模型建出来,导出 STEP / STL / 3MF / GLB,还能做可制造性检查(DFM/DfAM)、画工程图、切 G-code。它是给 Claude Code / Codex / Cursor / Gemini 这些 Agent 用的插件 + skill 集合,描述就五个字:「Give your agent CAD superpowers.」
一、它到底是啥:一个跑在 Agent 上的 CAD 技能包,不是模型
实查仓库坐标:earthtojake/text-to-cad,★16940 / fork 1748 / MIT / Python / ~294MB / 2026-10-05(我写这篇这天)还在推 / 36 open issues——相当活跃。它不是一个 3D 生成模型,而是一个编排层 + 技能矩阵:真正的 CAD 内核叫 cadgen(Python,走 uv 安装),底下是 build123d + Open CASCADE (OCP 7.9)。README 列了 11 个 skill,各司其职:
cad——自然语言/图片建改模型,主产物 STEP,可选导 STL / 3MF / GLB,并在 CAD Viewer 里预览;step.parts——查标准件(螺丝/轴承/电机/连接器)的现成 STEP;engineering-drawing——出带三视/隐藏线/标注/标题栏的工程图 PDF;dxf/urdf/srdf/sdf——2D 切图、机器人结构/规划/仿真文件;sendcutsend——传 SendCutSend 前先做文件检查;dfam-check——按工艺量测可打印性(壁厚/悬垂/支撑/摆放姿态);dfm——钣金/CNC/注塑可制造性审查(每条 finding 带量测证据+引用规则);gcode——用 OrcaSlicer 切出可打印 G-code。
安装方式很轻:把「Install text-to-cad from https://github.com/earthtojake/text-to-cad」丢给 Agent,它自己就把 skill + 本地 CAD Viewer 服务器(cadgen mcp)装好;没有插件机制的 Agent 就 npx skills add earthtojake/text-to-cad 装纯 skill。
二、机制:一个 cadgen 内核 + 无参装饰函数契约(代码证据)
读 skills/cad/SKILL.md 才看得到它的真实契约。整个 Agent 侧只认一个统一启动命令,靠 uv 的「一个安装 + 一个 warm build daemon」让服务器和每个 skill 命令共享同一份 CAD 内核,不重复冷启动:
cadgen = uvx --no-config --managed-python --python 3.13 --from cadgen==0.7.14 cadgen python = uvx --no-config --managed-python --python 3.13 --from cadgen==0.7.14 python # 首次运行下载内核 + 无头浏览器,之后复用;cadgen doctor 用来诊断内核加载
而「建一个零件」被定义成一个无参、带装饰器的普通 Python 函数,返回 build123d shape——「一个模型一个入口,脚本名和产物同名同根」。这是它能被自然语言驱动的关键:Agent 把一句需求翻译成一段 build123d 代码、按契约写好 @step(out=...),然后 python 模型.py 就出 STEP:
from cadgen import build123d as bd
from cadgen import step
WIDTH = 40.0
@step(out="../STEP/bracket.step")
def bracket():
body = bd.Box(WIDTH, 20, 6)
body.label = "bracket"
return body
# 跑:python bracket.py → 产出 STEP/bracket.step
要导 STL/3MF/GLB,是「给模型加一个 mesh 装饰器」或一次性跑 build 输入.step 输出。要量几何、验对错,就写一段原生 build123d 的几何断言,必要时用 cadgen.geometry。这套「代码即模型 + 装饰器声明产物 + 暖内核」就是它「自然语言→CAD 文件」的骨架。
三、本地实跑:build123d 真把 STEP/STL/GLB 三个文件吐出来了
我本机把「自然语言描述的一个零件」真的建成模型并导文件,验证这条链不是纸面话。用 uv 现装 build123d(自带 Open CASCADE),写一个 R30 法兰盘 + R5 中心通孔 + 6 个 R3 圆周定位孔,布尔相减,一次导出三种格式:
from build123d import *
import build123d as b, math
with BuildPart():
f = Cylinder(30,4).translate((0,0,-2)) - Cylinder(5,4).translate((0,0,-2))
for i in range(6):
a = math.radians(i*60)
f = f - Cylinder(3,4).translate((18*math.cos(a), 18*math.sin(a), -2))
print("faces:", len(f.faces()), "edges:", len(f.edges()), "solids:", len(f.solids()))
print("step->", b.export_step(f, "flange.step"))
print("stl ->", b.export_stl (f, "flange.stl"))
print("glb ->", b.export_gltf(f, "flange.glb"))
实跑输出(本机 Windows,build123d 0.13,纯 CPU,秒级):
build123d 0.13.0 faces: 10 edges: 24 solids: 1
export_step -> True
export_stl -> True
export_gltf -> True
flange.step 31460 B | head: ISO-10303-21;\nHEADER;\nFILE_DESCR...
flange.stl 202884 B | head: STL Exported by Open CASCADE Tec...
flange.glb 5698 B | head: {"accessors":[{"bufferView":0,...

三个产物各自是合法文件:STEP 头是 ISO-10303-21(ISO 10303-21 实体-实例编码,标准 STEP AP203/214 头),STL 头写着 STL Exported by Open CASCADE,GLB 头是 glTF 的 {"accessors":...} JSON。这就把「自然语言 → build123d → STEP/STL/GLB」这条主链,在本机实打实跑通了一遍。
四、依赖与硬件的诚实边界(以及那个 Windows 坑)
这套东西是本地跑的内核(不像 image-blaster 全甩云端),所以有真实依赖量:build123d 一装就拉 cadquery-ocp-novtk(Open CASCADE 绑定,~45MB)+ scipy + 一堆科学计算包。普通 CPU 完全够建模型和导文件,不需要独显——CAD 布尔是 CPU 算法。但有两个坑 README/源码里明写、只有看文档才避得开:
- Windows 11 Smart App Control 会挡内核:OCP 的 native wheel 是未签名的,Win11 默认的 Smart App Control 会把未签 native 代码一律拦掉,表现为每个
cadgen命令和import build123d都报ImportError: DLL load failed while importing OCP,事件查看器记 CodeIntegrity Event 3077。解法二选一:关掉 Smart App Control(关掉就开不回来,得重装系统才能再开),或整个丢进 WSL 跑。这个坑我没有在本机撞(我本机没开 Smart App Control),但新装的 Win11 用户大概率第一个就栽在这。 - 完整 Agent 工作流还要 cadgen:SKILL 里那些
read_scene/resolve/viewer 预览走的是cadgen(uv 现拉 ~0.7.x),我本次实跑的是 build123d 直出段(免 cadgen),完整的「Agent 自然语言建改 + CAD Viewer 预览」需再装 cadgen——本机已装 uv,可直接补。
五、横向对比 + multiCAD-MCP 这条延伸
- 对比纯 LLM「直接吐 CAD 文件」:大模型自己写不出可制造的精确实体,text-to-cad 是「LLM 写 build123d 代码 + 真 Open CASCADE 内核出实体」,精度和 DFM 检查都建立在真核上,不靠模型臆想。
- 对比 CadQuery / 手写 build123d:它多了 skill 矩阵(标准件库/工程图/机器人文件/G-code 切片)+ Agent 入口 + 本地 viewer,是「把 CadQuery 生态包成给 Agent 用」。
- 延伸 multiCAD-MCP(实查最贴的是
AnCode666/multiCAD-mcp,★127 / Apache-2.0,MCP server 走 COM 连 AutoCAD / ZWCAD / GstarCAD / BricsCAD):text-to-cad 在本地把模型建出来、导 STEP,再配 multiCAD-MCP 就能把结果推进商业 CAD 软件里继续精修——COM 接口是 Windows 上驱动 AutoCAD 老一套。注意两者是「不同软件栈」(一个是 build123d 纯代码核,一个是 COM 驱动商业 CAD),是流水线衔接关系,不是同源。
六、我的判断
text-to-cad 的定位很清楚:它是「给 Agent 装上 CAD 手」,不是替代你的 CAD 软件。真正值得学的是它的工程契约——「一个模型一个无参装饰函数、装饰器声明产物、所有命令共享一个 uv 暖内核」,让「自然语言→可制造文件」这步既精确又可被 LLM 稳定驱动。想上手门槛不在硬件(CPU 就够),而在把 Open CASCADE 内核在 Windows 上装干净(Smart App Control 是头号坑)。它和 multiCAD-MCP 的搭配思路也对:本地代码核出模型 + COM 把结果送进商业 CAD 精修,正好补上「从 AI 粗模到工程定稿」这一段。