
1. 从一句话到三维实体Text to CAD 到底解决了什么问题第一次听说“用自然语言直接生成 CAD 模型”的时候我的反应和大多数人一样——这不就是又一个套壳的 AI 玩具吗毕竟在传统 CAD 工作流里从需求到成品模型中间隔着草图绘制、尺寸约束、特征建模、装配校验一大堆环节怎么可能一句话就搞定。但真正上手把 Codex 和 OpenClaw 这套组合跑通之后我承认之前的判断太草率了。Text to CAD 不是要取代工程师它解决的是一个非常具体的痛点把重复性、模板化的建模工作从手工操作变成脚本生成让工程师把精力放在真正需要判断力的地方。先说清楚这套东西是什么。Text to CAD 的核心思路是你用自然语言描述一个零件的几何特征、尺寸参数和约束关系AI 模型负责把这句描述翻译成可执行的建模脚本通常是 Python 脚本调用 CadQuery、build123d 这类参数化建模库然后脚本在本地或云端执行输出 STEP、STL、DXF 等标准格式的 CAD 文件。整个过程不需要你打开任何图形界面不需要鼠标点来点去一条命令或者一段对话就能拿到模型文件。那 Codex 和 OpenClaw 在这里扮演什么角色Codex 是代码生成和理解能力比较强的 AI 编程助手它负责把自然语言“翻译”成建模脚本。OpenClaw 则是一个开源的 AI 代理框架它提供了工具调用、文件操作、命令执行这些能力让 AI 不只是“说”还能真正“做”——生成脚本、运行脚本、检查输出、根据报错自动修正。两者配合起来就形成了一个从描述到模型的完整闭环。这套方案适合谁我总结下来有三类人最值得花时间研究第一类是经常需要生成标准件、系列件模型的机械工程师比如螺栓、法兰、齿轮、支架这类有规律可循的零件用脚本生成比手工建模快十倍不止第二类是做参数化设计或批量出图的开发者需要把 CAD 模型生成集成到自己的自动化流程里第三类是想入门 CAD 二次开发但被 Python 建模库的 API 劝退的人用自然语言做跳板边用边学门槛低了很多。注意Text to CAD 目前的能力边界很明确——它擅长处理有明确参数和几何特征的规则零件对于复杂曲面、自由造型、装配体干涉检查这些场景还是得靠传统 CAD 软件。别指望一句话生成一个完整的汽车底盘。2. 环境搭建Codex 与 OpenClaw 的安装配置全流程2.1 基础依赖梳理与版本选择在动手之前先把依赖关系理清楚。这套方案的核心依赖链是Python 运行环境 → 参数化建模库CadQuery 或 build123d→ OpenClaw 代理框架 → Codex 模型接入。每一步都有版本兼容性的坑我踩过一遍之后把稳定组合记录下来。Python 版本建议用 3.10 或 3.11不要用 3.12 以上的版本。原因很简单CadQuery 和 build123d 这两个库对 Python 3.12 的支持还不完善OCCTOpen CASCADE Technology的 Python 绑定在 3.12 上编译经常出问题。我实测下来 3.11.9 是最稳的CadQuery 2.4 和 build123d 0.5 都能正常跑。Node.js 是 OpenClaw 的运行基础建议用 20.x LTS 版本。如果你之前装过其他版本建议用 nvm 或 fnm 做版本管理避免全局污染。Windows 用户特别注意OpenClaw 的某些工具调用依赖 Unix 风格的路径和命令在纯 Windows 环境下会有兼容性问题推荐用 WSL2 来跑体验会顺畅很多。依赖项推荐版本作用备注Python3.11.9运行建模脚本避免 3.12Node.js20.x LTSOpenClaw 运行时用版本管理器CadQuery2.4参数化建模库依赖 OCCTbuild123d0.5新一代建模库API 更友好OpenClaw最新稳定版AI 代理框架开源Codex 接入API 方式代码生成需配置密钥2.2 OpenClaw 的安装与初始化配置OpenClaw 的安装方式取决于你的操作系统。Linux 和 macOS 下直接用 npm 全局安装就行Windows 下建议在 WSL2 里操作。安装命令本身不复杂但配置环节有几个关键点需要注意。# 全局安装 OpenClaw npm install -g openclaw # 初始化配置目录 openclaw init # 检查安装状态 openclaw --version初始化完成后会在用户目录下生成一个.openclaw配置文件夹里面包含config.json和skills目录。config.json是核心配置文件需要填入模型接入信息、工具权限、工作目录等参数。这里有个容易忽略的点工作目录一定要设置成一个独立的、有读写权限的文件夹因为 OpenClaw 在执行建模任务时会在这个目录下生成脚本文件、临时文件和输出模型如果权限不够或者路径有空格会报一堆莫名其妙的错误。配置 Codex 接入的时候需要在config.json的models字段里指定模型名称、API 端点和密钥。如果你用的是兼容 OpenAI 接口的模型服务把baseURL改成对应的地址就行。这里有个实操心得模型选择上代码生成能力比通用对话能力重要得多。我试过几个不同的模型有些模型聊天很流畅但生成的 CadQuery 脚本语法错误百出有些模型话不多但代码一次就能跑通。建议优先选专门针对代码任务优化过的模型。{ models: { default: { provider: openai-compatible, model: your-model-name, baseURL: https://your-api-endpoint/v1, apiKey: your-api-key } }, workspace: /home/user/cad-workspace, tools: { shell: true, fileWrite: true, fileRead: true } }2.3 建模库安装与验证建模库这块CadQuery 和 build123d 选一个就行。CadQuery 更成熟、文档更全、社区案例多适合新手入门build123d 是后来者API 设计更符合 Python 习惯代码更简洁但资料相对少一些。我建议两个都装上让 AI 根据任务复杂度自己选。# 安装 CadQuery pip install cadquery # 安装 build123d pip install build123d # 验证安装 python -c import cadquery; print(cadquery.__version__) python -c import build123d; print(build123d.__version__)验证的时候如果报 OCCT 相关的错误大概率是系统缺少 OpenGL 或图形库依赖。Linux 下装libgl1和libglu1-mesa通常能解决WSL2 下还需要额外配置图形转发或者直接用无头模式。这里有个小技巧在服务器或无图形界面的环境里设置环境变量CADQUERY_DISPLAY0可以强制无头模式运行避免因为找不到显示设备而崩溃。提示如果你在 WSL2 里跑先执行wsl --status确认 WSL 版本是 2并且已经安装了合适的 Linux 发行版。WSL1 对图形和文件系统的支持不够跑建模脚本容易出问题。3. 核心原理拆解自然语言如何变成三维模型3.1 从描述到脚本的翻译逻辑Text to CAD 最核心的环节是“翻译”——把人类的自然语言描述转换成机器能执行的建模脚本。这个过程不是简单的关键词替换而是涉及几何语义理解、参数提取、建模策略选择三个层次的处理。第一层是几何语义理解。当你说“一个长 50mm、宽 30mm、高 20mm 的长方体四个角倒 R5 圆角”AI 需要识别出这是一个“长方体”基体加上“倒圆角”这个特征操作并且理解“四个角”指的是垂直方向的四条边。这听起来简单但实际测试中不同模型对“四个角”的理解差异很大——有的理解为底面四个角有的理解为所有十二条边有的甚至理解成顶面四个角。所以描述的时候尽量精确比如“垂直方向的四条边倒 R5 圆角”就比“四个角倒圆角”清晰得多。第二层是参数提取。尺寸、角度、半径、数量这些数值参数需要被准确识别并映射到脚本变量。这里有个坑单位问题。CAD 建模库默认单位通常是毫米但如果你说“一个 2 英寸的圆柱”AI 可能直接生成radius2而忽略了单位转换。我的做法是在描述里统一用毫米或者在系统提示里明确要求所有尺寸按毫米处理。第三层是建模策略选择。同一个几何体可以用不同的建模路径实现比如一个带孔的板子可以先建实体再打孔也可以先建草图再拉伸。不同的策略生成的脚本复杂度、执行效率、后续可修改性都不一样。好的 AI 代理会根据任务特点选择合理的建模顺序比如先做基体特征再做修饰特征先做大的布尔运算再做小的倒角圆角。3.2 OpenClaw 的工具调用机制OpenClaw 之所以能让 AI“动手做”而不只是“动嘴说”靠的是工具调用机制。简单来说AI 在生成回复的同时可以输出一个结构化的工具调用请求比如“我要写一个文件路径是 xxx内容是 xxx”或者“我要执行一条命令命令是 xxx”。OpenClaw 接收到这个请求后实际执行操作然后把执行结果返回给 AIAI 根据结果决定下一步做什么。这个机制在 Text to CAD 场景下的典型工作流是这样的AI 先根据你的描述生成一段 Python 建模脚本然后调用文件写入工具把脚本保存到工作目录接着调用 shell 工具执行这个脚本如果执行成功再调用文件读取工具检查输出的 STEP 文件是否存在、大小是否合理。如果执行报错AI 会读取错误信息分析原因修改脚本重新执行。整个过程可以完全自动化你只需要在最后确认结果。这里的关键配置是工具权限。config.json里的tools字段控制 AI 能使用哪些工具。出于安全考虑建议只开放必要的权限文件读写限制在工作目录内shell 命令限制在白名单范围内。我见过有人把 shell 权限完全放开结果 AI 在执行清理操作时误删了系统文件这种坑完全可以避免。3.3 参数化建模库的选型对比CadQuery 和 build123d 虽然都是参数化建模库但设计哲学和使用体验差别不小。CadQuery 采用链式调用风格代码读起来像一条流水线先创建草图再拉伸再切割再倒角。build123d 则更偏向面向对象用上下文管理器和运算符重载代码更接近数学表达。对比维度CadQuerybuild123d代码风格链式调用上下文管理器学习曲线中等较平缓文档完善度高中等社区案例丰富较少复杂模型支持成熟良好AI 生成友好度高中等从 AI 生成的角度看CadQuery 的链式 API 更容易被模型正确生成因为它的模式比较固定模型见过的训练样本也多。build123d 的代码更灵活但灵活性也意味着 AI 更容易写出语法正确但逻辑错误的代码。我的建议是新手和 AI 生成场景优先用 CadQuery有经验的开发者想写更优雅的代码再用 build123d。4. 实操全流程从一句话到一个可用的 STEP 文件4.1 任务描述的最佳实践描述的质量直接决定生成结果的质量。我总结了一个“四要素描述法”基体形状 关键尺寸 特征操作 输出要求。按这个结构组织语言AI 的理解准确率会高很多。举个例子假设你要生成一个带安装孔的支架。差的描述是“做一个支架”好的描述是“创建一个 L 形支架底板长 80mm、宽 60mm、厚 8mm立板高 50mm、厚 8mm底板四个角各有一个直径 6mm 的安装孔孔中心距边缘 10mm所有外角倒 R3 圆角输出 STEP 格式”。后者的信息密度高但每一条都是必要的。基体形状告诉 AI 用什么样的建模策略关键尺寸给出具体数值特征操作说明要加哪些修饰输出要求指定文件格式。如果还有特殊要求比如“材料是 6061 铝合金”或者“需要生成工程图”也可以加上但几何相关的信息优先级最高。实操心得描述里尽量避免“大概”“差不多”“适当”这类模糊词汇。AI 不会帮你做工程判断它只会按字面意思执行。你觉得“适当倒角”是 R2AI 可能理解成 R0.5 或者干脆不倒。4.2 完整操作流程演示下面走一遍完整流程。假设我们要生成一个法兰盘模型外径 120mm内径 60mm厚度 15mm法兰面上均匀分布 6 个直径 10mm 的螺栓孔孔中心圆直径 90mm中心孔两侧各有一个键槽。第一步启动 OpenClaw 交互模式openclaw chat第二步输入任务描述。这里我习惯把描述写得稍微结构化一点用换行分隔不同部分AI 解析起来更准确生成一个法兰盘 CAD 模型参数如下 - 外径 120mm内径 60mm厚度 15mm - 法兰面均匀分布 6 个直径 10mm 的螺栓孔 - 螺栓孔中心圆直径 90mm - 中心孔两侧各有一个键槽键槽宽度 12mm深度 5mm - 所有锐边倒 R1 圆角 - 输出 STEP 和 STL 两种格式第三步观察 AI 的执行过程。正常情况下AI 会先输出一段 CadQuery 脚本然后调用工具保存并执行。如果一切顺利几十秒内就能在工作目录下看到生成的.step和.stl文件。第四步验证结果。我通常用两个方法快速检查一是用cadquery自带的导出功能重新加载 STEP 文件检查体积和包围盒尺寸是否合理二是用 FreeCAD 或在线 STEP 查看器打开文件肉眼确认几何形状。# 快速验证脚本 import cadquery as cq # 重新加载生成的 STEP 文件 result cq.importers.importStep(flange.step) # 检查包围盒 bb result.val().BoundingBox() print(fX range: {bb.xmin:.2f} to {bb.xmax:.2f}) print(fY range: {bb.ymin:.2f} to {bb.ymax:.2f}) print(fZ range: {bb.zmin:.2f} to {bb.zmax:.2f}) # 检查体积 volume result.val().Volume() print(fVolume: {volume:.2f} mm^3)4.3 参数计算与校验方法AI 生成的模型不一定一次就对参数校验是必须的。以法兰盘为例几个关键校验点外径 120mm 对应包围盒 X 和 Y 方向应该是 -60 到 60厚度 15mm 对应 Z 方向应该是 0 到 156 个螺栓孔的体积总和可以估算每个孔体积约π × 5² × 15 ≈ 1178 mm³6 个约 7069 mm³从总体积里减去这个量级可以粗略判断孔是否打穿。如果发现尺寸不对不要急着手动改脚本而是把问题反馈给 AI让它自己修正。比如“包围盒 Z 方向是 0 到 20但我要求厚度是 15mm请检查并修正”。AI 会根据反馈定位问题——可能是拉伸高度参数写错了也可能是单位换算出了问题。这里有个经验批量生成系列件的时候把参数抽成变量让 AI 生成一个参数化脚本而不是一次性脚本。比如生成法兰盘系列外径从 80 到 200你可以让 AI 写一个带outer_dia参数的函数然后循环调用生成不同规格的模型。这样后续修改和扩展都方便得多。5. 常见问题与排查技巧实录5.1 环境类问题速查环境问题是新手最容易卡住的地方我把踩过的坑整理成速查表。问题现象可能原因解决方法OpenClaw 启动报错Node.js 版本不兼容切换到 20.x LTS建模库导入失败OCCT 依赖缺失安装 libgl1 等系统库脚本执行无输出工作目录权限不足检查目录读写权限STEP 文件为空建模脚本逻辑错误查看脚本执行日志中文路径报错路径编码问题改用纯英文路径WSL 下图形报错无显示设备设置无头模式环境变量5.2 模型生成类问题排查模型生成环节的问题更隐蔽因为脚本可能执行成功但结果不对。我遇到过的典型情况包括孔的位置偏了、倒角没生效、布尔运算结果异常、导出文件格式不对。排查这类问题的核心思路是分步验证——不要一次性生成完整模型先让 AI 生成基体确认无误后再加特征每加一个特征验证一次。比如生成带孔法兰盘第一步只生成圆盘基体检查外径内径厚度第二步加螺栓孔检查孔的数量、位置、直径第三步加键槽检查键槽尺寸和位置第四步加圆角检查圆角是否在所有预期边上生效。这样虽然多几轮交互但定位问题快得多。还有一个常见问题是 AI 生成的脚本用了过时的 API。CadQuery 从 2.x 到 2.4 有一些 API 变更旧教程里的写法在新版本上会报错。遇到这种情况把错误信息直接贴给 AI让它根据当前版本修正。我一般会在系统提示里加一句“使用 CadQuery 2.4 的 API”减少版本不匹配的问题。5.3 性能与稳定性优化当模型复杂度上升或者需要批量生成时性能和稳定性就变得重要了。几个优化方向第一减少不必要的布尔运算布尔运算是 OCCT 里最耗时的操作能合并的特征尽量在一次操作里完成第二合理使用缓存如果同一个基体要加不同特征先生成基体保存成 STEP后续直接加载而不是重新建模第三批量任务用脚本循环而不是逐条对话让 AI 生成一个批处理脚本一次性执行比反复交互效率高得多。注意批量生成时一定要加异常处理和日志记录。我试过生成 200 个系列件中间有一个因为参数越界失败了如果没有异常处理整个批次都会中断。加上 try-except 和日志输出之后失败的跳过成功的继续最后统一检查失败列表就行。6. 进阶玩法把 Text to CAD 接入自动化流程6.1 与现有 CAD 工作流的集成Text to CAD 生成的 STEP 文件可以无缝接入现有的 CAD 工作流。SolidWorks、Fusion 360、FreeCAD 这些主流软件都支持 STEP 导入导入后可以继续做装配、出工程图、做仿真分析。我的做法是用 Text to CAD 生成基础零件导入 CAD 软件做后续处理。这样既享受了 AI 生成的效率又保留了专业软件的精修能力。如果是团队协作场景可以把生成的模型文件放到共享目录或者 PLM 系统里配合版本管理工具追踪变更。由于建模脚本本身就是文本文件用 Git 管理比管理二进制 CAD 文件方便得多每次变更都能看到具体的参数差异。6.2 批量生成与参数化系列件这是 Text to CAD 最有价值的应用场景之一。传统方式做系列件要么手工一个个改参数要么写复杂的配置表驱动。用 AI 代理你只需要描述清楚参数范围和变化规律它就能生成完整的批处理脚本。比如生成一系列不同规格的齿轮模数从 1 到 4齿数从 20 到 60压力角固定 20 度。你只需要把这些参数范围告诉 AI让它生成一个循环脚本每个规格输出一个 STEP 文件文件名包含规格信息。整个过程可能只需要几分钟而手工建模可能要一整天。# AI 生成的批量齿轮建模脚本示例 import cadquery as cq import os def make_gear(module, teeth, pressure_angle20, thickness10): 生成单个齿轮模型 pitch_dia module * teeth outer_dia pitch_dia 2 * module root_dia pitch_dia - 2.5 * module # 简化齿轮建模实际使用建议用专业齿轮库 result ( cq.Workplane(XY) .circle(outer_dia / 2) .extrude(thickness) .faces(Z) .workplane() .hole(root_dia / 2) ) return result # 批量生成 output_dir gears os.makedirs(output_dir, exist_okTrue) for module in [1, 1.5, 2, 2.5, 3, 4]: for teeth in range(20, 61, 5): gear make_gear(module, teeth) filename fgear_m{module}_z{teeth}.step cq.exporters.export(gear, os.path.join(output_dir, filename)) print(fGenerated: {filename})6.3 从模型到图纸的延伸生成三维模型只是第一步很多场景还需要二维工程图。目前 Text to CAD 直接生成工程图的能力还比较有限但可以通过中间步骤实现先用 AI 生成三维模型再用 CAD 软件的 API 或者 FreeCAD 的 TechDraw 模块自动出图。FreeCAD 有 Python 接口可以脚本化生成三视图、标注尺寸、导出 PDF。这条路我还在摸索中目前的做法是Text to CAD 生成 STEP → FreeCAD 脚本导入并创建 TechDraw 页面 → 自动添加视图和基本标注 → 导出 PDF。尺寸标注的自动化程度还不高复杂图纸还是需要人工调整但至少省去了重复建模的时间。7. 我在这套方案上踩过的坑和总结的经验回过头看Text to CAD 这套方案最大的价值不是“替代人工”而是“消除重复”。它把工程师从大量重复性的建模操作里解放出来让你有更多时间做真正需要判断力的工作。但它也有明确的边界复杂曲面、自由造型、精密装配这些场景目前还是传统 CAD 的天下。如果你打算上手我的建议是从最简单的零件开始先跑通“描述→脚本→模型→验证”这个完整闭环建立信心之后再逐步增加复杂度。环境配置阶段遇到问题不要死磕WSL2 下跑不通就换 Linux 虚拟机CadQuery 装不上就换 build123d工具是为人服务的别被工具卡住。最后分享一个我常用的调试技巧让 AI 在生成脚本的同时输出一段验证代码。比如生成法兰盘的时候让 AI 顺便写一段检查包围盒尺寸和孔数量的代码执行完建模脚本后自动运行验证。这样你拿到的不只是一个模型文件还有一个自动化的质量检查报告批量生成的时候特别有用。这个习惯帮我省了很多事后检查的时间也减少了把错误模型交给下游的风险。