
1. 从一段文字到三维模型text-to-cad 到底在解决什么问题第一次听到 “text-to-cad” 这个词很多做机械设计、建筑建模或者工业制造的朋友第一反应是又来了一个新概念。但如果你真正在产线里待过或者帮客户出过图就会明白这个方向背后压着多大的痛点。传统 CAD 工作流里一个零件的诞生往往要经历“需求描述→手绘草图→尺寸标注→建模→导出 STEP/STL→打样验证”这一长串动作中间任何一个环节的沟通偏差都会导致返工。而 text-to-cad 想做的事情非常直接把你嘴里说的、文档里写的自然语言直接变成可编辑、可制造的三维几何数据。它不是一个孤立的软件功能而是一类技术方案的统称。核心逻辑是让大语言模型或专门的几何推理模型去理解“一个直径 40mm、厚 5mm、中心带 8mm 通孔的圆盘”这样的描述然后自动生成对应的边界表示B-rep或网格模型最终输出成 CAD 社区通用的 STEP、GLB、STL 等格式。对于机械工程师来说这意味着你可以用说话的方式快速验证一个结构想法对于做 3D 打印的玩家来说这意味着不用再花几个小时在建模软件里拉拉伸、切切除对于需要批量出图的场景它甚至能配合脚本完成参数化变体的自动生成。我之所以关注这个方向是因为过去半年里身边至少有四五个做非标自动化、钣金加工和模具设计的朋友都在问同一件事有没有办法让 AI 直接出图哪怕只是出个能用的毛坯模型后面我再手动修都行。他们的需求非常务实不是要 AI 取代设计师而是要 AI 把最枯燥、最重复的那部分建模劳动吃掉。text-to-cad 正好卡在这个位置上。它适合的人群也很明确需要快速验证结构的工程师、做创客项目但建模不熟练的开发者、以及希望把设计流程自动化的技术团队。哪怕你只会一点 Python也能通过现成的库把文字描述转成 STL 丢进切片软件。2. 技术路线拆解为什么不是简单调个 API 就完事2.1 自然语言到几何的三种主流思路目前 text-to-cad 的实现路径大致可以分成三类每一类背后的取舍逻辑完全不同。第一类是“代码生成派”让大模型输出 OpenSCAD 或 CadQuery 这类脚本语言的代码再由脚本引擎去执行并导出模型。这条路的好处是几何精度可控因为最终执行的是确定性代码尺寸不会飘。坏处是模型必须能用代码描述遇到自由曲面或者复杂倒角就容易翻车。第二类是“参数化模板派”预先建好一批参数化模型库模型负责从文本里抽取尺寸和特征参数然后填入模板生成实例。这条路适合标准件、法兰、齿轮这类结构固定的零件速度快但灵活性差。第三类是“直接生成派”用扩散模型或 Transformer 直接预测三维表示比如点云、体素或者隐式场再转成网格。这条路最接近“端到端”但生成的模型往往需要后处理才能用于制造。我实测下来对于大多数工程场景第一类方案是目前最稳的。原因很简单CAD 的本质是精确几何而精确几何需要确定性计算。大模型擅长理解意图但不擅长保证 0.01mm 的精度。让模型写代码让代码去算几何这个分工是合理的。举个例子你说“做一个 100x60x10 的板四角 R5 圆角中心开一个 30mm 的孔”模型输出一段 CadQuery 代码代码执行后导出的 STEP 文件尺寸是严格准确的。如果你让模型直接生成网格同样的描述它可能会给你一个看起来差不多但尺寸有偏差的 STL。2.2 为什么 STEP、GLB、STL 三个格式都要支持这三个格式在 text-to-cad 的流程里扮演的角色完全不同缺一不可。STEP 是 CAD 领域的“普通话”它记录的是精确的边界表示包含完整的曲面和实体信息SolidWorks、Fusion 360、中望 CAD 都能直接打开并继续编辑。如果你生成的模型要进入正式的工程设计流程STEP 是必须的。GLB 是 glTF 的二进制版本主要用于可视化展示和 Web 端预览它的优势是体积小、加载快适合放在网页里让客户旋转查看。STL 则是 3D 打印和网格处理的老朋友它只记录三角面片没有单位、没有特征树但几乎所有切片软件和网格修复工具都认它。在实际项目里我通常会让流程同时输出这三个格式。STEP 给工程师做后续修改GLB 给前端做展示STL 直接丢进切片软件或者导入到 3ds Max 做渲染。这里有个细节要注意从 STEP 转 STL 的时候网格精度设置很关键。公差设得太松圆孔会变成多边形设得太紧文件体积会爆炸。我的经验值是对于一般机械零件线性公差设在 0.05mm 到 0.1mm 之间角度公差设在 0.5 弧度左右能在精度和体积之间取得比较好的平衡。2.3 大模型在其中的真实角色很多人以为 text-to-cad 就是“GPT CAD”其实大模型在里面只负责一件事把模糊的人类语言翻译成精确的几何指令。它不负责计算不负责渲染也不负责保证制造可行性。我见过一些方案试图让大模型直接输出坐标点结果生成的模型要么自相交要么法线方向混乱。正确的做法是让模型输出结构化的中间表示比如 JSON 格式的特征树或者直接输出 CadQuery 代码。中间表示的好处是可以做校验比如检查尺寸是否为正数、孔是否在实体内部、圆角半径是否小于板厚的一半。这些校验规则是工程经验的沉淀也是 text-to-cad 能不能真正落地用的关键。3. 动手搭建一条可用的 text-to-cad 流水线3.1 环境准备与核心依赖选择要跑通一条最基本的 text-to-cad 流水线你不需要顶配显卡但需要把 Python 环境理清楚。我的建议是直接用 Conda 建一个独立环境Python 版本选 3.10 或 3.11这两个版本对 CadQuery 和 trimesh 的兼容性最好。核心依赖就三个CadQuery 负责几何建模和 STEP 导出trimesh 负责网格处理和 STL/GLB 导出再加一个 OpenAI 或本地部署的模型接口用来做文本解析。如果你打算完全离线运行可以用 Ollama 拉一个 7B 或 14B 的代码模型实测下来生成 CadQuery 代码的可用率在七成左右剩下的三成需要人工修正。安装命令很简单但有几个坑我提前说。CadQuery 在 Windows 上安装时如果之前装过 Anaconda 的完整版可能会和自带的 OCC 库冲突。我的做法是新建一个干净环境用 pip 安装 cadquery不要用 conda 的 cadquery 包后者更新慢而且依赖锁得死。trimesh 安装时记得加上 easy 后缀这样它会自动把常用的网格处理依赖都装上。模型接口方面如果你用在线 API注意把超时时间设长一点生成复杂零件代码时响应可能超过 30 秒。conda create -n text2cad python3.11 conda activate text2cad pip install cadquery trimesh[easy] openai3.2 文本解析与提示词设计提示词的质量直接决定生成代码的可用率。我试过很多版本最后稳定下来的模板是这样的先给模型一个角色设定告诉它你是一个资深的 CAD 脚本工程师只输出可执行的 CadQuery 代码不要解释不要 markdown 标记。然后给几个示例覆盖板类零件、轴类零件和壳体类零件。最后才是用户的自然语言描述。这个 few-shot 的方式比零样本提示的可用率高出至少一倍。还有一个关键点是单位。自然语言里说“40 的圆盘”模型可能理解成 40mm也可能理解成 40cm。我的做法是在系统提示里强制规定所有尺寸单位为毫米并且在用户输入里如果检测到“厘米”“米”这样的词先做一次单位归一化再送给模型。这个预处理步骤看起来不起眼但能避免很多低级错误。另外对于“中心开孔”“四角圆角”这类空间关系描述模型有时候会理解错位置我通常会在提示词里加一句“请确保所有特征相对于原点对称分布”这样生成的代码更符合工程直觉。3.3 代码执行与几何校验模型返回代码后不能直接就跑。我一般会做三层校验。第一层是语法校验用 Python 的 ast 模块解析一下确保没有语法错误和危险调用。第二层是几何校验执行代码后检查生成的实体是否有效比如体积是否大于零、是否有自相交、边界框尺寸是否和描述一致。CadQuery 的 Workplane 对象有 val() 方法可以拿到底层 OCC 实体调用 IsValid() 就能做有效性检查。第三层是制造校验比如最小壁厚是否小于某个阈值、孔是否穿透、圆角是否过大。这一层可以根据你的具体应用场景来定做 3D 打印和做 CNC 加工的关注点完全不同。import cadquery as cq def build_part(description): # 这里替换成模型生成的代码 result cq.Workplane(XY).circle(20).extrude(5).faces(Z).workplane().hole(8) solid result.val() if not solid.IsValid(): raise ValueError(生成的几何体无效) bb result.val().BoundingBox() print(f边界框: {bb.xlen:.2f} x {bb.ylen:.2f} x {bb.zlen:.2f}) return result3.4 多格式导出与参数记录导出环节看起来简单但有几个参数必须显式设置。导出 STEP 时CadQuery 的 exportStep 方法默认精度就够用但如果你要控制文件大小可以调整 write_pcurves 参数。导出 STL 时tol 参数控制线性公差angularTolerance 控制角度公差这两个值直接决定网格质量和文件体积。导出 GLB 时trimesh 的 export 方法会自动处理材质和法线但要注意坐标系转换CAD 常用的 Z 轴向上和 GLB 默认的 Y 轴向上不一致需要做一次旋转。我习惯在导出时同时生成一个 JSON 文件记录这次生成的原始描述、使用的代码、关键尺寸和导出参数。这个记录在后续追溯问题时非常有用。比如客户说“上次那个零件孔位不对”你可以直接翻出 JSON 看当时的描述和代码快速定位是描述歧义还是代码错误。这个习惯是我踩过几次坑之后养成的有一次批量生成法兰盘结果有一批的孔数少了一个因为没有记录只能全部重新跑一遍。4. 实操中绕不开的坑与排查手册4.1 模型生成的代码跑不通怎么办这是最常见的问题没有之一。模型生成的 CadQuery 代码报错原因通常集中在几个地方。一是 API 用法错误比如把 circle 的参数写成了半径而不是直径或者 extrude 的方向搞反了。二是变量未定义模型有时候会引用一个不存在的变量。三是单位混淆把毫米和米混在一起。我的排查顺序是先看报错行如果是 AttributeError 或 TypeError基本就是 API 用法问题对照 CadQuery 文档改一下就行。如果是 NameError说明模型漏了变量定义需要补上。如果是几何运算失败比如布尔运算返回空那通常是两个实体没有相交或者完全重合。为了提高首次通过率我会在提示词里附上一段 CadQuery 的常用 API 速查表把 circle、rect、extrude、cut、hole、fillet、chamfer 这几个最常用的方法签名写清楚。这个做法看起来笨但实测能把首次通过率从五成提到七成以上。另外对于复杂零件我会让模型分步生成先出主体结构确认无误后再追加特征而不是一次性生成完整代码。4.2 导出的 STL 在切片软件里显示异常STL 显示异常通常有三种表现模型破面、尺寸不对、法线反向。破面多半是因为网格公差设得太松圆角或者曲面处三角面片没有闭合。解决办法是把线性公差调小比如从 0.1 调到 0.02重新导出。尺寸不对一般是单位问题STL 文件本身不记录单位切片软件默认按毫米解析如果你导出时用的是厘米就会差十倍。法线反向则是三角面片顶点顺序问题trimesh 有 fix_normals 方法可以自动修复。还有一种情况是模型本身有非流形边比如两个面共享一条边但方向不一致。这种模型在 CAD 里可能显示正常但转成网格后就会出问题。我的做法是在导出 STL 之前先用 trimesh 做一次 process 操作它会自动合并重复顶点、修复法线、删除退化面片。这一步多花几秒钟但能省掉后面很多麻烦。4.3 复杂曲面和倒角生成的模型质量差这是当前 text-to-cad 方案的天花板。自然语言很难精确描述一条样条曲线的控制点模型只能猜。对于自由曲面我的建议是不要硬刚而是把 text-to-cad 用在概念设计阶段生成一个近似形状然后导出 STEP 到专业 CAD 软件里手动重建曲面。倒角也是类似模型生成的倒角有时候半径过大导致失败有时候方向不对。我通常会在提示词里限制倒角半径不超过最小壁厚的三分之一这个经验规则能避免大部分失败。如果你确实需要高质量的曲面可以考虑混合流程用 text-to-cad 生成基础实体和主要特征导出 STEP 后在 Fusion 360 或 SolidWorks 里用曲面工具做局部替换。这样既享受了 AI 生成的速度又保证了最终模型的精度。我帮一个做灯具设计的朋友跑过这个流程他描述了一个“花瓣形状的灯罩底部直径 200顶部收窄到 80表面有六条螺旋凹槽”AI 生成的模型作为毛坯完全够用他在上面重新铺了曲面整体时间比从零建模省了至少两个小时。4.4 批量生成时的稳定性问题当你需要生成几十上百个变体时稳定性比单次质量更重要。我遇到过模型接口限流、代码执行超时、内存泄漏等各种问题。解决办法是加一层任务队列和重试机制。每个任务独立进程执行设置超时时间失败后自动重试最多三次。重试时把温度参数调低让模型输出更保守的代码。另外批量任务一定要记录日志每个任务的输入、输出、耗时、状态都写进数据库方便事后分析。还有一个容易被忽略的点是临时文件清理。CadQuery 和 trimesh 在运行过程中会产生临时文件批量跑的时候如果不清理磁盘很快就满了。我一般在每个任务结束后把工作目录下的临时文件删掉只保留最终的 STEP、STL、GLB 和 JSON 记录。这个习惯让我的流水线连续跑了三个月没有因为磁盘问题中断过。5. 几个真实场景下的落地经验5.1 非标自动化零件的快速报价我有个朋友做非标自动化设备客户经常发来一段文字描述或者一张手绘草图问“这个零件大概多少钱”。以前他需要让工程师花半小时建模再花十分钟算材料费和加工费。现在他用 text-to-cad 流水线把客户描述直接转成 STEP导入 CAM 软件自动算工时整个过程压缩到五分钟以内。虽然生成的模型不能直接用于生产但用来报价已经足够了。他的经验是对于轴类、板类、支架类零件AI 生成的模型尺寸准确率很高报价误差能控制在 10% 以内。5.2 3D 打印前的快速验证做 3D 打印的朋友对这个场景应该很有共鸣。你脑子里有一个想法想快速打出来看看比例和手感。以前你要么学建模软件要么找人帮忙。现在你可以直接描述“一个手机支架底部 80x60倾斜角度 60 度前面有挡边高 10mm后面有走线孔直径 15mm”text-to-cad 生成的 STL 直接丢进切片软件半小时后就能开始打印。我实测过从描述到开始打印最快的一次只用了十二分钟。当然打印出来的东西可能需要在细节上修一修但作为第一版验证效率提升是巨大的。5.3 教育场景下的几何教学还有一个我觉得很有潜力的场景是教学。教三维建模的时候学生往往卡在“脑子里有形状但不知道怎么操作软件”这一步。text-to-cad 可以作为一个过渡工具让学生先用语言描述形状看到生成的模型再对照着去学软件里的对应操作。我认识一个职业学校的老师他把这个流程引入课堂后学生理解拉伸、旋转、布尔运算这些概念的速度明显快了。因为语言描述和几何操作之间的映射关系通过 AI 生成的模型变得可视化了。6. 关于精度、速度与成本的平衡取舍跑通流程之后你很快会面临一个三角难题精度、速度、成本三者很难同时最优。用在线大模型 API生成速度快、代码质量高但每次调用都要花钱而且有网络延迟。用本地模型没有调用成本但生成速度取决于你的显卡而且代码可用率会下降。用参数化模板速度最快、精度最高但只能覆盖有限的标准结构。我的建议是根据使用频率来选。如果你只是偶尔用一下在线 API 最省事。如果你每天都要生成几十个模型本地部署一个 14B 左右的代码模型更划算虽然首次通过率低一点但配合重试机制和人工修正总体成本更低。如果你做的是特定领域的批量任务比如生成不同尺寸的法兰盘那直接写参数化模板把自然语言解析那一步交给模型几何生成完全用模板这样精度和速度都有保障。还有一个隐藏成本是人工修正的时间。我统计过自己过去三个月的使用记录AI 生成的代码大约有六成可以直接跑通两成需要小改两成需要重写。对于需要小改的那两成平均修正时间是三到五分钟。这个时间成本在评估方案时必须算进去。如果你的场景对精度要求极高比如医疗植入物或者精密模具那 text-to-cad 目前只能做概念验证最终模型必须由工程师从头重建。但如果你做的是夹具、支架、外壳这类公差要求不苛刻的零件AI 生成的模型经过简单修正后直接使用是完全可行的。7. 后续可以继续折腾的几个方向这条流水线跑通之后我最近在尝试几个扩展方向。一个是把语音输入接进来用 Whisper 做实时转录这样工程师可以一边看着实物一边口述修改模型实时更新。另一个是接入尺寸标注识别拍一张手绘草图用视觉模型提取尺寸和特征再走 text-to-cad 流程生成模型。还有一个方向是做版本对比每次生成的模型自动和上一版做差异分析高亮显示哪些特征变了这在迭代设计时特别有用。如果你也在折腾类似的东西我的建议是从最简单的板类零件开始把整个流程跑通再逐步增加复杂度。不要一上来就挑战自由曲面或者装配体那样很容易卡住然后放弃。先把“描述→代码→STEP→STL”这条链路走顺再考虑优化提示词、加校验规则、做批量任务。这个方向变化很快新的模型和工具每个月都在出保持关注但不要盲目追新把基础流程打磨稳定比什么都重要。