text-to-cad:把工程文件、校验程序与 AI Agent 组织成一条可审计的 CAD 自动化链路

摘要:text-to-cad 将 CAD、机器人描述、切片、制造检查和本地查看器组织成可安装的 Agent Skills。本文拆解它如何以 STEP 和源码为工件、用确定性工具约束大模型,并分析企业接入时的权限、验证与交付边界。

自然语言驱动参数化机械零件建模的 text-to-cad 工程场景

大模型写一段建模脚本并不稀奇。困难在于:脚本能否稳定生成有效实体,尺寸是否满足需求,装配基准有没有漂移,机器人关节轴是否写反,切片配置是否来自目标打印机,以及生成文件该交给谁复核。工程软件团队通常不会只看一次演示里“看起来像”的模型,更重视结果能否复现、检查、交付和追责。

GitHub 项目 earthtojake/text-to-cad 给出了一种值得研究的实现。仓库当前对外名称是 CAD Skills,定位为面向 CAD、机器人与硬件设计 Agent 的技能库。它没有训练专用几何模型,也没有提供一个封闭式在线 CAD 服务;主要工作是把建模、检查、预览、零件检索、机器人描述、切片和制造交接写成一组可安装的 Agent Skills,并配套确定性脚本。

这一区别决定了项目的技术价值:自然语言负责表达意图和调度步骤,几何内核、解析器、切片器和验证器负责产生可检查的事实。文本生成仍有随机性,工程产物却被推入一套更严格的文件与工具链。对于准备在现有 CAD/CAE/CAM 环境中引入 Agent 的团队,这种“技能规范 + 本地工具 + 显式工件”的组合,比单纯追求提示词命中率更接近可落地的系统形态。

一、先看清项目边界

README 列出 11 个主要技能:CAD、CAD Viewer、step.parts、DXF、URDF、SRDF、SDF、SendCutSend、G-code、Bambu Labs 和实验性的 Implicit CAD。覆盖面看似很宽,实际可分成四条链路:

  1. 三维与二维几何:用 build123d/Python 生成 STEP 主工件,按需导出 STL、3MF、GLB;用 ezdxf 生成二维轮廓、模板、垫片和切割图。
  2. 机器人与仿真描述:生成 URDF 的物理结构、SRDF 的 MoveIt 规划语义、SDF/SDFormat 的模型与仿真世界。
  3. 制造准备与设备交接:检查 SendCutSend 上传文件;调用 OrcaSlicer、PrusaSlicer 或 CuraEngine 生成 FDM G-code;在严格确认条件下通过局域网向 Bambu Lab 打印机上传或启动任务。
  4. 检索与复核:在 step.parts 检索标准件 STEP;用本地 CAD Viewer 查看 STEP、网格、DXF、机器人描述和 G-code。

因此,仓库标题中的 CAD/CAE/CAM 需要按实现内容理解。CAD 能力最完整,包含参数化实体、装配、检查和多格式导出。CAE 侧集中在机器人运动学语义、仿真描述和 MoveIt/Gazebo 交接,并未提供有限元网格、材料本构、求解器运行或结果收敛判定。CAM 侧已有增材切片、激光/水刀上传预检和打印机交接,但没有铣削刀具库、工序规划、夹持分析、后处理器以及机床 NC 验证。若把它当作通用工业 CAE/CAM 平台,预期会明显偏高。

项目采用 MIT 许可证。README 标注 Python 3.11+,当前仓库开发与 CI 文件则使用 Python 3.12;cadpy 包的 pyproject.toml 也要求 Python 3.12 及以上。实际部署时应以安装版本内的依赖声明和技能文件为准,优先准备 Python 3.12,避免只看徽章配置环境。

text-to-cad 中 CAD、CAE 与 CAM Agent Skills 协作流程
text-to-cad 中 CAD、CAE 与 CAM Agent Skills 协作流程

二、技术主线:以 STEP 为主工件,以源码为设计意图

CAD Skill 的核心约束非常明确:STEP 是主要 CAD 工件,STL、3MF 和原生 GLB 是派生输出;有生成器时,Python 源码是修改入口。 新建零件通常编写定义 gen_step() 的 build123d 脚本,再由 scripts/step 生成 STEP。已有 STEP 且缺少生成器时,也允许直接导入和检查。

这一选择有三层意义。

第一,build123d 基于 Open Cascade,以 BREP 参数化建模为基础,能表达平面、曲面、实体、布尔运算、圆角、倒角、孔、放样、扫描和装配关系。STEP 保留边界表示和实体结构,适合继续进入常见机械 CAD 系统。若一开始只生成三角网格,后续尺寸测量、面选择、特征修改和制造交接都会受限。

