text-to-cad 实战:从自然语言到 STEP 模型的完整技术路线

发布时间:2026/10/8 14:12:29
text-to-cad 实战:从自然语言到 STEP 模型的完整技术路线 1. 从一句话到三维模型text-to-cad 到底在解决什么问题第一次听到 text-to-cad 这个词我脑子里蹦出来的画面是对着电脑敲一句“给我画一个 80×60×10 的法兰盘中心开直径 30 的孔四角各一个 M6 沉头孔”然后软件自己把模型建好、导出 STEP 文件。这个画面在几年前还属于科幻范畴但现在已经有一批工具能把它做到“能用”的程度了。text-to-cad 本质上是一类把自然语言描述转换成 CAD 几何模型的技术方案它的输出通常落在 STEP、GLB、STL 这几种格式上分别对应不同的下游用途。先说清楚这三种格式各自是干嘛的因为很多人一上来就搞混。STEP.step/.stp是工业界通用的边界表示格式保留完整的实体拓扑和精确曲面信息适合后续在 SolidWorks、中望 CAD、FreeCAD 这类软件里继续编辑、出工程图、做装配。GLB 是 glTF 的二进制版本主打轻量化和渲染友好适合放进网页、做可视化展示、做 AR 预览。STL 则是三角网格格式只有表面三角形没有实体概念适合 3D 打印切片和快速预览但你要拿 STL 回去做参数化编辑就很痛苦——这也是为什么热搜里老有人问“sw 中 stl 转 stp”因为 STL 转回实体是个逆向重建的活儿不是简单改后缀。那 text-to-cad 解决的核心痛点是什么我总结下来是三层。第一层是建模门槛大量有设计需求的人产品经理、机械工程师、创客、甚至做课件的美术老师并不熟练 CAD 软件他们脑子里有形状但不会用草图约束、拉伸、倒角那一套操作。第二层是重复劳动标准件、简单结构件、参数化零件每次都要手动建一遍效率极低。第三层是迭代速度概念阶段需要快速出多个方案对比传统建模一个方案半小时起步text-to-cad 能把首版压到几十秒。适合谁来参考这篇内容如果你是完全不懂 CAD 的小白我会告诉你这条路能走多远、哪里会翻车如果你是机械或工业设计从业者我会重点讲怎么把生成的模型接进你现有的工作流怎么保证尺寸精度和可编辑性如果你是开发者想自己搭一套 text-to-cad 的管线那参数化生成、格式转换、几何校验这几块是重点。下面我按“整体思路—核心细节—实操流程—问题排查”的顺序把我踩过的坑和验证过的方案完整讲一遍。2. 整体方案设计与技术路线拆解2.1 三条主流技术路线各自适合什么场景text-to-cad 目前能落地的方案我把它归成三类不是互斥的实际项目里经常混用。第一类是大模型直接生成 CAD 脚本代码。思路是让语言模型输出 OpenSCAD、CadQuery 或 FreeCAD Python 脚本然后执行脚本得到几何体。这条路的好处是几何精确、参数可追溯、生成结果可编辑——因为本质上是代码建模你拿到脚本就能改参数重新跑。缺点是模型对复杂曲面的表达能力有限而且语言模型经常写出语法正确但几何错误的代码比如布尔运算顺序搞反导致实体消失。第二类是语言模型输出结构化参数再由参数化模板生成模型。比如你描述一个“带法兰的轴”模型负责解析出轴径、长度、法兰直径、螺栓孔数量这些参数然后调用预先写好的参数化函数生成。这条路稳定性最高因为几何生成完全可控适合标准件库、系列化产品。缺点是灵活性受限于模板覆盖范围模板没覆盖的形状就生成不了。第三类是直接生成网格或点云再后处理成 CAD。一些基于扩散模型或三维生成模型的方法走这条路输出 GLB 或 STL 很快但网格质量参差不齐转成 STEP 需要做曲面拟合精度损失明显。这条路适合做概念可视化、游戏资产、3D 打印摆件不适合做需要精确尺寸的工程件。我的建议是工程用途优先走第一类和第二类的组合用参数化模板兜底标准结构用脚本生成处理非标形状可视化用途可以走第三类接受网格精度换取生成速度和形状多样性。2.2 为什么格式转换是绕不开的关键环节不管你用哪条路线最后都要面对格式转换。这里有个很多人忽略的事实STEP 和 STL 之间不是双向无损的。STEP 是精确的边界表示B-Rep曲面用数学方程描述STL 是三角面片近似曲面被离散成大量小三角形。从 STEP 到 STL 是“降维”信息丢失但可控你可以调离散精度从 STL 到 STEP 是“升维”需要逆向拟合曲面属于病态问题拟合质量取决于网格质量和算法。所以 text-to-cad 的管线设计里生成阶段就应该确定目标格式。如果最终要 STEP那生成阶段就必须走实体建模CSG 布尔运算或 B-Rep 构造不能先生成网格再转。如果最终只要 STL 做打印那网格生成完全够用还更快。我见过有人用三维生成模型出 GLB然后想转 STEP 去加工结果曲面全是碎面根本没法用这就是路线选错了。2.3 精度与可编辑性的取舍逻辑text-to-cad 生成的模型精度取决于生成方式。脚本建模的精度是浮点级和手工建模没区别参数化模板的精度取决于模板定义网格生成的精度取决于分辨率和后处理。可编辑性则取决于输出格式和建模历史是否保留。这里有个实用判断标准如果这个模型后续要改尺寸、要出工程图、要装配配合那必须保证输出 STEP 且建模历史可追溯如果只是看个形状、打个样、做个展示GLB 和 STL 足够。我在实际项目里通常要求生成管线同时输出 STEP 和 GLB 两份STEP 存档和后续编辑GLB 用于快速预览和评审STL 按需从 STEP 离散生成保证打印用的网格和设计模型一致。3. 核心细节解析与实操要点3.1 提示词怎么写才能让模型“听懂”几何text-to-cad 的效果一半取决于提示词质量。我总结了一套写提示词的框架按“整体形状—关键尺寸—特征细节—约束条件”四段来组织。整体形状用最接近的几何原型描述比如“长方体底板”“圆柱形轴”“L 形支架”。关键尺寸必须带单位和数值比如“长 120mm、宽 80mm、厚 6mm”。特征细节按位置和类型描述比如“四角各一个直径 6.5mm 的通孔孔中心距边缘 10mm”。约束条件包括对称性、平行垂直关系、圆角倒角要求比如“所有外角 R3 圆角”。举个我实际用过的例子描述一个安装板一块矩形安装板长 150mm宽 100mm厚 8mm。板中心有一个直径 40mm 的圆孔。四个角各有一个直径 8mm 的安装孔孔中心距相邻两边各 12mm。所有外边缘倒角 C2内孔边缘倒角 C1。这段描述里每个数值都有明确归属模型解析时不容易歧义。反过来如果你写“一块大板子中间挖个洞边上打几个孔”模型只能猜生成结果大概率不是你想要的。3.2 参数化模板的设计原则如果你走参数化模板路线模板设计有几个硬性原则。第一参数之间要有依赖关系校验。比如法兰的螺栓孔分布圆直径必须大于中心孔径否则孔会重叠。模板里要写校验逻辑参数不合法时给出明确报错而不是生成一个破面模型。第二默认值要合理。用户没指定的参数模板要给工程上常见的默认值比如未指定倒角就默认不倒角未指定孔类型就默认通孔。这样即使用户描述不完整也能出一个可用的基础模型。第三模板要支持组合。单个模板覆盖的形状有限但多个模板可以拼装。比如一个“带轮”可以拆成“轮毂”“轮辐”“轮缘”三个子模板各自参数化后布尔合并。这样模板库的复用率会高很多。3.3 几何校验生成完必须做的三件事模型生成出来不代表能用我每次都会做三项校验。第一项是实体有效性检查。布尔运算容易产生非流形边、零厚度面、自相交等问题。用 CadQuery 或 FreeCAD 的isValid()方法可以快速检查不通过就说明几何有问题需要调整运算顺序或容差。第二项是尺寸复核。把生成模型的包围盒尺寸和输入参数对比偏差超过 0.01mm 就要查原因。常见原因是单位搞错英寸和毫米混用或者圆角导致包围盒变化。第三项是格式往返测试。STEP 导出后再导入检查实体数量、体积、表面积是否一致。有些转换器会在导出时丢失小特征往返测试能发现这类问题。提示几何校验一定要在管线里自动化不要靠肉眼。我早期偷懒跳过校验结果一批模型里混进了几个破面件下游 3D 打印直接失败返工成本很高。3.4 单位与坐标系的坑单位问题在 text-to-cad 里特别容易翻车。语言模型对单位的理解不稳定你说“直径 30”它可能按 30mm 也可能按 30 单位有些内核默认单位是米或英寸。我的做法是在提示词里强制带单位后缀并且在生成脚本里显式设置单位系统。CadQuery 默认单位是毫米OpenSCAD 默认是“单位”需要自己约定FreeCAD 可以设置。坐标系同样重要。生成模型的原点位置、朝向如果不一致后续装配会乱套。我通常要求生成模型的原点放在底面中心或第一个特征的中心Z 轴朝上这样导入装配体时定位最方便。这个约定要写进提示词模板里让每次生成都遵守。4. 完整实操流程从一句话到可用的 STEP 文件4.1 环境准备与工具选型我目前验证下来最顺手的组合是Python CadQuery 语言模型 API。CadQuery 是基于 OpenCASCADE 的脚本化 CAD 库几何内核成熟STEP 导出稳定而且纯代码操作适合自动化。语言模型负责把自然语言转成 CadQuery 脚本。环境准备步骤# 创建虚拟环境 python -m venv cad_env source cad_env/bin/activate # Windows 用 cad_env\Scripts\activate # 安装 CadQuery pip install cadquery # 安装格式转换相关库 pip install trimesh numpyCadQuery 安装在某些系统上需要额外依赖如果pip install cadquery失败可以改用 condaconda install -c conda-forge cadquery验证安装import cadquery as cq result cq.Workplane(XY).box(10, 10, 10) print(result.val().Volume()) # 应该输出 1000.04.2 提示词到脚本的转换这一步是核心。我用的策略是给语言模型一个带示例的系统提示让它输出符合规范的 CadQuery 代码。系统提示里包含单位约定全部毫米、坐标系约定原点在底面中心、代码结构模板、常用操作的示例。一个典型的生成脚本长这样import cadquery as cq # 参数定义 length 150.0 width 100.0 thickness 8.0 center_hole_dia 40.0 mount_hole_dia 8.0 mount_hole_offset 12.0 outer_chamfer 2.0 inner_chamfer 1.0 # 基础板 plate cq.Workplane(XY).box(length, width, thickness) # 中心孔 plate plate.faces(Z).workplane().hole(center_hole_dia) # 四角安装孔 plate ( plate.faces(Z).workplane() .rect(length - 2 * mount_hole_offset, width - 2 * mount_hole_offset, forConstructionTrue) .vertices() .hole(mount_hole_dia) ) # 倒角 plate plate.edges(|Z).chamfer(outer_chamfer) plate plate.edges(%CIRCLE).chamfer(inner_chamfer) # 导出 cq.exporters.export(plate, mounting_plate.step) cq.exporters.export(plate, mounting_plate.stl)这段脚本里参数全部提取到顶部方便后续修改。布尔运算顺序是“先建主体再挖孔最后倒角”这个顺序很重要倒角放在最后能避免倒角面被后续运算破坏。4.3 参数计算与选择过程实际项目里很多参数不是用户直接给的需要计算。举个法兰的例子用户说“做一个 6 寸法兰PN168 个螺栓孔”我需要查标准把参数补全6 寸对应 DN150PN16 法兰外径 285mm螺栓孔中心圆直径 240mm螺栓孔直径 22mmM20 螺栓法兰厚度 24mm。这些标准数据我预先整理成 JSON 表生成时查表填充。再比如齿轮用户说“模数 2齿数 30”我需要计算分度圆直径 模数 × 齿数 60mm齿顶圆直径 分度圆 2 × 模数 64mm齿根圆直径 分度圆 - 2.5 × 模数 55mm。这些计算写进模板函数里用户只给核心参数派生参数自动算。注意标准件参数一定要查权威标准表不要凭记忆。我见过有人把 M8 螺栓的沉头孔直径记成 14mm实际标准是 15mm差 1mm 装配就干涉。4.4 批量生成与自动化单个模型生成跑通后批量场景才是 text-to-cad 真正发挥价值的地方。我的做法是把需求整理成 CSV 或 JSON每行一个零件描述然后循环调用生成管线。import json import cadquery as cq def generate_from_spec(spec): 根据规格字典生成模型 # 这里调用你的生成逻辑 # spec 包含 shape_type, dimensions, features 等字段 pass with open(parts_spec.json, r, encodingutf-8) as f: specs json.load(f) for i, spec in enumerate(specs): try: model generate_from_spec(spec) cq.exporters.export(model, foutput/part_{i:03d}.step) print(f生成成功: part_{i:03d}) except Exception as e: print(f生成失败: part_{i:03d}, 原因: {e})批量生成一定要加异常捕获和日志因为总有个别规格会触发几何问题。失败的不影响其他件事后单独排查。4.5 格式导出与下游对接导出 STEP 用cq.exporters.export(model, file.step)导出 STL 时可以指定离散精度cq.exporters.export( model, file.stl, tolerance0.01, # 线性偏差越小越精细 angularTolerance0.1 # 角度偏差弧度 )tolerance 设 0.01mm 对大多数零件够用精密件可以设 0.001。设太小文件会很大我一般根据零件尺寸动态调整包围盒对角线长度的千分之一作为 tolerance 是个不错的起点。GLB 导出 CadQuery 不直接支持我的做法是先导出 STL再用 trimesh 转 GLBimport trimesh mesh trimesh.load(file.stl) mesh.export(file.glb)5. 常见问题与排查技巧实录5.1 生成模型破面、实体无效怎么办这是最高频的问题。表现是导出 STEP 后导入其他软件报错或者体积计算出 NaN。原因通常是布尔运算产生了非流形几何。排查顺序先检查参与布尔运算的实体是否都有效再检查运算顺序最后检查容差设置。我遇到过一个典型案例在一个薄壁上打孔孔边缘和壁边缘距离小于 0.1mm布尔减运算后产生了极薄的碎片面。解决办法是调整孔位置或增加壁厚保证特征之间有足够间距。经验值是特征间距至少 0.5mm低于这个值就容易出问题。5.2 尺寸对不上、单位错乱怎么查尺寸问题的排查我总结成一张表现象可能原因排查方法整体尺寸差 25.4 倍英寸毫米混用检查提示词单位和内核单位设置整体尺寸差 1000 倍米毫米混用检查导出时的单位缩放局部尺寸偏差圆角/倒角影响包围盒对比特征尺寸而非包围盒孔位置偏移坐标系原点不一致统一原点约定并复核对称件不对称浮点累积误差用对称约束而非镜像坐标单位问题最隐蔽因为模型看起来“形状对”只是大小不对。我的习惯是在生成脚本开头显式声明单位并在导出后立即用脚本读取包围盒复核。5.3 复杂曲面生成失败的处理思路语言模型生成复杂曲面比如涡轮叶片、流线型外壳的成功率明显低于规则几何。我的处理策略是降级处理如果曲面生成失败先用简化几何比如用放样或扫掠近似出一个版本保证有可用模型再人工在 CAD 软件里细化。不要指望 text-to-cad 一步到位做出复杂曲面现阶段它最擅长的是规则几何和参数化结构。另一个技巧是把复杂曲面拆成多个简单曲面的组合分别生成后布尔合并。比如一个手柄拆成“圆柱段圆锥过渡段球头”三段每段都好生成合并后效果接近整体曲面。5.4 生成速度慢的优化方向text-to-cad 的耗时主要在语言模型推理和几何运算两块。语言模型这块用流式输出能改善体感但总时间不变真正能优化的是几何运算。CadQuery 的布尔运算在复杂模型上可能跑几十秒优化手段包括减少不必要的布尔运算、用clean()清理冗余边、把倒角圆角放到最后统一处理。还有一个容易忽略的点STL 离散精度设太高会拖慢导出。我一开始把 tolerance 设成 0.0001结果一个简单零件导出要十几秒后来改成 0.01导出时间降到 1 秒以内打印质量肉眼没差别。5.5 常见问题速查表问题快速排查解决方向模型是空的检查布尔运算是否把实体减没了调整运算顺序先加后减导出 STEP 失败检查实体有效性运行 isValid()修复或重建导入后尺寸不对检查单位设置统一毫米导出时确认缩放孔打偏了检查工作平面和坐标系显式指定 workplane 原点倒角报错倒角值大于相邻边长度减小倒角值或调整边选择生成结果和描述不符提示词有歧义补充尺寸和位置约束批量生成部分失败个别规格参数不合法加参数校验跳过非法项GLB 显示破面STL 离散精度不足提高 tolerance 精度6. 我的实操心得与后续扩展方向6.1 几条用血泪换来的经验第一条永远保留生成脚本。模型可以重新生成但脚本里的参数和逻辑是核心资产。我习惯把每次生成的脚本和输入提示词一起存档命名带时间戳和版本号。这样模型要改的时候改脚本重跑就行不用从头描述。第二条不要信任语言模型输出的数值。模型经常会“编”一些看起来合理但实际错误的尺寸。我的做法是让模型只输出结构描述和参数占位符具体数值从我的参数表里填。比如模型输出“中心孔直径 {center_hole_dia}”我再用实际值替换。第三条先跑通一个最小案例再扩展。我见过有人一上来就想做整套装配体生成结果卡在单个零件的几何问题上。正确顺序是单个简单零件跑通 → 加特征 → 加参数化 → 批量 → 装配。每一步验证通过再进下一步。第四条STEP 是工程交付的底线格式。不管中间用什么格式最终交付给工程用途的必须是 STEP。GLB 和 STL 只能作为辅助预览不能作为设计源文件。这个原则能避免大量下游返工。6.2 这套方案还能怎么扩展text-to-cad 的管线搭好之后扩展方向很多。往上游走可以接语音输入或图纸识别把更多输入形式转成结构化描述。往下游走可以接自动出工程图、自动生成 BOM、自动做装配干涉检查。往横向走可以建标准件库和常用结构模板库覆盖更多场景。我最近在试的一个方向是参数化变体批量生成。给定一个基础模型和一组参数范围自动生成所有变体并导出用于方案对比或系列化产品设计。比如一个支架长度从 100 到 200 每 10mm 一档宽度从 50 到 100 每 10mm 一档自动生成 66 个变体人工筛选。这种活儿手工做要一整天自动化跑几分钟就完了。还有一个实用扩展是生成结果自动校验报告。每次生成后自动输出一份报告包含包围盒尺寸、体积、表面积、实体数量、有效性状态和输入参数对比。这份报告存档后后续追溯问题非常方便。6.3 给不同基础读者的上手建议如果你是完全新手我建议先从 OpenSCAD 或 CadQuery 的手写脚本开始手动建几个简单模型理解脚本建模的逻辑再引入语言模型辅助生成。跳过手写直接上 AI 生成遇到问题你会不知道从哪查。如果你有 CAD 基础但没写过脚本CadQuery 的官方文档和示例是最好的起点它的 API 设计和 CAD 操作逻辑对应得很好拉伸、旋转、布尔、倒角这些操作都有直观的函数。如果你是开发者想集成到产品里重点研究几何内核的选型OpenCASCADE 是开源方案里最成熟的、格式转换的精度控制、以及生成失败时的降级策略。text-to-cad 的产品化难点不在生成而在生成失败时的用户体验和几何质量的稳定性。最后分享一个我常用的小技巧把常用结构的生成脚本存成模板函数库新需求来了先看能不能用现有函数组合出来能组合就不重新生成。这样积累下来你的生成速度和成功率都会明显提升因为大部分需求其实是已有结构的变体。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询