
从零开始我把一句话变成CAD模型text-to-cad 实操全记录如果你是一名机械工程师、产品设计师或者经常跟三维建模软件打交道那你大概率想过一个问题如果能用自然语言直接生成模型不用一点点拉草图、拉伸、切除该有多省事。这个想法过去听起来像天方夜谭但这两年随着 AI 生成模型的迭代text-to-cad 已经从一个实验室概念逐步变成了可以在我自己电脑上快速感受、甚至投入小规模生产验证的真实工作流。text-to-cad 的核心目标很直接——把“描述性语言”转化为“参数化或显式的三维几何体”。往大里说它改变的是 CAD 建模的输入方式往小里说它降低了三维建模的入门门槛让非专业人士也能通过一句话快速生成可用的模型雏形。这篇文章里我会从我个人的实际体验出发聊一聊这个方向的原理、工具选型、实操流程、踩坑记录以及我目前认为最适合入门的落地方案。在写正文之前先给大家一个总览。text-to-cad 目前主要有两类实现思路一类是基于大语言模型直接生成参数化脚本比如 OpenSCAD、CadQuery、Python 代码另一类是基于深度生成模型直接输出网格或点云类似文本生成图片的思路。这两类思路各有优劣前者精度高、可编辑性强但生成范围受限后者覆盖面广、更加“AI 绘画式”但精度和可编辑性差不少。下面我会逐一拆解并给出我实测过的最优组合。1. 项目背景与核心思路解构1.1 为什么 text-to-cad 不是“伪需求”很多人第一次听到 text-to-cad 的第一个反应是这玩意儿不就把几个现成零件库的参数填一填吗真正用过之后你会发现它解决的其实不是“找不到标准件”的问题而是“从零到一快速产生几何形状”的创造性问题。举一个我亲身经历的例子。上个月我在做一个简易的传感器支架需求很简单一块底板上立两个支撑柱柱顶开螺纹孔侧面留走线槽。如果按传统流程我得新建零件、画草图、拉伸出底板、再建两个圆柱、布尔运算、加螺纹孔特征……走完这一套大概需要 15 到 20 分钟。而使用 text-to-cad 工具我只需要写一句话“一个 60x40x5mm 的底板四角有半径 5mm 的圆角上面有两个直径 12mm、高度 30mm 的圆柱圆柱顶部各有一个 M4 螺纹孔底板侧面中央有一个宽 8mm、深 3mm 的走线槽。”然后脚本自动生成我只需对生成结果做局部调整全程不到 5 分钟。这背后真正的价值不是“替代工程师”而是“把重复性的几何构建工作从人的手上拿掉”让工程师把精力花在方案评审、装配逻辑和结构优化上。它面向的受众也不只是资深 CAD 用户还包括电子工程师、结构实习生、甚至创客爱好者——这些人往往有明确的几何需求但不愿意为了一个简单零件把 SolidWorks 或 Fusion 360 的草图约束系统学一遍。1.2 text-to-cad 的两大技术路线对比在深入实操之前我认为有必要把 text-to-cad 背后的两条主流技术路线讲清楚因为这会直接影响你对工具的选择、预期管理以及问题排查的方向。第一条路线是“语言模型 代码生成”。这条路线本质上是让大语言模型理解自然语言然后把几何意图翻译成 CAD 脚本代码。这里的脚本不是指 G-code而是指 OpenSCAD、CadQuery、Build123d 这类程序化建模库。模型输出的是一段可执行的代码由 CAD 内核解析后生成模型。这条路线的好处是生成结果天然是参数化的每一根线条、每一个特征都由代码显式控制后续修改参数即可快速迭代坏处是语言模型对复杂几何的空间想象力仍然有限生成的代码可能会出错或者逻辑正确但几何结果跟你想的不完全一致。第二条路线是“文本到三维生成模型”。这类方法更像 Stable Diffusion 生成图片的过程输入文本输出一个体素模型、点云或三角网格。典型代表如 OpenAI 早期的 Point-E、Meta 的 Make-A-Shape 等。这条路线的好处是覆盖面广你可以生成更自由的有机形状比如“一把造型奇特的概念座椅”“一个抽象雕塑”坏处是输出是网格文件没有特征树没有参数化关系改动起来非常费劲基本只能做“一次性观感”用途离工程制造还有距离。从我个人的倾向来说如果目标是“拿到工程上可用的模型”第一条路线是当前更现实的选择。除非你只是做概念展示、3D 打印摆件或者视觉效果验证第二条路线才更匹配。更进一步的组合拳是用第二条路线生成灵感草图用第一条路线做结构细化最后回到传统 CAD 里做装配和出图。这个组合我在后面的实操章节会细讲。2. 工具选型解析我实测过的 text-to-cad 方案2.1 大语言模型 CadQuery当前最稳的工程向组合我第一个要重点推荐的是 CadQuery 结合大语言模型如 GPT-4、Claude 系列或本地开源模型的方案。CadQuery 是一个基于 Python 的参数化建模库它的底层是 OpenCascade 内核和很多商业软件内核同源生成的几何精度高支持导出 STEP、STL、SVG 等格式。最关键的是CadQuery 的 API 设计非常符合人类的建模直觉你先选择一个平面然后画草图、拉伸、打孔、倒角每一步都对应一个方法调用。这让大语言模型相对容易“理解”和生成。实际使用时我通常会准备一份 CadQuery 的 API 摘要和少量示例代码作为上下文提供给大语言模型然后输入我要的模型描述。例如在上面提到的传感器支架案例中模型会生成类似下面的代码import cadquery as cq # 底板 base ( cq.Workplane(XY) .rect(60, 40) .extrude(5) .edges() .fillet(5) ) # 支撑柱 base ( base.faces(Z) .workplane() .circle(12/2) .extrude(30) ) # 走线槽 base ( base.faces(Z) .workplane() .rect(8, 3) .cutBlind(-3) )我实测下来这类代码在大多数情况下能一次性通过语法检查而且几何结果整体上八九不离十。偶尔会有坐标偏差或者特征顺序不对的问题这时候只需要把报错信息或“预期是什么、实际是什么”反馈给模型让它自动修正。这种“对话式调试”的模式比传统手动建模还要快因为模型能很好地理解上下文并且在多轮修正中保持记忆。2.2 大语言模型 OpenSCAD适合数学化、程序化思考的用户OpenSCAD 是另一套完全不同的程序化 CAD 工具它不是 Python 语法而是一种专门为构建三维实体设计的函数式脚本语言。它的特点是“纯代码构建”没有交互界面。这个特点天然适合 AI 生成因为语言模型最擅长的就是生成代码并且 OpenSCAD 的代码结构非常模式化稍微训练过的模型都能生成语法正确的脚本。我为什么说它适合数学化、程序化思考的用户呢因为 OpenSCAD 的建模哲学是“CSG构造实体几何”——你通过并集、差集、交集来组合基本体。比如生成一个带孔的方块代码就是difference() { cube([60, 40, 5]); cylinder(h5, r3, centertrue); }这种写法简洁、直观、没有冗余状态大语言模型生成时不容易“绕晕”。不过 OpenSCAD 的短板也很明显它没有真正的参数化特征树改动模型往往是直接改脚本里的数字而不是像 CadQuery 那样可以基于已有实体选择面、边继续操作。而且如果你要做一个复杂的圆角过渡、曲面造型OpenSCAD 会比较吃力。我目前的习惯是快速验证几何概念时用 OpenSCAD因为它的代码量少AI 生成的正确率最高需要进一步做装配、倒角、复杂特征时再把结果迁移到 CadQuery 或直接用 STEP 文件导入传统 CAD。2.3 本地开源模型零成本但需要调教除了调用商业 API我也尝试过在本地跑开源模型来实现 text-to-cad。目前比较可行的路线是使用 Qwen2.5-Coder、DeepSeek-Coder 或 CodeLlama 这类代码模型配合一个简单的提示词模板让模型生成 CadQuery 或 OpenSCAD 代码。本地方案的优点是隐私性好、无按次计费压力适合批量生成、反复调参的场景。缺点是需要一定硬件基础显存 16GB 以上跑 7B 模型会比较舒服而且模型对 CadQuery 等特定库的了解程度远不如商业模型。我实际测试用 Qwen2.5-Coder-7B 生成 OpenSCAD 基础模型的正确率大概在六成左右而用 GPT-4 生成同类模型正确率能稳定到八成以上。不过你别灰心本地模型是可以通过“示例注入”来显著提升效果的。我的做法是准备 20 到 30 个覆盖常见几何形态的示例代码块比如“法兰盘”“齿轮”“支架”“壳体”等每次生成时把最接近需求的 3 到 5 个示例作为上下文输给模型。这样模型就能“照着写”正确率会明显提升我实测能提高到七成五以上。如果你有隐私要求或不方便调用云端 API我建议从这个路线开始。2.4 现成的商用 text-to-cad 工具除了自己组合大语言模型和代码库目前市面上也有一些专门做 text-to-cad 的产品和平台。这些工具通常在用户界面、模型调优、格式兼容性上做了大量打磨适合不愿意深入代码层级的用户。我用过的比较有代表性的有Zoo 的文本生成设计工具、某国产云端 CAD 平台的智能生成模块以及一些嵌在 3D 打印切片软件里的 AI 生成插件。这些工具的特点是你直接在文本框里输入描述点生成然后得到一个可以预览、编辑的模型。它们的模型输出大多是基于网格或简化 BREP 的精度比 CadQuery 差一些但胜在易用。如果你是非工程背景的用户只是想给自己的 3D 打印机快速做个外壳、支架、收纳盒之类的东西这些商用工具是可以一试的。但我要提醒一点商用工具的生成速度通常比本地脚本慢因为要走云端渲染而且生成结果的随机性更大同一个描述多次生成可能得到差异很大的模型。相比之下通过“大语言模型 CadQuery”的方案只要你的语言描述精确生成结果是高度可重复的。3. 核心细节解析语言描述如何决定模型质量3.1 提示词工程清晰描述几何才是关键在实际使用 text-to-cad 时我发现很多新手用户无法得到满意结果的原因不在工具而在描述太模糊。大语言模型再聪明也不能凭空猜出“一个好看点的支架”到底长什么样。为了让模型生成符合预期的代码你需要把几何信息拆成几个层面尺寸、位置、方向、特征操作逐个描述清楚。举个例子。如果你说“做一个带孔的板”模型可能生成任意尺寸的板、任意位置的孔结果你大概率不满意。但如果改成“做一个 100mm × 60mm × 10mm 的矩形板板面中心有一个直径 20mm 的贯穿圆孔四角有 10mm 半径的圆角”模型生成的结果就会非常精准。这里的关键是把“描述性形容词”转化为“可执行参数”。我常用的描述模板是这样的基础形状用什么基本体矩形、圆柱、球等尺寸是多少。特征操作要加什么特征孔、槽、倒角、阵列等参数如何在哪个位置。整体关系特征是“切除”还是“加料”是“贯穿”还是“盲孔”。特殊要求是否需要圆角、是否需要镜像布尔运算的优先级等。如果你能按这个模板组织你的需求大语言模型生成的代码质量会非常高。我还发现一个技巧把数值统一用毫米单位并且尽量写完整“带单位”的描述比如“厚度 5 毫米”模型不会混淆单位换算代码里的数值也更一致。3.2 从文本到特征的映射原理为什么大语言模型能完成 text-to-cad 这项任务归根结底是因为代码生成模型学习了海量的代码与自然语言配对数据它懂得“底板”通常对应 rect extrude“圆孔”通常对应 hole 或 cutBlind“圆角”对应 fillet。这种映射不是显式的规则而是从统计分布中学来的隐含知识。我在测试中还发现模型对“空间关系”的把握比“数值计算”更弱。它可以理解“柱子在底板的中心”但在涉及多个特征互相位置关系时偶尔会出现坐标错位。比如你需要“两个间距为 30mm 的孔”模型可能把第一个孔放在原点、第二个孔放在 (30, 0)这本身没错但如果你同时要求底板原点对齐到某个基准就容易产生歧义。这时我会专门写清楚“所有坐标相对于底板左下角”或者“相对于中心”的位置基准把空间参考关系显式化模型出错的概率会大幅降低。3.3 参数化和约束意识AI 生成也能拥有“设计意图”很多人担心 AI 生成的模型是一次性的、不可调整。但如果你选对工具链尤其是 CadQueryAI 生成的模型本身就可以拥有参数化能力。我在使用大语言模型生成 CadQuery 代码时会特意在提示词中要求“将关键尺寸定义为变量并在代码顶部集中管理”。例如我让模型生成齿轮时会要求模数 m 1.5齿数 z 20压力角 a 20 度齿宽 b 10mm模型会生成类似这样的变量定义m 1.5 z 20 pressure_angle 20 width 10 # 然后使用这些变量进行后续计算 pitch_diameter m * z base_diameter pitch_diameter * math.cos(math.radians(pressure_angle))这样一来后续想改齿数或模数只需改顶部变量模型重新生成或我手动改一下让它重新计算就能得到新的齿轮而不用从头再来。这种“AI 生成参数化代码”的方式我认为是 text-to-cad 走向工程落地的关键能力。它让设计师同时拥有语言输入的便利和参数化设计的灵活兼顾了创作效率和工程约束。4. 实操过程与核心环节实现4.1 环境准备本地跑通 CadQuery 全流程如果你想复现我的实操过程建议先花 20 分钟把环境搭好。我使用的是 Windows 11 Python 3.10 环境主要依赖 CadQuery 和 Jupyter Notebook。安装非常简单打开终端输入pip install cadquery jupyter如果你是想在本地跑开源模型还需要安装 Ollama 或 llama.cpp 之类的推理框架。我个人推荐 Ollama它对硬件的要求低而且命令行交互非常友好。安装好之后拉取一个代码模型ollama pull qwen2.5-coder:7b然后就可以用命令行直接提问了。不过为了更顺畅地生成 CadQuery 代码我建议把 CadQuery 的 API 文档摘要导入到一个“系统提示词”文件里每次会话自动加载这样模型就不会乱编 API。4.2 完整案例从一句话到可打印的 STL 模型下面我完整走一遍“一个可 3D 打印的简易手机支架”的生成过程。这个案例我做了很多次非常适合演示 text-to-cad 的完整闭环。步骤一编写需求描述我输入的文本如下“生成一个 CadQuery 模型底座是一个长 80mm、宽 60mm、高 5mm 的圆角矩形板圆角半径 8mm底板前方Y 轴正方向有一个向左倾斜 15 度的支撑板支撑板厚 3mm宽 50mm高 45mm与底板相交并通过圆角过渡连接底板中心靠后位置有一个直径 10mm、深 3mm 的沉孔整体模型为实体导出格式为 STEP 和 STL。”步骤二让大语言模型生成代码把上面的描述发给大语言模型要求它只输出 CadQuery 代码并给出简要注释。模型生成的代码通常长这样这是其中一个典型输出import cadquery as cq # 底座 base ( cq.Workplane(XY) .rect(80, 60) .extrude(5) .edges().fillet(8) ) # 支撑板 support ( cq.Workplane(XY) .workplane(offset5) .center(0, 0) .moveTo(0, 0) .rect(50, 3) .extrude(45) ) # 倾斜支撑板通过旋转平面实现 support_rotated ( support.rotate((0, 0, 0), (1, 0, 0), -15) ) # 布尔并集 result base.union(support_rotated) # 沉孔 result ( result.faces(Z) .workplane() .center(0, -15) .hole(10) )步骤三执行代码并检查结果在 Jupyter Notebook 里跑这段代码如果顺利你会得到result这个 CadQuery Workplane 对象。用cq.exporters.export(result, phone_stand.step)和cq.exporters.export(result, phone_stand.stl)导出文件。然后用免费的 CadQuery 编辑器或直接导入 Fusion 360 预览确认模型是否符合预期。我实测时遇到的情况大概率是底座圆角、支撑板尺寸都对但“沉孔”可能变成了贯穿孔或者倾斜角度方向反了。这是因为模型对“沉孔”这个词的理解不够精确或者对“倾斜方向”的空间符号判断跟我的预期相反。解决办法很简单——把错误描述反馈给模型比如“沉孔应该是盲孔深度 3mm不要贯穿倾斜方向应向 Y 轴正方向倾斜”。模型会重新修正代码。两三轮对话后模型就能稳定输出正确结果。步骤四导入传统 CAD 进行装配验证生成好的 STEP 文件可以轻松导入 SolidWorks、Fusion 360、FreeCAD 等软件。我个人习惯在 Fusion 360 里做完型检查看看有没有破面、干涉然后直接用在装配体里。这一步是整个流程中最让人舒服的——你不用任何手动建模就拿到了一个带完整几何信息的实体模型可以直接参与下游设计。4.3 调参技巧如何让 AI 输出的代码不出错代码不出错、几何不走样是 text-to-cad 能否实际使用的关键。我总结了几个自己常用的调参技巧细分增量式生成不要一次让模型生成完整复杂模型而是先让它生成基础底座然后逐步添加特征。这样每步都能验证结果出错了也容易定位。明确坐标系参考在提示词里写清楚“所有坐标相对于 XY 原点”或者“该孔位于底板中心”。模型对含糊的空间关系最头疼你越明确它越不容易跑偏。加入验证要求让模型在代码里加上assert语句或者“执行时输出模型包围盒尺寸”这样你一眼就能确认比例是否正确。用异常回填如果代码执行报错直接把异常信息复制给模型它通常能自己发现错误并修复。这种“人类工程师 AI 结对编程”的模式非常高效。5. 常见问题与排查技巧实录5.1 生成代码执行时报错的五大原因原因一坐标系或平面选择错误。CadQuery 中 Workplane 的平面选择极端重要很多报错其实是“你选了一个不存在的面”或“选的面不是平面”。解决方式是让模型每个操作先.faces(Z)或.faces(Z)指定参考面并确认该面存在。原因二特征操作顺序导致几何退化。例如在圆角操作之前先做布尔运算可能会导致边不再存在进而圆角失败。解决办法是先打好圆角再做布尔运算或者在提示词中强制“圆角放在最后”。原因三尺寸单位不统一。有些模型会从英文资料中学习到英寸单位生成代码时可能混用英寸和毫米导致模型尺寸或放大或缩小。这个比较隐蔽我习惯在提示词中反复强调“所有尺寸以毫米为单位”。原因四阵列或镜像方向写反。在生成线性阵列时模型可能会把(0, 10, 0)写成(10, 0, 0)导致阵列方向完全不对。解决方式是给出明确的“沿 X 方向间距 20mm”这类文字说明。原因五特征的布尔操作符用错。cutBlind和cutThroughAll的区别很大前者是盲孔后者是贯穿孔。模型有时候会搞混你需要对关键特征逐一检查。5.2 几何生成正确但“不符合预期”的三种常见情况比例失调所有尺寸都符合描述但整体观感不对。比如“直径 20 的孔”在 60×40 的板上看起来太大了描述时模型并不知道你的审美偏好。解决方法是补充“孔的直径与板宽度比约为 1:3”之类的比例约束。特征位置偏离模型把孔放在边缘而不是中心多半是空间参考歧义。解决方法是描述里明确“中心位于底板几何中心”。过度复杂有些模型遇到“好看一点”之类的形容词会添加很多不必要的圆角和分割反而让模型难以制造。解决方法是描述里用“尽量简洁”“不要添加不必要特征”做约束。5.3 从 AI 生成到可制造的三个关键检查点实体完整性检查在 CadQuery 中使用val获取实体体积和边界框确认没有缺失面、自相交或零厚度几何。制造工艺检查包括最小壁厚是否足够、圆角是否过大、内部是否有不可去除的材料。如果要做 CNC 加工IMPORTANT 还得检查是否有刀具够不到的结构。导入兼容性检查将 STEP 文件导入目标 CAD 软件确认面片无损、特征树可读、装配约束可用。有些软件交换格式兼容性不佳这一步能发现意外。6. 经验心得与后续扩展思路6.1 我的结论text-to-cad 适合谁、不适合谁经过这几周密集测试我对 text-to-cad 的适用范围有了一个比较清晰的认识。它最适合的场景包括快速生成标准零件模型、批量生成参数化变体、为概念设计提供多个草案、辅助教学演示。它不适合的场景包括高精度汽车外观造型设计、复杂的曲面 A 级面、需要严格依据标准规范出工程图的全流程交付。换句话说text-to-cad 不是要替代传统 CAD而是要把你从“手算坐标 拉草图 改约束”这些低价值操作里解放出来让你有更多精力做上游方案和下游验证。对工程师和设计师来说它目前最实用的形态是“AI 辅助建模”而不是“全自动建模”。我个人现在的工作流是在构思阶段使用 text-to-cad 快速生成 3 到 5 个结构草案然后用传统 CAD 选定一个方向做细化最后再用参数化脚本存档便于后续修改。这个工作流让项目前期的方案迭代速度提升了至少一倍。6.2 展望未来 text-to-cad 的三个演进方向虽然我不太爱做预言但基于观察到的技术趋势我认为 text-to-cad 在接下来两三年会朝三个方向演进更强的 CAD 原生集成不是外部插件而是在 SolidWorks、Fusion 360 内部直接唤起 AI 生成。目前已经有软件在做一旦成熟嵌入设计流程的阻力会大幅减小。从“文本到模型”走向“图/文混合输入”用户既能上传参考图片又能用文字描述修改意图。这能让 AI 生成结果更贴合实际也符合工程人员的工作习惯。面向制造约束的自动对齐AI 不只生成好看几何还会根据加工方式增材、减材、钣金自动调整圆角半径、拔模角、壁厚等工艺参数。到那一步text-to-cad 才真正从“玩具”变成“生产力工具”。6.3 最后一个建议从小零件开始你的第一次尝试如果你看完这篇文章准备上手我给你的第一个建议是别贪大选一个你平时工作中画过无数次的小零件开始。比如一个简单的 L 形支架、一个带孔的法兰盘、一个简易外壳底座。这类零件的几何结构清晰、边界条件简单AI 很容易生成正确结果。第一次尝试时也别追求一步到位。你可以先只输入基础形状描述生成后在 CadQuery 编辑器里手动微调感受一下程序和 AI 的边界在哪里。多试几次你就会慢慢摸透哪种描述方式能让模型输出最理想的结果——这个“手感”说实话比看十篇教程都管用。另外多说一句text-to-cad 生成的模型如果你要用于 3D 打印建议导出 STL 前先做一次简化处理或者用网格修复工具检查一遍因为脚本生成的圆角和布尔特征在网格化时偶尔会产生微小的破面打印时虽然影响不大但如果你做的是装配件这种公差偏差有时会让你多花一个晚上调装配间隙。我已经踩过这个坑你也留意一下。最后再分享一个小技巧如果你手头还没有跑过大语言模型 API可以先拿在线版 ChatGPT 试一试输入描述让它生成 OpenSCAD 代码再去 OpenSCAD 官网下载免费编辑器粘贴运行一分钟你就能看到一个活生生的模型。这个路径门槛极低是一个非常好的起点。等你确认自己需要更工程化的输出时再回想我今天讲的 CadQuery、参数化变量、制造约束这些内容你会发现一切都顺理成章。