最後更新於 2026 年 9 月 11 日。實測與術語以 DeepSeek Harness 官方倉庫、Skills 子系統說明 與 Process Sandbox 文件 為準。
團隊把 DeepSeek、Claude 或 Gemini 換了一輪,聊天品質上去了,真正落地時還是會在同一處摔倒:模型連續呼叫工具、改檔案、跑腳本,卻沒有人能說清「這一步為什麼發生、能不能回放、寫到了哪、失敗後該不該重試」。2026 年再談 AI Agent,瓶頸已經不是「誰更會答」,而是誰能把一次任務安全地跑完。
結論先說:模型負責判斷「下一步該做什麼」;Harness 負責循環、會話和外掛組合;Skill 負責把可重用的操作說明按需裝進上下文,而不是一次塞進系統提示;Sandbox 負責限制這次子行程能寫哪些檔案,並且在無法強制隔離時直接失敗,而不是悄悄裸跑。三者缺一,演示能過、生產會漏。
若你要把 Agent 實驗和日常交付拆開,測試機本身也值得單獨規劃。本站寫過 macOS 27 測試環境怎麼搭:主力機不該同時承擔預覽版系統與會改檔案的 Agent。
只換模型,解決不了哪三類翻車
把「更強的模型」當成 Agent 方案,通常會在三處同時失守,而且換一家供應商也救不回來。
第一類是循環失憶。一次任務要經過多次工具呼叫:列目錄、讀檔、改程式、跑測試。如果歷史靠記憶體變數拼接,行程一重啟、介面一切頁,模型就不知道自己做過什麼。更糟的是,排障的人看不到同一條事件日誌,只能憑聊天截圖猜。
第二類是說明書過載。團隊把部署規範、程式風格、發單流程全寫進系統提示。上下文被佔滿後,模型開始漏步驟;你再加一段「務必遵守」,它只會更吵,不會更穩。真正該發生的是:平時只讓模型看見技能目錄,真正動手時再載入那一份正文。
第三類是副作用裸奔。模型一旦能調 shell,就可能寫到倉庫外、改掉金鑰檔,或在失敗時把半成品留在磁碟上。沒有按次決議的檔案系統策略,你只能靠「別亂來」這種提示詞紀律——這對生產沒有意義。
這三類問題,換更大的上下文窗口也解決不了。窗口更大,只是讓錯誤說明書住得更久;循環和隔離仍然要靠執行層。工具呼叫與治理的分工,也可以對照 Gemini Agent 如何呼叫工具與函式:欄位名不同,失敗模式幾乎一樣。
Harness 解決什麼:循環、會話、外掛組合
DeepSeek Harness(dsh)把自己定位成開源 Agent Harness,而不是又一個聊天客戶端。官方口號是 Everything is a Plugin:模型適配、系統提示、工具註冊、會話日誌、Agent 介面和預設循環,都被拆成可替換的套件,再用 Cordis 組合起來。倉庫仍標註開發者預覽,相容性破壞變更可能發生——這不影響你用它理解「執行層到底該做什麼」。
實測裡,Harness 真正替你扛住的是三件事。
- 循環歸屬。預設
agent-loop只是Agent合約的一種實作。外掛應依賴 Agent 介面,而不是把業務焊死在預設驅動上。目標不確定時走開放循環;有審批節點的業務,應把確定性工作流放在外層。 - 會話可重建。模型下一輪能看見的內容,應當能從 Session Log 推出來,而不是某個函式裡的暫存陣列。原始分塊事件留下來,是為了回放、介面和排障。
- 組合可覆蓋。Profile、Bundle 和 Patch 疊成執行時期外掛樹。你要換模型提供者、沙箱後端或介面,優先打 Patch,而不是複製核心套件。官方提供
dsh --profile web --dump-config查看機器實際啟動的設定樹。
所以 Harness 解決的不是「模型聰不聰明」,而是誰驅動下一步、歷史存在哪、哪一層允許被替換。沒有這一層,Skill 沒有穩定的載入時機,Sandbox 也沒有穩定的呼叫方。
Skill 解決什麼:按需載入的操作手冊
官方把 Skill 寫成可選指令,不是會話事件。模型平時只看到一份目錄:排序後的 name 和經過截斷、跳脫的 description,預設描述上限 500 字;正文、路徑、來源和路由提示都不會提前灌進上下文。真正要用時,模型呼叫 skill({ name }),框架依目前會話的工作目錄解析出獲勝技能,再回傳規範結果。
本地技能是 kebab-case 名稱,接受目錄包(SKILL.md)或扁平 Markdown。官方本地提供者按優先順序掃根目錄:專案 .dsh/skills 最高,其次 .agents/skills,再往後才是自訂目錄、使用者目錄和打包技能。專案根是最近的 Git 根;沒有倉庫時退回目前工作目錄。巢狀的 **/SKILL.md 遞迴發現不受支援——你不能把技能隨便塞進深層資料夾指望被找到。
這一層解決的是「說明書何時出現」。把發版清單、程式審查口徑、排障腳本用法做成 Skill,模型只在相關任務裡載入;改正文不會重寫舊的工具結果,下一次呼叫會讀到新內容。目錄變更會熱更新,但不完整的發現結果不會覆蓋上一份可用目錄。
Skill 不是權限系統。它告訴模型怎麼做,不決定模型能不能寫到倉庫外。沒有 Sandbox,一份寫得很清楚的「部署 Skill」反而更危險,因為它會把危險步驟寫得更可執行。
Sandbox 解決什麼:檔案副作用隔離
官方 Process Sandbox 管的是同機子行程的檔案副作用,不是網路、也不是行程可見性。容器、微虛擬機和遠端執行被寫成並列的能力縫,而不是 ctx.sandbox 的一種實作。本地提供者在 Linux 上走 bwrap / Landlock,在 macOS 上走 Seatbelt,在 Windows 上走受限權杖與 ACL。
模式只有三檔,而且只有前兩檔會進入隔離提供者:
read-only:拒絕寫入;POSIX 執行器額外放行 shell 需要的/dev/null。workspace-write:允許寫會話工作區根目錄,以及後端承諾的暫存區。工作區根來自會話不可變的 cwd。danger-full-access:繞過隔離,呼叫方直接拉起原始 argv,不再走ctx.sandbox。
實測裡最有價值的紀律是失敗即關閉:請求了隔離卻找不到可用後端,必須拋 SANDBOX_UNAVAILABLE,禁止靜默裸跑。執行策略按次決議,所以同一個提供者可以同時給 bash 唯讀、給子 Agent 可寫狀態目錄,而不改全域狀態。消費者還要分清兩類失敗:執行器自己沒起來,和隔離生效後擋住了寫操作——前者是基礎設施故障,後者說明 Sandbox 在工作。
執行完整度還會報 full 或 partial。舊 Landlock ABI 和 Windows ACL 的部分邊界會被標成 partial。你若需要絕對承諾,就不能把 partial 當成已經鎖死。
三者怎麼串成一次任務
把一次「修測試並提交補丁」攤開,三層的分工就不再抽象。
- Harness 從 Session Log 重建上下文,注入目前可見的技能目錄(只有名字和描述)。
- 模型決定先載入
repo-test-patch這類 Skill,而不是憑記憶編步驟。 skill工具依 cwd 讀出正文,回傳指令和相對資源提示。- 模型再請求讀檔或跑測試;Harness 走工具管線,Sandbox 按這次策略包住 argv。
- 工具結果寫回 Session Log。下一步仍從日誌推導,而不是從某個全域變數裡「記得差不多」。
缺 Harness,你沒有穩定的目錄注入和結果落盤;缺 Skill,系統提示會被說明書撐爆;缺 Sandbox,Skill 寫得越清楚,越像一份越權操作手冊。三層是互補,不是三套重複功能。
實測怎麼跑、怎麼寫一個 Skill
官方推薦的最快啟動是 npx @deepseek-ai/dsh web,預設在 http://127.0.0.1:3080 開啟 Web UI。從原始碼建構則是克隆倉庫後 pnpm install && pnpm run build && pnpm dsh web。SSH 遠端拉起時,它通常只列印主機 URL,本機轉發位址交給你的 SSH 用戶端。
寫第一個專案技能,按官方發現順序放在倉庫根下:
--- name: repo-test-patch description: 只在需要改測試並提交補丁時使用。先跑失敗用例,再改最小範圍。 --- # repo-test-patch 1. 在工作區根目錄確認目前分支。 2. 先跑失敗測試,不要先改生產程式。 3. 補丁只覆蓋失敗用例相關檔案。 4. 不要觸碰工作區以外的路徑。
名稱必須是 kebab-case。目錄包用 SKILL.md,不要指望深層巢狀會被掃到。frontmatter 裡的 disable-model-invocation 和 user-invocable 控制模型和人能不能從目錄裡看見它;兩者都關掉時,只有受信任的 ctx.skills.get() 呼叫方還能載入。
跑起來後先看三件事:會話裡是否出現過技能目錄訊息;呼叫 skill 後回傳的是正文而不是把整份手冊提前貼進系統提示;在 read-only 下往工作區外寫檔,應被後端擋住,而不是「提示詞說了不要寫」卻仍然寫成功。若隔離後端不可用,行程應報錯退出,而不是繼續裸跑。
倉庫仍是開發者預覽。把 DeepSeek Harness 當架構樣板做驗證可以,把它當已經完成生產認證的平台還太早。你要驗收的是循環、目錄和隔離這三條路徑,不是某一個演示影片。
什麼時候該上完整棧,什麼時候別上
| 你的情況 | 建議 | 理由 |
|---|---|---|
| 只要一次結構化取數或單函式呼叫 | 先不要上完整 Harness | 函式呼叫循環就夠,完整外掛樹是負擔 |
| 要連續改倉庫、跑測試、可回放 | 上 Harness + Session Log | 缺會話重建,排障只能靠聊天截圖 |
| 同一套步驟要在多個倉庫重用 | 做成 Skill,不要堆系統提示 | 目錄按需載入,改手冊不影響舊結果 |
| 模型能調 shell 或寫檔 | 必須有 Sandbox,且 fail-closed | 提示詞禁止寫入,不是控制面 |
| 流程有固定審批和補償動作 | 外層用確定性工作流 | 開放循環只負責局部推理 |
和自研一個「while 循環 + 幾個工具」相比,DeepSeek Harness 的收益是模組邊界、會話重建和按次隔離已經分開;成本是 Cordis 組合模型、預覽階段的破壞性變更,以及團隊必須分清 Skill 與 Sandbox 不是一回事。每年如果你真的會換模型後端、換沙箱實作或把技能目錄交給多個倉庫,這套拆分才值。
最後一句話:2026 年把 Agent 做穩,靠的不是再換一家更會聊天的模型,而是把判斷、循環、說明書和檔案邊界拆開。Harness 管跑完,Skill 管按需說明,Sandbox 管這次能寫到哪。三者齊,演示才能變成可稽核的任務。
常見問題
Harness 和模型 API 有什麼差別?
模型 API 只負責根據上下文產生下一步意圖或工具呼叫。Harness 負責循環驅動、會話落盤、外掛組合,以及在何時注入技能目錄、何時把工具呼叫交給隔離層。
Skill 會不會自動擁有寫檔權限?
不會。Skill 是按需載入的說明書,目錄裡預設只有名字和描述。能不能寫檔,由這一次呼叫的 Sandbox 策略決定。
Sandbox 能擋住網路請求嗎?
官方 Process Sandbox 的詞彙只涵蓋檔案副作用。網路和行程可見性不在這套模式裡。需要網路隔離,要另做能力縫,而不是指望 read-only 順便擋住出站流量。
現在能當生產平台直接上嗎?
可以當架構樣板做驗證和原型,不建議把它視為已完成生產穩定性認證。官方倉庫仍是開發者預覽,相容性破壞變更仍可能發生。
在雲端 Mac mini 上隔離 Agent 實驗
DeepSeek Harness 的 Sandbox 在 macOS 上走 Seatbelt,Skill 又依賴專案工作目錄。拿唯一的生產建構機去跑預覽版 Agent,等於把循環、手冊和檔案隔離三件事疊在客戶工程上。M4 Mac mini 統一記憶體適合並行跑穩定建構與一套可丟棄的 dsh 試驗環境;待機功耗約 4W,適合 24/7 放一台「只測 Agent、不碰發布分支」的節點。原生 Unix、Homebrew 和 SSH 讓你把倉庫 cwd 釘死,比在 Windows 上遠端控家裡的筆電更可預期。
若你需要把 Harness 原型和日常交付拆開,Kvmkit 雲端 Mac mini M4 可按需擴一台隔離節點——立即了解套餐方案,讓技能目錄和沙箱策略有地方試,而不拖累正在出包的機器。