
最近一段时间“用一句话生成CAD模型”这件事在圈子里讨论得越来越频繁。我前后找了几位做机械设计、产品结构和建筑方案的朋友做摸底测试让他们用自然语言描述自己手头的一个零件然后交给text-to-cad类工具去生成。先说结论它离“取代设计师”还有很远的距离但作为从概念到初稿的“第一棒”已经比大多数人想象中要能打。它不是把文字变成模型那么简单背后是一条从语义解析到参数化几何构建的完整链路。本文我会从原理、实测、坑点、工程化集成这几个维度把 text-to-cad 讲透尽量做到可参考、可复现。1. 从一句话到三维实体text-to-cad 的核心链路拆解要理解这类工具不能只看它“输入文字、输出模型”的表面现象。我们要先搞清楚一个问题文本本身没有几何信息它怎么变成一堆顶点、边、面和约束关系1.1 先搞清楚“text-to-cad”到底在做什么传统CAD建模是“人手动操作几何内核”——你画一个草图拉伸、旋转、倒角、打孔每一步都是在直接操作B-Rep边界表示或者网格数据。而 text-to-cad 想解决的是另一件事把人类语言中隐含的设计意图转换成可执行的建模操作序列。举个例子你说“一个直径50mm、高度30mm的圆柱顶部倒R5圆角”传统流程是新建零件选择基准面画Φ50圆拉伸30mm选顶面边线倒圆角R5text-to-cad 要做的是把这句话拆成三个信息层级实体识别圆柱、圆角——对应到具体的建模特征feature参数提取直径50、高度30、圆角5——对应到数值参数关系推断顶部倒角——对应到特征的作用域和顺序这个拆解过程本质上是“自然语言 → 结构化中间表示 → 参数化建模指令”的三级翻译。目前比较成熟的实现方式是用大语言模型LLM做前两级翻译再用脚本/宏让CAD内核执行第三级。1.2 主流的中间表示方式命令流与程序化建模当前 text-to-cad 类工具落地时主要有两条技术路线我做了个对比技术路线中间表示优点缺点典型形态命令流生成直接输出CAD操作命令序列如Cylinder(50,30)轻量、可解释、与具体CAD软件绑定跨平台迁移差、表达复杂装配吃力生成宏/脚本程序化建模生成带参数的建模程序如Python/OpenSCAD代码参数化能力强、天然支持二次编辑写代码质量不稳定、对复杂特征容易出错生成代码文件隐式函数表示直接输出体素场或SDF符号距离场适合有机形态、拓扑灵活难以直接转B-Rep、工程化程度低生成隐式几何文件我实测下来面向工程场景最多的是前两种。某开源框架的做法是LLM 先生成一段 Python 脚本这段脚本调用CAD内核的API按顺序构建特征树最后导出 STEP 或原生格式。这种方式最大的好处是可追溯——你能看到生成过程也能反向修改参数。1.3 为什么“顺序”和“依赖关系”是生死线很多人以为 text-to-cad 的难点在语义理解其实真正拉开差距的是特征顺序规划。CAD建模不是搭积木特征之间存在着严格的父子依赖你得先有底座才能在底座上开孔先有拉伸体才能对它倒角。如果 LLM 生成的指令顺序不对哪怕每个特征单独看都是正确的合并起来也会报错甚至生成一个完全变形的实体。我看过一个挺典型的案例让工具生成“一个带四个安装孔的矩形法兰盘”。某模型生成的第一版代码里先打了孔、再画了外轮廓结果孔位置直接跑到实体外面去了。原因是它漏了“先有基体、再做布尔减运算”这个隐含依赖。后来换了带约束求解能力的方案在中间表示里显式声明了“孔位坐标依赖基体草图平面”这个问题才解决。所以你在选型时一定要关注工具的中间表示有没有体现特征依赖关系而不只是看它最终渲染出来的图好不好看。2. 实测一把用一句机加工描述生成法兰盘模型光讲原理不过瘾。我直接拿一个真实的零件需求做了一次全流程实测把每一步操作、参数、结果都记录下来。这个案例非常典型因为它同时涉及了拉伸、旋转切除、阵列、倒角四类基础特征几乎覆盖了70%的常见机械零件建模需求。2.1 测试描述与预期目标我先写了一个尽量接近工程师口头表达习惯的描述注意这里没有用特别“标准”的指令式语言而是带一点口语化这样更能测出模型的真实理解力“设计一个DN50法兰盘外径165mm内径61mm厚度18mm四周均匀分布4个直径18mm的螺栓孔螺栓孔中心圆直径125mm。法兰背面有一个深度2mm、外径80mm的沉台所有锐边倒C1.5角。”目标很明确生成一个可直接用于加工的 STEP 文件而不是一个只能看不能用的“样子货”。2.2 工具选型与参数配置我选了某款比较成熟的开源 text-to-cad 工具采用 Python 脚本生成 FreeCAD 内核执行的方式。关键配置项如下# 模型配置 model: text-to-cad-v2.1 temperature: 0.2 # 降低随机性让建模结果更稳定 top_p: 0.9 max_tokens: 2048 # 避免脚本写一半被截断 # CAD输出配置 format: step # 目标格式 unit: mm # 单位统一这是血泪教训 execute_mode: sequential # 严格按生成顺序执行 stop_on_error: false # 先看完整输出再统一排查可能有人会问为什么要用 FreeCAD 而不是直接用商业 CAD两个原因一是它的 Python API 完全开放方便脚本驱动二是 step 格式导出的兼容性很好后续拿到任何平台都能继续编辑。如果你手头有正版商业CAD也可以找到对应的脚本接口思路是一样的。2.3 完整执行过程记录这次测试我按五个阶段走每阶段都记录结果和关键问题。阶段1语义解析与特征抽取工具先输出了一段结构化的中间表示我看了一下它抽取的特征列表{ features: [ {type: cylinder_hole, diameter: 61, through: true, center: [0, 0, 0], axis: z}, {type: bolt_hole, diameter: 18, count: 4, pitch_circle_diameter: 125, through: true}, {type: counterbore, diameter: 80, depth: 2, face: back}, {type: chamfer, size: 1.5, scope: all_edges} ] }这一步基本准确。有一个细节值得注意它识别出了“背面沉台”并且自动关联到face: back说明模型理解了视角关系和特征依附面不是简单地从文本里抠关键词。阶段2特征顺序规划它生成了如下建模顺序创建基础圆柱体 D165 × 18创建通孔 D61主通道创建沉台 D80 × 2从背面拉伸切除草绘4个螺栓孔D18圆周阵列中心圆D125全锐边倒C1.5这个顺序是合理的先有基体再开主孔再沉台再阵列孔最后倒角。这里有个容易翻车的点是沉台的方向——它正确地把沉台的拉伸方向定义为了从背面向内切除方向反了会导致实体被切穿。阶段3生成Python脚本并执行脚本生成后直接交给了 FreeCAD 的 Python 控制台执行。我截取其中比较核心的一段来说明执行逻辑import FreeCAD as App import Part # 创建法兰基体 base_cylinder Part.makeCylinder(165/2.0, 18) # 创建主通孔 main_hole Part.makeCylinder(61/2.0, 20) # 创建沉台注意是从背面切除 counterbore Part.makeCylinder(80/2.0, 2) counterbore.translate(App.Vector(0, 0, -18)) # 布尔运算基体减去主孔和沉台 flange base_cylinder.cut(main_hole).cut(counterbore) # 圆周阵列4个螺栓孔中心圆D125 import numpy as np for i in range(4): angle i * 90.0 x 125/2.0 * np.cos(np.radians(angle)) y 125/2.0 * np.sin(np.radians(angle)) bolt_hole Part.makeCylinder(18/2.0, 20) bolt_hole.translate(App.Vector(x, y, 0)) flange flange.cut(bolt_hole) # 导出STEP Part.show(flange) App.ActiveDocument.recompute()此处由于篇幅原因实际脚本比这个更复杂一些包含了倒角的实现但主体逻辑就是这样一个“先加后减”的过程。阶段4结果校验执行完成后我做了三件事用 FreeCAD 的检查工具测量了关键尺寸外径165、内径61、螺栓孔间距125全部正确用剖面视图确认了沉台的方向和深度沉台在背面深度2mm正确导出 STEP 后用第三方查看器打开确认没有破面或孤立面阶段5参数回改测试一个更考验功底的操作是我把描述改成“螺栓孔改成8个”重新跑了一遍。这一次工具保持了其他参数不变只把阵列数量从4改成了8并且自动把阵列角度步距改成了45度。这说明它的中间表示里确实有“参数化”的基因不是死板地按文字重新生成。2.4 这次实测的关键结论这个案例跑通之后我对 text-to-cad 的实用性有了比较具体的认知简单到中等复杂度的单零件建模它已经能交出合格初稿时间成本大约是人工作业的1/10到1/5特征顺序、方向、依赖关系这三件事是决定成败的关键凡是这三个方面处理不好的工具生成结果基本不能用口语化的描述不影响理解只要关键参数齐全语义解析基本能扛住3. 当前工作的边界哪些描述能稳定生成哪些会翻车比起“它能做什么”我更关心“它什么时候会翻车”。这种认知能帮你守住流程的安全底线——什么时候可以放心交给AI什么时候必须人工介入。3.1 一份实测下来的能力边界对照表我陆陆续续测了30多条描述覆盖不同复杂度的零件总结成下面这张表可以直接当作选型参考描述类型典型示例稳定程度说明基础旋转体“直径40mm的轴长度100mm”高极少翻车拉伸孔/槽“100×80×10的板四角开R8圆角”高特征少逻辑清晰中等复杂单件“带法兰、沉孔、阵列孔的法兰盘”中高特征顺序是关键需要专业判断“壁厚5mm的壳体内部加强筋按等强度设计”中“等强度”这种模糊语义很难转成具体参数装配体“一个由底座、滑块、导柱组成的夹具”低目前最弱约束关系糊有机形态“一个符合人体工学的鼠标外壳”低需要曲面造型不是参数化能解决的与制造工艺强相关“适合压铸成型的支架”低拔模斜度、分型面等隐含规则缺失3.2 五个高频翻车场景及实际案例场景1单位不一致描述里混用“50mm的管径长度0.5m”。某些模型会默认所有数值为同一单位导致长度变成0.5mm。这类错误通常在导出后做尺寸检查时才发现一旦流到加工环节就是废件。场景2“通孔”与“盲孔”的语义“一个直径10的孔”没有说明是否穿透。模型默认生成盲孔结果装配时穿不过去。这类歧义需要人在描述里主动说“通孔”或者选对工具的参数预设。场景3参考面/方向理解混乱“在顶面上开槽”这句话如果工具对“顶面”的定义和你脑中的不一致——比如它在底部生成了槽——就是方向性错误。这类错误不好排查因为渲染图看起来“像那么回事”只有转换视角才看得出问题。场景4特征顺序倒置先倒角后拉伸、先开孔后建基体这类顺序错误会导致布尔运算失败建模日志报错。我测试的某工具约7%的失败案例都出在这个环节。场景5专业隐含规则缺失机械设计里“尽可能避免内部尖角”“拔模角度不小于1度”这类隐含工艺准则普通text-to-cad模型完全无感知。它只会照着你描述的字面意思做描述里没提到的规则它一概不管。3.3 判断工具能力下限的三个经验指标如果你需要快速评估一个text-to-cad工具适合不适合自己的业务我建议只看三个指标同一描述重复生成10次成功率的波动幅度波动太大说明语义到指令的映射不稳定不适合生产环境对参数歧义的自纠能力比如“直径50的管子和直径40的法兰”这种没有显式装配关系的描述它能否产出合理的相对位置失败时的提示质量报错信息是“无法完成”还是“在特征X处发生布尔失败原因是Y”直接决定了后续是交给AI重跑还是人工介入前两个是能力上限第三个是工程可用性下限。很多工具Demo效果惊艳但这三项里至少有一项很拉胯放到流水线上就要命。4. 从单次生成到生产可用我总结的实操工作流工具本身只是第一步。真正让 text-to-cad 产生生产力的是把它嵌入到正确的流程位置里。我目前跑顺了一套“人机协同”的工作流分享出来供大家参考。4.1 把“模糊意图”翻译成“机器可解析描述”的方法想让text-to-cad稳定输出最大的前置动作就是规范你输入给它的描述文本。我这里总结了一个“三要素描述法”前提条件说明毛坯/基本形状/参考基准如“基于直径100的棒料”特征参数凡是涉及尺寸、位置、数量、方向的信息必须显式给出数值和单位工艺约束明确标注通孔/盲孔、倒角类型、表面处理等制造相关要求一个不良示例“设计一个支架装在设备上用四个螺栓固定。”这种描述给任何人都能理解但机器会缺一堆参数。改成这样“设计一个L型支架外形150×120×60mm壁厚6mm底板上4个Φ8通孔均布侧板上2个M6螺纹孔。”信息密度完全不同成功率也完全不同。4.2 生成后的强制校验清单必须做不能跳不管模型生成得多么丝滑输出后我建议强制做一份20项检查清单的核心子集。至少下面四类检查不能少检查类别具体项方法尺寸检查关键直径、长度、壁厚是否与描述一致测量工具逐个核对几何检查是否有孤立面、自相交、破面CAD内核自检 第三方查看器装配检查孔位、中心距能否匹配对接件与配合件做最小间隙分析制造检查是否有不可加工特征内尖角、负拔模工艺人员前置评审其中“制造检查”是我反复踩坑之后才补上去的。AI生成一个“看起来完美”但没法加工的模型比生成一个明显错误的模型更坑——因为它会绕过你的第一道直觉防线直接流到制造端才暴露问题。4.3 一个加了“描述前缀”的Prompt小技巧如果你用的是基于LLM的text-to-cad服务有一个简单但有效的技巧在描述前加一段标准前缀把规则显式声明出来。我自己常用的模板是这样你是资深机械设计师。请严格按照以下约束生成CAD脚本 1. 默认单位为mm 2. 所有孔必须显式标注通孔或盲孔 3. 特征执行顺序必须符合“先基体、后切除、再倒角” 4. 每个特征参数必须使用描述中给出的原始数值不得近似 5. 禁止生成不可制造的负角度内部尖角别小看这几行前缀。它相当于把常用的工艺规则“注入”到了生成过程里能显著降低前文说的工艺隐含规则缺失问题。我对比过同样一段描述不加前缀时约20%的生成结果存在特征顺序问题加了之后降到5%以内。4.4 批量生成场景下的自动化管道设计更进一步如果你有大量标准化零件要用text-to-cad批量生成可以把它设计成一条自动化管道描述规范化层把零件清单表格BOM里的字段自动拼接成机器可解析的描述文本生成调度层批量提交任务、控制并发数、按优先级排队结果校验层用尺寸测量API自动核对输出模型的关键参数异常分流层校验不通过的自动标记转人工处理队列我见过某团队用这条管道跑了几百个标准件生成最终通过率85%左右。剩下15%的人工处理工作量远低于全人工建模的成本。这类流程一旦跑通团队的重复性建模时间可以降一个数量级。4.5 模型选型与显存、计算资源的现实考量最后说一个容易被忽视的实际问题部署环境。如果你使用的是在线SaaS服务那不用关心计算资源。但如果要在内网部署需要注意几个关键参数主流的7B~13B参数模型生成质量已经够用70B以上的模型效果好但显存门槛高一张24GB显存的消费级显卡能跑7B~13B模型中等长度脚本生成速度大约10~30秒如果想达到“交互式体验”建议配两张以上专业显卡或用CPU并行服务我遇到过最尴尬的情况是模型选大了单次生成要3分钟交互体验断裂反而不如那台小模型。选型基线是“满足任务需求的最低配置”不是跑分最高配置。5. 往前一步text-to-cad 不该只做“单个零件”如果你对text-to-cad的理解还停留在“一句话生成一个零件模型”可能会错过它更有价值的用法。我最近在琢磨的几个方向分享给同样在做这件事的人。5.1 从零件到装配体约束关系才是下一个战场单零件的技术难点是几何正确性多零件装配的难点是约束关系的理解。比如“一个滑块沿着导轨滑动行程80mm”中间表示里不仅要生成两个零件模型还要定义滑动副、行程极限、初始位置。现在的text-to-cad工具在这块普遍偏弱但也不是完全没有进展。有些框架已经开始尝试在输出脚本中拼接约束API调用例如生成两个零件后再追加“贴合面约束”“同轴约束”。我测试过一个案例让工具生成一个简单的夹紧机构——固定钳口、活动钳口、导杆、丝杆——结果它能生成四个零件的模型也能识别出“导杆穿过固定钳口”这样的约束关系虽然精度和完整性还撑不起真实装配环境但思路是通的。5.2 结合拓扑优化与仿真反馈更有想象力的一层是把 text-to-cad 和仿真打通形成一个闭环。描述里写着“承受1000N的垂直载荷”生成初始模型后自动导入有限元求解器算出的应力分布再以文本形式反馈给LLM“最大应力在底部圆角处超出材料许用应力30%建议增加底部圆角半径或增加壁厚。”然后模型迭代生成一版新设计。这种闭环目前还在探索阶段但已有一些零星的Demo在跑。它最大的意义在于text-to-cad 不只是把文字翻译成几何而是有可能成为“写得出意图、算得到性能、改得动设计”的完整设计代理。这条路径一旦走通前期方案设计的效率提升会是数量级的。5.3 垂直领域微调让模型“懂行话”通用模型的短板是不知道你行业的隐含规则。一个解决办法是拿自己行业的图纸、建模历史、工艺规范去微调模型。我了解到有团队做过这样的尝试拿过去5年的标准件图纸和对应的建模脚本做微调把“压铸件拔模斜度不小于1°”“冲压件最小圆角0.5t”这类规则注入模型。效果是显著的——微调后生成的件基本不会再犯低级的工艺错误至少在“基础规范合规率”上有明显提升。这件事的投入没有想象中大上千条的建模脚本-描述对就能让一个中规模模型有明显改善。它比改通用模型要划算得多因为CAD建模这个场景的话语空间其实很窄特征类型就那么几十种参数规律也相对固定。5.4 数据闭环生成模型的同时沉淀知识库最后说一个我在实操中最获益的习惯把每次生成结果标记成“可用/不可用/修改后可用”并记录失败原因。积累上几百条样本之后你会发现这些数据远比模型本身值钱。因为它们构成了一条“描述-特征序列-结果评估”的知识链既可以作为微调数据也可以作为工具选型的客观依据。更重要的是它能帮你找到你业务场景里 text-to-cad 真正的能力上限——是卡在语义理解、特征规划还是工艺规则缺失上一目了然。我自己的体会是text-to-cad 这一类工具的定位最准确的比喻像是“一个读得懂图纸意图的实习生”——它能快速出一版能看、能改、能往下走的初稿但你不能让它独立签审。关键是把它的产出纳入到设计评审流程里而不是独立于流程之外。实操上我建议所有做制造业、产品设计、结构设计的朋友不要光看Demo效果一定要用自己实际场景的描述去测而且至少测30条以上给自己积累足够的“能力边界认知”。这套工具迭代很快长期看一定会把重复建模的门槛继续压低但今天它更适合出现在你的“设计第一稿”环节而不是最后交付环节。