1. 从一句话到三维模型text-to-cad 到底在解决什么问题第一次听到 text-to-cad 这个说法很多人脑子里冒出来的画面是对着电脑说一句给我画个支架屏幕上就自动长出一个带孔位的三维零件。这个想象不算离谱但真正落地到工程实践里它要解决的问题比语音画图要具体得多也有意思得多。text-to-cad 的核心是把自然语言描述转换成可编辑、可制造的三维 CAD 模型。注意这里的关键词是可编辑和可制造而不是生成一张好看的渲染图。这两者之间的差距就是玩具和工具之间的差距。一张渲染图只要看着像就行但一个 CAD 模型必须满足尺寸约束、拓扑正确、能被下游的 CAM 或 3D 打印切片软件正常读取甚至要能通过参数化修改继续迭代。我接触这个方向最初是因为一个很朴素的痛点做非标零件设计的时候大量时间花在了重复建模上。比如一批法兰盘区别只是孔径、孔数、外径这几个参数但每来一个新规格就得在 CAD 软件里重新拉伸、打孔、倒角。这种活儿技术含量不高却极其消耗精力。当时我就在想能不能用一段文字描述直接生成基础模型然后人工只做微调text-to-cad 正好切中了这个需求。它适合谁来关注三类人最应该了解。第一类是机械设计工程师尤其是经常做系列化、参数化零件的第二类是3D 打印爱好者脑子里有想法但建模软件不熟练的第三类是做 AI 应用开发的工程师想把这个能力集成到自己的产品里。不管你是哪一类理解 text-to-cad 的技术链路和边界都比单纯会用一个工具重要得多。需要先泼一盆冷水目前这个方向远没有到说一句话就出成品的程度。它更像是一个高效的起点生成器帮你把 60% 的重复劳动干掉剩下的 40% 精细调整仍然需要人来把关。抱着这个预期去用它体验会好很多。2. 拆解 text-to-cad 的技术链路文字是怎么变成实体的要真正用好一个东西得先知道它内部在干什么。text-to-cad 不是一个单一模型而是一条由好几个环节串起来的流水线。理解这条流水线你才能判断它在哪一步可能出错以及出错后该怎么补救。2.1 自然语言理解把口语翻译成结构化意图第一步是把人话变成机器能处理的结构化意图。你说一个长 80 毫米、宽 40 毫米、厚 5 毫米的板子四角各打一个直径 4 毫米的孔模型需要从中抽取出基体是长方体、尺寸是 80×40×5、特征是四个角上的圆孔、孔径 4 毫米、孔位在四角。这一步通常靠大语言模型来完成输出的是一个结构化的中间表示比如 JSON 或者某种领域特定语言。这里有个容易被忽略的细节自然语言里的模糊性。四角各打一个孔——孔心距离边缘多少是贴着边还是留 5 毫米边距人会觉得你懂的但机器不懂。所以好的 text-to-cad 系统会主动补默认值或者反过来追问你。我实测下来描述里越少用相对词、越多用绝对数值生成成功率越高。大一点的孔这种描述基本等于没说直径 6 毫米的孔才是有效输入。2.2 中间表示为什么需要一层翻译稿从语言直接跳到三维几何跨度太大容易崩。所以中间会插一层中间表示常见的有两类一类是参数化脚本比如用类似 OpenSCAD 的语法描述几何另一类是结构化特征树把模型拆成拉伸、旋转、打孔、倒角这些操作序列。这层中间表示的价值在于可解释和可修改。如果直接生成网格你拿到手就是一堆三角面片想改个孔径得重新生成但如果中间是拉伸一个 80×40 的矩形到 5 毫米厚再在四角打四个孔这样的操作序列你改一个数字就能重新出模型。这也是为什么很多 text-to-cad 方案选择输出代码而不是输出网格——代码是可迭代的。提示如果你在选型 text-to-cad 工具优先选那些能输出可编辑脚本或特征树的而不是只给你一个 STL 网格的。前者能改后者基本是一次性的。2.3 几何生成与校验从脚本到实体有了中间表示接下来就是真正生成几何。这一步通常调用成熟的几何内核把脚本或特征树执行成实体模型。生成完之后还有一道校验模型是不是封闭的水密性、有没有自相交、尺寸是不是符合描述。这一步是最容易出问题的地方。语言模型可能生成语法正确但几何上不合理的脚本比如孔打到了实体外面或者两个特征重叠导致布尔运算失败。所以一个成熟的 text-to-cad 系统校验环节必须扎实否则你拿到的模型看着像那么回事一导入切片软件就报错。2.4 输出格式STL、STEP 还是别的最后是输出。不同格式用途不同这里必须说清楚格式特点适用场景STL只有三角网格无参数、无单位3D 打印切片STEP保留精确几何和拓扑可编辑工程交付、二次设计OBJ网格格式可带材质渲染、可视化脚本源码参数化描述可重新执行迭代修改、版本管理如果你只是打印个东西STL 够用但如果你要把模型交给加工厂或者继续在 CAD 里改一定要 STEP。我见过有人拿 STL 去让工厂报价结果对方根本没法测量精确尺寸白折腾一趟。3. 动手实操用文字生成一个可打印的零件光讲原理没意思我们直接走一遍完整流程。下面这个例子是我自己反复跑过的一个场景生成一个带安装孔的电子元件外壳底座。这个需求很典型既有外形尺寸又有特征孔位还能直接拿去打印验证。3.1 环境准备与工具选择思路先说工具选择。目前实现 text-to-cad 有几条路线各有取舍纯代码路线用大语言模型生成 OpenSCAD 或 CadQuery 脚本本地执行。优点是可控、免费、可版本管理缺点是需要你会一点脚本且模型复杂时容易出错。集成平台路线用现成的 text-to-cad 服务输入文字直接出模型。优点是省事缺点是黑盒改不动复杂件效果不稳定。混合路线让模型生成脚本你在本地跑出错就手动改脚本。这是我自己最常用的兼顾效率和可控性。我推荐从混合路线入手。环境上你需要一个能跑 Python 的环境装上 CadQuery 或者 OpenSCAD。CadQuery 基于 Python语法相对友好适合做参数化零件。pip install cadquery装完之后验证一下能不能正常导入import cadquery as cq result cq.Workplane(XY).box(10, 10, 10) print(result.val().Volume())能打印出体积数字说明环境没问题。这一步看着简单但很多人卡在几何内核的依赖上尤其是 Windows 环境下某些库的编译问题。如果 pip 装不上可以试试 conda 渠道。3.2 把需求写成机器友好的描述现在把需求写成文字。注意这里的写法直接决定成败。我先给你看一个反面写法做一个差不多巴掌大的盒子底下开几个孔用来拧螺丝。这种描述人看了都得追问机器更没法处理。正确的写法是把每个尺寸都钉死生成一个长方体底座长 60 毫米宽 40 毫米高 15 毫米。在底面四个角各打一个直径 3.2 毫米的沉头孔孔心距离相邻两条边各 5 毫米。顶面挖一个深 10 毫米、长 50 毫米、宽 30 毫米的矩形凹槽凹槽居中。这段描述里每个特征都有明确的类型、位置、尺寸。这就是机器友好的描述。我总结了一个模板你可以直接套基体形状 长宽高特征类型孔/槽/凸台 数量 位置 尺寸约束居中、对齐、距离某边多少3.3 生成脚本并执行把上面那段描述丢给大语言模型让它输出 CadQuery 脚本。下面是我实际拿到并微调过的版本import cadquery as cq # 基体尺寸 L, W, H 60.0, 40.0, 15.0 # 凹槽尺寸 slot_L, slot_W, slot_D 50.0, 30.0, 10.0 # 孔参数 hole_d 3.2 hole_offset 5.0 # 建基体 base cq.Workplane(XY).box(L, W, H) # 顶面挖凹槽 base ( base.faces(Z).workplane() .rect(slot_L, slot_W) .cutBlind(-slot_D) ) # 底面四角打孔 base ( base.faces(Z).workplane() .rect(L - 2 * hole_offset, W - 2 * hole_offset, forConstructionTrue) .vertices() .hole(hole_d) ) cq.exporters.export(base, base.stl) cq.exporters.export(base, base.step)跑一遍如果没报错当前目录下就会多出base.stl和base.step两个文件。STL 拿去打印STEP 留着以后改。3.4 验证模型是否真的能用生成完别急着打印先做三件事看尺寸用切片软件或者 CAD 打开量一下关键尺寸对不对。我遇到过模型整体缩放错了 10 倍的情况原因是单位没对齐。查水密性STL 必须是封闭的否则切片会出问题。很多切片软件会提示模型不是水密的看到这个提示就得回去查脚本。试切片直接丢进切片软件跑一遍看有没有悬空、薄壁这些打印不友好的结构。这三步走完模型才算真正可用。跳过验证直接打印浪费的是时间和耗材。4. 实测中那些让人抓狂的坑与应对text-to-cad 用起来爽的时候很爽但坑也不少。下面这些是我和身边同行踩过的写出来帮你省点时间。4.1 尺寸单位混乱毫米和米打架最常见也最致命的坑。大语言模型生成脚本时有时候默认单位是米有时候是毫米全看它当时心情。结果就是模型要么小得看不见要么大得离谱。应对办法很简单在描述里显式写单位在脚本里显式定义变量。比如开头就写L 60.0 # 单位毫米所有尺寸都基于这个约定。导出前再检查一遍包围盒尺寸对不上就说明单位错了。4.2 布尔运算失败孔打在了实体外面当你描述在边缘打孔但没给具体边距时模型可能把孔心算到了实体边界之外布尔减运算直接失败或者生成一个破面。这种错误在脚本执行时会报异常但有时候不报错只是结果不对。我的经验是所有特征的位置都要有明确的参照。距离左边 5 毫米比靠左靠谱一百倍。如果模型还是算错就手动改脚本里的坐标值这比重新生成一遍快。4.3 复杂特征组合时的雪崩单个特征一个孔、一个槽生成成功率很高但当你要求打孔 倒角 挖槽 加筋一起上时出错概率陡增。因为每一步都依赖前一步的结果前面稍微偏一点后面全乱。应对策略是分步生成、分步验证。先只生成基体确认没问题再加孔确认再加槽。虽然麻烦但比一次性生成一个乱七八糟的模型再从头查要快。这也是为什么我推荐输出脚本而不是直接出网格——脚本可以一步步调试。4.4 参数化改不动拿到手是个死模型有些工具输出的是纯网格你想把孔径从 3 毫米改成 4 毫米只能重新生成一遍而且重新生成的结果可能和上次不一样。这就是死模型。避免这个坑的唯一办法是坚持用参数化脚本。CadQuery、OpenSCAD 这类工具生成的模型改一个变量就能重新出图这才是 text-to-cad 真正的价值所在。如果某个工具只给你 STL那它顶多算个文字转网格离 CAD 还差得远。5. 让生成成功率翻倍的描述技巧用了几个月下来我总结出一套描述方法能把一次成功率从大概三成提到七成以上。这些技巧不依赖具体工具通用性很强。5.1 用特征清单代替整段描述与其写一大段话不如列一个清单。模型对清单式输入的理解准确率明显更高。比如基体长方体80×50×20 毫米特征 1顶面中心挖圆槽直径 30 毫米深 8 毫米特征 2底面四角打孔直径 4 毫米边距 6 毫米特征 3所有外边缘倒角 1 毫米这种结构清晰模型不容易漏掉特征你检查起来也方便。5.2 数值优先形容词靠边大孔小槽厚一点这类词对模型来说信息量几乎为零。全部换成数值。直径 8 毫米的孔永远比一个大孔强。如果实在不确定具体数值就给一个范围加默认值比如孔径 4 到 6 毫米取 5 毫米。5.3 先给整体再给局部描述顺序也有讲究。先说整体外形和尺寸再说局部特征。因为模型生成脚本时通常也是先建基体再加工特征。顺序一致逻辑就顺。反过来先说打四个孔再说这是个 80 毫米的板子模型容易懵。5.4 明确坐标系和朝向三维建模里朝向很重要。顶面底面前面这些词模型需要知道对应哪个坐标轴。稳妥的做法是显式说明比如以底面为 XY 平面Z 轴向上。这样模型生成的脚本方向不会乱后续导入其他软件也不会躺倒。6. 这套方法能用在哪些真实场景text-to-cad 不是万能锤但在特定场景下效率提升非常明显。下面几个是我实际用过、觉得值的。6.1 系列化标准件的快速出图法兰、支架、垫片这类零件往往是一组参数变来变去。用 text-to-cad 生成一个参数化脚本模板之后每来一个新规格改几个数字就出图。我做过一组支架原来一个规格建模加检查要 20 分钟现在改参数加验证 3 分钟搞定。6.2 3D 打印前的快速原型脑子里有个想法想打印出来看看。以前得打开建模软件从草图开始画半小时起步。现在描述一下生成脚本跑出来直接切片。虽然细节可能不完美但验证想法足够了。快速迭代的价值就在这里。6.3 教学和演示场景给不熟悉建模的人讲什么是参数化设计直接现场用文字生成一个模型改个参数再生成比讲一堆概念直观得多。这个场景下 text-to-cad 是个很好的教具。6.4 批量生成变体做对比做设计选型时经常要比较几种方案。比如同一个零件孔径 3 毫米、4 毫米、5 毫米各来一版看哪个合适。手动建模得画三遍用脚本就是改个循环的事。这种批量变体生成是 text-to-cad 相对传统建模的碾压性优势。7. 我对 text-to-cad 的一点真实看法用了这么久我的判断是它现在是一个优秀的副驾驶但还不是自动驾驶。它能帮你把重复劳动干掉把想法快速变成可验证的模型但最终的工程判断、公差控制、可制造性评估仍然得靠人。我踩过最大的坑是一开始期望太高以为描述一下就能出成品结果拿到模型发现一堆问题反而觉得这工具不行。后来调整心态把它当成帮我打草稿的助手体验就完全不一样了。它生成的脚本我基本都会过一遍改几个参数补几个约束然后才用。这个过程比从零建模快得多但绝不是零成本。如果你刚开始接触我的建议是从最简单的零件练起先把描述技巧磨出来再逐步上复杂度。别一上来就让它生成一个带曲面、带装配关系的复杂件那大概率会让你失望。等你能稳定生成带孔、带槽、带倒角的规则零件了再往深了走。另外一定要养成保留脚本、版本管理的习惯。每次生成的脚本存下来改过的版本也存下来。时间长了你会发现这些脚本本身就是一笔资产下次遇到类似零件翻出来改改就能用比重新描述一遍还快。这个习惯是我觉得比任何工具技巧都值钱的东西。