模型 / 資料集
NVIDIA-NeMo/Gym avatar
NVIDIA-NeMo/Gym

NeMo Gym:把 agent 評測從腳本升級成可重複執行的環境系統

Evaluate and improve models and agents using environments

1,187 個 Star333 個 ForkPythonApache-2.0

秒懂

它是什麼?
NVIDIA 的 NeMo Gym 把資料集、agent harness、verifier 與狀態包成一個「環境」單位,讓評測與 RL 訓練共用同一套介面。它目前仍在早期開發階段,README 自己也這樣寫。
適合誰用?
如果你要評測的是有狀態、需要工具呼叫或程式執行沙箱的 agent,而且同一批任務要跑多次重複、要交給不同團隊復現,NeMo Gym 的環境抽象值得先做一個小型試點;若你只是用無狀態檢查為模型輸出打分,README 明說寫個腳本就好。導入前先確認三件事:Python 版本是否達到 3.13.14 以上、你要用的 harness 是否在 responses_api_agents 底下有對應目錄、以及你要跑的 benchmark 是否已在環境庫中。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫在最近一天內有新的提交。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

無狀態打分腳本撐不住的時候

多數團隊評測 LLM 的起點是一支 Python 腳本:讀題目、呼叫模型、比對答案、印出準確率。這在題目彼此獨立、評分只依賴最終字串時完全夠用。問題出在 agent 場景。當模型要呼叫工具、在沙箱裡執行程式、根據上一步的輸出決定下一步,評分就不再是比對字串,而是檢查一整條執行軌跡。軌跡裡有狀態,狀態會隨任務不同而不同,重跑一次結果可能完全不一樣。

NeMo Gym 針對的就是這個落差。README 把「環境」定義成 agent 完成任務所互動的完整系統,包含四件事:資料集(要解的任務)、agent harness(模型如何與世界互動)、verifier(任務完成度評分)、以及狀態(每個任務的執行脈絡)。這個四分法本身沒有魔法,價值在於它把四者固定成同一種可替換的單位。

README 對適用對象講得相當直接:需要評測有狀態環境中的模型或 agent、需要跨團隊用共用環境與 verifier 做可重現評測、需要規模化(每個任務多次重複或訓練時上千個並行請求)、以及需要在評測、agent 優化與訓練之間切換。最後它自己補了一句反向條件:如果你只是用無狀態檢查為模型輸出打分,而且不需要規模或訓練,寫腳本大概就夠了。願意在 README 裡寫下這句的專案不多。

環境四分法與多伺服器架構

從 repository 的目錄命名可以看出這套抽象怎麼落地。頂層有 resources_servers 與 responses_api_agents 兩類目錄。前者放環境與資源,例如 aviary、openenv、reasoning_gym;後者放 agent harness,例如 mini_swe_agent、langgraph_agent、swe_agents、harbor_agent、verifiers_agent。這種分法意味著 harness 與環境是兩個獨立軸,你可以把同一個 harness 接到不同環境,也可以把同一個環境餵給不同 harness。

v0.6.0 的 release notes 提到「task-level harness routing」,也就是在一次執行中讓不同任務走不同 harness,並能同時評測多個 agent 與資料集。這對照出單一 harness 的評測方式有什麼不足:真實的 agent 產品往往不是一個模型配一種互動方式,而是依任務類型分流。

另一個架構線索是「agent、model 與 resources servers」這三個詞。README 在講 OpenTelemetry 追蹤時把它們並列,說明執行時不是單一 process,而是至少由這幾類服務組成。v0.6.0 也提到可把 vLLM 評測工作分散到多張 GPU 或 Slurm 節點以提高 rollout 併發。這些都指向同一個設計取向:把評測當分散式工作負載處理,而不是當本地迴圈處理。代價是部署複雜度,這點後面會談。

安裝前提:Python 3.13.14 這道門檻

README 的 Requirements 表格寫得很具體。硬體方面,NeMo Gym 函式庫本身不需要 GPU,但特定 resources server 或模型推論可能需要,要看個別伺服器的文件。作業系統支援 Linux(Ubuntu 20.04+ 或同等)、macOS(x86_64 需 11.0+,Apple Silicon 需 12.0+),Windows 則要走 WSL2。

