
做设计这么多年我一直有个很实在的痛点软件操作的门槛往往比设计思路本身还要高。脑子里想好一个零件的形状手却要在CAD界面里折腾半天尺寸约束、草图拉伸、布尔运算。所以当text-to-cad这类工具出来的时候我的第一反应是“终于有人把手伸到建模流程的最上游了”。它要解决的不是画图快不快的问题而是直接跳过画图这个动作用自然语言把设计意图转化成可编辑、可参数化的三维模型。这篇文章就是我实际试用并深挖原理后的完整记录内容覆盖技术原理、工具选型、完整实操、提示词技巧和踩坑排查新手可以照着一路做下来有基础的也可以直接跳到第五节看问题复现和排查思路。1. 先搞清楚text-to-cad到底在做什么1.1 一句话理解从自然语言到参数化模型text-to-cad字面意思就是“文本转CAD模型”。你在输入框里写一句“我需要一个直径40毫米、高25毫米的圆柱体中心开直径10毫米的通孔外圈按圆周分布打4个直径6毫米的安装孔”系统就会自动生成对应的三维CAD模型。这里有个细节必须强调它生成的不是一个简单的图片或者网格模型而是一套完整的参数化建模过程。这意味着你拿到的不是“一个看起来像那么回事的外壳”而是真正的实体模型带有几何约束、草图和特征树后续可以继续编辑、修改尺寸、装配到更大的组件里。这个“参数化”三个字就是text-to-cad和普通文生图、文生3D工具最本质的区别。普通文生3D工具生成的是网格看起来像模型但没法在真正的CAD软件里做工程修改。text-to-cad生成的是建模逻辑本质上是一段程序程序的运行结果才是模型。1.2 为什么是代码生成而不是直接出网格这个问题我一开始也没想明白按直觉来说文生图能做到像素级生成文生3D为什么不能直接生成网格实际研究之后才意识到工程领域对模型的要求和游戏、影视完全不一样。网格模型在渲染和展示层面够用但一到制造环节就出问题没有精确的尺寸、没有面与面之间的几何关系、没有特征历史、无法参数化修改。你要改一个孔的位置只能重新生成或者手动调整顶点这在工程上完全不可接受。text-to-cad走的是另一条路让大模型生成参数化建模脚本。脚本本身描述的是“怎么做”而不是“长什么样”。模型执行脚本、调用CAD内核最终生成带完整特征的实体模型。打个比方文生网格是让一个画家照着文字描述画一幅画画得再像也只是位图text-to-cad是让一个工程师照着文字描述写一份施工图然后按图纸施工得到实物。前者方便看后者能用。1.3 这条技术路线适合谁我自己试用下来的感受是text-to-cad适合三类人第一类是机械工程师尤其在做方案预研和概念设计时需要快速验证结构可行性不用事无巨细地手动建每个特征。第二类是工业设计师和非机械背景的产品经理有清晰的设计想法但CAD操作不熟练通过自然语言就能把想法变成初步模型再交给工程师细化。第三类是教育场景的老师和学生学习机械设计和CAD建模时可以用自然语言快速搭建案例模型把精力放在理解设计逻辑上而不是被软件操作卡住。但要说清楚text-to-cad现在不是要取代CAD软件更不可能取代设计师。它更像是一个“前处理工具”把自然语言快速转成起点模型后续的精修、仿真、出图仍然需要在专业软件里完成。2. 技术原理与方案选型拆解2.1 大模型怎么“听懂”CAD需求text-to-cad底层的核心是大型语言模型也就是我们常说的LLM。这一步拆开来看其实分成三个环节。第一个环节是理解自然语言。你输入的“直径40毫米的圆柱体”模型需要识别出三个关键信息几何体类型是“圆柱体”关键尺寸是“直径40”维度单位是“毫米”。这依赖大模型在通用语料上学到的语义理解能力。第二个环节是任务规划。模型需要把一句话拆解成一系列建模操作先创建圆柱体、再创建通孔特征、再在指定圆周上阵列安装孔。这个规划能力很关键因为同一个需求可以用不同顺序的建模操作来实现模型需要选择逻辑清晰、可维护性好的方案。第三个环节是代码生成。模型输出的是Python代码通常基于build123d或CadQuery这样的参数化建模库。这两个库都是基于OpenCascade几何内核的生成的模型是真正的B-rep实体。我实际观察生成的代码后发现大模型并不总是“理解”几何学它更多是在海量训练数据中学会了“这类描述对应哪种常见建模套路”。所以提示词的准确性直接影响代码质量这一点在第四节里详细展开。2.2 参数化脚本为什么是当前最优解我对比过三种技术路线各自适用场景完全不同。第一种是直接生成网格模型用NeRF或者扩散模型从文本生成体素场再提取网格。这种方案的优势是生成速度快、对无规则形状效果好比如雕塑、有机形态。但缺点是网格不能参数化编辑、尺寸精度差、布尔运算容易失败不适合工程零件。第二种是生成隐式曲面再用阈值提取模型比如用signed distance function表示模型。这个方法可以生成高质量的曲面但转换为B-rep实体仍然需要额外的重建步骤并且修改单个特征很麻烦。第三种是生成参数化建模脚本也就是text-to-cad主流采用的方案。模型输出Python脚本脚本调用CAD内核执行建模操作。这个方案的确定性最强模型只是“写代码”而不直接“生成形状”形状由CAD内核精确计算。三条路线对比下来在工程制造场景里参数化脚本的优势太明显了。它不需要额外的模型重建步骤生成结果天然具备可编辑性尺寸精度由CAD内核保证特征树清晰可追溯。技术路线生成结果可编辑性尺寸精度适用场景网格生成三角网格差低展示、游戏资产隐式曲面重建SDF场提取网格中中有机形态建模参数化脚本B-rep实体特征树强高工程设计、制造我现在的主力工作流就是用第三种生成出来的脚本可以直接放进版本管理工具里做迭代记录改尺寸改参数非常灵活这一点对工程团队特别友好。2.3 主流工具选型从Zoo到CadQuery生态目前我实际用过并且觉得靠谱的text-to-cad工具主要有这几类。一类是Zoo推出的Text-to-CAD它是目前把大模型和CAD脚本生成结合得最直接的工具。你输入自然语言提示词它会生成基于build123d的Python脚本然后在本地环境里通过CAD内核渲染出模型。整个过程在浏览器里就能完成预览脚本也可以直接复制下来在本地修改。另一类是纯CadQuery风格的生成方案更侧重于程序化建模本身。如果提示词描述的是一个可以通过拉伸、旋转、扫掠等基础特征组合出来的零件生成效果很好适合参数化标准件和机械零件。还有一类是结合OpenCascade底层接口的工具适合更复杂的曲面逻辑但上手门槛更高需要更多几何内核的知识。就日常使用来说我推荐新手从Zoo Text-to-CAD入手因为它的交互最简单提示词框输入、点击生成、预览模型完事后可以导出代码自行修改。工具选型这块我的原则是能用现成的就不自己造轮子等对生成逻辑熟悉了再深入定制。3. 从零到一完整实操流程3.1 环境准备我自己用的是macOS系统以下环境步骤在Windows和Linux上同样适用只是安装命令略有差异。第一步确保Python环境。text-to-cad生成的脚本通常基于Python 3.10以上版本建议直接用虚拟环境避免把系统Python搞乱。python3 -m venv cad_env source cad_env/bin/activate pip install --upgrade pip第二步安装build123d。这个库是当前text-to-cad脚本的主要依赖封装了OpenCascade的建模操作语法简洁非常适合程序化建模。pip install build123d第三步如果是通过Zoo Text-to-CAD生成脚本通常只需要在网页端操作本地只需要准备build123d和CAD查看器。我习惯用conda顺手装好OCC方便本地渲染。conda install -c conda-forge ocp装完之后跑一个最简单的圆柱体脚本验证环境from build123d import * with BuildPart() as demo: Cylinder(20, 10) result demo.part能生成模型并导出STL就说明环境没问题。3.2 写第一条提示词环境就绪之后先从一个最简单的零件开始。我在Zoo Text-to-CAD里输入创建一个直径30毫米、高度15毫米的圆柱体法兰盘中心有一个直径8毫米的贯穿通孔在以中心为圆心、半径为12毫米的圆周上均匀分布4个直径5毫米的贯穿安装孔。点击生成之后系统输出的Python脚本大概长这样下面是示意代码from build123d import * import math with BuildPart() as flange: # 主体法兰盘 Cylinder(15, 15) # 中心通孔 Cylinder(4, 15, modeMode.SUBTRACT) # 四个安装孔 for i in range(4): angle math.radians(i * 90) x 12 * math.cos(angle) y 12 * math.sin(angle) with Locations((x, y)): Cylinder(2.5, 15, modeMode.SUBTRACT) result flange.part这个脚本的核心逻辑是先建一个半径15毫米、高15毫米的圆柱然后用半径4毫米的圆柱做布尔减法形成中心孔再用循环在半径12毫米的圆周上生成4个半径2.5毫米的孔位。提示词里“圆周上均匀分布”这个描述模型对应翻译成了三角函数计算位置这是非常典型的程序化建模思维。如果手动建模你得先画草图、标约束、做阵列步骤多很多。3.3 生成、预览与迭代代码生成后直接在本地运行脚本用build123d自带的显示功能或者导出OBJ后拖进任何支持CAD查看的工具里预览。我第一次生成时没有直接成功问题出在单位上。我提示词写了“直径30毫米”但生成的脚本里Cylinder(15, 15)的半径参数用了15这说明模型把“直径”转换成了“半径”这是正确的。但如果我提示词里同时写了“直径30”和“半径15”模型可能混淆导致尺寸翻倍。所以迭代的要点是每次生成后先检查轮廓尺寸对不对再检查特征数量对不对最后检查位置关系对不对。不要指望一次到位text-to-cad本身就是一个反复调提示词的过程。我在实际操作中会专门建一个尺寸核对表把目标值、生成值、偏差值列出来一目了然。特征目标值生成值偏差法兰盘直径30 mm30 mm正常中心通孔直径8 mm8 mm正常安装孔圆周直径24 mm24 mm正常安装孔数量44正常3.4 导出模型脚本运行通过之后需要把模型导出为通用格式。build123d的导出非常简单from build123d import * with BuildPart() as flange: Cylinder(15, 15) Cylinder(4, 15, modeMode.SUBTRACT) flange.part.export_stl(flange.stl) flange.part.export_step(flange.step)STL用于3D打印和渲染STEP格式用于CAD软件和工程制造。我个人建议优先导出STEP因为STEP携带精确几何信息SolidWorks、Fusion 360、FreeCAD都能直接打开继续编辑。如果用的是Zoo在线工具它本身就提供导出按钮甚至可以直接复制脚本在自己的环境里重新生成这个自由度是我很看重的。4. 提示词设计的核心技巧4.1 描述特征而不是描述美学text-to-cad的提示词和文生图的提示词逻辑完全不一样。写文生图提示词时你说“一个未来风金属机器人”模型会自由发挥视觉风格但写text-to-cad提示词时你必须描述的是可量化的几何特征。什么叫特征就是几何体的类型、尺寸、位置、数量、布尔关系。弱提示词做一个好看的带孔圆盘。 强提示词做一个直径50毫米、厚度8毫米的圆盘中心有一个直径12毫米的通孔在以圆心为原点、半径18毫米的圆周上均匀分布6个直径6毫米的安装孔。弱提示词的问题在于“好看”无法被量化模型只能猜测。强提示词里每一个元素都能映射到具体的建模操作生成结果才稳定。我在多次实验中总结出一个规律提示词里的信息密度越高生成脚本的准确率越高。但信息密度不是堆砌形容词而是把几何元素拆解清楚。写提示词前先在脑子里或者草稿纸上画一遍特征树想清楚每一步用什么操作实现。4.2 尺寸与约束怎么写尺寸描述最容易踩坑的地方是“直径”和“半径”混用、“毫米”和“英寸”漏写、“孔”和“槽”分不清。我自己的经验是所有直径类尺寸统一用“直径”前缀所有半径类尺寸统一用“半径”前缀不要在一句话里混着用。单位统一写在句首或句尾比如“所有尺寸单位均为毫米”。约束描述也要具体到几何关系而不是用“周围”这种模糊词。模糊约束孔分布在圆盘边缘附近。 精确约束孔的圆心位于以圆盘中心为原点、直径36毫米的圆周上相邻孔之间的夹角为60度。模型对“圆心、圆周、夹角”这类几何术语的识别非常稳定但对“边缘附近”这类模糊描述会产生随机理解。还有一个实用技巧如果需要多个相同特征直接说“均匀分布”加上数量。模型会生成循环语句来实现阵列比手动逐个描述每个孔的位置靠谱得多。4.3 提示词模板与风格化经过多轮测试我整理了一套通用提示词模板可以直接套用创建一个[基础几何体]其特征为整体尺寸[长度x宽度x高度]或[直径x厚度]主体操作[拉伸/旋转/扫掠]特征1[特征类型]位置[具体坐标或几何关系]尺寸[具体数值]特征2[特征类型]数量[具体数量]分布方式[圆周/线性/阵列]布尔操作[通过布尔减法去除/添加]所有尺寸默认单位毫米举一个实际案例生成一个带轮毂的圆盘创建一个直径80毫米、厚度10毫米的圆盘圆心位于坐标原点。圆盘中心有一个直径20毫米的轮毂轮毂高度15毫米。在半径30毫米的圆周上均匀分布5个直径10毫米的通孔。所有尺寸单位为毫米。这个提示词生成出来的脚本结构就非常清晰先建圆盘再加轮毂最后阵列孔。风格化提示词这块目前text-to-cad支持得还不够好。我之前尝试过“生成一个具有工业设计美感的支架”结果生成了一个功能没问题但观感普通的零件。现阶段还是老老实实关注几何特征美学部分留给后续在CAD软件里处理。5. 常见问题与排查心得5.1 问题速查表我在持续使用中积累了下面这张问题排查表你可以直接对照处理。问题现象常见原因解决方法只有网格没有特征树误用了普通文生3D工具确认选择的是text-to-cad工具检查是否输出Python脚本模型尺寸整体翻倍直径和半径混淆提示词中统一使用直径或半径描述孔没有贯穿拉伸高度小于主体厚度明确写出“贯穿通孔”或设置拉伸深度大于主体尺寸特征位置不对坐标基准描述含糊明确指定原点、圆心、圆周直径、起始角度生成代码报错库版本不同API差异安装指定版本build123d或根据报错修正API调用卡在“生成中”提示词过于复杂拆分零件先建主体再逐步添加特征导出STEP打不开未安装对应导出依赖pip install build123d[export]或检查OCC安装5.2 避坑技巧从报错中学习报错是text-to-cad学习过程中最好的老师因为每个报错都对应一个逻辑盲区。最常见的是modeMode.SUBTRACT相关的布尔运算报错。这个问题的本质通常是目标体没有完全贯穿母体或者两个体之间存在共面、相切的情况。CAD内核处理这种特殊几何关系时偶尔会失败。解决办法是在描述特征时让建模体稍大一些确保布尔减去的区域完全穿过目标体。提示词里我会写成“贯穿通孔”而不是“孔”这样模型在生成脚本时会把Cylinder的高度设置得大于主体厚度。另一个常见问题是单位丢失。有时候提示词里忘记写单位模型默认使用毫米但如果部分描述里写了英寸生成结果就会混合单位。现在我在所有提示词末尾固定加一句“所有尺寸单位均为毫米”基本解决这个问题。5.3 复杂零件拆分策略当零件结构太复杂时不要指望一次生成完整模型。我尝试过一次生成一个带法兰、筋板、圆角、螺纹孔、异形槽的支架结果模型逻辑混乱脚本报错不断。后来我把复杂零件拆分成多个子零件分批生成再在CAD软件里组装。比如生成基座部分、生成筋板部分、生成孔位阵列然后用“组合成一体”或“装配”的方式在CAD环境里合并。这个策略的另一个好处是每个子零件都可以单独调整。如果孔位错了只需要重新生成孔位脚本不用把整个模型推倒重来。拆分原则是按特征类型拆分不按空间区域拆分。一个子零件只包含一种类型的建模操作比如“拉伸体孔”是一个子任务“筋板圆角孔”是另一个子任务。6. 对设计流程的实际影响与扩展思路6.1 设计效率的层次感text-to-cad给设计流程带来的不是“全面提速”而是把效率分成了三层。第一层是概念验证速度。以前做方案对比要建三个不同的结构方案每个方案消耗一到两小时。现在直接写三段自然语言描述几分钟就能得到三个基础形态先看哪个方向更合理再深入细化。第二层是参数化迭代速度。生成结果本身是脚本修改一个尺寸参数、重新运行模型就更新了。这比在传统CAD软件里手动改草图约束快得多尤其适合做系列化零件的变型设计。第三层是沟通理解速度。我拿着一个思路跟同事讨论以前要么画草图、要么嘴说现在直接一句描述生成模型大家看着实体讨论认知对齐速度快很多。6.2 text-to-cad大概率会往三个方向演进我自己判断text-to-cad短期会优化对复杂装配体和曲面建模的支持让生成结果从“零件级”走向“部件级”。中期可能会融入约束求解和拓扑优化直接生成具备最优结构性能的模型。长期来看它很可能成为设计软件里的一个标准交互入口跟语音、手绘一起成为多模态建模的一部分。这些方向并不冲突。参数化脚本的路线决定了text-to-cad可以无缝对接CAE仿真和CAM制造因为模型本身就是包含几何逻辑的实体。6.3 给团队的落地建议如果你打算在团队里引入text-to-cad我的建议是不要指望它替代任何现有软件而是把它当作“建模加速器”来定位。先在标准零件库场景试点让工程师用它生成常用的法兰、支架、外壳、垫片等标准特征件验证提示词体系。再把常用零件的提示词沉淀成模板库团队共用。这一步很关键因为不同人写的提示词质量差别很大统一模板能保证输出质量稳定。最后再探索复杂零件的拆分生成流程。我目前使用的流程是结构工程师用text-to-cad做多方案预研确定方向后由建模工程师在专业CAD里精化。这套流程跑通后整体设计前期的效率提升非常明显。我个人在实际操作中体会最深的一点是text-to-cad这类工具真正改变的不是“建模速度”而是“思考方式”。以前我从构思到模型中间隔着软件操作现在构思本身就可以部分地转化为模型设计师更要学会用工程语言去描述想法而这恰恰是很多年轻设计师最欠缺的能力。如果你也想试我建议从一个小小的法兰盘开始把你的想法写清楚生成、检查、修改、再生成。多来几轮你对“什么才是清晰的工程表达”的理解会比很多课程教得都深刻。