第二,Python 脚本承载命名参数和构造意图。一个带孔法兰可以把外径、孔径、分度圆和孔数写成独立参数,Agent 修正需求时只需修改负责该约束的源代码。仓库明确反对直接编辑已生成工件,也不建议用文件大小或 Git 二进制差异判断几何变化。应比较源码、几何检查摘要、拓扑输出和快照。

第三,STEP 被设计成多个技能之间的契约。CAD Skill 负责实体,DXF Skill 可在同一生成器中投影真实平面轮廓,G-code Skill 要求先把 STEP 导出为 STL,再交给切片器;URDF/SDF 引用的网格若过期,应回到 CAD 源重新生成。工件所有权清晰后,Agent 不容易在不同环节偷偷复制一套尺寸公式。

仓库还提供 cadpy 共享运行包,依赖 build123dcadquery-ocp,负责 STEP/GLB 拓扑工件等能力。CAD 运行环境额外使用 Playwright 完成浏览器快照。开发依赖里还能看到 ezdxf、networkx、lxml、trimesh 和 pytest,分别服务于二维文件、图结构/XML、网格转换与测试。Viewer 使用 React、Three.js、Vite,并包含 cadjs 与 implicitjs 本地包。整体架构由 Python 几何与校验层、Node/浏览器可视化层、外部专业 CLI 三部分组成。

这里没有常驻的中央工作流引擎。技能文档负责约束 Agent 的决策,脚本负责执行可重复动作,文件系统保存过程状态,Viewer 提供人工观察面。好处是可以嵌入 Codex、Claude Code 等现有 Agent,也容易替换单个切片器或检查程序;代价是跨技能事务、并发任务、工件血缘和权限策略需要宿主 Agent 或企业平台补充。若一个步骤成功写出 STEP,后续切片却失败,仓库主要依靠显式路径与报告恢复,并没有数据库级回滚。

三、Skill 组织方式:把工程纪律写进 Agent 的执行协议

每个技能目录都以 SKILL.md 作为入口,说明触发条件、输入输出、默认假设、命令形态、必做检查、交接规则和禁止事项;复杂知识放在 references/,确定性操作放在 scripts/。这是一种渐进式上下文设计:Agent 先加载较短的技能总则,遇到装配定位、快照审查、切片后端或碰撞矩阵等问题时,再读取对应参考文件。

CAD Skill 的规定尤其具体。它要求先分类任务,整理自然语言 CAD brief,记录尺寸、单位、坐标约定、输出路径、假设和验证目标;装配里出现电机、舵机、轴承或连接器等可采购件时,应先调用 step.parts 查询,查询失败后才可采用注明尺寸包络的占位体;编码前定义参数、标签、预期包围盒和配合基准;生成后运行 refs/facts/planes/positioning 基线检查,再按需求执行 measure、align、frame 或 diff;只要主 STEP 有可见变化,还必须生成并审查快照。

这套约束把 Agent 常见的失误拆成可观测事件。比如圆孔数量不对,可由拓扑与尺寸检查发现;装配件沿错误轴移动,可由对齐和坐标框架检查发现;实体内部多出残留块,可能在等轴测快照中暴露。确定性检查和视觉检查互补,任何一项都不能单独证明模型正确。

技能间的责任边界也写得较严:

  • DXF 负责二维文档,要求毫米单位、1:1 模型空间、闭合切割轮廓和按意图分层;若图纸来自三维零件,应优先投影实体拓扑,减少公式重复。
  • URDF 负责 link、joint、limit、inertial、visual 与 collision,生成时进行 XML、树图、关节和资源引用校验。
  • SRDF 只负责 MoveIt 规划组、末端执行器、组状态、虚拟/被动关节与禁用碰撞对,且必须关联有效 URDF。
  • SDF 负责仿真模型、世界、传感器、灯光、物理参数和插件,默认建议 SDFormat 1.12,并把 gz sdf --check 视为可选的目标环境检查。
  • G-code 只接收网格并调用实际切片器,不接收 STEP、DXF、URDF 或 SDF,也不接触打印机。
  • Bambu Labs 只处理已验证 G-code 的局域网上传和启动,默认 dry-run,启动任务还需要显式执行与确认参数。

这些规则很适合工业团队借鉴:Agent 平台中的“工具描述”若只有一句功能介绍,很难形成稳定行为。高质量 Skill 更像轻量级作业指导书,其中包含路由条件、工件归属、失败处理、证据标准和危险操作门禁。

四、一次 CAD 请求的数据流与控制流

假设用户要求制作一个带安装孔和电机的支架,并希望打印样件。项目预期的执行过程大致如下。

1. 意图进入控制层。 Agent 把自然语言和参考图整理成 brief,识别尺寸、孔型、安装面、材料或壁厚假设,以及最终需要 STEP 还是打印件。缺失信息仅在配合、安全或合规关键时触发澄清,其余情况记录假设后继续。