軟體方面只有一條:Python 3.13.14 或更高。這個版本要求比多數人手上的環境新,而且寫到 patch 版本層級,不是籠統的「3.13+」。如果你的團隊還在 3.10 或 3.11,這不是換個 virtualenv 就能解決的事,得先確認相依套件在 3.13 上是否都有對應版本。

安裝指令本身在提供的 README 片段中沒有完整出現,PyPI 頁面顯示套件名為 nemo-gym,但我沒有實際安裝過,這裡不代為推測指令形式。文件入口是 docs.nvidia.com/nemo/gym/main/about/,Quick Start 一節在 README 的導覽列中有連結。要確認安裝方式,請以官方文件的 Quick Start 與 PyPI 頁面為準。

授權是 Apache-2.0,寬鬆授權,商用與修改的空間大,但這不構成法律意見,實際條款仍應由法務確認。

gym CLI 與可重算的 reward

v0.4.0 把命令列介面統一成 gym CLI,這是操作層的入口。在提供的材料中,唯一出現完整形式的子命令是 v0.5.0 的 gym eval reverify,用途是從已儲存的 rollout 重新計算 reward,不必重跑推論。

這個設計值得單獨拿出來講。評測流程最貴的一步通常是推論,最常出錯的一步往往是評分邏輯。當 verifier 有 bug、或你想換一套評分標準,傳統做法是整批重跑,成本等同重做一次評測。把 rollout 存下來、讓 reward 可以在其上重算,等於把「取樣」與「評分」拆成兩個可獨立迭代的階段。v0.5.0 同時提到 rollout observability 串接成端到端,包含 model-call 擷取、agent observations,以及標準化的 ng_trajectory schema。ng_trajectory 這個 schema 名稱是具體的,它意味著軌跡有固定欄位,可以被下游工具解析,而不是各家 harness 各印各的 log。

v0.6.0 進一步提到自動健康檢查、traces,以及 token、tool-call、turn、latency 的診斷。這些名稱顯示除錯的切入點不是「有沒有跑完」,而是「這條軌跡在第幾輪、第幾個 tool call 出了什麼問題」。對 agent 評測來說,後者才是真正花時間的地方。

沙箱與 harness:生態廣度換來的版本綁定

v0.5.0 的 release notes 列出七個沙箱供應商:Docker、Daytona、ECS Fargate、Enroot、OpenShell,加上原有的 OpenSandbox 與 Apptainer。同一版也新增四個 agent harness:Codex CLI、KiloCode、RemoteAgent、anyswe_agent。v0.4.0 則加入 OpenCode、OpenClaw、Pi,v0.3.0 提到 Claude Code 與 Hermes。README 的 Ecosystem 一節另外點名 OpenHands、Mini SWE Agent、LangGraph。

廣度確實是這個專案的賣點,但讀者要意識到廣度的代價。每個 harness 都是一個外部工具,有自己的版本節奏與 API。把 Codex CLI 或 Claude Code 這類會持續改版的工具包進評測框架,等於把他們的 breaking change 引進你的評測流程。v0.6.0 特別強調「在 RL 訓練中使用受支援的外部 agent harness 時,保留精確的 token IDs」,這句話本身就說明了一件事:外部 harness 通常會經過自己的 tokenization 或訊息格式轉換,而訓練需要原始 token 序列。NeMo Gym 花力氣解決這個問題,反過來證明這是這條路線的固有摩擦。

如果你只需要一個自製 harness,這些整合對你沒有價值,反而增加要追蹤的相依項目。

早期開發階段的具體風險

README 用 IMPORTANT 標註了一段話:NeMo Gym 目前處於早期開發階段,應該預期 API 會演進、文件不完整、以及偶發的 bug。它還要求貢獻者在動手改之前先開 issue 討論。

把這句話配上版本節奏看,訊號很清楚。v0.3.0 在 2026 年 6 月,v0.4.0 在 7 月,v0.5.0 在 8 月,v0.6.0 在 9 月。四個月四個 minor 版本,每個版本都動到核心概念:CLI 統一、沙箱抽象、rollout 可重算、token ID 保真。這種節奏下,任何寫死的內部介面都可能在下一個版本失效。

