多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

从自然语言到可编辑CAD模型:text-to-cad技术实践解析

从自然语言到可编辑CAD模型:text-to-cad技术实践解析 最近手头在做一个内部Demo方向就是“text-to-cad”——用自然语言直接生成CAD模型文件。很多人第一次听到这四个字第一反应是“这不就是AI画图换个赛道吗”但真把需求落到工业建模里你会发现它和文生图完全是两个物种。简单说text-to-cad的目标不是让你“看个效果图”而是把一句“我想要一个直径80毫米的圆柱笔筒”变成一份可编辑、可加工、可出工程图的CAD文件。这篇文章把我踩过的坑、拆过的技术链路、以及实际使用下来的经验整理成一份可参考的实操笔记希望能给正在琢磨这个方向的人一点帮助。1. text-to-cad到底在做什么先别急着把它当成AI建模神器1.1 核心需求要的是可编辑的图纸不是一张“好看的三维图”我接触这个方向的第一天就给自己泼了一盆冷水。市面上有很多“文字生成三维模型”的玩法给一句话算法吐出一个STL网格看起来挺唬人但拿来生产基本没法用。原因很简单STL是一堆三角形面片没有圆角半径参数、没有拉伸深度、没有拔模角度你想把直径从80毫米改成82毫米对不起得整个重来。text-to-cad要解决的恰恰是这个尴尬。它的核心产出不是“模型外观”而是“CAD特征树”——也就是一段能被CAD软件识别、回放、修改的建模过程记录。你可以把它理解成给老师傅下需求单老师傅拿到单子后不是直接给你烧一个铁块而是先在脑子里把加工步骤排好再在图纸上把尺寸链、约束关系标清楚。text-to-cad干的就是这个“排步骤、标尺寸”的事只是把原本需要人手操作的草图、拉伸、切除、倒角变成了从文本里自动生成的建模脚本。所以判断一个text-to-cad方案好不好不能只看生成结果和原图像不像而要看它生成的特征树能不能二次编辑、几何参数是不是可独立调整、导出的文件能不能被其他CAD工具正确打开。这三个点才是这个方向真正值钱的地方。1.2 和文生图、文生三维模型有什么本质区别我见过不少开发者把“文字生成3D模型”和“文字生成CAD”画等号实际工程上差别极大。文生图是像素级别的生成模型输出一张图像矩阵错了可以在画布上修普通文生3D模型输出的是网格错了可以雕刻软件里reshape而CAD文件要求的是精确几何不允许有“看起来差不多”这种状态。举个例子你让人做一个底板四个安装孔直径5毫米孔心距100毫米。网格模型给到0.1毫米的误差肉眼看不出来但落实到机床加工5毫米的孔钻成5.1毫米配合销钉就可能松动。CAD文件里的每一个数值都是硬约束text-to-cad本质上是在做“自然语言到精确参数化建模操作的翻译”翻译错了不只是多一块少一块的问题是整个零件尺寸链崩掉。这也是为什么工业场景里的text-to-cad普遍采用“大模型解析需求 程序化建模”的混合管线而不是直接用端到端神经网络预测点云。关于这一点我在下一节会拆得更细。1.3 谁最需要这条链路从结构设计到3D打印都能用上这个方向说白了是给三种人准备的。第一类是结构设计阶段需要快速出方案的人。设计师概念阶段经常要画十几个方案来回比选传统建模流程里一个盒子加几个孔可能要折腾半小时text-to-cad能把这个时间压到几分钟让设计师把精力留在判断方案而不是操作软件上。第二类是3D打印玩家和手板试制人员。3D打印对特征树要求没那么高但依然要求尺寸精确、壳厚合理、可打印。我帮一个做手办工作室的朋友试过用一句话描述“一个高度60毫米、壁厚2毫米、开口直径35毫米的杯子”系统直接生成可打印的实体模型省掉了从二维草图再到旋转体的重复劳动整个效率非常可观。第三类是制造企业的非设计岗位。采购、销售、工艺人员在日常沟通里经常需要一个临时三维模型来做报价或者展示不需要很复杂的曲面设计能力但需要快速得到一个能看、能测、能转格式的CAD文件。text-to-cad正好补上这截断档让CAD建模能力不再被少数专业软件操作者垄断。2. 把一句自然语言变成CAD文件中间到底经历了什么2.1 第一层自然语言到结构化需求这一层是整个链路的起点也是最容易翻车的地方。大模型接收一段口语化的描述之后要做的事情不是直接“画图”而是把这段自由文本抽成一张结构化的需求表里面至少包含目标类型板、筒、支架、壳体、主尺寸、次要尺寸、壁厚、孔位布局、约束关系、装配关系、以及默认的工艺假设。比如说“一个盒子长100宽60高40”这句话看着简单但结构化后的内容要复杂得多盒子的壁厚是多少顶部有没有盖四个角要不要倒圆角底面要不要防滑槽这些信息用户没说模型必须给默认值而且这些默认值不能瞎给要符合常见加工常识。我做过一个测试同样的描述在两次生成中出现截然不同的壳厚假设后来给系统加了一条规则凡是用户没指定的壁厚一律按“外壳厚度2毫米”作为基础默认并允许后续参数覆盖。加完这条规则之后返工率明显下降。这一层真正拼的是大模型的语义理解和常识推理能力。不是说模型词汇量大就行而是要能分辨“两百毫升的瓶子”和“高200毫米的瓶子”是完全不同的约束来源前者推导出容量后者推导出直尺可量测的尺寸。2.2 第二层结构化需求到建模特征序列拿到结构化需求之后系统要生成一串“建模指令序列”而不是直接生成几何。这一步很像编程把自然语言翻译成程序代码再用程序去驱动CAD内核生成实体。建模指令序列通常包括创建草图平面、画圆或矩形、标注约束、拉伸、旋转、切除、倒角、阵列、镜像等等。如果你用过脚本化建模工具你会立刻理解这一步的威力。手绘建模是“这次画的圆是直径80”而脚本化建模是“直径是变量用户输入改为82则整条特征树自动重建”。text-to-cad的核心价值在于自动生成这棵“参数化特征树”让模型不再是冰封的网格而是活着的、带参数逻辑的工程对象。这一层也是最容易隐藏bug的地方。生成的特征序列如果顺序不对后续特征就可能悬空比如先倒角再挖孔和先挖孔再倒角结果完全不同。实际操作中我会在特征序列生成后先做一个“依赖关系自检”确保后一个特征引用的面或边没有在前一步被移除。很多开源的方案不会主动做这一步导致一批模型生成出来能看、一改参数就崩。2.3 第三层几何内核执行与数据交换特征序列生成之后最终要交给几何内核去计算。内核负责把草图轮廓变成三维实体处理相交、布尔运算、倒角、修边这些底层的几何求交问题。这一步是实打实的计算几何不同内核的容错能力差距也很大有些指令在一个内核里能顺利执行换到另一个内核就报“自相交”。数据交换层面主要关心输出格式。最常见的三个目标STEP用于传统CAD和CAM、STL用于3D打印、以及原生参数化格式用于继续编辑。我建议实际项目里默认输出STEP因为它的B-Rep边界表示能保留精确几何而且几乎所有主流CAD软件都能无损打开。STL只能作为下游3D打印的附加输出不要把它当作主交付物。如果有的模型后面需要出工程图、跑有限元分析STEP也是唯一稳妥的中间格式。2.4 一个关键问题为什么不能直接让神经网络生成STEP文件在技术调研时我专门看过一些端到端生成三维模型的论文它们用扩散模型或自回归模型直接输出三维表示看起来很美但直接搬进CAD领域有几个绕不开的问题。第一精度不够。工业级CAD要求微米级、至少是0.01毫米级的几何精度神经网络输出做不到稳定的精确顶点坐标这是数学上就已经注定的困难。第二可解释性差。扩散模型生成的是“黑箱几何”你无法知道这个零件是拉伸出来的还是旋转出来的下一步改设计根本没有抓手。第三编辑能力为零。工程里绝大多数改动是小参数调整比如孔距从20改成25端到端模型必须重新生成而CAD特征树只需要改一个变量。所以目前工程上更靠谱的做法是从大模型只拿“意图和参数”实际的几何构建交给规则化、程序化的建模引擎让代码去保证精度和一致性。你可以把大模型比作排长它负责理解和分派任务CAD内核是车间里的机床负责做出精准的活儿。排长可以聪明但零件最终还得靠机床本身的精度。3. 完整实操流程从一句“我想要一个笔筒”到可加工模型3.1 先把需求格式写对后面才不用返工我用这个流程做了不少实验之后得到一个经验输入端的文本质量直接决定输出端质量。很多人上来就是一句“给我做一个好看点的笔筒”这类描述如果在真实设计评审会上提出来老师傅也得追问你十分钟。所以text-to-cad的第一课不是学提示词魔法而是学会像给工程师下需求单一样说话。一份好的建模需求至少要包含四个维度功能定位、主尺寸、壁厚和细节特征、工艺装配假设。功能定位决定基本形体主尺寸决定大小范围细节特征决定倒角和孔位之类的次要结构工艺假设决定公差和表面处理方向。这四个维度不一定每次全有但没有涉及的项必须交给系统默认值且你要能接受这些默认值的存在。我见过有人反复生成还是不对最后发现是因为他连“毫米”这个单位都没提系统默认按英寸计算一个120毫米的零件变成了120英寸缩放了25.4倍。这不是系统笨是你没给出工程世界最基本的度量单位约定。3.2 一条可复用的需求描述模板下面是我自己整理的一个模板直接照着填可以有效降低返工次数目标件圆柱形笔筒 主体尺寸外径80mm高度100mm壁厚2mm底部厚3mm 附加特征开口边缘倒角1mm底部外圈做R5圆角 约束要求底部封闭开口朝上内壁与轴线平行 默认工艺注塑件出模需要5度拔模角开口处尺寸为最大尺寸 输出格式STEP毫米单位不要嫌这段啰嗦。工程描述就是把每个可能产生歧义的地方都摁死。比如“出模需要5度拔模角”这句话如果你不说系统很可能生成一个上下直径一致的直筒而注塑件做直筒侧壁是无法脱模的。加上拔模角之后底部外径就会自动收小开口外径80mm高度100mm拔模角5度底部外径约等于80减去2乘100乘tan5°算下来大概62.5mm。这种计算对系统来说不难难的是它得先知道你要考虑脱模。3.3 生成后的四步检查法模型生成完别急着拿去3D打印或者导出STEP先按下面四步过一遍。第一步查特征树。打开生成的特征记录确认建模顺序合理例如壳体是“先拉伸实体再抽壳”而不是“先画两个同心圆再拉伸成环”。顺序不合理后续改尺寸就会牵一发而动全身。第二步查尺寸链。把关键尺寸逐个点击看是否和输入文本一致。重点查单位、壁厚、孔位这三处是出现偏差的高发区。第三步查布尔和相交。在有台阶、槽口、加强筋的模型上用CAD软件的检查功能跑一遍实体有效性确认没有自相交、零厚度薄片、退化面等几何错误。很多text-to-cad生成结果在可视化阶段很漂亮但一跑实体检查就现原形。第四步导出STEP做外部验证。不要只在生成工具的预览窗口里看效果一定要导出STEP文件再放到另一个CAD环境里打开检查特征是否保留、树是否可重放。跨软件验证是判断一个系统是否真能做text-to-cad的试金石。3.4 一个具体案例桌面收纳圆柱笔筒我拿前面那段模板做了个实际测试。系统返回的结果是一个以坐标原点为中心的圆柱体外径80mm高度100mm先拉伸圆柱再执行抽壳得到2mm壁厚底部额外拉伸3mm封底开口边缘生成1mm倒角底部外圈生成R5圆角。整个过程包含大约17条特征记录。我把它导入另一个CAD环境全部特征正常显示能逐个编辑。把直径改成70mm重新重建底部圆角、开口倒角、壁厚全部跟着变没有出现报错。这个测试说明它在特征树生成上走的是正确路线不是拿网格糊弄人。不过我也发现一个细节问题生成结果默认把笔筒轴线放在Z轴上但很多实际装配场景里工程师更希望轴线放在Y轴。这种“坐标系偏好”不能在单个模型里改最好在需求模板里就写明“轴线方向Z轴”或“底面放在XY平面”。你不说系统就用它的默认值无所谓对错但会影响你后续装配时的效率。4. 踩坑记录常见问题与排查方案4.1 模型生成了但尺寸全不对这个坑绝大多数时候不是系统问题是输入问题。最常见的有三种单位缺失、直径和半径混用、以及“宽高厚”的定义不一致。比如“直径80”和“半径80”在自然语言里只差一个字但在CAD里尺寸差一倍。解决方法是所有关键尺寸都要带完整单位且明确是直径还是半径非圆截面则明确“长宽高中谁是主尺寸”。我建议在输入里把所有数字统一写成“主尺寸数值单位名称”的格式比如“直径80mm”“高度100mm”不要写“大一点”“差不多”。如果确认输入没问题但尺寸还是乱那就需要检查是不是系统默认的坐标系缩放单位和目标不一致。导出STEP时一定要核对文件头里的单位声明否则可能出现“模型数值是对的但导入后变成英寸”的诡异情况。4.2 草图能显示实体生成却失败这是text-to-cad管线里最典型的几何内核报错。表现是在特征树里能看到草图那些圆、矩形、约束也都还在但一执行拉伸或旋转就失败错误提示往往是“轮廓未闭合”或“轮廓自相交”。我排查过很多类似案例根源通常在两个地方。一是用户描述里有“圆角矩形”和“倒角”同时出现导致轮廓在某处存在双重修饰产生了微小的自交段二是壁厚过小和圆角半径冲突比如壁厚2mm但倒角半径3mm倒角直接吃穿壁厚形成零厚度特征。遇到这种情况不要反复重试同一句描述先把约束条件放宽一点。例如把圆角半径从3mm改成1.5mm或者把壁厚从2mm加到2.5mm重新生成一次。大多数情况下给几何留出一点“肉”就不会崩。4.3 单位混乱导致模型放大25.4倍这个坑我在3.1里提过但它太经典了值得单独拉出来说。CAD生态里默认单位并不统一工程软件多用毫米3D打印切片软件常用毫米但有些老工具用英寸不少脚本化建模库内部则默认无单位。曾经有一次我导出的STEP文件在预览软件里看起来非常正常但发到另一个平台后模型尺寸变成了原来的25.4倍整个结构全乱。查了很久才发现生成端内部用的单位是英寸但用户描述写的是毫米输出时没有做单位换算。后面我把所有流程强制规定为“用户输入一律解析为毫米输出STEP时显式声明单位”再没遇到过这个坑。如果你也要搭这类工具建议在数据结构里强制加一个unit字段任何一次单位换算都要经过这个字段转换不要在多个模块里各自维护隐式单位。4.4 语义漂移要求越多偏离越远这个现象很有意思用户输入很长的描述把底部、盖板、加强筋、装配孔全堆在一句话里系统生成结果却往往离初始目标越来越远。原因是当约束条件过多时大模型在做意图压缩时会把一些条件自动降权忽略掉它认为“不重要但描述存在”的信息。减少语义漂移的办法是把需求拆成两段第一段只描述主体形状和主尺寸第二段单独列出细节特征和重要约束。主体描述控制在60个字以内细节用“注意”明显分隔。实测下来这种方式比一大段“散文式需求”成功率高很多。我后来甚至把这套规则做成了固定提示词模板每次生成前先让系统自动整理成两条结构再进入建模引擎。4.5 常见问题速查表现象大概率原因处理方式尺寸整体放大25.4倍单位或英寸混用输入显式写mm输出检查STEP单位声明直径变成半径尺寸减半输入直径/半径表述不清每个尺寸都带直径或半径前缀拉伸失败草图未闭合或自相交降低倒角半径或增大壁厚底面厚度缺失系统默认薄壳结构输入中显式写“底部封闭/底部厚Xmm”生成结果不像功能定位缺失先写“目标件XX”再量化细节修改尺寸后模型崩溃特征树依赖关系混乱检查特征顺序避免在删除面之后建新特征5. 这项能力会改变什么影响范围与我对它的实际判断5.1 对设计师和工程师流程的改变传统CAD建模是“人直接操作软件”text-to-cad把交互层抬高到“人描述意图、软件完成操作”。这一定会改变设计协同方式。过去一个结构工程师可能要花半天时间把一个部件从零件图开始推演出来有了这类工具他可以把更多时间用在方案对比、强度和成本分析上。初期方案阶段尤其明显过去ceate三个支架方案可能要看中午饭点现在上午就能完成粗模下午直接评审。但要强调一点它取代的不是工程师而是工程师手里的重复劳动。真正的走向是“设计师负责判断什么方案合理工具负责把方案变成模型”。所以我不觉得建模师会失业反而是懂建模、懂工艺又愿意拥抱自然语言工具的人会更值钱。5.2 对硬件产品试制的价值我在手板加工方向的观察是text-to-cad最实际的爆发点其实是“快速验证”。硬件产品试制阶段涉及大量小批量、多版本的结构件很多零件生命周期很短用传统建模流程太重。自然语言生成CAD可以把“想法到第一版模型”的链路压缩得极短配合3D打印甚至能实现上午改需求、中午做样件、下午测试的节奏。这里面还有个容易被忽略的价值需求描述本身会成为可追溯的文档。传统流程里设计意图往往散落在聊天记录、邮件、会议纪要里而text-to-cad把关键参数和约束固化在生成记录中相当于每个零件都自带一份“设计需求说明书”。这对版本管理和团队交接很有用。5.3 我的真实看法最后说一点个人判断。text-to-cad现在还没成熟到“随便说什么都能出”的程度至少在复杂装配体、曲面造型、精密公差场景里它离量产还有距离。但作为人机交互的新入口它的方向是对的。它真正解决的问题不是“让AI代替人建模”而是“让不懂软件操作的人也能把脑子里的三维想法变成参数化实体”以及“让懂软件的人把更多时间留给设计而不是操作”。我个人在实际使用中的体会是不要拿它和成熟的资深建模师比去比“从零开始完成一版可用模型的时间”在这个维度上它已经赢了。还有个小技巧值得一试如果生成的模型有局部不满意别把整个需求推倒重写只修改对应特征的那一段描述例如单独把“底部厚度”从3改成5效果通常更稳。把每次生成都当成和系统的一次设计评审需求说得越清楚返工次数就越少。这套流程我还有继续往下做的打算下一步准备把“公差标注”和“装配关系”也纳入生成范围虽然难度更大但一旦跑通它在供应链协同和快速报价上的价值会比现在再上一个台阶。
返回列表