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

发布时间:2026/10/8 23:30:14
text-to-cad 实战:从自然语言到 STEP 模型的完整技术链路
1. 从一句话到三维模型text-to-cad 到底在解决什么问题第一次听到 “text-to-cad” 这个词很多人脑子里蹦出来的画面可能是对着电脑说一句“给我画个法兰盘”屏幕上就自动出现一个带螺栓孔的 STEP 模型。这个想象不算离谱但也不完全准确。text-to-cad 本质上是一类把自然语言描述转换成 CAD 可识别几何模型的技术方案它的输出通常不是某个私有格式的图纸而是 STEP、GLB、STL 这类通用三维文件。你输入一段文字比如“一个 80mm 见方、中心有直径 30mm 通孔的安装板四角各有一个 M6 沉头孔”系统经过语义解析、参数提取、几何构造、格式导出几个环节最终给你一个能直接拖进 SolidWorks、Fusion 360、FreeCAD 或者切片软件里继续用的模型文件。这件事为什么值得单独拿出来聊因为传统 CAD 建模的门槛并不在“画”这个动作上而在“把需求翻译成特征树”这个过程。一个熟练的机械工程师建一个简单支架可能要十分钟但一个不会 CAD 的产品经理、一个只想快速验证外观的设计师、一个需要批量生成标准件的工艺员他们卡住的地方往往是“我知道我要什么形状但我不知道怎么在软件里一步步点出来”。text-to-cad 瞄准的就是这个断层让描述直接变成几何把特征树那层操作抽象掉。适合看这篇内容的人大概分三类。第一类是想快速验证结构可行性的硬件创业者或产品经理你不需要精确到公差但需要一个能看、能测、能导进仿真软件里跑一下的模型。第二类是需要批量生成参数化零件的工程师比如做非标设备时经常要出几十个尺寸不同但拓扑一致的安装板手动改参数改到吐。第三类是对 AI 辅助设计好奇的技术爱好者你想知道现在这套东西到底能做到什么程度哪些环节靠谱哪些环节还得人工兜底。我自己的背景是做了七八年机械设计和自动化产线集成中间有三年多时间在折腾参数化建模和脚本化出图。text-to-cad 这个概念刚出来的时候我是持怀疑态度的因为 CAD 的几何内核不是闹着玩的一个倒角顺序错了后面全崩。但实测了几套方案之后我发现它在标准件、简单结构件、概念验证模型这三个场景下已经能省掉大量重复劳动。下面我就把这套东西拆开从整体思路到具体操作再到踩过的坑完整讲一遍。2. 整体方案拆解text-to-cad 的技术链路是怎么跑通的2.1 从文字到几何的四个核心环节一套能用的 text-to-cad 流程不管底层用的是大语言模型还是规则引擎基本都绕不开这四个环节语义解析、参数提取、几何构造、格式导出。每个环节的靠谱程度直接决定最终模型能不能用。语义解析负责把“一个带四个安装孔的方形板”这种自然语言拆成结构化的意图。这里的关键是识别出主体形状方形板、特征操作打孔、数量四个、位置关系四角。大语言模型在这个环节表现最好因为它能处理各种不规范的表达比如“一块板子四边各切掉一个角”和“方形板四角倒圆”在语义上是一回事但字面完全不同。参数提取是把“80mm 见方”“直径 30mm”“M6 沉头孔”这些数值和标准件代号转成具体数字。这里有个坑M6 沉头孔不是一个直径值它对应一组标准尺寸包括沉孔直径、沉孔深度、通孔直径。系统需要内置一个标准件库或者能查表否则它只能猜。我见过一些方案直接把 M6 当成直径 6mm 的通孔处理结果导出的模型根本装不了螺栓。几何构造是真正生成三维形体的步骤。主流做法有两种一种是基于 OpenCASCADE 这类几何内核直接构造 B-rep 实体另一种是生成脚本代码再调用 CAD 软件的 API 执行。前者输出的是纯几何不依赖特定 CAD 软件后者输出的是带特征树的模型可编辑性更好但依赖目标软件。STEP 文件属于前者GLB 和 STL 属于网格格式没有特征树但通用性最强。格式导出决定了这个模型能进什么软件。STEP 是工业标准几乎所有 CAD 都能读保留精确的曲面和实体信息GLB 适合做可视化展示和 Web 端预览STL 是网格格式切片软件和 3D 打印用得多但精度取决于网格密度。text-to-cad 的输出格式选择本质上是在精确性、通用性、文件大小三者之间做权衡。2.2 为什么 STEP 是首选输出格式在 text-to-cad 的语境下STEP 几乎是默认的输出格式原因很直接它是精确几何不是网格近似。STL 把曲面拆成三角形一个圆柱面用 32 个三角形拼出来放大看就是多边形。STEP 保留的是数学曲面圆柱就是圆柱不管你怎么放大都是光滑的。对于需要后续加工、出工程图、做公差分析的场景STEP 是唯一选择。但 STEP 也有它的麻烦。文件结构复杂一个简单的板子可能几百行文本里面全是实体边界表示的数据。而且不同 CAD 软件对 STEP 的兼容性有差异有时候 SolidWorks 能打开的 STEPCreo 打开就报错。我实测下来AP214 协议的 STEP 文件兼容性最好AP203 次之AP242 虽然新但有些老软件不认。text-to-cad 方案在导出时如果能指定协议版本优先选 AP214。GLB 和 STL 在 text-to-cad 流程里更多是中间产物或展示用途。GLB 带材质和颜色信息适合在网页里做三维预览让用户在下载 STEP 之前先看一眼形状对不对。STL 则是 3D 打印的入口如果你生成的模型要直接丢进切片软件STL 最省事。但要注意STL 没有单位有些切片软件默认按毫米处理有些按英寸导入后先检查尺寸。2.3 方案选型自己搭还是用现成工具目前做 text-to-cad 有两条路。一条是调用现成的 API 或开源项目比如 Zoo 的 Text-to-CAD、CadQuery 配合大语言模型生成脚本。另一条是自己搭一套流程用大语言模型做语义解析用 OpenCASCADE 或 FreeCAD 的 Python API 做几何构造。现成方案的好处是开箱即用你不需要懂几何内核输入文字等结果就行。但限制也很明显可控性差生成的模型拓扑结构你不一定能改参数化程度取决于平台设计而且很多服务有调用次数限制。我试过几个在线工具简单形状没问题稍微复杂一点的结构就开始胡来比如把“加强筋”理解成“在表面加一条线”。自己搭的方案灵活得多但门槛也高。你需要至少懂一点 Python知道怎么调用 CadQuery 或者 FreeCAD 的脚本接口还要处理大语言模型输出不稳定这个问题。好处是每个环节都可控语义解析的提示词你可以调参数提取的规则你可以加几何构造的容错你可以补。对于需要批量生成零件的场景自己搭一套反而更省时间。我的建议是如果你只是偶尔用一下先试现成工具感受一下能力边界。如果你有批量需求或者对模型精度有要求直接上 CadQuery 加本地大语言模型的组合前期投入两三天后面省下来的时间是指数级的。3. 核心细节解析语义解析、参数提取与几何构造的实操要点3.1 语义解析的提示词设计技巧大语言模型在 text-to-cad 流程里干的活本质上是把非结构化描述转成结构化 JSON。比如你输入“一块 100x60x10 的铝板四角 R5 圆角中心打一个直径 20 的通孔”模型应该输出类似这样的结构{ shape: box, dimensions: {length: 100, width: 60, height: 10}, features: [ {type: fillet, radius: 5, edges: vertical_edges}, {type: hole, diameter: 20, position: center, through: true} ], material: aluminum }提示词的设计直接决定这个 JSON 的质量。我试过很多版本最后稳定下来的套路是先给角色再给输出格式最后给几个示例。角色设定成“你是一个 CAD 特征解析器只输出 JSON不输出任何解释”输出格式用 TypeScript 接口定义写清楚每个字段的类型和可选值示例给两到三个覆盖不同特征组合的案例。有个细节很关键单位必须显式指定。自然语言里“100x60”没有单位模型可能默认毫米也可能默认英寸。我在提示词里强制要求所有尺寸必须带单位如果用户没写默认按毫米处理并在 JSON 里标注unit: mm。这个习惯能避免后面几何构造时出现 25.4 倍的尺寸错误。另一个坑是特征顺序。先打孔再倒圆角和先倒圆角再打孔结果可能完全不同。提示词里要明确要求模型按“主体形状→减材特征→倒角圆角→阵列”的顺序输出特征列表。我遇到过模型把倒圆角放在打孔前面结果圆角把孔边缘也倒了出来的模型完全不能用。3.2 参数提取中的标准件处理标准件是 text-to-cad 最容易翻车的地方。M6 沉头孔、M8 螺纹孔、ISO 4762 内六角螺钉对应的孔这些都不是单一尺寸能描述的。系统需要内置一个标准件尺寸表在参数提取阶段把代号转成具体数值。以 M6 沉头孔为例根据 ISO 10642 标准沉头直径约 12.5mm沉头角度 90 度通孔直径 6.6mm。如果系统只提取到“M6”就停住几何构造阶段要么报错要么生成一个直径 6mm 的直孔螺栓头根本沉不下去。我在自己的流程里加了一个标准件映射表用 JSON 存常见螺纹孔、沉头孔、定位销孔的尺寸参数提取时先查表再构造。# 标准件尺寸映射表示例 standard_holes { M3: {through: 3.4, counterbore_d: 6.0, counterbore_depth: 3.0}, M4: {through: 4.5, counterbore_d: 8.0, counterbore_depth: 4.0}, M5: {through: 5.5, counterbore_d: 10.0, counterbore_depth: 5.0}, M6: {through: 6.6, counterbore_d: 12.5, counterbore_depth: 6.0}, M8: {through: 9.0, counterbore_d: 16.0, counterbore_depth: 8.0}, }这个表不用一次做全用到哪个加哪个。关键是在提示词里告诉模型遇到标准件代号时输出代号本身不要自己编尺寸。我一开始让模型直接输出尺寸结果它把 M6 沉头孔编成直径 10mm装上去直接干涉。3.3 几何构造的容错与布尔运算顺序几何构造阶段最怕的是布尔运算失败。两个实体求差如果面重合或者间隙小于内核容差OpenCASCADE 可能直接抛异常。text-to-cad 生成的模型往往尺寸比较“整”比如孔正好打在板边缘上或者两个特征的面完全共面这些情况最容易触发布尔失败。我的处理策略是加一层几何预检查在调用布尔运算之前先检查特征之间有没有重叠、有没有零厚度区域、有没有小于 0.01mm 的间隙。如果发现风险自动微调参数比如把孔的位置往板内移 0.5mm或者把倒角半径减小 0.1mm。这个微调对最终模型的使用几乎没有影响但能大幅降低构造失败率。布尔运算的顺序也有讲究。先做减材再做倒角是基本原则因为倒角会改变面的拓扑如果在倒角后的面上打孔孔的位置参考系就变了。对于阵列特征比如四个角的安装孔先生成一个孔再用阵列复制比直接生成四个独立的孔更稳定因为阵列是参数化的后面改孔尺寸只需要改一个地方。还有一个容易被忽略的点模型的原点位置。text-to-cad 生成的模型如果原点在随机位置导入 CAD 后装配会很麻烦。我在导出前统一把模型的最低点或者中心点移到原点STEP 文件里保留这个坐标系信息。这个操作在 CadQuery 里就是一行translate但不做的话后面每次导入都要手动对齐。4. 完整实操流程从文字描述到 STEP 文件的落地步骤4.1 环境准备与工具链搭建我目前用的工具链是Python 3.10 CadQuery 2.4 Ollama 本地大语言模型 FreeCAD 作为备用查看器。选 CadQuery 是因为它的 API 设计接近自然语言Workplane(XY).box(100, 60, 10).faces(Z).workplane().hole(20)这种写法几乎就是英文描述的直接翻译大语言模型生成这种代码的准确率比生成 OpenCASCADE 原生 C 代码高得多。Ollama 用来跑本地模型我试过 Llama 3 8B 和 Qwen 2.5 7B后者在中文描述转 JSON 的任务上表现更稳。本地跑的好处是没有调用次数限制数据也不出本机对于批量生成零件的场景很实用。如果你没有本地显卡用在线 API 也行但要注意提示词里不要放敏感尺寸。FreeCAD 装一个作为备用查看器因为 CadQuery 自带的预览功能比较弱有时候 STEP 导出成功但模型是空的用 FreeCAD 打开一眼就能看出来。安装 FreeCAD 的时候注意不要和已有的 CAD 软件装同一个盘符的同一个目录我遇到过 FreeCAD 的 Python 环境和系统 Python 冲突导致 CadQuery 导入失败。解决办法是用虚拟环境python -m venv cad_env然后在这个环境里装 CadQuery。# 创建虚拟环境并安装依赖 python -m venv cad_env source cad_env/bin/activate # Windows 用 cad_env\Scripts\activate pip install cadquery ollama4.2 提示词模板与语义解析实测我用的提示词模板经过十几版迭代现在稳定下来的版本大概长这样你是一个 CAD 特征解析器。用户会用自然语言描述一个零件你需要输出一个 JSON 对象描述这个零件的几何特征。 输出格式 { unit: mm, base_shape: {type: box|cylinder|sphere, dimensions: {...}}, features: [ {type: hole|fillet|chamfer|slot|pocket, parameters: {...}, position: {...}} ] } 规则 1. 所有尺寸必须带单位默认毫米。 2. 标准件代号如 M6直接输出代号不要编造尺寸。 3. 特征顺序主体形状 → 减材特征 → 倒角圆角 → 阵列。 4. 只输出 JSON不要输出任何解释文字。 示例输入一块 100x60x10 的板四角 R5 圆角中心打一个直径 20 的通孔。 示例输出{unit:mm,base_shape:{type:box,dimensions:{length:100,width:60,height:10}},features:[{type:hole,parameters:{diameter:20,through:true},position:{x:0,y:0}},{type:fillet,parameters:{radius:5},position:{edges:vertical}}]}实测下来这个模板对简单零件的解析准确率大概在 85% 左右。失败的情况主要是空间关系描述模糊比如“在板子左边打两个孔”左边是哪个左边距离边缘多少这种时候模型会猜一个位置猜对猜错看运气。我的处理方式是在提示词里加一条规则如果位置描述不明确输出position: ambiguous由后续流程追问用户。这样至少不会生成一个完全错误的模型。4.3 从 JSON 到 CadQuery 脚本的自动生成拿到 JSON 之后下一步是把它转成 CadQuery 脚本。这一步我写了一个 Python 函数根据base_shape和features逐条构造。核心逻辑不复杂但有几个细节要注意。import cadquery as cq def build_model(spec): # 主体形状 if spec[base_shape][type] box: d spec[base_shape][dimensions] model cq.Workplane(XY).box(d[length], d[width], d[height]) # 减材特征 for feature in spec[features]: if feature[type] hole: diameter feature[parameters][diameter] pos feature.get(position, {}) if pos.get(x) 0 and pos.get(y) 0: model model.faces(Z).workplane().hole(diameter) else: model model.faces(Z).workplane().center(pos[x], pos[y]).hole(diameter) elif feature[type] fillet: radius feature[parameters][radius] model model.edges(|Z).fillet(radius) return model # 导出 result build_model(spec) cq.exporters.export(result, output.step) cq.exporters.export(result, output.stl)这段代码里有个关键点faces(Z)选择的是 Z 方向最高的面如果模型被旋转过这个选择会出错。我在流程里强制要求所有模型在构造时保持 Z 轴朝上导出前再根据需求旋转。另一个点是edges(|Z)选择的是平行于 Z 轴的边对于竖直的圆角这是对的但如果要倒的是顶面的边得用edges(Z)。这些选择器语法是 CadQuery 的核心写错了不会报错但结果完全不对所以每生成一个模型我都会用 FreeCAD 打开检查一遍。4.4 导出参数与格式选择导出 STEP 的时候CadQuery 默认用的是 AP214 协议这个兼容性最好。但如果你需要带颜色信息得用 AP242。导出 STL 的时候网格精度是个关键参数。默认的线性偏差是 0.001mm角度偏差 0.1 弧度对于大多数 3D 打印够用了。但如果模型很大比如 500mm 以上的零件这个精度会导致 STL 文件巨大可能几百 MB。我的经验是小零件用默认精度大零件把线性偏差放到 0.01mm角度偏差放到 0.5 弧度文件大小能降一个数量级肉眼几乎看不出区别。# 高精度导出小零件 cq.exporters.export(result, small_part.step) cq.exporters.export(result, small_part.stl, tolerance0.001, angularTolerance0.1) # 低精度导出大零件 cq.exporters.export(result, large_part.stl, tolerance0.01, angularTolerance0.5)GLB 格式的导出 CadQuery 原生不支持需要先转成 STL 再用 trimesh 或者 assimp 转 GLB。我一般用 trimesh一行代码的事trimesh.load(output.stl).export(output.glb)。GLB 的好处是可以在网页里直接预览如果你要做在线 text-to-cad 工具这个格式是必须的。5. 常见问题与排查技巧实录5.1 模型导出后打不开或显示为空这是最常见的问题原因通常有三个。第一是布尔运算失败但没抛异常CadQuery 在某些情况下会生成一个空实体导出 STEP 后文件大小正常但打开是空的。排查方法是导出前打印result.val().Volume()如果体积接近零说明构造失败。第二是单位错误模型尺寸是 0.1mm 级别导入 CAD 后缩得看不见。检查 JSON 里的unit字段确保所有尺寸都是毫米。第三是 STEP 协议不兼容换 AP214 重新导出试试。我遇到过一次特别隐蔽的情况模型在 CadQuery 里显示正常导出 STEP 后用 SolidWorks 打开也是好的但用 Creo 打开就报错。后来发现是倒角半径大于了相邻面的尺寸比如在 2mm 厚的板上倒 R3 的圆角几何上不可能但 OpenCASCADE 没报错生成了一个自相交的面。Creo 的几何检查比 SolidWorks 严格所以直接拒绝。解决办法是在构造阶段加一个检查倒角半径不能超过相邻最小壁厚的 1.5 倍。5.2 标准件孔位对不上这个问题我在批量生成安装板的时候踩过好几次。用户描述“四角 M6 沉头孔”系统生成了四个直径 6.6mm 的通孔但沉头部分没做。原因是参数提取阶段只拿到了“M6”标准件映射表里查到了通孔直径但沉头直径和深度没传给几何构造。修复方法是在 JSON 里把标准件的所有相关尺寸都展开而不是只传一个代号。{ type: hole, standard: M6_counterbore, parameters: { through_diameter: 6.6, counterbore_diameter: 12.5, counterbore_depth: 6.0, angle: 90 } }另一个坑是孔位坐标的参考系。用户说“四角”系统默认把孔打在板的四个角上但没考虑边距。实际加工中孔中心距离板边至少要有 1.5 倍孔径的边距否则应力集中会导致开裂。我在流程里加了一个默认边距规则如果用户没指定边距按孔径的 2 倍自动计算并在输出里标注“边距为自动计算可根据需要调整”。5.3 批量生成时脚本崩溃批量生成几十个零件的时候最怕的是跑到一半崩溃前面生成的都白费。我的处理方式是每个零件独立一个进程用 Python 的multiprocessing或者直接写个 shell 脚本循环调用。这样即使某个零件构造失败也不会影响其他的。同时加一个日志记录每个零件的输入描述、生成的 JSON、构造结果、导出文件路径都写到一个 CSV 里方便回溯。import csv import traceback def generate_one(description, index): try: spec parse_description(description) model build_model(spec) cq.exporters.export(model, foutput/part_{index}.step) return {index: index, status: success, file: fpart_{index}.step} except Exception as e: return {index: index, status: failed, error: str(e), traceback: traceback.format_exc()} # 批量处理 results [] for i, desc in enumerate(descriptions): result generate_one(desc, i) results.append(result) # 写日志 with open(generation_log.csv, w, newline) as f: writer csv.DictWriter(f, fieldnames[index, status, file, error, traceback]) writer.writeheader() writer.writerows(results)这个日志在排查问题时特别有用。有一次批量生成 50 个法兰盘其中 3 个失败看日志发现都是因为“螺栓孔数量”被解析成了 0导致阵列特征为空。回头改提示词加一条“孔数量必须大于等于 1”问题就解决了。5.4 常见问题速查表问题现象可能原因排查方法解决方案STEP 文件打开为空布尔运算失败检查result.val().Volume()调整特征顺序加几何预检查模型尺寸差 25.4 倍单位混淆检查 JSON 的unit字段强制所有尺寸带单位默认毫米沉头孔没有沉头标准件尺寸未展开检查 JSON 里是否有counterbore_diameter完善标准件映射表倒角后模型破面倒角半径过大检查倒角半径与壁厚比限制倒角半径 ≤ 1.5 倍最小壁厚批量生成中途崩溃单个零件异常未捕获查看日志中最后一个成功索引每个零件独立进程加异常捕获Creo 打开报错但 SolidWorks 正常几何自相交用 FreeCAD 的几何检查工具减小倒角半径或调整特征顺序STL 文件过大网格精度过高检查文件大小和模型尺寸大零件降低精度到 0.01mm/0.5rad6. 进阶技巧让 text-to-cad 输出更可控的几种手段6.1 用约束提示词锁定关键尺寸大语言模型生成 JSON 的时候有时候会“自作主张”改尺寸。你说“100mm 长的板”它可能输出 100.0也可能输出 100这倒无所谓。但你说“M6 孔”它可能把通孔直径从 6.6 改成 6.5这就麻烦了。我的做法是在提示词里加约束条件所有标准件尺寸必须从映射表读取模型不得自行修改。同时在 JSON 输出后加一个校验步骤用 Python 检查标准件尺寸是否和映射表一致不一致就自动修正。def validate_standard_holes(spec, standard_table): for feature in spec[features]: if feature[type] hole and standard in feature: std feature[standard] if std in standard_table: expected standard_table[std] actual feature[parameters] for key in expected: if key in actual and abs(actual[key] - expected[key]) 0.01: actual[key] expected[key] # 自动修正 return spec这个校验步骤看起来简单但能避免 90% 的标准件尺寸错误。我试过不加校验直接生成50 个零件里有 7 个孔尺寸不对加了之后降到 0。6.2 参数化模板与变量替换如果你经常生成同一类零件比如不同尺寸的安装板可以做一个参数化模板。模板里用占位符表示可变尺寸text-to-cad 只负责提取变量值几何构造用模板加变量替换。这样做的好处是拓扑结构固定不会出现这次生成四个孔下次生成三个孔的情况。# 参数化模板示例 template import cadquery as cq L {length} W {width} T {thickness} HOLE_D {hole_diameter} HOLE_MARGIN {hole_margin} result ( cq.Workplane(XY) .box(L, W, T) .faces(Z) .workplane() .rect(L - 2*HOLE_MARGIN, W - 2*HOLE_MARGIN, forConstructionTrue) .vertices() .hole(HOLE_D) .edges(|Z) .fillet({fillet_radius}) ) 用模板的时候text-to-cad 只需要输出变量值不需要生成完整的几何构造代码。这样准确率大幅提升因为几何构造的逻辑是固定的不会因为模型“发挥”而出错。我现在的做法是简单零件用自由生成复杂零件用模板加变量。模板覆盖了 80% 的常用结构剩下的 20% 才需要模型自由发挥。6.3 多轮对话修正模型一次生成就完全正确的概率不高尤其是复杂零件。我的做法是把 text-to-cad 做成多轮对话第一轮生成初始模型用户看了预览之后说“孔太大了”“圆角改成 R3”“再加一个加强筋”系统在上一轮的 JSON 基础上修改而不是从头生成。这样每次修改只动一个特征出错概率低而且用户能逐步逼近想要的形状。实现上就是在提示词里保留上一轮的 JSON让模型输出一个diff而不是完整 JSON。比如用户说“孔改成直径 15”模型输出{features: [{index: 0, parameters: {diameter: 15}}]}系统根据这个 diff 更新原 JSON。这个方式比重新生成整个 JSON 稳定得多我实测修改准确率能到 95% 以上。6.4 导出前的几何检查清单在导出 STEP 之前我固定跑一遍检查清单能拦掉大部分低级错误体积检查result.val().Volume() 0确保不是空实体。包围盒检查result.val().BoundingBox()的尺寸和预期尺寸对比误差超过 5% 就报警。面数检查len(result.val().Faces())如果面数异常多比如超过 100说明可能有碎面或自相交。单位检查包围盒最大尺寸在 1mm 到 1000mm 之间超出这个范围大概率是单位错了。标准件检查所有标准件孔的尺寸和映射表一致。这个清单跑一遍不到一秒但能省掉后面反复打开 CAD 检查的时间。我现在的流程是生成模型 → 跑检查 → 通过则导出不通过则记录日志并跳过。批量生成 100 个零件检查能拦掉 5 到 10 个有问题的剩下的都是能直接用的。7. 我在这套流程里踩过的坑和总结的经验最开始做 text-to-cad 的时候我最大的误区是追求全自动。我以为只要提示词写得好模型就能一次生成完全正确的零件。实测下来简单零件确实可以但稍微复杂一点的结构一次通过率不到 50%。后来我调整了思路把 text-to-cad 当成一个快速草稿工具而不是最终生产工具。它负责把想法变成可编辑的几何我负责检查和修正。这个定位转变之后效率反而高了因为我不再纠结于“为什么它又错了”而是接受“它先给我一个 80 分的版本我花两分钟改到 95 分”。另一个坑是过度依赖大语言模型做参数计算。比如“四个孔均匀分布在直径 100 的圆周上”模型需要算出每个孔的坐标。它有时候算对有时候算错而且错的时候看起来很像对的。我的做法是把几何计算从模型里剥离出来模型只负责识别“圆周阵列”这个意图和“直径 100”“四个孔”这些参数具体的坐标计算用 Python 的math.cos和math.sin来做。这样模型不用做数学出错概率大幅降低。还有一个经验是保留中间产物。每次生成的 JSON、CadQuery 脚本、STEP 文件、STL 文件都存下来按时间戳或零件编号建文件夹。这样后面发现某个零件有问题可以回溯到是哪一步出的错。我有个项目批量生成了 200 多个零件三个月后客户说其中几个孔位不对我翻出当时的 JSON 和脚本十分钟就定位到是提示词里“边距”规则没写清楚改一行就重新生成了。最后说一个我觉得最有价值的技巧用 STL 做快速预览用 STEP 做最终交付。STL 生成快、文件小、任何三维软件都能秒开适合在生成过程中快速检查形状。确认形状没问题了再导出 STEP 做精确交付。我现在的流程里STL 是默认输出STEP 是按需输出。这样批量生成的时候先看 STL 预览挑出有问题的只对没问题的导出 STEP省时间也省磁盘空间。