言到STEP文件的AI建模全鏈路解析)
CAD 這行當(dāng)有個(gè)特別擰巴的地方設(shè)計(jì)師腦子里的三維結(jié)構(gòu)要變成機(jī)器能讀的幾何文件中間隔著一整套繁瑣的手工建模流程。畫(huà)個(gè)法蘭、支架、齒輪箱熟練工也得在草圖、約束、拉伸、倒角之間來(lái)回折騰幾十分鐘。而大語(yǔ)言模型現(xiàn)在能寫(xiě)代碼、能畫(huà)流程圖、能生成 SQL唯獨(dú)碰到給我生成一個(gè) STEP 文件這種需求就抓瞎——它輸出的永遠(yuǎn)是文字不是幾何。text-to-cad要解決的就是這個(gè)斷層。它的核心思路很直接把自然語(yǔ)言描述翻譯成 CAD 腳本代碼再由腳本驅(qū)動(dòng)幾何內(nèi)核生成真正的三維模型文件最終導(dǎo)出 STEP、URDF、G-code 這些下游能直接消費(fèi)的格式。適合誰(shuí)看如果你是從業(yè)多年的機(jī)械設(shè)計(jì)師想搞清楚 AI 到底能不能替你干重復(fù)建模的活如果你是搞機(jī)器人仿真的工程師天天被 URDF 手寫(xiě)折磨或者你是做增材制造的想讓 G-code 生成流程自動(dòng)化——這篇內(nèi)容都值得你花時(shí)間讀完。下面我按實(shí)際落地的順序把這條鏈路從頭到尾拆一遍。1. 從一句話到三維實(shí)體text-to-cad 到底在翻譯什么1.1 自然語(yǔ)言和幾何內(nèi)核之間隔著的三層鴻溝很多人第一次聽(tīng)到文字生成 CAD腦子里想的是我說(shuō)個(gè)杯子它就給我個(gè)杯子。實(shí)際遠(yuǎn)沒(méi)這么簡(jiǎn)單。自然語(yǔ)言描述的是意圖而 CAD 文件描述的是精確幾何中間至少隔著三層翻譯。第一層是語(yǔ)義到參數(shù)的映射。一個(gè)直徑 50mm、厚 10mm 的法蘭盤(pán)中心開(kāi) 20mm 通孔邊緣均布 6 個(gè) 8mm 螺栓孔——這句話里直徑、厚度、孔徑、孔數(shù)、分布方式都是明確參數(shù)但均布這個(gè)詞機(jī)器需要理解成沿圓周等角度分布邊緣需要理解成距離外圓某個(gè)合理距離。這些隱含知識(shí)模型必須從訓(xùn)練數(shù)據(jù)里學(xué)到。第二層是參數(shù)到建模操作的映射。有了參數(shù)還得決定用什么建模原語(yǔ)法蘭盤(pán)主體是拉伸一個(gè)圓環(huán)還是旋轉(zhuǎn)一個(gè)截面螺栓孔是用布爾減運(yùn)算挖出來(lái)還是用陣列特征生成不同的操作路徑生成的幾何拓?fù)浣Y(jié)構(gòu)不一樣下游能不能順利做有限元分析、能不能被 URDF 正確引用差別很大。第三層是建模操作到腳本代碼的映射。這一步才是 text-to-cad 真正落地的關(guān)鍵。它不直接操作幾何內(nèi)核而是生成一段可執(zhí)行的腳本——通常是 CadQuery 或 OpenSCAD 這類基于代碼的 CAD 庫(kù)的 Python 腳本。腳本執(zhí)行后幾何內(nèi)核OpenCASCADE 或 CGAL才真正計(jì)算出 B-rep 實(shí)體最后導(dǎo)出成 STEP 或 STL。提示理解這三層鴻溝很重要因?yàn)樗鼪Q定了你評(píng)估一個(gè) text-to-cad 方案時(shí)該看什么——不是看它生成的模型像不像而是看它生成的腳本能不能改、參數(shù)能不能調(diào)、導(dǎo)出的 STEP 拓?fù)涫遣皇歉蓛舻摹?.2 為什么選腳本代碼作為中間表示而不是直接生成幾何這里有個(gè)設(shè)計(jì)決策值得展開(kāi)說(shuō)。理論上大模型可以直接輸出頂點(diǎn)坐標(biāo)和面片索引拼出一個(gè)網(wǎng)格模型。但實(shí)際工程里沒(méi)人這么干原因有三個(gè)??删庉嬓浴D_本是參數(shù)化的你把diameter 50改成diameter 60重新執(zhí)行就得到新模型所有特征自動(dòng)更新。而一堆頂點(diǎn)坐標(biāo)改起來(lái)就是災(zāi)難牽一發(fā)動(dòng)全身??沈?yàn)證性。腳本是文本可以靜態(tài)檢查語(yǔ)法、可以單元測(cè)試、可以做版本控制。你甚至可以讓模型自己檢查生成的腳本有沒(méi)有引用未定義的變量。網(wǎng)格數(shù)據(jù)沒(méi)法這么玩。與現(xiàn)有工具鏈的兼容性。CadQuery 生成的實(shí)體是真正的 B-rep能導(dǎo)出 STEP能被 FreeCAD、SolidWorks 等主流軟件打開(kāi)繼續(xù)編輯。而網(wǎng)格模型導(dǎo)出 STEP 后往往是一堆碎面下游根本沒(méi)法用。所以 text-to-cad 的技術(shù)路線基本定型為L(zhǎng)LM 生成參數(shù)化腳本 → 腳本執(zhí)行 → 幾何內(nèi)核計(jì)算 → 導(dǎo)出標(biāo)準(zhǔn)格式。這條鏈路里L(fēng)LM 只負(fù)責(zé)最前面那段翻譯后面的活交給成熟的幾何工具各司其職。1.3 一個(gè)最小可跑通的例子長(zhǎng)什么樣光說(shuō)原理太虛直接看代碼。假設(shè)你輸入生成一個(gè) 40mm 見(jiàn)方、高 20mm、中心有 10mm 通孔的方塊一個(gè)合格的 text-to-cad 系統(tǒng)應(yīng)該輸出類似這樣的 CadQuery 腳本import cadquery as cq # 參數(shù)定義 length 40.0 width 40.0 height 20.0 hole_dia 10.0 # 建模 result ( cq.Workplane(XY) .box(length, width, height) .faces(Z) .workplane() .hole(hole_dia) ) # 導(dǎo)出 cq.exporters.export(result, block_with_hole.step)這段腳本里參數(shù)和建模邏輯是分離的改尺寸只動(dòng)上面四行。faces(Z)選中頂面.workplane()在頂面建立工作平面.hole()挖通孔——這套鏈?zhǔn)?API 是 CadQuery 的典型寫(xiě)法。模型要理解中心有通孔對(duì)應(yīng)的是在頂面工作平面上打一個(gè)貫穿的孔而不是在側(cè)面或者底面。跑通這個(gè)例子你就理解了整條鏈路。剩下的復(fù)雜度都在于怎么讓模型穩(wěn)定地生成正確的腳本以及怎么處理更復(fù)雜的幾何關(guān)系。2. 拆解 text-to-cad 的技術(shù)棧LLM、幾何內(nèi)核與格式轉(zhuǎn)換2.1 大模型在這里扮演的角色和它的能力邊界LLM 在 text-to-cad 里干的是翻譯官的活但它不是萬(wàn)能的。實(shí)測(cè)下來(lái)它的能力邊界大致是這樣的。擅長(zhǎng)的識(shí)別常見(jiàn)機(jī)械零件的描述模式法蘭、支架、軸、齒輪毛坯把尺寸參數(shù)正確映射到變量選擇合適的建模原語(yǔ)拉伸、旋轉(zhuǎn)、掃掠生成語(yǔ)法正確的 CadQuery 或 OpenSCAD 代碼。對(duì)于訓(xùn)練數(shù)據(jù)里出現(xiàn)過(guò)的零件類型一次生成成功率相當(dāng)高。不擅長(zhǎng)的處理復(fù)雜的空間約束關(guān)系這個(gè)孔必須和那個(gè)槽對(duì)齊理解行業(yè)特定的公差標(biāo)注生成需要多步布爾運(yùn)算的復(fù)雜裝配體。還有一類高頻錯(cuò)誤是單位混淆——模型有時(shí)候會(huì)把毫米當(dāng)成米或者把直徑當(dāng)成半徑。完全靠不住的涉及具體工程標(biāo)準(zhǔn)的細(xì)節(jié)比如螺紋規(guī)格、鍵槽尺寸、倒角標(biāo)準(zhǔn)。這些必須靠外部知識(shí)庫(kù)或者人工校驗(yàn)補(bǔ)上。所以實(shí)際部署時(shí)通常會(huì)在 LLM 后面加一層校驗(yàn)和修正檢查生成的腳本能不能跑通、參數(shù)范圍是否合理、導(dǎo)出的實(shí)體是不是有效的閉合體。跑不通就讓模型重試或者回退到模板。2.2 CadQuery 與 OpenSCAD兩條主流腳本路線的取舍目前 text-to-cad 領(lǐng)域腳本層基本是 CadQuery 和 OpenSCAD 二選一。兩者差別很大選錯(cuò)了后面全是坑。對(duì)比維度CadQueryOpenSCAD底層內(nèi)核OpenCASCADEB-repCGALCSG導(dǎo)出 STEP原生支持拓?fù)涓蓛舨恢С种荒軐?dǎo) STL參數(shù)化能力強(qiáng)支持選擇器鏈?zhǔn)讲僮髦锌孔兞亢湍K學(xué)習(xí)曲線較陡API 豐富平緩語(yǔ)法簡(jiǎn)單適合場(chǎng)景機(jī)械零件、需要下游編輯快速原型、3D 打印LLM 生成難度較高API 組合多較低語(yǔ)法規(guī)整如果你的下游是機(jī)器人仿真需要 URDF、是數(shù)控加工需要 STEP、是要在 SolidWorks 里繼續(xù)改那必須選 CadQuery因?yàn)橹挥兴軐?dǎo)出拓?fù)涓蓛舻?STEP。如果只是 3D 打印個(gè)擺件OpenSCAD 足夠而且 LLM 生成 OpenSCAD 的準(zhǔn)確率明顯更高因?yàn)樗恼Z(yǔ)法更接近傳統(tǒng)編程語(yǔ)言。我個(gè)人的經(jīng)驗(yàn)是做工程用途選 CadQuery做創(chuàng)意用途選 OpenSCAD。別想著一個(gè)方案通吃兩者的幾何表示根本不同混用會(huì)出大問(wèn)題。2.3 STEP、URDF、G-code三種輸出格式各自服務(wù)誰(shuí)text-to-cad 生成模型只是第一步真正體現(xiàn)價(jià)值的是它能導(dǎo)出什么格式。這三種格式對(duì)應(yīng)三條完全不同的下游鏈路。STEP是 CAD 領(lǐng)域的通用交換格式存的是精確 B-rep 幾何。它的價(jià)值在于跨軟件兼容——CadQuery 生成的 STEP 能被 SolidWorks、UG、Creo、FreeCAD 打開(kāi)繼續(xù)做裝配、出工程圖、做有限元前處理。如果你要把 AI 生成的模型接入現(xiàn)有設(shè)計(jì)流程STEP 是唯一選擇。URDF是機(jī)器人描述格式存的是連桿的幾何、質(zhì)量、慣性、關(guān)節(jié)關(guān)系。它本身不存幾何而是引用 STL 或 STEP 文件。text-to-cad 在這里的價(jià)值是批量生成機(jī)器人連桿——你描述一個(gè)六軸機(jī)械臂的各段尺寸它生成對(duì)應(yīng)的幾何文件加 URDF 描述直接導(dǎo)入 CoppeliaSim 或 Gazebo 就能仿真。手寫(xiě) URDF 是出了名的痛苦這一步自動(dòng)化省的時(shí)間最多。G-code是數(shù)控加工和 3D 打印的指令格式存的是刀具路徑。從幾何到 G-code 需要切片或 CAM 處理text-to-cad 通常不直接生成 G-code而是生成幾何后調(diào)用切片軟件如 Cura 的引擎或 CAM 庫(kù)如 FreeCAD 的 Path 模塊來(lái)生成。它的價(jià)值在于打通從描述到加工的最后一公里。注意URDF 導(dǎo)入 CoppeliaSim 時(shí)幾何文件的路徑和單位經(jīng)常出問(wèn)題。建議生成 URDF 時(shí)統(tǒng)一用米做單位幾何文件用 STL 而非 STEP因?yàn)?CoppeliaSim 對(duì) STL 的支持更穩(wěn)定。3. 動(dòng)手搭一條最小鏈路從描述到 STEP 文件3.1 環(huán)境準(zhǔn)備里最容易翻車(chē)的依賴問(wèn)題要跑通 text-to-cad環(huán)境配置是第一個(gè)坎。CadQuery 依賴 OpenCASCADE這個(gè)庫(kù)在 Windows 上的安裝歷史包袱很重很多人卡在 C 運(yùn)行庫(kù)報(bào)錯(cuò)上。推薦用 conda 而不是 pip 裝 CadQuery因?yàn)?conda 會(huì)把 OpenCASCADE 的二進(jìn)制依賴一起處理好conda create -n text2cad python3.10 conda activate text2cad conda install -c conda-forge cadquery如果你非要用 pip那得先確保系統(tǒng)裝了對(duì)應(yīng)版本的 Visual C 運(yùn)行庫(kù)。網(wǎng)上那些安裝 CAD 出現(xiàn) C2005 錯(cuò)誤的帖子本質(zhì)都是運(yùn)行庫(kù)版本不匹配跟 CAD 軟件本身沒(méi)關(guān)系。裝 CadQuery 遇到類似報(bào)錯(cuò)思路一樣先補(bǔ)運(yùn)行庫(kù)再裝庫(kù)。LLM 那端如果你用本地模型需要裝 transformers 和對(duì)應(yīng)的推理框架如果用 API裝個(gè) requests 或 openai 的 SDK 就行。本地跑的話7B 級(jí)別的代碼模型如 CodeLlama、DeepSeek-Coder在 CadQuery 生成上勉強(qiáng)能用但復(fù)雜零件還是得靠更大的模型。3.2 提示詞工程怎么描述才能讓模型生成對(duì)的腳本這一步是 text-to-cad 實(shí)操里最影響成功率的環(huán)節(jié)。同樣一個(gè)零件描述方式不同生成質(zhì)量天差地別。我總結(jié)了幾條實(shí)用規(guī)則。規(guī)則一先給整體形狀再給局部特征。別說(shuō)一個(gè)帶孔的方塊孔在中心方塊 40mm要說(shuō)一個(gè) 40mm 見(jiàn)方的方塊中心有一個(gè)通孔。模型對(duì)整體→局部的描述順序處理得更好。規(guī)則二尺寸必須帶單位且統(tǒng)一。全程用毫米別一會(huì)兒毫米一會(huì)兒厘米。模型對(duì)單位的推理能力很弱混用必出錯(cuò)。規(guī)則三明確建?;鶞?zhǔn)。說(shuō)清楚零件以哪個(gè)面為底面、以哪個(gè)軸為中心。比如以 XY 平面為底面沿 Z 軸拉伸比豎著放精確得多。規(guī)則四復(fù)雜特征拆成多句。一個(gè)零件如果有五個(gè)特征就寫(xiě)五句話每句一個(gè)特征。模型對(duì)長(zhǎng)句里嵌套多個(gè)幾何關(guān)系的解析能力有限。一個(gè)實(shí)際可用的提示詞模板長(zhǎng)這樣用 CadQuery 生成以下零件 - 整體直徑 80mm、高 30mm 的圓柱 - 特征1中心沿軸向開(kāi)直徑 30mm 的通孔 - 特征2頂面均布 8 個(gè)直徑 6mm 的孔分布圓直徑 60mm - 單位毫米 - 導(dǎo)出為 STEP 文件3.3 腳本執(zhí)行與幾何校驗(yàn)怎么判斷生成的模型是對(duì)的模型生成了腳本跑通了導(dǎo)出了 STEP不代表模型就是對(duì)的。我見(jiàn)過(guò)太多次腳本沒(méi)報(bào)錯(cuò)但幾何完全不對(duì)的情況——比如孔打穿了整個(gè)零件、特征位置偏移、實(shí)體不閉合。校驗(yàn)分三層。第一層是語(yǔ)法和運(yùn)行校驗(yàn)?zāi)_本能不能跑通這個(gè)最簡(jiǎn)單try-except 就能捕獲。第二層是幾何有效性校驗(yàn)用 CadQuery 的isValid()方法檢查實(shí)體是不是有效的閉合體solid result.val() if not solid.isValid(): print(幾何無(wú)效需要重新生成)第三層是尺寸校驗(yàn)把生成實(shí)體的包圍盒尺寸和預(yù)期對(duì)比bb result.val().BoundingBox() print(fX: {bb.xlen}, Y: {bb.ylen}, Z: {bb.zlen})如果包圍盒尺寸和描述對(duì)不上說(shuō)明模型理解錯(cuò)了。這三層校驗(yàn)串起來(lái)就能自動(dòng)篩掉大部分錯(cuò)誤結(jié)果只把靠譜的交給人工確認(rèn)。3.4 導(dǎo)出 STEP 之后怎么驗(yàn)證文件真的能用STEP 文件導(dǎo)出后別急著往下游送先做兩個(gè)驗(yàn)證。一是用 FreeCAD 打開(kāi)看看。FreeCAD 是免費(fèi)開(kāi)源的對(duì) STEP 的兼容性好能直接看到幾何形狀、檢查有沒(méi)有破面。如果 FreeCAD 打開(kāi)是空的或者報(bào)錯(cuò)說(shuō)明 STEP 文件本身有問(wèn)題。二是檢查文件大小和實(shí)體數(shù)量。一個(gè)正常的簡(jiǎn)單零件 STEP 文件通常幾十 KB 到幾 MB。如果只有幾 KB可能是空文件如果幾十 MB可能是生成了大量碎面。用文本編輯器打開(kāi) STEP 文件它是 ASCII 格式搜索MANIFOLD_SOLID_BREP關(guān)鍵字正常應(yīng)該只有一個(gè)或幾個(gè)如果出現(xiàn)幾百個(gè)說(shuō)明幾何拓?fù)浜芩橄掠斡闷饋?lái)會(huì)出問(wèn)題。4. 踩過(guò)的坑text-to-cad 實(shí)操中的典型故障與排查4.1 模型生成的腳本看起來(lái)對(duì)但幾何是錯(cuò)的這是最高頻的坑也是最難排查的。腳本語(yǔ)法沒(méi)問(wèn)題跑起來(lái)也不報(bào)錯(cuò)但生成的幾何和預(yù)期完全不是一回事。我遇到過(guò)一個(gè)典型案例描述一個(gè) L 形支架兩臂各長(zhǎng) 50mm寬 20mm厚 5mm模型生成的腳本用兩個(gè)長(zhǎng)方體做布爾并運(yùn)算但兩個(gè)長(zhǎng)方體的位置沒(méi)對(duì)齊結(jié)果是一個(gè)錯(cuò)位的十字形而不是 L 形。腳本里每個(gè)box()調(diào)用都是對(duì)的錯(cuò)的是translate()的坐標(biāo)。排查這類問(wèn)題不能只看腳本必須看幾何。我的做法是生成腳本后先導(dǎo)出 STL用網(wǎng)格查看器如 MeshLab快速看一眼形狀。STL 加載快能立刻發(fā)現(xiàn)形狀錯(cuò)誤。確認(rèn)形狀對(duì)了再導(dǎo) STEP 做精細(xì)校驗(yàn)。根因通常是模型對(duì)空間坐標(biāo)系的理解不穩(wěn)定。它知道要并兩個(gè)體但對(duì)并的位置關(guān)系推理不可靠。解決辦法是在提示詞里顯式給出坐標(biāo)比如第一個(gè)長(zhǎng)方體中心在原點(diǎn)第二個(gè)長(zhǎng)方體中心在 (25, 10, 0)把空間關(guān)系變成明確的數(shù)字。4.2 單位、坐標(biāo)系和布爾運(yùn)算的連鎖錯(cuò)誤單位錯(cuò)誤往往不是孤立的它會(huì)引發(fā)一連串連鎖反應(yīng)。模型把毫米當(dāng)米生成的零件尺寸差 1000 倍然后布爾運(yùn)算時(shí)因?yàn)槌叽绮町愡^(guò)大幾何內(nèi)核可能直接算失敗或者算出一個(gè)退化的結(jié)果。坐標(biāo)系錯(cuò)誤更隱蔽。CadQuery 默認(rèn)工作平面是 XYZ 軸向上。但有些模型會(huì)假設(shè) Y 軸向上這是很多圖形學(xué)庫(kù)的習(xí)慣。如果提示詞里沒(méi)說(shuō)清楚模型可能按 Y 軸向上生成結(jié)果零件躺在 XY 平面上下游裝配時(shí)方向全錯(cuò)。布爾運(yùn)算的錯(cuò)誤通常出在共面上。兩個(gè)體如果有一個(gè)面完全重合布爾并運(yùn)算可能產(chǎn)生退化邊導(dǎo)出的 STEP 在別的軟件里打開(kāi)會(huì)報(bào)錯(cuò)。規(guī)避方法是在設(shè)計(jì)時(shí)讓特征之間有微小的重疊或間隙別讓面完全貼合。提示在提示詞里固定寫(xiě)一句使用 CadQuery 默認(rèn)坐標(biāo)系Z 軸向上單位為毫米能規(guī)避掉一大半坐標(biāo)系和單位問(wèn)題。這句話我每次都加幾乎成了肌肉記憶。4.3 復(fù)雜裝配體生成失敗時(shí)的降級(jí)策略讓模型一次生成一個(gè)包含十幾個(gè)零件的裝配體成功率很低。這時(shí)候需要降級(jí)策略拆成單個(gè)零件分別生成再用代碼組裝。具體做法是先讓模型生成每個(gè)零件的腳本逐個(gè)驗(yàn)證通過(guò)后再寫(xiě)一個(gè)裝配腳本用 CadQuery 的Assembly類把零件按位置關(guān)系組裝起來(lái)。這樣每一步都可控出錯(cuò)也好定位。from cadquery import Assembly, Location assy Assembly() assy.add(part1, namebase, locLocation((0, 0, 0))) assy.add(part2, namearm, locLocation((0, 0, 30))) assy.save(assembly.step)如果連單個(gè)零件都生成不好那就再降一級(jí)用模板。把常見(jiàn)零件法蘭、支架、軸套做成參數(shù)化模板模型只負(fù)責(zé)填參數(shù)不負(fù)責(zé)生成建模邏輯。這樣犧牲了靈活性但換來(lái)了穩(wěn)定性。實(shí)際生產(chǎn)環(huán)境里模板參數(shù)填充的方案反而比純生成更常用因?yàn)榭煽亍?.4 從 STEP 到 URDF 轉(zhuǎn)換時(shí)的常見(jiàn)斷鏈STEP 轉(zhuǎn) URDF 是機(jī)器人仿真里的高頻需求但這條鏈路坑特別多。URDF 需要的是每個(gè)連桿的幾何、質(zhì)量、慣性矩陣、關(guān)節(jié)類型和位置而 STEP 只提供幾何。質(zhì)量和慣性得另外算通常用 CAD 軟件的質(zhì)量屬性功能或者用 Python 的 trimesh 庫(kù)從網(wǎng)格估算。幾何格式上URDF 引用的是 STL 或 DAE不是 STEP。所以流程是 STEP → STL → URDF。轉(zhuǎn)換時(shí)要注意單位URDF 標(biāo)準(zhǔn)用米而 CAD 通常用毫米轉(zhuǎn)換時(shí)要除以 1000。忘了這一步導(dǎo)入 CoppeliaSim 后機(jī)器人會(huì)大 1000 倍整個(gè)場(chǎng)景都廢了。還有一個(gè)坑是坐標(biāo)系原點(diǎn)。URDF 里每個(gè)連桿的幾何是相對(duì)于連桿坐標(biāo)系定義的而 STEP 里的零件是相對(duì)于全局坐標(biāo)系。轉(zhuǎn)換時(shí)需要重新計(jì)算每個(gè)連桿的局部原點(diǎn)通常取關(guān)節(jié)位置或者質(zhì)心。這一步手工做很繁瑣建議寫(xiě)腳本自動(dòng)處理。5. 把 text-to-cad 接進(jìn)真實(shí)工作流的幾種姿勢(shì)5.1 批量生成標(biāo)準(zhǔn)件參數(shù)表驅(qū)動(dòng)的自動(dòng)化text-to-cad 最實(shí)用的場(chǎng)景不是生成復(fù)雜零件而是批量生成標(biāo)準(zhǔn)件。比如你要做一系列不同規(guī)格的法蘭與其一個(gè)個(gè)描述不如做一張參數(shù)表讓腳本循環(huán)生成。import csv import cadquery as cq with open(flange_specs.csv) as f: for row in csv.DictReader(f): result ( cq.Workplane(XY) .circle(float(row[outer_dia]) / 2) .extrude(float(row[thickness])) .faces(Z).workplane() .hole(float(row[bore_dia])) ) cq.exporters.export(result, fflange_{row[id]}.step)這種模式下LLM 只用來(lái)生成一次模板腳本后面全靠參數(shù)驅(qū)動(dòng)。效率極高而且結(jié)果完全可控。我見(jiàn)過(guò)有團(tuán)隊(duì)用這種方式把幾百個(gè)標(biāo)準(zhǔn)件的建模時(shí)間從幾天壓縮到幾分鐘。5.2 與現(xiàn)有 CAD 軟件的協(xié)作生成后繼續(xù)手工精修別指望 text-to-cad 一步到位生成能直接投產(chǎn)的零件。它的定位應(yīng)該是生成初稿然后設(shè)計(jì)師在 CAD 軟件里精修。實(shí)際流程是text-to-cad 生成 STEP → 導(dǎo)入 SolidWorks/FreeCAD → 設(shè)計(jì)師加倒角、圓角、公差、螺紋特征 → 出工程圖。這樣設(shè)計(jì)師省掉了從零建模的時(shí)間只需要做精修效率提升明顯。這里有個(gè)技巧生成時(shí)把特征做粗一點(diǎn)別讓模型去處理倒角、圓角這些細(xì)節(jié)。這些特征在 CAD 軟件里手工加更快更準(zhǔn)而且模型生成這些細(xì)節(jié)的失敗率很高。讓 AI 干它擅長(zhǎng)的主體形狀、孔位布局讓設(shè)計(jì)師干他擅長(zhǎng)的工藝細(xì)節(jié)。5.3 面向增材制造從描述直接到可打印文件3D 打印場(chǎng)景下text-to-cad 的鏈路可以更短描述 → CadQuery 腳本 → STL → 切片軟件 → G-code。中間不需要 STEP因?yàn)?3D 打印只認(rèn)網(wǎng)格。這個(gè)場(chǎng)景下OpenSCAD 反而更合適因?yàn)樗?CSG 表示天然適合生成網(wǎng)格而且 LLM 生成 OpenSCAD 的準(zhǔn)確率更高。一個(gè)典型的提示詞是生成一個(gè)壁厚 2mm、內(nèi)部中空的立方體容器邊長(zhǎng) 50mm頂部開(kāi)口OpenSCAD 幾行就搞定。要注意的是壁厚和懸垂角。模型生成的幾何可能包含不適合打印的薄壁或大懸垂切片時(shí)會(huì)出問(wèn)題。建議生成后先在切片軟件里預(yù)覽檢查有沒(méi)有需要加支撐的地方。這一步目前還得人工判斷AI 還替代不了。5.4 機(jī)器人仿真鏈路URDF 自動(dòng)生成的落地要點(diǎn)機(jī)器人仿真是我認(rèn)為 text-to-cad 價(jià)值最高的場(chǎng)景。手寫(xiě) URDF 又臭又長(zhǎng)一個(gè)六軸機(jī)械臂的 URDF 動(dòng)輒幾百行還容易寫(xiě)錯(cuò)。用 text-to-cad 生成效率提升是數(shù)量級(jí)的。落地要點(diǎn)有三個(gè)。第一連桿幾何用簡(jiǎn)單形狀。別生成復(fù)雜的曲面連桿用長(zhǎng)方體、圓柱體近似就行仿真里看不出來(lái)但生成成功率高得多。第二關(guān)節(jié)位置要精確。關(guān)節(jié)的 origin 決定了運(yùn)動(dòng)學(xué)這個(gè)必須準(zhǔn)建議在提示詞里顯式給出每個(gè)關(guān)節(jié)的坐標(biāo)。第三慣性參數(shù)用估算。質(zhì)量按體積乘密度估慣性矩陣用簡(jiǎn)化公式算仿真精度要求不高的話夠用。生成完 URDF 后導(dǎo)入 CoppeliaSim 或 Gazebo 測(cè)試。如果機(jī)器人動(dòng)起來(lái)姿態(tài)不對(duì)八成是關(guān)節(jié)坐標(biāo)系或者旋轉(zhuǎn)軸方向錯(cuò)了回去檢查 URDF 里的axis和origin標(biāo)簽。6. 幾個(gè)提高成功率的實(shí)戰(zhàn)心得6.1 提示詞里必須顯式聲明的幾件事踩了足夠多的坑之后我總結(jié)出一份必寫(xiě)清單每次生成前都檢查一遍單位毫米還是米坐標(biāo)系Z 軸向上還是 Y 軸向上建?;鶞?zhǔn)以哪個(gè)面為底面輸出格式STEP 還是 STL是否需要參數(shù)化變量定義還是硬編碼這五條寫(xiě)清楚成功率能提升一大截。尤其是單位和坐標(biāo)系不寫(xiě)的話模型就隨機(jī)選結(jié)果不可預(yù)測(cè)。6.2 生成結(jié)果的自動(dòng)化校驗(yàn)?zāi)_本手工校驗(yàn)太慢建議寫(xiě)個(gè)校驗(yàn)?zāi)_本把生成、執(zhí)行、校驗(yàn)串起來(lái)def generate_and_validate(prompt, expected_bbox): script call_llm(prompt) try: exec(script) except Exception as e: return False, f執(zhí)行失敗: {e} solid result.val() if not solid.isValid(): return False, 幾何無(wú)效 bb solid.BoundingBox() actual (bb.xlen, bb.ylen, bb.zlen) if not all(abs(a - e) 1.0 for a, e in zip(actual, expected_bbox)): return False, f尺寸不符: 期望{expected_bbox}, 實(shí)際{actual} return True, 通過(guò)這個(gè)腳本能自動(dòng)篩掉大部分錯(cuò)誤結(jié)果只把通過(guò)的交給人工。實(shí)際用下來(lái)能省掉七八成的人工檢查時(shí)間。6.3 什么時(shí)候該放棄 AI 生成回到手工建模不是所有零件都適合 text-to-cad。遇到這幾種情況我建議直接手工建模別跟 AI 較勁零件有復(fù)雜的自由曲面如葉輪、流道需要精確的工程標(biāo)準(zhǔn)特征如螺紋、花鍵、齒輪齒形裝配關(guān)系復(fù)雜涉及大量配合約束對(duì)公差和表面粗糙度有嚴(yán)格要求這些場(chǎng)景下AI 生成的模型要么形狀不對(duì)要么精度不夠改起來(lái)比自己建還慢。text-to-cad 的甜區(qū)是規(guī)則幾何、參數(shù)明確、精度要求不高的零件認(rèn)清這個(gè)邊界才能把它的價(jià)值最大化。6.4 把生成腳本納入版本管理的習(xí)慣最后說(shuō)個(gè)工程習(xí)慣把 LLM 生成的腳本存進(jìn) Git。每次生成的腳本、對(duì)應(yīng)的提示詞、校驗(yàn)結(jié)果都記錄下來(lái)。這樣做有三個(gè)好處一是出問(wèn)題能回溯知道哪個(gè)版本的腳本有問(wèn)題二是好的提示詞能復(fù)用慢慢積累成自己的提示詞庫(kù)三是團(tuán)隊(duì)協(xié)作時(shí)別人能看到你是怎么描述零件的減少溝通成本。我現(xiàn)在的做法是每個(gè)零件一個(gè)文件夾里面放prompt.txt、model.py、output.step和validation.log。時(shí)間長(zhǎng)了這就是一個(gè)可復(fù)用的零件生成知識(shí)庫(kù)比任何文檔都實(shí)用。這套東西我用了大半年最大的體會(huì)是text-to-cad 不是要取代設(shè)計(jì)師而是把設(shè)計(jì)師從重復(fù)勞動(dòng)里解放出來(lái)。它擅長(zhǎng)的是把明確的需求快速變成幾何初稿不擅長(zhǎng)的是處理模糊需求和工藝細(xì)節(jié)。把這兩件事分清楚用起來(lái)就順手了。