2. 外购件进入数据层。 Agent 通过 step.parts API 用型号、别名、厂商和规格搜索电机。命中后下载标准件 STEP并校验 SHA-256;未命中则记录搜索证据,建立简化包络。这样可以防止 Agent 随手画一个与实物接口不符的电机块。

3. 生成设计源码。 Agent 编写 build123d Python,使用命名参数、封闭实体和语义标签。装配采用部件局部坐标系、命名配合基准、build123d joints 或显式 Location 变换;源文件保留支架和采购件之间的定位关系。

4. 几何内核产出工件。 scripts/step 调用 Python 生成器和 Open Cascade 相关能力,写出 STEP,并可附带 STL、3MF、GLB 或拓扑侧车文件。此处大模型提供代码,实体有效性由几何库承担。

5. 检查闭环。 scripts/inspect 输出实体数量、包围盒、平面、选择器引用和定位事实,再执行孔径、孔距、面间距离、装配对齐等目标检查。随后 scripts/snapshot 通过浏览器渲染 PNG/GIF。发现问题时,Agent修改最小责任代码段,重新生成并重复失败项。

6. 人机复核。 CAD Viewer 启动一个本地服务,用 dirfile 参数打开明确工件。Viewer 支持 STEP/STP、GLB、STL、3MF、G-code、DXF、URDF、SRDF、SDF 和隐式 CAD 文件。它是审查界面,不能替代尺寸、运动学或切片校验。

7. 制造分支。 打印场景先导出 STL。G-code Skill 发现本机切片后端,要求用户提供包含真实原生切片配置路径的 wrapper JSON,先展示 dry-run 命令,再执行切片,并检查温度命令、运动、挤出、XYZ 边界和未知指令。需要发往 Bambu 设备时,Bambu Skill 查询打印机状态、审查上传载荷,优先先上传后启动,并保留人工检查热床、耗材、喷嘴和现场安全的要求。

这条链路中的控制流由 Agent 驱动,数据流则围绕源码、STEP、网格、G-code、检查 JSON、快照和 Viewer URL 展开。每个阶段都留下中间证据,便于失败重跑,也方便工程师只审查高风险节点。

五、机器人、仿真与制造工作流的成熟度

机器人方向的拆分比较合理。URDF Skill 把工作定义为受约束的运动学建模,强调关节原点、link frame、轴方向、米制单位、网格缩放和惯量。SRDF Skill 明确要求规划组、TCP、默认姿态和禁用碰撞矩阵应依据 URDF 拓扑、MoveIt Setup Assistant、碰撞采样或用户数据,不能凭模型外观猜测。SDF Skill又单独处理 Gazebo/libsdformat 的世界、物理、传感器和插件语义。这避免了一个“大机器人 XML 技能”同时混淆物理结构、规划语义与仿真配置。

不过,这几类文件通过轻量校验,只能过滤结构性错误。URDF 能解析不等于关节轴符合实机;SRDF 能加载不等于碰撞矩阵安全;SDF 静态预览不执行插件,也无法证明传感器频率和动力学稳定。仓库文档也持续要求运行 RViz、robot_state_publisher、MoveIt、Gazebo 或 gz sdf --check 等目标消费者 smoke test,并如实报告缺失环境。

制造侧也体现了相同态度。SendCutSend Skill 会实时拉取官方 ordering guide、catalog JSON 和 specs JSON,再将材料 SKU、厚度、孔槽、折弯法兰、弯曲半径、服务与文件测量值逐项比较。缺少来源或单位含糊时,状态应标为“需要更多信息”,不能凭经验给出可生产结论。G-code Skill 不自造打印机 profile,要求绝对路径指向原生配置;Bambu Skill 将 dry-run、上传、启动、暂停和取消分开,并为启动/取消设置额外确认。对于会触发物理设备动作的 Agent,这种保守设计很必要。

实验性的 Implicit CAD 则走另一条路线:使用 .implicit.js/.mjs ES 模块声明 GLSL 有符号距离场,通过 CAD Viewer raymarch 渲染,可加入参数、动画、平滑布尔、晶格和 TPMS 场,并采样导出 GLB/STL/3MF。它适合复杂场、晶格和浏览器交互探索,但仓库明确建议常规机械设计优先采用 STEP。SDF 采样后的三角网格精度、薄壁保持、尺寸验证和下游可编辑性都需要额外评估。

六、部署与一个可重复的小实验

普通用户可执行:

1
npx skills install earthtojake/text-to-cad

仓库还提供 Codex 与 Claude Code 的原生插件安装方式。Codex 需要 0.142.0 或更高版本;旧版本可能静默跳过仓库根插件。安装后若技能没有出现,需要重启 Agent。生产使用应选择 main,开发则基于 develop。原因是 develop 用符号链接连接 skills/viewer/packages/ 中的共享源,main 会把生产所需内容展开为实体文件,以兼容不同安装器对符号链接的不一致处理。

