
打開文本編輯器寫提示詞的那天晚上我其實(shí)沒抱太大希望。結(jié)果十幾秒后一個(gè)帶安裝孔和加強(qiáng)筋的底座模型就出現(xiàn)在渲染窗口里輪廓比例合理倒角也對了。那一刻我意識到text-to-cad 已經(jīng)不再是論文里的概念演示而是實(shí)實(shí)在在能進(jìn)到工作流里的效率工具。這篇內(nèi)容我打算從技術(shù)鏈路、工具選型、實(shí)操過程和踩坑實(shí)錄四個(gè)角度展開把我最近實(shí)際用下來的經(jīng)驗(yàn)一次性講透。如果你是做結(jié)構(gòu)設(shè)計(jì)、機(jī)械零件、創(chuàng)客 DIY或者單純想用自然語言把腦子里那個(gè)“大概長這樣的東西”變成可編輯的三維模型這篇文章應(yīng)該能幫你少走一個(gè)月的彎路。1. 文本到CAD到底在解決什么問題——先理清技術(shù)鏈路1.1 從自然語言到三維模型的完整鏈路很多人第一次聽到 text-to-cad第一反應(yīng)是“這不就是 AI 生成三維模型嗎”。我在接觸之前也是這么想的但真正上手之后才發(fā)現(xiàn)它和那些直接生成網(wǎng)格模型的 AI 工具走的路線完全不是一個(gè)路子。一條完整的文本到CAD流程實(shí)際上是四個(gè)環(huán)節(jié)的串聯(lián)文本理解、工程意圖解析、幾何推理、程序合成。文本理解這部分跟普通的對話式 AI 沒什么區(qū)別核心就是把你的話拆成一個(gè)個(gè)設(shè)計(jì)要素。難點(diǎn)在于工程意圖解析。舉個(gè)例子“給我一個(gè) M8 螺栓能穿過去的通孔”這句話看著簡單但 AI 需要知道 M8 螺栓的頭部直徑是 13 毫米、通孔直徑通常是 8.4 毫米或者 9 毫米取決于配合等級還需要知道孔的位置、方向、是否沉頭。這里面既有機(jī)械常識又有經(jīng)驗(yàn)值純靠語言模型硬猜是猜不出來的。等到幾何推理環(huán)節(jié)系統(tǒng)會把語言描述轉(zhuǎn)換成幾何約束和實(shí)體操作序列拉伸、旋轉(zhuǎn)、布爾運(yùn)算、倒角、陣列。最后通過程序合成生成一段可執(zhí)行的建模腳本這段腳本會被 CAD 內(nèi)核執(zhí)行才得到最終的三維實(shí)體模型。這也解釋了一個(gè)關(guān)鍵問題為什么 text-to-cad 生成的一定是帶參數(shù)的可編輯模型而不是一堆三角形面片構(gòu)成的網(wǎng)格模型。因?yàn)檎麠l鏈路走的是“程序化建?!甭肪€語言模型負(fù)責(zé)寫代碼真正的幾何運(yùn)算交給 CAD 內(nèi)核。這也是它跟那些文生圖、文生網(wǎng)格工具最本質(zhì)的區(qū)別。1.2 為什么“程序合成”是關(guān)鍵而不是直接生成網(wǎng)格實(shí)體我看過一些基于擴(kuò)散模型直接生成三維網(wǎng)格的方案坦白說作為靈感參考是有價(jià)值的但距離真正可用還有不小距離。主要原因有三個(gè)。第一網(wǎng)格模型不可編輯。你拿到一個(gè) .obj 或者 .stl 文件想改一個(gè)孔的直徑對不起做不到只能回爐重造。而 CAD 建模的核心訴求恰恰是修改和迭代零件不是一次性藝術(shù)品是要反復(fù)調(diào)整的。第二網(wǎng)格模型沒有工程語義。實(shí)體模型里有孔、有面、有倒角有尺寸約束和配合關(guān)系。網(wǎng)格模型只有三角形面片沒有哪一層是“面”、哪一坨是“孔”的概念。你沒法在網(wǎng)格模型的拓?fù)浣Y(jié)構(gòu)上做布爾運(yùn)算也沒法直接導(dǎo)出用于加工的刀具路徑。第三網(wǎng)格模型經(jīng)常是非流形或者破損的。做過 3D 打印的朋友肯定有經(jīng)驗(yàn)一個(gè)破損的網(wǎng)格模型導(dǎo)入切片軟件要么切片預(yù)覽有明顯破洞要么打印到一半懸空結(jié)構(gòu)全部塌掉。程序化生成的實(shí)體模型天然是封閉的、流形的因?yàn)槊恳徊蕉际腔跍?zhǔn)確幾何內(nèi)核的布爾運(yùn)算不存在封閉性問題和面片翻轉(zhuǎn)問題。所以我在實(shí)際使用中的結(jié)論非常明確text-to-cad 這類工具能進(jìn)入生產(chǎn)流程靠的就是“程序合成”這四個(gè)字。它的本質(zhì)不是讓 AI 直接“畫”模型而是讓 AI 去寫構(gòu)建模型的“施工圖紙”然后交給人去執(zhí)行和修改。2. 工具選型解析不同技術(shù)路線的取舍2.1 OpenSCAD、CadQuery 還是自由建?!UZ言決定成敗既然核心是程序合成那么底層用什么建模語言就決定了生成結(jié)果的可控性和可編輯性。目前市面上主流的文本到CAD工具底層基本都是這兩條路線OpenSCAD 和 CadQuery或者 FreeCAD 的 Python 接口。OpenSCAD 走的是 CSG 構(gòu)造實(shí)體幾何路線代碼風(fēng)格偏函數(shù)式你用 cube、cylinder、difference、union 這些基礎(chǔ)體素去拼出復(fù)雜模型。它的優(yōu)勢是語言簡潔規(guī)則清晰AI 非常容易生成正確的代碼。因?yàn)檎渍Z法就那幾個(gè)核心操作模型復(fù)雜一點(diǎn)也無非是嵌套多幾層。我在實(shí)際體驗(yàn)中OpenSCAD 路線的生成成功率確實(shí)更高出錯的概率明顯低。CadQuery 則是完全面向?qū)ο蠛蛥?shù)化的 Python 庫它模擬的是你在真實(shí) CAD 軟件里的建模思路先畫草圖、再拉伸、再打孔、再陣列。CadQuery 生成的代碼可讀性很強(qiáng)一個(gè)特征對應(yīng)一段代碼修改起來思路非常清晰。但它的 API 層級更深語言模型偶爾會生成不存在的函數(shù)名或者參數(shù)組合如果項(xiàng)目自身沒有做好 API 文檔的約束生成結(jié)果的穩(wěn)定性會差一些。自由建模路線比如讓 AI 輸出 STEP 或 BREP 數(shù)據(jù)目前還不太成熟理論上是未來的終極形態(tài)但現(xiàn)階段工程化落地還不夠我就不多推薦了。2.2 主流文本到CAD方案橫向?qū)Ρ任覍?shí)際用過幾個(gè)方案給它們做了個(gè)簡單的對比方便大家快速選型。方案底層建模語言生成穩(wěn)定性可編輯性適合場景基于OpenSCAD的路線OpenSCAD高中等參數(shù)少修改靠改代碼快速原型、參數(shù)化零件、創(chuàng)客DIY基于CadQuery的路線Python中高高特征樹清晰可讀性好結(jié)構(gòu)件、裝配體、復(fù)雜特征基于自由建模的路線STEP/BREP低高研究階段暫不推薦生產(chǎn)使用文生網(wǎng)格擴(kuò)散模型無/網(wǎng)格高但不可用不可編輯靈感探索、概念展示說實(shí)話現(xiàn)階段我沒有只押一個(gè)方案。日常做快速驗(yàn)證的時(shí)候我會用 OpenSCAD 路線生成速度快、成功率高幾秒鐘就能看到形態(tài)方向?qū)Σ粚?。等到要進(jìn)入細(xì)化設(shè)計(jì)、給零件加工程語義、做裝配驗(yàn)證的時(shí)候就切換到 CadQuery 路線優(yōu)點(diǎn)是可讀性和結(jié)構(gòu)化程度更好。2.3 我自己的工具組合建議如果你現(xiàn)在想開始用 text-to-cad我建議先別急于選型從最容易上手的 OpenSCAD 路線開始。理由很簡單語言足夠簡單AI 不容易寫錯你能快速建立起“文本到模型”的完整心智模型。跑通一條鏈路之后再嘗試 CadQuery 路線去生成那種帶裝配約束或者復(fù)雜孔位分布的零件。這個(gè)時(shí)候你已經(jīng)有基礎(chǔ)認(rèn)知了就能更清楚地感受到兩種路線的差異也更容易判斷自己實(shí)際項(xiàng)目里更適合哪一種。另外強(qiáng)烈建議給建模語言配一份精簡版的“API 速查表”放在提示詞上下文里。很多工具支持系統(tǒng)級提示詞注入你可以直接把 OpenSCAD 的常用函數(shù)清單、CadQuery 的常用方法簽名丟給 AI生成準(zhǔn)確率會明顯上一個(gè)大臺階。后面我在實(shí)操部分會給出具體示例。3. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)3.1 寫提示詞的技巧把“人話”翻譯成“建模語言”的能力text-to-cad 能不能出好活一半看模型能力一半看你的提示詞功底。我試過大量不同風(fēng)格的說法最后總結(jié)出一個(gè)核心原則你的提示詞越像一份設(shè)計(jì)需求文檔生成結(jié)果就越貼近預(yù)期。先看一個(gè)反面典型“做一個(gè)法蘭盤”。這種說法信息量太低了AI 不知道法蘭盤外徑多少、厚度多少、孔數(shù)幾個(gè)、孔徑多大、中心孔要不要凸臺。結(jié)果就是它根據(jù)自己的“平均印象”給你生成一個(gè)通用法蘭大概率和你想要的對不上。再看我一般怎么寫的生成一個(gè)圓形法蘭盤外徑 80mm總厚度 12mm。中心有一個(gè)直徑 20mm 的貫穿孔中心孔周圍均勻分布 6 個(gè)直徑為 6.5mm 的螺栓安裝孔螺栓孔中心圓直徑 60mm。法蘭盤外圈倒角 1mm所有邊緣需要光滑過渡。材質(zhì)按鋁合金處理只輸出三維模型。這種描述方式有三個(gè)好處尺寸信息明確、位置關(guān)系清楚、加工語義附加在上面。AI 在解析時(shí)能順暢地完成“文本要素 → 幾何約束 → 建模操作”的映射生成出來的代碼質(zhì)量自然高。還有一個(gè)進(jìn)階技巧把設(shè)計(jì)意圖講清楚而不是只報(bào)參數(shù)。比如你寫“這個(gè)支架底部要加一條加強(qiáng)筋因?yàn)槭芰Ψ较虼怪庇诘酌妗盇I 就能推理出筋應(yīng)該沿受力方向布置、厚度和高度要有一定的尺寸比例。這一段“意圖描述”往往比單純加參數(shù)更有價(jià)值。3.2 從模型文案生成可編輯的CAD腳本我拿 OpenSCAD 路線舉個(gè)例子展示一下從提示詞到最終代碼的全過程。假設(shè)需求是做一個(gè)帶提手的圓形蓋子蓋體直徑 100mm厚度 5mm中心有一個(gè)拱形提手。我先寫提示詞用 OpenSCAD 生成一個(gè)大直徑 100mm 的圓形蓋子蓋體厚度 5mm。蓋體中心上方有一個(gè)半圓拱形提手拱形內(nèi)徑 40mm提手截面為矩形寬 15mm、高 10mm。提手兩端自然融入蓋體表面連接處做圓角過渡。整體對稱輸出結(jié)構(gòu)化清晰的 OpenSCAD 代碼。實(shí)際生成出來的核心代碼大致長這樣// 蓋體 module cover_body() { cylinder(h 5, d 100, $fn 120); } // 提手橫向梁 module handle_bar() { translate([0, -7.5, 5]) cube([40, 15, 10]); } // 提手拱形部分 module handle_arch() { difference() { cylinder(h 10, d 50, $fn 120); translate([0, 0, -1]) cylinder(h 12, d 40, $fn 120); } } // 整體組合 module lid_cover() { union() { cover_body(); translate([-20, 0, 0]) handle_arch(); translate([20, 0, 0]) handle_arch(); handle_bar(); } } lid_cover();生成結(jié)果不是一次到位的。實(shí)際跑第一版的時(shí)候提手兩端和蓋體的連接處是直角過渡視覺上比較生硬。我把反饋丟回去“提手與蓋體連接處增加 5mm 圓角過渡確保連接自然平滑”AI 重新生成了帶圓角過渡的版本通過引入 hull 操作把兩個(gè)圓柱體做了外輪廓融合最終效果就順眼多了。這類基于反饋的迭代過程正是 text-to-cad 相比傳統(tǒng) CAD 建模最有趣的地方。傳統(tǒng)建模里你每改一處都是手動操作而這里你只需要描述問題代碼層面的修改由 AI 完成。3.3 后處理與參數(shù)化調(diào)整的實(shí)操記錄拿到生成代碼之后我一般不會直接用。先檢查幾個(gè)關(guān)鍵點(diǎn)尺寸數(shù)值是否符合預(yù)期、布爾運(yùn)算是否產(chǎn)生多余的內(nèi)部面、倒角和圓角是否應(yīng)用在正確的位置。檢查通過之后我會把關(guān)鍵尺寸提取成變量做成參數(shù)化模型。還是以法蘭盤為例我會把外徑、厚度、孔數(shù)、孔徑都定義成頂部變量outer_diameter 80; plate_thickness 12; center_hole_diameter 20; bolt_hole_diameter 6.5; bolt_circle_diameter 60; bolt_hole_count 6;這樣后面改一個(gè)參數(shù)整個(gè)模型自動更新。在批量生成系列化零件比如不同規(guī)格的法蘭、支架、蓋板時(shí)這個(gè)參數(shù)化能力價(jià)值極大。AI 幫你生成一次邏輯你就能用一個(gè)參數(shù)控制一個(gè)系列。還有一個(gè)實(shí)操細(xì)節(jié)篩選器設(shè)置。OpenSCAD 里我習(xí)慣把 $fn 設(shè)置為 120 以上保證圓柱面和圓弧足夠光滑但要提醒的是這種高精度掃描顯示會增加預(yù)覽計(jì)算量。我的做法是預(yù)覽時(shí)用 $fn60導(dǎo)出 STL 時(shí)再切換到 $fn200兼顧流暢度和精度。4. 常見問題與排查技巧實(shí)錄4.1 尺寸瞎編怎么辦——幾何約束的閉環(huán)text-to-cad 最常見的翻車事故就是尺寸問題。AI 有概率把兩個(gè)互相矛盾的尺寸一起寫進(jìn)代碼比如法蘭外徑 80mm、螺栓孔中心圓直徑卻寫了 90mm結(jié)果螺栓孔直接跑到法蘭外面去了。這類問題的本質(zhì)是語言模型缺少“無效結(jié)果驗(yàn)證”能力。它寫代碼的時(shí)候并沒有把幾何約束關(guān)系實(shí)時(shí)校驗(yàn)一遍。我在實(shí)踐中用了一個(gè)比較可靠的兜底方案要求生成代碼里必須包含 assert 檢查或者要求關(guān)鍵尺寸之間的關(guān)系以等式形式體現(xiàn)。示例提示詞可以這樣加一句“如果螺栓孔中心圓直徑大于外徑減去 2 倍邊距請給出警告并自動調(diào)整?!边@樣即使 AI 一開始寫錯了它也會在生成邏輯里加入約束檢查后續(xù)修正就只是參數(shù)跳動的問題。另一個(gè)笨辦法但很有效生成之后用測量工具快速核對幾個(gè)關(guān)鍵尺寸。我一般在 FreeCAD 里加載 STEP 文件直接量一遍20 秒就能排查掉大半問題。尺寸可信度在 text-to-cad 里永遠(yuǎn)不會是 100%人工抽查是必要的質(zhì)控環(huán)節(jié)。4.2 生成結(jié)果無法編輯怎么處理還有一種高頻問題AI 給出了一個(gè)很唬人的模型圖片但你發(fā)現(xiàn)代碼里所有操作都是硬編碼的改一個(gè)尺寸等于重寫整個(gè)文件。這種模型“能看不能用”比生成失敗更讓人頭痛。我的應(yīng)對思路是在提示詞里強(qiáng)制要求“模塊化拆分”。把每個(gè)特征獨(dú)立成模塊模塊內(nèi)部用參數(shù)、模塊之間通過坐標(biāo)變換組合。module base_plate(w, h, t) { translate([0, 0, 0]) cube([w, h, t]); } module mounting_holes(x, y, dia) { translate([x, y, -1]) cylinder(h 4, d dia, $fn 32); }如果你拿到的代碼已經(jīng)是硬編碼的也有補(bǔ)救辦法。先把代碼丟給 AI附加指令“識別這段代碼里所有硬編碼尺寸提取為頂部參數(shù)變量并保持模型形狀不變”連改造帶回歸測試一次完成。我試過把一段 30 行的硬編碼代碼改造成 60 行的參數(shù)化版本模型形狀完全沒變后續(xù)改尺寸就很舒服了。4.3 迭代失敗的幾個(gè)典型場景和排查思路迭代式生成過程中一個(gè)常見痛點(diǎn)是“上一輪改好了這一輪又改回去了”。AI 在生成新版本代碼時(shí)有時(shí)會丟棄之前的修正內(nèi)容。這個(gè)問題在長對話里尤其明顯上下文太長模型注意力分散。排查思路很簡單每一輪迭代之后把當(dāng)前代碼固定下來作為基準(zhǔn)下一輪提示詞里帶上“基于以下代碼修改不要重寫整個(gè)文件”。如果 AI 仍然重寫就改用 diff 工作流讓 AI 只輸出修改部分的代碼塊而不是完整模型代碼。這樣你就能以補(bǔ)丁方式手工應(yīng)用修改最大限度地避免回歸。另外一個(gè)典型場景是布爾運(yùn)算產(chǎn)生了非預(yù)期的實(shí)體碎片。舉個(gè)例子在一個(gè)圓柱體上切 6 個(gè)孔個(gè)別情況下會留下薄壁殘片或者內(nèi)部孤立實(shí)體。這種問題通常是編程上的邏輯錯誤比如差集對象并沒有完全貫通主體差集深度小于主體厚度。排查方向是檢查截切體的尺寸是否足夠穿越主體必要時(shí)把差集體的高度額外增加 0.1mm 做重疊處理。5. 應(yīng)用場景與影響范圍5.1 設(shè)計(jì)早期探索從概念到草模的效率革命text-to-cad 目前對我價(jià)值最大的使用場景并不是最終出圖而是設(shè)計(jì)早期的概念探索階段。以前做結(jié)構(gòu)設(shè)計(jì)腦海里有個(gè)初步想法要把想法變成可評估的三維形態(tài)至少要在 CAD 里經(jīng)過建模操作就算熟練工也得花一兩個(gè)小時(shí)。而且一旦形態(tài)方向不對這一兩個(gè)小時(shí)就白費(fèi)了?,F(xiàn)在我的做法是用文字描述初始概念幾分鐘內(nèi)生成三五個(gè)不同形態(tài)的候選方案快速在視覺層面和結(jié)構(gòu)層面做初篩選出一個(gè)方向后再基于參數(shù)化結(jié)構(gòu)進(jìn)入精細(xì)設(shè)計(jì)。相當(dāng)于把“三維頭腦風(fēng)暴”的成本壓縮到了原來的十分之一。這種方式的改變不僅僅是快更重要的是思維模式的改變。以前因?yàn)榻3杀靖吣銜幸鉄o意地收斂思路不敢多做幾個(gè)變體?,F(xiàn)在是零成本生成你更愿意放開腦洞去嘗試不同方向這在設(shè)計(jì)過程中是極其可貴的。5.2 非專業(yè)用戶參與定制化設(shè)計(jì)我在社區(qū)里看到不少非專業(yè)用戶的案例他們可能完全沒學(xué)過三維建模軟件但通過文本對話的方式做出了像樣的定制化零件給空氣凈化器做一個(gè)適配舊款濾芯的轉(zhuǎn)接環(huán)、給手柄加一個(gè)符合手型的舒適握把、給桌面支架打一組心形排布的孔位。這些人并不是工程師他們的優(yōu)勢在于很準(zhǔn)確地知道“我要什么”缺的只是“怎么把它畫出來”的能力。text-to-cad 恰好把后者代勞了。自然語言是人類最基本的表達(dá)方式讓 AI 做“翻譯”非專業(yè)用戶也能參與到過去需要多年軟件經(jīng)驗(yàn)才能完成的設(shè)計(jì)活動中來。不過也要潑一盆冷水非專業(yè)用戶在使用時(shí)更容易踩“尺寸瞎編”的坑。他們通常沒有預(yù)判尺寸合理性經(jīng)驗(yàn)生成什么就信什么最后打印出來裝不上、對不齊的情況屢見不鮮。所以我一直建議非專業(yè)用戶至少要學(xué)一個(gè)基礎(chǔ)技能會測量、會看尺寸。知道自己物品的關(guān)鍵尺寸并在提示詞里明確寫出來很多問題就能從源頭避免。5.3 對工程師工作流的影響邊界說到工程師群體我有幾句比較實(shí)在的觀察。text-to-cad 不會取代工程師的設(shè)計(jì)能力但它確實(shí)在擠壓常規(guī)、重復(fù)、低創(chuàng)造性建模工作的空間。批量零件庫建立、系列化規(guī)格派生、標(biāo)準(zhǔn)件變體生成這些工作以前需要工程師手動花時(shí)間做參數(shù)化建?!,F(xiàn)在只要語義描述準(zhǔn)確AI 能在幾分鐘內(nèi)生成規(guī)格系列模型。工程師的工作重心正在從“操作建模軟件”轉(zhuǎn)向“定義需求和驗(yàn)證結(jié)果”。但設(shè)計(jì)始終有它的硬邊界需要物理試驗(yàn)、強(qiáng)度仿真、加工工藝驗(yàn)證的地方AI 替代不了。任何一套文本生成的模型最終都必須經(jīng)過工程校核才能投產(chǎn)。理解這個(gè)邊界你才能真正把 tool 用成工具而不是神化成萬能方案。寫在最后的一點(diǎn)個(gè)人體會用了一段 text-to-cad 之后我的一個(gè)直觀感受是真正拉開差距的不是會寫提示詞而是你腦子里有沒有清晰的幾何和工程概念。AI 再怎么強(qiáng)它也只能作為你的“執(zhí)行放大器”負(fù)責(zé)把模糊的想法快速變成具體模型但想法本身的質(zhì)量、判斷模型是否合理的眼光仍然是人力核心價(jià)值所在。另外一個(gè)我一直在用的習(xí)慣是生成結(jié)果之后永遠(yuǎn)要親自檢查一遍關(guān)鍵尺寸和裝配關(guān)系。AI 能幫你把 80% 的重復(fù)勞動消化掉剩下 20% 的工程判斷需要你自己兜住。這種“人機(jī)各司其職”的配合方式應(yīng)該就是接下來的主流形態(tài)。如果你正準(zhǔn)備嘗試 text-to-cad我建議直接從一個(gè)小零件開始給它配好參數(shù)、寫好需求描述、跑通一次完整流程那種感覺會瞬間打開你對設(shè)計(jì)工具想象力的邊界。