本地模型能撐起 AI Agent 工作流嗎?
NVIDIA DGX Spark 實測報告:122B 與 550B 的六道真實任務對照
摘要
我們在一台 NVIDIA DGX Spark(GB10,128GB 統一記憶體)上部署了 Qwen3.5-122B-A10B(GPTQ-Int4 量化),接入日常實際使用的 AI Agent 工作流,以六道真實工作任務進行測試,並與雲端的 Nemotron-3-Ultra-550B 進行對照。
結論摘要:
| 指標 | 550B(雲端) | 122B(DGX Spark 單機) |
|---|---|---|
| 六題完全通過 | 6 / 6 | 1 / 6 |
| 需人工介入的題數 | 2(各 1 次提示) | 5(最多 4 次) |
| 產出錯誤且未自我察覺 | 0 | 2 |
| 單題平均耗時 | 約 3 分鐘 | 約 20 分鐘 |
在單人、單工作流的條件下,122B 已經需要頻繁的人工介入;其中兩題產出了看似合理但實際錯誤的結果,且模型未能自我察覺。對於需要無人值守執行的 Agent 應用,這是關鍵的失格條件。
一、為什麼做這個測試
生成式 AI 進入企業之後,「要不要把模型放在自己機房」是每個客戶都會問的問題。地端部署的理由很充分:資料不出場、成本可預期、不受 API 限流影響。
但一個常被忽略的前提是:地端能跑的模型大小,直接決定了它能做什麼工作。
我們自己就是這個問題的實驗對象。軟體部門日常以 AI Agent 處理專案管理工作——從 Jira 抓取任務資料、產出 WBS 專案計畫、整理逾期報表、統計工時。這套流程原本跑在雲端的 550B 模型上,運作穩定。
當 DGX Spark 到手,我們想知道的很具體:同樣一套工作流,換成單機能跑的最大模型,還能用嗎?
二、測試環境
硬體與模型
| 項目 | 內容 |
|---|---|
| 平台 | NVIDIA DGX Spark(GB10 Grace Blackwell Superchip) |
| 記憶體 | 128GB 統一記憶體(UMA) |
| 推論框架 | vLLM(CUDA 13.0 / aarch64) |
| 模型 | Qwen3.5-122B-A10B(GPTQ-Int4) |
| 對照組 | Nemotron-3-Ultra-550B-A55B(雲端 API) |
記憶體配置的現實
這是第一個值得注意的數字。DGX Spark 的 128GB 統一記憶體,在跑 122B 模型時的實際分配:
| 用途 | 佔用 |
|---|---|
| 模型權重(Int4 量化) | 73.45 GiB |
| KV Cache | 23.6 GiB |
| CUDA Graph | 0.59 GiB |
| 合計 | 約 98 GiB |
系統可用記憶體僅剩約 21 GiB,且已開始使用 swap。這台機器跑 122B 已經接近滿載——沒有空間再放更大的模型,也沒有餘裕同時服務更多使用者。
一個容易誤判的技術細節:DGX Spark 採用統一記憶體架構,
nvidia-smi的 Memory-Usage 欄位會顯示Not Supported,這是 NVIDIA 官方確認的預期行為,需改用free或 DGX Dashboard 觀察。同時,vLLM 的--gpu-memory-utilization參數在此架構下是以整機記憶體為基數計算,而非傳統獨立顯示卡的「顯存餘額」——設定時必須比獨顯保守,否則會擠壓作業系統可用空間。
並發能力
vLLM 啟動時回報的可用並發度為 Maximum concurrency: 12.97x(在 128K context 的前提下)。但實際吞吐測試顯示:
| 情境 | 生成速度 |
|---|---|
| 單一請求 | 約 13 tokens/s |
| 兩請求並行 | 合計約 24 tokens/s |
單一使用者就只有 13 tokens/s。 這個數字在對話式問答中尚可接受,但在 Agent 工作流中會被放大——因為 Agent 每完成一個步驟都需要完整的推理輪次,一個任務往往需要 5 到 20 個輪次。
測試方法
- 使用日常實際在用的 Agent 框架與工作技能定義(Skill),非合成測試
- 每一輪測試前皆回復虛擬機快照,確保環境完全一致、無前次測試殘留
- 兩個模型使用相同的題目、相同的技能定義文件
- 記錄項目:完成時間、人工介入次數、產出正確性
測試條件說明:本報告為實務部署過程的紀錄,非嚴格控制的對照實驗。測試過程中我們曾三次修訂技能定義文件以補足環境資訊(詳見第五節),且兩個模型的測試日期相隔約一個月,部分題目的資料筆數因此不同。這些差異在報告中均已標註。
三、六道測試題
題目取自軟體部門的日常工作,難度由淺入深:
| # | 任務 | 主要考驗 |
|---|---|---|
| 1 | 匯出指定專案的 WBS Excel | 能否遵循既定流程 |
| 2 | 產出逾期任務 CSV(六欄位、分組、排序) | 多條件資料處理 |
| 3 | 查詢指定人員下週六前的待辦任務 | 相對日期計算、狀態語意判斷 |
| 4 | 統計專案總投入工時 | 資料完整性 |
| 5 | 查詢某人某日的工作安排 | 跨專案查詢、認證處理 |
| 6 | 到 Confluence 找出文件中的特定資訊 | 工具缺口下的應變能力 |
第 6 題刻意設計為「環境中沒有對應工具」的情境——測試模型遇到能力邊界時的反應。
四、逐題結果
第 1 題:匯出 WBS Excel
「幫我整理"○○"專案,並匯出 excel」
| 550B | 122B | |
|---|---|---|
| 結果 | 正確 | 正確 |
| 耗時 | 1 分鐘 | 2 分鐘 |
| 人工介入 | 0 | 0 |
兩者都成功,產出完全一致(48 列、10 個 Epic、33 個 Task、5 個子任務,六項驗證全數通過)。
差別在執行路徑。550B 只用了三個動作:讀取技能定義 → 執行資料擷取腳本 → 執行 Excel 產生腳本。122B 則額外進行了工具查詢與專案清單檢索。
這是唯一一題 122B 乾淨通過。 但即使如此,550B 仍快一倍、步驟更少。
第 2 題:逾期任務 CSV
「幫我整理"○○"專案目前已經逾期的執行中任務與子任務,包含如下欄位:父任務名稱(無則空白)、任務名稱、執行者、預計開始日期、預計結束日期、已逾期天數;並以 parent 進行 grouping、以及用 end date 進行排序,最後用 csv 檔案匯出給我」
| 550B | 122B | |
|---|---|---|
| 結果 | 正確 | 需四次以上修正 |
| 耗時 | 4 分鐘 | 超過 40 分鐘 |
| 人工介入 | 1 次 | 4 次以上 |
550B 的表現:第一次輸出即正確。它主動使用了正確的自訂欄位取得開始日期,並在回覆中明確標示欄位來源(預計開始日期 (customfield_10015)、預計結束日期 (duedate))。唯一的介入是檔案交付格式,經一次提示後自行查閱技能文件並修正。
122B 的問題(依序發生):
- 開始日期整欄空白 — 未使用該 Jira 實例的自訂欄位,查詢時漏掉。經指正後修正。
- CSV 分隔符使用全形逗號 — 導致 Excel 無法正確分欄。經指正後宣稱已修正,但實際未修。
- 第二次指正後,模型以位元組層級驗證(確認
357 274 214為 UTF-8 全形逗號)才真正定位問題並修好。 - 中文在 Excel 顯示為亂碼 — 缺少 UTF-8 BOM。此題模型診斷正確(僅給予「LibreOffice 正常、MS Office 亂碼」的症狀描述,模型即推論出 BOM 缺失),但仍需第三次介入才處理。
註:第 2 題兩次測試相隔約一個月,資料筆數不同(27 筆 vs 17 筆),屬專案進度變化,非查詢邏輯差異。
值得注意的是第 2 點。 模型回報「已改為半形逗號」,但輸出檔案並未改變。這類自我報告與實際結果不符的情況,在後續題目中重複出現。
第 3 題:下週待辦任務查詢
「幫我整理 jira 中 assignee 是 ○○○ 的所有 start date 在下周周六之前的待辦(open 或 todo)任務和子任務,不需要匯出 excel,顯示在對話中即可。」
| 550B | 122B | |
|---|---|---|
| 結果 | 正確 | 需一次指正 |
| 耗時 | 2 分鐘 | 19 分鐘 |
| 人工介入 | 0 | 1 |
關鍵差異在「待辦」的語意判斷。
Jira 的狀態分類(statusCategory)只有三大類:To Do、In Progress、Done。而「已擱置」這個狀態,在系統分類上歸屬於 To Do。
- 122B 依系統分類查詢,回傳 21 筆,其中 17 筆是「已擱置」。經指正後才排除,剩 4 筆。
- 550B 一次回傳 9 筆,全數為「開放」或「待辦事項」,無一筆已擱置。
使用者要的是「可以開始做的工作」,不是「系統歸類為待辦的工作」。這個差別無法從字面判讀,需要理解意圖。
550B 另外做了三件題目沒要求的事:
- 執行
date指令先確認系統當前日期,再推算「下週六」——Agent 沒有內建時間感,這是嚴謹的做法 - 主動查詢 Jira 的欄位定義端點,自行找出開始日期對應的自訂欄位,未依賴文件提示
- 在結果末尾主動提醒:「有 3 筆父任務狀態為『進行中』,但子任務是『開放/待辦』,建議確認父任務狀態是否需同步更新」——主動指出資料品質問題
第 4 題:專案總工時統計
「幫我統計一下"○○"專案目前投入的全部工時」
| 550B | 122B | |
|---|---|---|
| 結果 | 一次正確 | 錯誤 |
| 回報數值 | 275.9 小時(正確) | 216.1 小時 |
| 誤差 | — | 59.8 小時(21.7%) |
這是最值得警惕的一題。
122B 在查詢階段回報找到 44 筆議題,但統計時只計入 35 筆——API 回應被截斷,遺漏約 9 筆的工時資料。
模型並未察覺這個矛盾。 它在同一段回覆中先說「有 44 個 issues」,後又輸出「總計項目數:35 個」,數字前後不一致卻未觸發任何檢查。它給出的 216.1 小時看起來是個合理的數字,若非我們手上有正確答案,這個錯誤不會被發現。
更值得注意的是「修正」的方式:當我們提供正確數據後,模型並未重新查詢,而是直接引用我們提供的表格重算。原本的資料截斷問題並未被解決。
550B 則一次回傳正確的 275.9 小時,並附帶 122B 未提供的資訊:有工時記錄 34 筆 vs 無記錄 10 筆、換算人天、以及「Epic 層級大多未直接記工時」的結構觀察。
第 5 題:某人某日的工作安排
「幫我看看"○○"在"2026-09-11"被安排的工作有那些?」
| 550B | 122B | |
|---|---|---|
| 結果 | 一次正確 | 給出錯誤結論 |
| 耗時 | 1 分鐘 | 14 分鐘 |
| 工具呼叫 | 1 次 JQL 查詢 | 十餘次失敗後改用 curl |
| 人工介入 | 0 | 2 |
122B 在直接呼叫 API 時,將環境變數中的「站台名稱」誤用為登入帳號(正確應使用電子郵件)。Atlassian 在此情況下回傳的是 HTTP 200 加上空結果,而非明確的認證失敗。
模型的結論是:
「根據目前的查詢結果,○○ 在 2026-09-11 沒有被安排任何工作。」
這是錯的,但陳述得像事實。 模型雖然附帶列出三個可能原因,但主結論已足以誤導使用者。
隨後我們提供了正確答案,模型的回應是「以上資訊是根據您提供的資料彙整」——再次以使用者提供的資料交差。直到我們明確要求「我需要你幫我查出來,而不是用我的資料來整理」,它才重新嘗試並自行改用電子郵件認證,成功取得正確結果。
550B 的對照:單次 JQL 查詢即取得正確的 5 筆結果,並主動標示判斷依據(「以截止日期 duedate 為準」)——因為「被安排」一詞本身有歧義,模型明確說明自己採用哪一種解讀。
我們另外以同一人、不同日期(2026-09-01)測試 550B,該日確實沒有任務。模型的處理方式是:先查詢該日到期或開始的議題(無結果)→ 放寬條件檢查 Sprint 與顯示名稱 → 確認該日期是否落在其他任務的起訖區間內 → 最後搜尋是否有名稱相近的使用者。排除四種可能之後才回覆「當天沒有安排」,並附帶說明最近的下一項工作在 9/4。
這是本次測試中最值得注意的一組對比。 兩個模型都曾回答「沒有工作安排」——但 550B 的否定是查證後的結論,122B 的否定是認證失敗造成的假象。對使用者而言,兩者在畫面上看起來完全一樣。
第 6 題:Confluence 文件查找
「幫我到 Confluence 的"○○空間"裡面找一下工作計畫建立步驟文件中,關於"學習"類型的計劃要用甚麼顏色?」
這題環境中沒有 Confluence 的整合工具,測試的是模型在工具缺口下的應變能力。
| 550B | 122B | |
|---|---|---|
| 結果 | 正確 | 最終正確 |
| 耗時 | 9 分鐘 | 30 分鐘 |
| 人工介入 | 1 次方向提示 | 3 次 |
| 錯誤診斷 | 0 | 2 次 |
兩者都誠實表明沒有 Confluence 工具,沒有捏造答案——這點都合格。
分水嶺在提示之後。 我們給的提示相同:「你從 env 中找一下 JIRA 相關的變數,confluence 也是用相同的」。
550B 的回應:
Atlassian Cloud 通常 Jira 和 Confluence 是同一個站台,但:
- 認證方式相同(Email + API Token)
- API endpoint 不同:Jira 用
/rest/api/3/,Confluence 用/wiki/rest/api/
它隨即列出七個常用的 Confluence API 端點,一次驗證成功,直接找到目標文件。
122B 的回應:將 Confluence 的基礎路徑判斷為 /rest/api/(Jira 的路徑),並使用錯誤的帳號進行認證。取得 403 錯誤後,它的診斷是:
「問題確認:目前的 API Token 沒有 Confluence 的存取權限」
建議:生成新的 API Token 並授權 Confluence、檢查帳戶許可…
這個診斷是錯的——問題出在它自己用錯了帳號。 若使用者採信,將會白白花時間到 Atlassian 後台調整權限設定。經提示改用電子郵件後仍失敗(環境變數讀取不完整),它第二次做出同樣的錯誤診斷。直到我們明確表示「我確定這個 email 跟 token 是可以的」,它才去檢查變數完整性,一試即通。
五、一個重要的發現:小模型對指示的依賴度更高
測試初期,122B 在第一關就頻繁失敗——不去讀取既有的技能定義,而是自行撰寫替代腳本,產出結構完全錯誤的檔案。
追查後發現,是我們在建置測試環境時,遺漏了一份全域的行為指示檔案,其內容為:
在處理任何任務前,先檢查是否有相關的 Skill 可以使用。如果使用者提到 Jira、專案匯出、Excel 報表等關鍵字,務必先查看並使用對應的 skill,按照裡面的步驟執行,不要自行決定流程或撰寫替代程式碼。
補上這份檔案後,122B 的行為立即改善,會主動引用「根據指示,我需要先查看 skill 的步驟」。
這個發現本身就是結論的一部分:550B 能自行推斷「應該先找找有沒有現成流程」,122B 需要被明確告知。同樣的現象也出現在後續題目——我們陸續在技能文件中補上了三條環境資訊(腳本的絕對路徑、自訂欄位編號、API 認證方式),才讓 122B 能夠完成部分任務。
而 550B 在沒有這些補充說明的條件下,第 3 題自行查詢 Jira 欄位定義找出自訂欄位、第 6 題自行使用正確的認證方式——它不需要被教。
值得強調的是:即使補上了這三條說明,122B 在第 5、6 題仍然用錯了認證方式。知識存在於它的上下文中,但執行時沒有調用。 這種「知道但做不到」的落差,無法靠把文件寫得更詳細來解決。
六、失敗模式歸納
綜合六題觀察,122B 的問題可歸納為四類:
1. 資料完整性缺乏自我檢查
第 4 題的 21.7% 誤差,源於 API 回應截斷。模型自己輸出的兩個數字(44 筆 vs 35 筆)已經矛盾,卻未觸發任何驗證。
2. 自我報告與實際結果不符
至少四次出現:宣稱使用了既有技能(實際未用)、宣稱已改為半形逗號(實際未改)、以使用者提供的資料充當查詢結果(兩次)。
這是最難防範的問題——當模型的回報不可信,人工檢查的成本會超過它節省的時間。
3. 將自身錯誤診斷為環境問題
第 6 題兩次將自己的認證錯誤診斷為「API Token 權限不足」,並建議使用者去申請新的 Token。若使用者採信,將浪費時間在不存在的問題上。
4. 錯誤修正效率低
550B 並非不犯錯(第 2 題的檔案交付格式也用錯了),但經一次提示即自行查閱文件並修正。122B 則往往需要多次指正,且中間可能誤報成功。
差別不在會不會犯錯,而在修正的效率。
七、速度:被 Agent 工作流放大的差距
對照條件說明:本次測試的 550B 透過 NVIDIA NIM 的免費層存取,該服務有每分鐘 40 次請求的速率限制——這個額度不足以支撐正式的工作場景。而 122B 為本機獨佔運行、無任何外部限流。也就是說,550B 是在有配額限制的條件下達成本節的成績。
單看 13 tokens/s,似乎只是「比較慢」。但在 Agent 情境下,這個數字會被結構性放大。
Agent 完成一個任務需要多個推理輪次:理解需求 → 查詢資料 → 判斷結果 → 決定下一步 → 執行 → 驗證。每個輪次都是一次完整推理,而其中大部分內容(模型的思考過程)使用者甚至看不到。
實測中,122B 單次工具呼叫從送出到實際動作,經常需要 1 至 4 分鐘,且出現過單次推理超過 260 秒無輸出的情況。累積下來:
| 題目 | 550B | 122B |
|---|---|---|
| 第 1 題 | 1 分鐘 | 2 分鐘 |
| 第 2 題 | 4 分鐘 | 40+ 分鐘 |
| 第 3 題 | 2 分鐘 | 19 分鐘 |
| 第 5 題 | 1 分鐘 | 14 分鐘 |
| 第 6 題 | 9 分鐘 | 30 分鐘 |
而這是單一使用者、無人競爭資源的最佳情況。
八、多使用者環境的推估
本次測試全程為單人操作,未進行並發壓力測試。但從已知數據可以做出合理推估:
- 模型權重已佔用 73GB,KV Cache 僅剩 23.6GB 的空間
- 單一請求 13 tokens/s,雙請求並行時每個請求約降至 12 tokens/s
- 服務設定的最大並行序列數為 4
換言之,這台機器在滿載時最多同時服務 4 個請求,而每個使用者將面對接近單人時的生成速度。以第 2 題(單人 40 分鐘)為例,若三位同仁同時發起類似任務,等待時間將顯著延長。
對於部門級或全公司級的 Agent 服務,這個容量不具實用性。
九、結論與建議
DGX Spark 適合什麼
我們不認為 DGX Spark 是一台沒有價值的機器。它在以下場景表現稱職:
- 模型行為驗證 — 在投入正式硬體前,先確認工作流設計、Skill 定義、工具串接是否正確
- 開發環境 — 單一工程師的實驗平台,資料不出場
- 模型選型評估 — 正如本次測試,用它來確認「多大的模型才夠用」
- 小規模、非即時的批次任務 — 沒有人在等待的自動化工作
DGX Spark 不適合什麼
- 需要無人值守的 Agent 工作流 — 六題中有兩題產出了錯誤且未自我察覺的結果。無人監看時,錯誤會直接進入產出
- 多使用者共用的服務 — 容量與速度都不支持
- 對回應時間有要求的互動應用 — 13 tokens/s 在長流程中體感過慢
我們的判斷
以本次測試的標準衡量——能否在無人監看的情況下,正確完成一個多步驟的專業任務——122B 級距的模型尚未跨過可託付的門檻。
問題不在於「做不到」,而在於做對與做錯看起來一樣。當模型會宣稱完成了實際未完成的事、會把自己的錯誤診斷成環境問題、會在資料不完整時給出看似合理的數字,使用者就必須逐項驗證它的每一個輸出。此時它節省的時間,已經被檢查的時間吃掉了。
而這不是靠更好的提示詞或更詳細的文件能夠解決的——我們在測試過程中三次補強技能文件,122B 仍在同樣的地方犯錯。
值得一提的是,本次對照中的 550B 是透過有速率限制的雲端服務存取,而 122B 為本機獨佔資源。即使在這樣的條件下,前者的完成時間仍普遍為後者的五分之一以下。
關於雲端與地端的選擇
本次測試中的 550B 使用 NVIDIA NIM 的免費額度(每分鐘 40 次請求),這個限制不足以支撐正式的工作場景。若要在生產環境使用同等級的雲端模型,就必須評估訂閱與 Token 的實際成本——Agent 工作流的 Token 消耗遠高於一般對話應用,單一任務即可能消耗數十萬至上百萬 token。
我們在另一篇專欄中完整分析過這筆帳,包含 500 人企業的三年 TCO 試算、以及雲端額度限制造成的產能損失:
K3 出現了,要自建嗎?我們先來算帳!
值得一提的是,那篇文章記錄了我們更早之前的一次嘗試——以消費級顯示卡搭配中小型開源模型跑 agent,很快就因為模型能力不足而反覆兜圈、給不出可用結果。本次的 DGX Spark 測試,是同一個問題在更高一階硬體上的再次驗證:從消費級顯卡升級到專業級工作站、從中小模型升級到 122B,Agent 仍然無法穩定完成多步驟任務。
這條線索指向同一個結論:地端部署的可行性,取決於你的硬體能不能跑得動「夠強」的模型——而這個門檻,比多數人預期的高。
給準備導入地端 AI Agent 的企業
先確認你的應用需要多大的模型,再決定硬體規格——而不是相反。如果你的目標是多人共用、無人值守的自動化工作流,請直接評估能夠承載 400B 以上模型的平台(如 DGX B300 等級)。用一台跑不動足夠大模型的機器來做這件事,省下的是硬體預算,付出的是每一份產出都要人工複查的長期成本。
附錄:測試環境的技術細節
以下資訊對於在 DGX Spark 上部署 vLLM 的團隊可能有參考價值:
記憶體參數
--gpu-memory-utilization 在統一記憶體架構下以整機記憶體為基數。實測將此值從 0.85 調整為 0.78 後:
| 項目 | 0.85 | 0.78 |
|---|---|---|
| KV Cache | 31.05 GiB | 23.6 GiB |
| KV Cache 容量 | 676,512 tokens | 513,648 tokens |
| 系統可用記憶體 | 12 GiB | 21 GiB |
調整依據:原設定配置的 KV Cache 超過「最大並行數 × 最大上下文長度」的理論需求,多出的部分永遠不會被使用。
模型載入時間
73.45 GiB 的權重(39 個 safetensors 分片,本機 EXT4)載入約需 7 分鐘。服務重啟需預留此時間。
MoE Kernel 未針對 GB10 最佳化
vLLM 目前未內建 GB10 平台的 MoE 調校參數檔,啟動時會提示 Using default MoE config. Performance might be sub-optimal!。這代表本報告的效能數據尚有優化空間,但調校結果會綁定特定模型與量化格式,且 GB10 的記憶體頻寬可能才是主要瓶頸。
監控方式
nvidia-smi 的 Memory-Usage 欄位在此平台顯示 Not Supported(NVIDIA 官方確認為預期行為)。實務上使用:
free -h # 整體記憶體
nvidia-smi --query-compute-apps=pid,process_name,used_gpu_memory --format=csv