团队评估时可选 README 的“100 × 60 × 20 mm 校准块,四个 8 mm 通孔,顶部外周 2 mm 倒角”作为最小实验:

  1. 使用 Python 3.12 创建虚拟环境并安装仓库开发依赖;Viewer 另行执行 npm --prefix viewer install
  2. 将技能链接到目标 Agent,工作目录放在独立实验目录。
  3. 连续运行同一提示多次,保留每次 Python 源、STEP、检查摘要与快照。
  4. 自动核验包围盒、实体数量、四个圆柱孔的直径/方向、倒角范围,并人工检查是否误给底边倒角。
  5. 修改一个尺寸,再观察 Agent 是否只调整相关参数,检查是否能发现变化,Viewer 是否能正确打开新工件。
  6. 若测试制造链,导出 STL,配置一份真实但隔离的切片 profile,只运行 dry-run 和静态 G-code 校验,不连接打印机。

评价指标应包含任务成功率、几何有效率、尺寸通过率、修复轮数、重复运行离散度、人工审查时间和错误逃逸率。仓库已有 10 个基准题,涵盖法兰、L 支架、阶梯轴、箱体、叉耳、叶轮、螺旋楼梯与简化行星齿轮,可作为起点;现有基准更多展示输出过程,尚不足以替代带标准答案、容差和失败分类的企业级评测集。

七、适用边界与工程风险

text-to-cad 当前最适合参数清晰的机械零件、夹具、支架、外壳、简化装配、二维切割件、机器人描述文件和 FDM 打样准备。需求能被离散成尺寸、特征、基准和文件契约时,Agent 容易借助脚本与检查器形成稳定闭环。

风险主要集中在五处:

  • 设计意图缺失:自然语言很少包含 GD&T、公差链、表面粗糙度、材料状态、紧固预载和寿命目标。默认壁厚或间隙只适合首轮建模。
  • 几何脆弱性:Open Cascade 布尔、圆角、薄壁和拓扑选择可能因参数变化失败;面/边编号也可能发生拓扑命名漂移。
  • 装配与空间推理:多零件基准、运动包络、线束、软体件和装配顺序仍高度依赖工程师判断。
  • 验证覆盖不足:包围盒、孔径和快照通过后,强度、疲劳、热、流体、振动、碰撞与制造变形仍未被证明。
  • 外部系统变化:step.parts、SendCutSend 数据源、切片器 CLI、打印机固件和局域网协议都可能变化,需要版本固定、兼容测试与权限隔离。

此外,Agent 会执行本地 Python、Node 和第三方 CLI,企业部署必须配套沙箱、依赖锁定、制品扫描、网络白名单、凭证管理和命令审计。打印机启动、文件上传以及任何未来的机床动作都应放在权限更低的执行器中,并保留人工门禁。

八、给工业软件团队的行动建议

第一,先挑一条窄链路,例如“参数化支架生成 + STEP 检查 + Viewer 复核”,不要一开始覆盖 PLM、仿真、报价和设备控制。用 30~100 个企业内部零件建立带公差的验收集,先测错误逃逸率。

第二,把工件契约写清楚。规定源码、主 CAD 格式、派生格式、坐标系、单位、命名、版本、检查报告和审批人。text-to-cad 的 STEP-first 与技能所有权可直接借鉴,但企业还应加入零件号、材料、修订版、需求 ID 和 PLM 元数据。

第三,将检查器视为产品核心。大模型可替换,几何事实提取、规则比较、目标软件 smoke test 与设备门禁应保持确定性。每条自动结论都要带输入文件、工具版本、测量值、阈值和时间戳。

第四,按风险分级自治。草图和概念件可自动生成;有配合关系的零件需要工程师审批;涉及安全系数、法规、昂贵材料和物理设备启动的任务应要求双重确认。Agent 的权限应随工件成熟度逐级开放。

第五,保留原有专业系统的权威地位。该项目适合作为工程自动化的编排与检查层,不能替代成熟 CAD 的详细设计能力、PLM 的配置管理、CAE 求解器的验证体系或 CAM 软件的机床知识。最现实的接入方式,是让 Agent 处理需求整理、脚本化建模、批量检查、格式交接和审查材料准备,把最终签字留给具备资质与现场信息的工程人员。

text-to-cad 最值得关注的部分,在于它把“生成后必须检查什么、下一步交给哪个专业工具、哪些动作必须停下来确认”写进了技能本身,模型复杂度反倒居于次要位置。工程 Agent 的可靠性很少来自更会聊天的模型,更多来自明确的工件边界、可重复的工具调用和不允许省略的验证闭环。这个仓库已经给出一套可运行的参考实现,也清楚暴露了工业部署仍需补齐的公差、求解、配置管理和责任体系。

核验来源

分享到