NeMo Data Designer:把合成資料生成拆成可組合的欄位管線
🎨 NeMo Data Designer: Generate high-quality synthetic data from scratch or from seed data.
秒懂
- 它是什麼?
- NVIDIA 的 NeMo Data Designer 用「欄位」為單位描述合成資料集的生成流程,讓取樣器、LLM、驗證器與 MCP 工具串成一條有依賴關係的管線。本文從機制、安裝設定、限制與替代方案檢視它在什麼情況下值得採用。
- 適合誰用?
- 如果你的合成資料需求包含欄位之間的依賴關係、需要驗證器把關,或要把生成流程接到 MCP 工具並保留互動軌跡,Data Designer 的欄位模型比手寫提示腳本更值得投入。若你只是要一次性產生一批文字,或無法接受遙測與第三方相依套件的授權審查成本,直接寫 Python 呼叫模型 API 會更單純。
- 可以商用嗎?
- 可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫在最近一天內有新的提交。
- 用什麼語言寫的?
- 主要是 Python(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
它解決的是資料集結構問題,不是提示詞問題
多數人第一次接觸合成資料,做法是寫一段提示詞請模型產生一批範例。這種做法在單一欄位、單一分布的情境下夠用,但一旦資料集需要「產品類別決定評論語氣」「人口屬性決定用語」這類欄位之間的關聯,提示詞就會迅速膨脹成一坨難以維護的字串。Data Designer 的切入點正在這裡:README 把它描述為「beyond simple LLM prompting」,並列出統計分布、欄位之間的有意義關聯、以及經過驗證的輸出這三項目標。
它的使用者是已經有明確 schema 需求的人。例如要訓練一個能處理工具呼叫的模型,資料集裡必須同時有使用者請求、被呼叫的工具、工具回傳結果與最終回覆,而且這四者要彼此一致。這種資料集用一句提示詞生不出來,用 Python 腳本硬寫則會變成一堆散落的狀態管理。Data Designer 把每個欄位當成管線上的一個節點,欄位之間可以宣告依賴,這是它與提示詞產生器最根本的差別。
README 列出的能力範圍也反映了這個定位:文字、結構化資料與圖片;圖像、音訊、視訊的多模態工作流;透過本地或遠端 MCP 伺服器連接外部工具並擷取互動軌跡;用 Python、SQL、自訂驗證器與 LLM judge 驗證與評分。這些不是同一個問題的不同說法,而是同一條管線上不同階段的處理能力。
欄位、取樣器與依賴:實際的資料流長什麼樣
從 README 的快速開始範例可以看出核心抽象。使用者先建立 DataDesigner 實例與 DataDesignerConfigBuilder,接著用 add_column 逐欄加入設定。範例中第一個欄位是 SamplerColumnConfig,名稱 product_category,sampler_type 指定為 SamplerType.CATEGORY,參數用 CategorySamplerParams 給定四個值:Electronics、Clothing、Home & Kitchen、Books。第二個欄位是 LLMTextColumnConfig,名稱 review,model_alias 指向 nvidia-text,prompt 裡出現 {{ product_category }} 這個樣板變數。
這個樣板變數就是依賴關係的具體形式。review 欄位的內容取決於 product_category 欄位在該筆記錄中取到的值,而 product_category 由取樣器而非模型產生。也就是說,一筆記錄的生成順序是先由取樣器決定類別,再把類別填進提示詞,最後呼叫 LLM 產生評論。欄位順序與依賴方向由設定決定,不是由執行順序隱含決定。
README 另外提到「dependency-aware generation」與「control relationships between fields」,並指向 Column Types 與 Validators 兩份文件。從這些線索可以推斷,管線支援的不只是單層依賴,還包括驗證器掛在欄位上對輸出做檢查。至於驗證失敗時的行為是重試、丟棄還是標記,README 沒有說明,需要查 Validators 文件才能確認。
值得注意的是 model_alias 這個設計。欄位不直接指定模型名稱,而是指向一個別名,別名再對應到實際的模型與供應商設定。這讓切換模型不需要改動欄位定義,也讓 CLI 的 config models 指令有了作用對象。
安裝、金鑰與 CLI 設定:從零到第一筆預覽
安裝只有一行:pip install data-designer。README 同時給出來源安裝的路徑,git clone 之後進到目錄執行 make install。套件名稱是 data-designer,匯入名稱是 data_designer,兩者不一致,寫程式時要注意。
README 在安裝段落放了一個明確提醒:這個專案會下載並安裝額外的第三方開源軟體,使用前應檢視那些專案的授權條款。這句話不是客套,而是採用前必須納入評估的項目。
金鑰部分,預設供應商有三個:NVIDIA Build API、OpenAI、OpenRouter。對應的環境變數分別是 NVIDIA_API_KEY、OPENAI_API_KEY、OPENROUTER_API_KEY,可以只設其中一個或多個。README 沒有說明如何接上自架的模型端點,但提到 Model Configuration 文件與 CLI 的 data-designer config models 指令,這兩處應該是自訂模型的入口。
CLI 有三個子指令:data-designer config providers 用來設定模型供應商,data-designer config models 用來設定模型,data-designer config list 用來檢視目前設定。這是互動式的設定流程,適合第一次上手時把供應商與模型別名建立起來。
程式端的最小流程是:建立 DataDesigner(),建立 dd.DataDesignerConfigBuilder(),逐欄 add_column,最後呼叫 data_designer.preview(config_builder=config_builder),再對回傳值呼叫 preview.display_sample_record()。preview 這個方法名說明了它的用途是抽樣檢視,README 把它放在快速開始的第三步,等於建議在正式生成前先確認單筆記錄長什麼樣子。
另外 README 提到可以透過 npx skills add NVIDIA-NeMo/DataDesigner 安裝一個給 coding agent 用的 skill,文件說它與 Claude Code 和 Codex 一起測試過。這是可選路徑,不是必要步驟。
遙測預設開啟,這件事需要先決定
README 有一整段關於遙測的說明。文件說 Data Designer 會收集遙測以改善函式庫,資料不用於追蹤個別使用者行為,用途是彙總觀察哪些模型在合成資料生成上最受歡迎,並會與社群分享這些使用資料。關閉方式是設定環境變數 NEMO_TELEMETRY_ENABLED=false。
README 同時附上一張「Top models (YTD)」圖表,標註統計區間為 2026 年 1 月 1 日至 8 月 4 日,最後更新於 2026 年 8 月 4 日。這是專案自己揭露的彙總使用情形。
對企業環境而言,預設開啟的遙測是需要走內部流程確認的項目。關閉只需要一個環境變數,成本很低,但必須記得設定,因為預設值是開啟。README 沒有說明遙測具體傳送哪些欄位、送到哪個端點、是否包含提示詞內容。文件指向「Telemetry and Privacy」一節,該節內容不在提供的材料中,無法確認。如果你的資料集本身包含敏感內容,這個問題必須先查清楚再決定是否採用。
不適合的場景:當欄位模型變成額外負擔
最明顯的限制是相依範圍。README 明確指出預設供應商只有 NVIDIA Build API、OpenAI、OpenRouter 三家。若你的組織要求模型必須跑在自架端點或內部推論服務上,就必須先走過 config providers 與 config models 的設定流程,而這條路徑的細節不在 README 裡,需要查 Model Configuration 文件。在確認之前,不能假設它能接上任何 OpenAI 相容端點。
第二個限制是抽象成本。Data Designer 要求你把資料集拆成欄位、為每欄選一種欄位型別、必要時掛上驗證器。對於只有一個文字欄位、一次生成幾百筆就結束的任務,這層設定大於收益,直接寫一段 Python 迴圈呼叫模型 API 更快也更透明。欄位模型的價值來自重複執行與 schema 穩定性,一次性任務享受不到。
第三個限制是驗證失敗的處理策略在 README 中沒有交代。合成資料的實際痛點往往不是生成,而是生成出不合格的樣本之後怎麼辦:重試幾次、退火、還是直接丟棄並記錄。README 提到有 Python、SQL、自訂與 LLM judge 四類驗證器,但沒有描述失敗路徑。這在正式跑大規模生成之前必須從 Validators 文件確認清楚。
第四個是 Python 版本範圍。README 的徽章標示支援 Python 3.10 到 3.14。這個範圍相當新,如果你的環境還停在 3.9 或更早,就無法安裝。
與手寫生成腳本的實質差異
最直接的替代方案不是另一個框架,而是自己寫 Python:用 random 或 numpy 取樣類別欄位,把值格式化進提示詞字串,呼叫模型 API,把結果寫進 DataFrame。這個做法在欄位少、依賴淺的時候完全可行,而且沒有額外相依、沒有遙測、沒有學習曲線。
差別出現在三個地方。第一是依賴管理。手寫腳本裡,欄位之間的依賴關係隱含在程式執行順序中,改動順序就可能改動語意;Data Designer 把依賴寫進設定,prompt 裡的 {{ product_category }} 就是宣告。第二是驗證。手寫腳本要自己接驗證邏輯,Data Designer 把驗證器當成欄位管線的一部分,並提供 LLM judge 這種需要額外呼叫模型的驗證方式。第三是可續跑性。README 提到可以 preview、resume、monitor 生成過程,從小型實驗一路到大型執行;手寫腳本要自己實作中斷續跑。
反過來說,手寫腳本在可觀測性上更直接。你能看到每一次呼叫的完整請求與回應,能自由決定日誌格式,不需要理解框架的抽象層。如果你的團隊已經有一套生成與評估的內部工具,Data Designer 的欄位模型可能與它重疊,而不是互補。
README 也提到可以透過外掛擴充自訂欄位、seed reader 與處理器。這表示框架預期使用者會在邊界上擴充,而不是所有需求都能用內建欄位型別解決。擴充意味著要跟著框架的介面走,這是採用時要一併計算的維護成本。
授權、維護節奏與升級成本
授權是 Apache License 2.0,README 指向 LICENSE 檔案。這是寬鬆授權,允許商業使用與修改,但 README 在安裝段落同時提醒會一併安裝第三方開源軟體,那些套件各自的授權需要分開檢視。Apache-2.0 只涵蓋 Data Designer 本身,不涵蓋它的相依。
版本節奏可以從 release 記錄看出:v0.9.0 於 2026 年 8 月 10 日,v0.9.1 於 8 月 11 日,v0.9.2 於 9 月 3 日。0.9.x 這個版本號說明它還沒到 1.0,而 8 月 10 日到 8 月 11 日之間連出兩個版本,表示當時有需要快速修補的問題。最後一次推送是 2026 年 9 月 9 日,與 v0.9.2 相隔數日。對採用者來說,這代表 API 仍有變動的可能,鎖定版本並在升級前讀 release notes 是必要的做法。
文件結構本身也有遷移痕跡。README 說明貢獻者應編輯 fern/ 底下的文件散文,教學 notebook 的原始碼在 docs/notebook_source/*.py,而產生的 notebook 與 Fern 產物不是真實來源。另外提到舊的 MkDocs 封存仍保留在 GitHub Pages,供 0.5.7 及更早版本使用。這表示專案在 0.5.7 之後換過文件系統,如果你在網路上找到舊版教學,內容可能對應到已經不適用的 API。
升級成本主要落在兩個地方:欄位設定類別的名稱與參數,以及 CLI 設定檔的格式。README 範例中的 dd.SamplerColumnConfig、dd.CategorySamplerParams、dd.LLMTextColumnConfig 都是具體的類別名稱,這類名稱在 0.x 階段調整的機率不低。把設定集中在一處、避免散落在多個腳本中,能讓升級時的修改範圍可控。
編輯結論
如果你的合成資料需求包含欄位之間的依賴關係、需要驗證器把關,或要把生成流程接到 MCP 工具並保留互動軌跡,Data Designer 的欄位模型比手寫提示腳本更值得投入。若你只是要一次性產生一批文字,或無法接受遙測與第三方相依套件的授權審查成本,直接寫 Python 呼叫模型 API 會更單純。採用前先確認三件事:你的模型供應商是否在 NVIDIA Build API、OpenAI、OpenRouter 這三個預設選項內;你的執行環境是否允許安裝套件時一併引入的第三方相依;以及你是否需要在正式跑之前先用 preview 檢查單筆樣本,因為這個專案的文件把 preview 放在快速開始的第三步,而不是可有可無的附加功能。
社群筆記