以前要寫一個 AI agent,你得先學四種互不相干的東西:prompt 模板、tool schema、callback、workflow graph。NVIDIA 給的答案簡單到有點反高潮:寫一個 Python class 就好。
一句話結論:NVIDIA 開源的 NOOA 把一個 agent 收成一個 Python class(方法是能力、欄位是狀態、docstring 是提示詞),SWE-bench Verified 拿到 82.2%、token 只用大約一半;但它目前是 Apache 2.0 授權的 alpha 研究預覽,要跑就一定要關進沙箱。
截至 2026 年 8 月,PyPI 上的版本是 0.0.8(2026-07-30 發布),開發狀態標示為 Alpha。技術部落格於 2026-07-27 發表,8 月初才在中文圈被比較多人討論。
NOOA 到底是什麼?
NOOA 全名 NVIDIA-labs Object-Oriented Agents,是 NVIDIA Labs 開源的 agent 框架。它的主張只有一句:一個 agent 就是一個 Python class。
拆開來看是這樣對應的:方法(method)是這個 agent 會做的事,欄位(field)是它的狀態,docstring 就是提示詞,型別註記則是執行時會被強制檢查的合約。最關鍵的一條規則在最後:方法的內容如果只寫三個點 ...,執行時就交給 LLM 迴圈去完成;寫了正常程式碼,它就是一段普通、可預測的 Python。
from nooa import Agent
class SupportAgent(Agent):
"""You are a support agent."""
# 狀態放在物件上,而且有型別
order_db: OrderDB
# 普通方法,就是 Python,結果可預測
def is_refund_eligible(self, order: Order) -> bool:
return order.delivered and order.days_since_delivery <= 30
# 方法內容是 ... ,執行時交給 LLM
async def triage(self, message: str, order: Order) -> Ticket:
"""Create a typed support ticket."""
...
官方快速上手教學裡有個小示範,我覺得比任何說明都清楚:把方法名稱從 analyze_feedback 改成 analyze_feedback_briefly,輸出就變短了。因為方法名稱、參數和 docstring 本身 就是提示詞,你不用另外維護一份 prompt。
為什麼「agent 是一個 class」會比較好用?
因為 agent 開發會變回一般的軟體開發。NVIDIA 自己的說法是:agent 從此可以被 diff、被 code review、寫單元測試、追蹤、版本控制、重構,而且人跟 AI coding agent 用的是同一套工具,跟你手上其他專案沒兩樣。
這件事的意義比聽起來大。目前多數 agent 專案的難處不在寫不出來,而在寫出來之後沒人搞得懂它為什麼這樣跑:提示詞散在 YAML 裡,工具定義在另一個檔,流程圖又是第三套語法,出事只能靠翻 log。把這些東西塞回同一個 class,至少你的 IDE 跟 git 能幫上忙。
NVIDIA 把整套設計歸納成六個「面向模型」的能力:
| 能力 | 白話解釋 |
|---|---|
| Typed I/O(型別化輸入輸出) | 呼叫有型別參數、回傳值會被驗證,不是一坨自由文字 |
| Pass by reference(傳參考) | 模型直接操作活的 Python 物件,只看到有邊界的預覽,不是整包序列化倒進去 |
| Code as action(用寫程式當動作) | 模型靠寫 Python 來行動,能用條件、迴圈、直接呼叫方法 |
| Programmable loops(可程式化迴圈) | 調度迴圈就是普通 Python,開發者能改,模型自己也能改 |
| Explicit object state(顯性物件狀態) | 狀態放在物件上,不是塞在對話紀錄裡靠模型自己記 |
| Model-callable harness APIs | 脈絡區塊跟事件歷史是模型可以自己查、自己管的 API |
82.2% 這個數字要怎麼看?
先講結論:數字很硬,但它證明的事情跟大部分人以為的不一樣。
在 SWE-bench Verified 上,NOOA 配 GPT-5.5 拿到 82.2%,高於投稿當時排行榜上的 79.2%;換成 Opus 4.6 是 79.8%。做到這件事的 agent 只有 253 行,而且沒有為了跑分寫任何 benchmark 專用提示詞。論文另外提到,同樣的模型下,這比 OpenHands v3 實作的 CodeAct 高出 11.4 分。
另外兩個場子也有數字。資安方面,CyberGym L1 解出 86.8%,是開源 agent 裡最高的,而且是在封鎖網路連線、每條軌跡都跑過一次規則式作弊檢查的條件下拿到的,所以不是靠上網查已公開的漏洞。一般推理方面,ARC-AGI-3 配 GPT-5.5 拿 50.2% 平均 RHAE,配 GPT-5.6-sol 拿到 85.1%,25 局裡有 19 局完整破關,每局成本壓在 20 美元以下。
但真正值得看的是成本欄,不是分數欄:
| SWE-bench Verified | 分數 | 每題模型呼叫 | 每題 token |
|---|---|---|---|
| NOOA(GPT-5.5) | 82.2% | 29 次 | 約 110 萬 |
| 對照 harness A | 78.2% | 66 次 | 約 220 萬 |
| 對照 harness B | 78.6% | 29 次 | 約 130 萬 |
分數高 4 分,token 少一半。換句話說,模型沒換,換的是包在模型外面那層。
要提醒的是,這些是 NVIDIA 自己發布的評測結果,對照組是投稿當時的公開成績。他們把程式碼、資料和評測方法都放出來讓人複現,這點比多數廠商大方,但它終究不是第三方獨立評測,看的時候心裡有個底就好。
為什麼可以省掉一半 token?
關鍵在「傳參考」這一條,而它解掉的是一個很多人天天在痛、卻很少被當成主要問題的東西:脈絡壓縮。
一般 harness 的做法是,工具回傳什麼,就把什麼序列化成文字塞進脈絡窗。查一次資料庫回來三千行,這三千行就佔住你的窗口,而且每一輪都要再帶一次。NOOA 反過來:工具結果變成執行環境裡一個活的 Python 變數,模型只看到型別正確、有長度上限的預覽(真實型別、真實長度、頭尾樣本),完整的值留在 REPL 裡等著被下一行程式碼用掉。
結果是解 SWE-bench 時根本不需要做脈絡壓縮:中位數的 session 尖峰只用到 2.2 萬到 7.2 萬 prompt token,而窗口有 20 萬到 40 萬。因為不用中途摘要,對話紀錄可以一路只增不改,前綴快取從頭命中到尾,省下來的錢是複利的。
我認為這是整份報告裡最值得抄的一招。就算你完全不打算用 NOOA,「別把工具結果倒進脈絡窗、改成留在執行環境裡傳參考」這個想法,套在你現有的任何 agent 上都會有效。
記憶體那部分做了什麼?
NOOA 有一個長期記憶子系統,設計上跟常見做法相反:它不是背景自動跑摘要,而是由 agent 自己動手寫、自己查、自己更正,記憶變成它工作的一部分;跟當下這一輪有關的記憶則會自動浮上來。
每筆記錄帶型別、重要性和標籤,記錄之間用「支持」「矛盾」「衍生自」這類具名關係串起來,所以整個記憶體是一張知識圖,不是一條流水帳。背景另外有一道反思程序,負責合併重複、把相關的連起來、把一段經歷提煉成心得、把過期的清掉。
兩個實務上的好處值得記:全部東西存在一個人看得懂的 SQLite 檔裡,可以直接打開檢查、備份、code review;多個 agent 可以共用同一份記憶而各自保有所有權。效果方面,在 ARC-AGI-3 上,這套記憶體比用檔案做筆記的同一個 agent 高出 11.8 分 RHAE。
如果你對「agent 怎麼跨 session 記住事情」這條線有興趣,我們前幾天也寫過 LoopX 這個讓 agent 長跑不忘記目標的開源內核,兩者解的是同一類問題,切法不一樣。
跟 LangGraph、CrewAI 這些差在哪?
差在你要先接受哪一種世界觀。
三者沒有誰淘汰誰。NVIDIA 自己也把話講清楚了:NOOA 是一個開放的實驗場,不是現有 harness 的替代品。如果你的專案已經跑在 LangGraph 上而且沒出事,沒有理由為了這篇文章重寫。
但如果你正要開新的,或者被現有那套的除錯體驗折磨過,NOOA 的方向值得認真花一個下午試試。順帶一提,同一個星期還有 Y Combinator 開源的 QM 和 Cloudflare 的 agent 執行環境,大家不約而同都在做同一件事:不再比模型,改比怎麼包住模型。
怎麼裝、怎麼寫第一個 agent?
裝起來大概三分鐘,前提是你的 Python 是 3.12 或 3.13(目前不支援 3.14)。
- 裝核心套件:
pip install nooa,或用 uv:uv add nooa。 - 按需要加子套件:
nooa-cli(指令列、軌跡檢視器、評測執行器)、nooa-memory(長期記憶)、nooa-bench(評測 agent)。也可以寫成uv add "nooa[cli,memory]"一次裝好。 - 選模型:走 LiteLLM,所以雲端和本地都行。設好
ANTHROPIC_API_KEY或OPENAI_API_KEY就能用;想完全離線就接 Ollama 或 vLLM,不需要金鑰。 - 寫第一個 class:繼承
Agent,方法內容留...,簽章定合約、docstring 當提示詞。 - 打開軌跡檢視器:
uv run nooa start-dev,瀏覽器開localhost:5001。每一次模型呼叫、每一段程式碼執行都預設被追蹤,父子關係也留著。檢視器沒開的話追蹤就自動關掉,不用改設定。
第一次試的話,我的建議是先別碰記憶體和沙箱,就寫一個只有兩三個方法的小 class,把軌跡檢視器打開,看清楚它到底送了什麼給模型。這個框架的價值有一半在「你看得見它在幹嘛」,跳過這步就浪費了。
有什麼坑?誰現在還不該用?
這段請不要跳過,因為最大的坑是 NVIDIA 自己講的,講得比多數使用者還直接。
第一,它會執行 LLM 寫出來的程式碼。官方原話是:模型生成的程式碼可能做出危險或非預期的動作,包括把私人資料送去不受控的地方、刪檔案、改動它自己的執行環境。
第二,內建的檢查擋不住有心要跑出來的程式碼。NOOA 有 AST 靜態檢查和模組黑名單,但官方明講那是縱深防禦,不是圍堵邊界:open() 就能存取任意檔案,importlib 能直接從路徑載入模組,反射還能摸到其餘的部分。真正的邊界是作業系統層級的隔離,也就是容器、虛擬機,或 NVIDIA 自己的 OpenShell。翻成白話:不要在你的主力機器上裸跑。
第三,版本號是 0.0.8,開發狀態寫著 Alpha,官方定位是研究預覽。API 隨時會變,粗糙的地方官方也承認會有。要放進生產環境的話,現在還太早。
所以:想在週末動手玩、或者想把「傳參考」這招偷回自己專案的人,非常適合現在就看;負責上線系統、需要穩定 API 的人,可以先觀望幾個版本。
有什麼替代方案?
- 想要成熟穩定、社群大:LangGraph 或 CrewAI,文件和踩坑紀錄都比較齊全。
- 只是想要一個能幹活的 coding agent,不想自己組:直接用現成的終端 agent 就好,不需要框架。
- 需求是「多人一起指揮同一個 agent」:看 Y Combinator 的 QM,那是為協作場景設計的。
- 只想解掉 token 太貴的問題:不用換框架,先把工具結果改成傳參考、別序列化進脈絡窗,這一招單獨用就有效。
常見問題
NOOA 免費嗎?
框架本身是 Apache 2.0 授權,免費開源,商用也可以。真正的成本在你呼叫的模型 API;想完全不花錢就接 Ollama 或 vLLM 跑本地模型。
只會寫一點 Python,學得動嗎?
會寫 class 就有機會。你需要看得懂型別註記和 async,但不需要先讀完任何 agent 理論。相對地,如果你完全沒寫過 Python,這個框架的優勢對你就不存在,先從現成工具開始比較實際。
綁 NVIDIA 顯示卡或 Nemotron 模型嗎?
不綁。它走 LiteLLM,官方範例直接示範接 Anthropic、OpenAI、Ollama 和 vLLM,本身是模型無關的。
可以直接放進生產環境嗎?
現在不建議。版本 0.0.8、狀態 Alpha、官方自稱研究預覽,而且執行模型生成的程式碼一定要搭配容器或虛擬機隔離。要用在正式系統,等 API 穩下來再說。
結論:值得花一個下午,但別急著搬家
NOOA 最有意思的地方,不是 82.2% 這個分數,而是它讓「換 harness」這件事有了價格標籤:同一個 GPT-5.5,換個包裝,分數多 4 分、token 少一半。這等於在說,現在拖住 agent 的往往不是模型不夠聰明,是外面那層寫得不好。
至於「一個 Python class 就是一個 agent」會不會變成大家的預設寫法,我不確定,0.0.8 的東西講這個太早。但我會裝來玩,而且不管最後用不用它,傳參考那一招我一定會偷。
資料來源:NVIDIA 技術部落格、技術報告 arXiv:2607.20709、GitHub 專案頁、PyPI。
免責聲明:本文為技術工具介紹,非投資建議。文中數據截至 2026 年 8 月,開源專案版本與 API 變動頻繁,實際情況請以官方文件為準。執行 AI 生成的程式碼具有實際風險,請務必在隔離環境中操作。




發佈留言