DeepSeek Harness 是什麼?一篇看懂 dsh 這個 AI coding agent
DeepSeek Harness(縮寫 dsh)是 DeepSeek 開源的全外掛化智慧代理框架。本文講清楚 Profile 與 Patch、Agent 預設、四種模式、會話記錄,以及 dsh 外掛在其中扮演的角色。
最近更新: 2026-08-18
懶人包
DeepSeek Harness —— 官方縮寫 dsh —— 是 DeepSeek 開源的智慧代理框架(開發者預覽版已上線並開源)。它就是把模型變成「能幹活的 agent」的那一層:讀寫檔案、執行指令、連上網路搜尋、長任務持續推進。官方對它的定義只有一句話:
Agent = Model + Harness(代理 = 模型 + 馬具/框架)。
模型是大腦,Harness 是身體:工具、權限、會話記憶,以及驅動代理持續運轉的主迴圈。而它最核心的設計原則是 一切皆外掛 —— 模型接入、工具註冊表、審批策略、會話記錄、UI,甚至主迴圈本身,全部是可替換的外掛。
兩行指令即可體驗(需要 Node.js 工具鏈):
npm install -g @deepseek-ai/dsh
dsh --profile web
然後在網頁端填上 DeepSeek 的 API key 就能開始用;如果本機環境變數裡已經有 key,這步都可以跳過。有問題直接看 github.com/deepseek-ai/deepseek-harness。
它不是「DeepSeek 版的 Claude Code」
最接近的類比是 Claude Code 或 OpenAI Codex,但 dsh 的形態不同:Codex 交付的是一個拿來即用的代理,DeepSeek Harness 交付的是一套可組裝的代理執行環境——它甚至可以不取代它們,而是把你本機的 Codex 和 Claude Code 掛載成子 Agent 直接呼叫。
差異體現在三處:
- 一切皆外掛。 工具、模型供應商、審批策略、會話記錄、沙箱、主迴圈、Web UI 都是外掛。卸載一個外掛,它註冊的一切自動撤銷,不留殘餘。
- 會話可完整回放。 每個會話是一份只增不減的事件記錄:使用者輸入、模型輸出、每次工具呼叫與結果、上下文注入、子代理活動,全部按序記錄。恢復、分叉、檢索、回放共用同一份事件流。
- 自己組裝自己的 Agent。 用創造模式直接提需求——「建立一個只能讀、不能寫的程式碼審查模式」——它會起草設定、掛載驗證、儲存為新預設。
Profile 與 Patch:一個 dsh 程序如何被組裝
執行中的 dsh 可以理解為一棵外掛樹,由多層設定按固定順序疊加(底層是 Cordis 外掛系統):
- Bundle(組合包) —— 官方發佈的成套外掛設定;
- Profile —— 你機器上的具名組裝清單;
- Patch(覆蓋層) —— 你自己的修改層,可以精確定位到任意一個外掛條目並替換。
上層設定始終覆蓋下層。所以「安裝外掛」通常就是在 Profile / Patch 設定裡加一行——每個外掛的倉庫都寫了自己的安裝方式。這套分層設定本質上是按順序疊加的 cordis.patch.yml。
內建的 Patch 層,簡單說就是一套給 Agent 裝能力的裝扮系統——它決定你的代理「穿」上哪些能力。透過 Patch 你可以:
- 把本機的 Codex 和 Claude Code 掛載為子 Agent,讓 Harness 直接調度它們;
- 安裝各種外掛:接入外部的工具和服務、調整執行權限、開啟全文搜尋;
- 替換介面 UI 模組——介面本身也只是外掛;
- 用 JavaScript 表達式定義規則,讓這些能力按條件生效(「只在這個倉庫生效」「只對這類檔案生效」)。
Agent 預設與四種模式
介面頂部的模式選擇器,選的是當前會話的 Agent Preset(代理預設):這個會話裡的代理有哪些工具、什麼系統提示詞、怎麼工作。
- 標準模式(standard) —— 預設。完整的程式設計助手:能理解需求、修改程式碼、執行指令並檢查結果。
- PTC 模式 —— 在標準模式基礎上,支援用 TypeScript 撰寫小程式,把多步操作組合成自動化流程。程式化工具呼叫(迴圈、條件、並行都行),只有程式的最終輸出進入上下文——步驟越多、中間資料越大,越快越省上下文。
- 極簡模式(minimal) —— 只提供持續可用的終端和基礎文字替換工具,適合簡單的改動,也面向基準測試與教學。
- 創造模式(creation) —— 在標準模式基礎上,額外支援執行時檢查、試用外掛,以及使用預設完成創作類任務:檢查當前執行時、在記憶體中試驗外掛、組合並儲存新預設。注意:它能執行模型寫的程式碼並修改執行時,信任等級等同 shell,建議只在受信任環境使用。
會話一旦產生內容就不能再切換模式——中途換模式會導致舊工具呼叫無法被新工具集解釋。
代理怎麼幹活
工作由兩個概念組織:step(步驟) 是一次模型請求加上它要求執行的工具呼叫;turn(輪次) 是從接到任務到全部做完的整個過程。每個關鍵位置(步驟開始前、工具執行前後、模型請求發出前)都是可攔截的擴充點,外掛可以在這裡插入審批、改寫、記錄、攔截邏輯。
會話記錄 記錄模型看到的一切,只增不減:系統提示詞、思維鏈、工具呼叫與結果、上下文注入、子代理調度。它支撐會話恢復、自動標題、上下文壓縮和跨會話檢索。
代理還可以先交方案再動手(你批准後執行)、把長任務拆成可勾選的清單,遇到需要拍板的事會暫停並拋出帶選項的問題。
安全模型
- 程序沙箱三檔 ——
read-only(唯讀)、workspace-write(可寫工作區)、danger-full-access(完全放開),使用各平台原生隔離(Linux bwrap/Landlock、macOS Seatbelt、Windows ACL 受限權杖)。沙箱後端如實回報隔離執行情況,不虛報安全邊界。 - 審批與權限 —— 風險操作先申請批准,權限有預設檔位可整體調節。
- 守衛 —— 偵測重複無效動作(迴圈衛生)、強制中斷逾時工具呼叫。
- 金鑰不進記錄 —— API Key 走獨立通道,記錄裡只有引用沒有明文。會話記錄預設不上傳,遙測需明確開啟。
五種使用方式
- Web UI —— 瀏覽器開啟本機位址,對話、審批、切換模式、改設定;
- Headless CLI —— 無介面執行單個任務,跑完即退,適合 CI/CD;
- Python SDK —— 自帶打包執行環境,高層 turns API + 底層 JSON-RPC;
- TypeScript SDK —— JSON-RPC 協定、伺服端與用戶端,適合深度整合;
- ACP 伺服端 —— Agent Client Protocol,面向編輯器與工具鏈廠商。
生態相容也很完整:支援 MCP(任意 MCP 伺服器接入後與內建工具走同一條管線),Hooks 橋讓 Claude Code / Codex 的鉤子腳本直接可用。
外掛在哪裡登場
正因為一切皆外掛,社群短短幾天就做出了幾百個外掛:UI 皮膚、任務進度條、跨會話記憶、桌面寵物、小遊戲、深度研究編排器……去外掛目錄看看現在都有什麼,或者讀外掛開發入門教學,自己寫一個。
常見問題
DeepSeek 有 Agentic Coding(代理式程式設計)嗎? 有——DeepSeek Harness 就是 DeepSeek 在代理式程式設計上的開源答卷。只不過它交付的不是一個固定的程式設計助手,而是助手底下的執行環境:一棵工具、權限、會話記憶、主迴圈全部可替換的外掛樹。接上 DeepSeek 模型(或任何 OpenAI 相容端點),就是一套完整的代理式程式設計環境——它甚至可以把本機的 Codex、Claude Code 掛成子 Agent 來調度。
DeepSeek Harness 收費嗎? Harness 本體開源(MIT)。你只為接入的模型 API 付費。
dsh 是 Claude Code / Codex 的替代品嗎? 不完全是。它是一套可組裝的代理執行環境,而不是拿來即用的代理——它還可以把那些工具掛成子 Agent,而不是取代它們。
「一切皆外掛」落實到實處是什麼意思? 就是安裝、替換、移除任何能力——一個工具、整套 UI、審批策略、主迴圈——都是一次設定變更。元件級的視角見dsh 外掛是什麼?。