第二個限制是架構本身的重量。多伺服器、可插拔沙箱、分散式 rollout,這些在需要上千並行請求時是必要條件,但在只有幾十個任務的場景下就是純粹的維運負擔。README 自己說了,無狀態檢查用腳本就好;同樣的邏輯可以延伸:如果你不需要跨團隊復現,也不需要訓練,這套環境抽象的收益很難覆蓋它的部署成本。

第三,提供的材料中沒有出現任何效能數字或使用者規模。文件提到的「battle-tested in production Nemotron training」是專案方的陳述,我沒有獨立驗證,讀者也不該把它當成量化證據。

與 Verifiers、OpenEnv 的路線差異

README 的 Ecosystem 一節把 Verifiers、OpenEnv、Reasoning Gym、Aviary、Harbor 列為可組合的環境函式庫,對應目錄分別在 responses_api_agents/verifiers_agent 與 resources_servers/openenv、resources_servers/reasoning_gym、resources_servers/aviary。這裡的定位是整合而非取代,所以拿它們當「替代方案」並不完全準確,但路線差異仍然值得說明。

以 Verifiers 為例,它的取向是從評分邏輯出發,把驗證器當成第一級物件,環境是為了支撐驗證器而存在。NeMo Gym 的取向相反:環境是容器,資料集、harness、verifier、狀態四者地位接近,verifier 只是其中一格。這個差別在實作上會體現為,當你要換掉評分方式時,Verifiers 路線改的是核心,NeMo Gym 路線改的是環境裡的一個元件。

第二個差異在訓練整合。README 列出 NeMo RL、Unsloth、VeRL 三條訓練框架路徑,並在 v0.6.0 強調跨多步執行保留精確 token IDs。純評測工具通常不需要處理這件事,因為它們不產生訓練訊號。如果你的目標只是「跑完 benchmark 拿分數」,這層整合是多餘的;如果你的目標是「用同一批環境做 RL」,它就是關鍵路徑。

選擇的判斷點因此不在功能清單長度,而在你的終點是分數還是權重。

維護成本與採用判斷

維護成本可以從三個地方估。第一是 Python 版本:3.13.14+ 這條線會跟著你的基礎映像與 CI 一起動。第二是 harness 與沙箱的版本綁定:七個沙箱供應商與十來個 harness,你不需要全部用,但每一個用到的都是一條要追蹤的外部相依。第三是版本節奏:四個月四個 minor 版本,升級不會是無痛的事,尤其當你依賴的是內部介面而非文件化的 CLI。

授權是 Apache-2.0,這是寬鬆授權,允許修改與再散布,通常對商業使用友善。但授權只涵蓋程式碼,你接上的沙箱供應商與 agent harness 各有自己的授權條款,例如把某個 CLI 工具包進評測流程時,該工具的使用條款是另一回事。這不是法律意見,實際情況請由法務確認。

判斷順序建議這樣走:先確認你的評測是否需要狀態與沙箱,若不需要就停在此處;若需要,確認你要跑的 benchmark 是否已在環境庫中,沒有的話要自己寫 verifier,這是主要工作量;再確認你要用的 harness 是否在 responses_api_agents 底下有目錄,沒有的話得自己接。這三步都能在 repository 上直接核對,不需要先跑起來。真正該先驗證的是 gym eval reverify 這條路徑在你的 rollout 格式下是否成立,因為它決定了評分邏輯能不能獨立迭代,而這正是採用這套框架最主要的理由。

編輯結論

如果你要評測的是有狀態、需要工具呼叫或程式執行沙箱的 agent,而且同一批任務要跑多次重複、要交給不同團隊復現,NeMo Gym 的環境抽象值得先做一個小型試點;若你只是用無狀態檢查為模型輸出打分,README 明說寫個腳本就好。導入前先確認三件事:Python 版本是否達到 3.13.14 以上、你要用的 harness 是否在 responses_api_agents 底下有對應目錄、以及你要跑的 benchmark 是否已在環境庫中。這三項都能從 repository 目錄結構直接核對,不必先相信任何效能說法。

官方來源

  1. License: Apache-2.0
  2. NVIDIA-NeMo/Gym on GitHub
  3. Project website
  4. README
  5. Releases
社群筆記

社群筆記