Agentic Research

This article is not yet available in English. You are reading the Traditional Chinese original. The English edition will appear here once it is translated.

Browse articles that do have an English edition

安裝 DeepSeek Harness:Web GUI 與終端機兩條路

2026/09/3019 min readBryan Chan閱讀中文原文
TopicsDeepSeek Harnessdsh安裝教學

DeepSeek Harness(指令名 dsh,npm 套件名 @deepseek-ai/dsh)是 DeepSeek 官方開源的 Agent 執行環境,MIT 授權,設計口號是「Everything is a Plugin」。做完這篇你會得到:一個在本機 http://127.0.0.1:3080 跑起來的 Web GUI、一個接好的模型、一個選定的工作區,以及你在終端機路線上跑通的一次性任務。兩條路共用同一套設定與憑證。

動手做完大約 20 分鐘,其中大部分是等第一次下載套件。

Harness 的運行流程流程圖:使用者請求進入 harness 後,先組裝上下文(系統提示、工具清單、記憶),呼叫 LLM 做一次 forward pass,解析輸出。若輸出是純文字就直接收斂成最終答案;若是工具呼叫,則先過權限閘門(放行、詢問或拒絕),在沙箱執行,再把觀察結果回灌到上下文,重新呼叫模型。這個迴圈會一直轉到模型不再要求工具為止。HARNESS(執行環境)工具呼叫純文字回灌使用者請求一句話或一段任務組裝上下文系統提示 + 工具清單 + 記憶呼叫 LLM一次 forward pass解析輸出純文字?還是工具呼叫?權限閘門放行 / 詢問 / 拒絕沙箱執行在受限環境跑工具觀察回灌結果併回上下文最終答案不再要求工具,收斂
1/8使用者請求
任務用自然語言進來。harness 要把它變成模型能處理的東西。
第 1 步,共 8 步 使用者請求
圖:harness 的運行流程。下排是前進路徑,上排是工具迴圈 —— 那條回灌的邊,就是 Agent 與聊天機器人的分界。dsh 把這整張圖包成一個可執行環境。

適用平台

官方 README 只寫「Install Node.js, then run npx @deepseek-ai/dsh web」,沒有列出作業系統矩陣,也沒有在 npm 套件裡宣告 Node 版本下限。實務上:

路線需求
npm 路線(本文主線)有 Node.js(含 npm 與 npx)即可;官方未指定版本,裝 nodejs.org 的 LTS 版最穩
原始碼路線Git、pnpm,以及能跑 pnpm run build 的 Node 環境

官方 README 同時明講:這個專案處於 developer preview,快速迭代中,會有破壞性變更;執行前要先看過倉庫裡的 SAFETY.md。

來源:github.com/deepseek-ai/deepseek-harness(README、apps/cli/README.md、apps/cli/reference/README.md、docs/user/guide/index.md、docs/user/guide/providers.md、SAFETY.md),文件站 deepseek-harness.github.io/deepseek-harness/。

前置需求

  • Node.js。不確定自己有沒有,下一個步驟會驗。
  • 一把模型金鑰:DeepSeek 平台(platform.deepseek.com)的 API Key,或其他供應商的。先讀 環境變數與 .env 與 五分鐘設置你的 LLM 開發環境,本文範例金鑰一律是 sk-xxxxxxxx 這種佔位符。不要把金鑰貼進任何對話視窗,也不要 commit 進 git。
  • 一個要讓 Agent 操作的專案目錄。官方說明:你執行 dsh 時所在的目錄就是預設工作區根目錄。
  • 你會用 Terminal(終端機)。終端機路線整條都在 CLI(命令列介面) 裡。
  • 一份心理準備:官方 SAFETY.md 說這是實驗性軟體、沒有做過安全稽核,它會執行模型產生的程式碼與指令、會載入第三方插件、會存取你給它的網路/程序/憑證/檔案。官方建議以最小權限執行、優先用一次性 VM 或容器、對它能碰到的檔案先備份。

步驟

啟動 DeepSeek Harness 的八個步驟確認 Node.js 與 npx 存在、用一行指令啟動 Web GUI、設定模型、選工作區、跑第一個任務,然後認識終端機(headless)路線、用健檢確認版本與整棵設定樹、以及幾個常用旗標與它的界線(例如 --host 0.0.0.0 刻意不支援)。設定與憑證放在 ~/.dsh,可用 DSH_HOME 改變位置。dsh web先確認 Node 與 npx$ node --version && npx --version一行啟動 Web GUI$ npx @deepseek-ai/dsh web會自動開瀏覽器;--no-open 可關設定模型走 provider 設定,不是環境變數拼湊選工作區它要能讀到你的專案目錄跑第一個任務終端機路線(headless)最終文字走 stdout,推理走 stderr示意圖,非截圖。只畫與當前步驟相關的區域,實際介面有更多選項。
1/8確認 Node.js 與 npx
第 1 步,共 8 步 確認 Node.js 與 npx
啟動 DeepSeek Harness 的流程示意(八步)

步驟一:確認 Node.js 與 npx 在

node --version
npx --version

預期輸出:兩行版本號,形如 v22.x.x 與 10.x.x。有版號就能走 npm 路線。

失敗長這樣:command not found: node —— 到 nodejs.org 裝 LTS 版,裝完開一個新的終端機視窗再試一次(舊視窗讀不到新加進 PATH 與路徑 的指令)。

步驟二:一行啟動 Web GUI

cd 到你要讓 Agent 操作的專案目錄,然後:

npx @deepseek-ai/dsh web

預期輸出:第一次執行會先下載套件,畫面上會出現 npm/npx 的進度訊息(這一段可能花幾十秒到幾分鐘,看你的網路)。之後 dsh 啟動,官方文件說它預設在 http://127.0.0.1:3080 提供 Web UI;在本機啟動時,它會在整棵插件樹完成載入後才打開預設瀏覽器,並在交遞前印出一行:

dsh web: opening the default browser; pass --no-open to disable

瀏覽器打開後你會看到 DeepSeek Harness 的介面。這個終端機視窗要一直開著 —— 它就是伺服器本身,關掉它就等於關掉 Web GUI。

失敗長這樣:如果作業系統的瀏覽器交遞失敗,官方說明 stderr 會印出原因、伺服器繼續跑,並把網址告訴你讓你手動開。如果你透過 SSH(安全外殼) 啟動(環境裡有 SSH_CONNECTION 或 SSH_TTY),它不會開瀏覽器,只印出主機網址 —— 這是刻意的,因為轉發位址由你的 SSH 客戶端或編輯器持有。

步驟三:設定模型

在瀏覽器裡打開 Settings → Models。DeepSeek 那張卡片只有一個 API key 欄位:貼上你的金鑰、按儲存。

預期輸出:官方說明金鑰是 write-only —— 存好之後頁面拿到的是遮罩過的描述,不會再顯示原文;金鑰本身存進 $DSH_HOME/.credentials.yaml(預設 ~/.dsh),設定檔裡只留一個憑證引用。存好後不需要重啟伺服器,模型路線立即可用。

要接其他供應商:按 Add model provider,官方說內建清單包含 anthropic、openai、moonshotai(Kimi)、zai(GLM)這類 provider id,選一個、填金鑰、儲存。要接中繼站、公司閘道或自架伺服器,把卡片切到 Custom model API,填一個小寫的 Provider ID、base URL、API 協定(三種:OpenAI Chat Completions、OpenAI Responses、Anthropic Messages)、憑證與至少一個模型。官方提醒 Provider ID 不可改(請求、已存 session、模型預設與憑證引用都用它),要改名只能新增一個再刪掉舊的。注意 OAuth 登入型的供應商(例如 Codex)目前不支援。

步驟四:選工作區

回到主畫面,按 Choose workspace,加入你在步驟二啟動 dsh 的那個專案目錄,然後選取它。

預期輸出:官方文件把這條規則寫得很明白 —— 在你選定工作區之前,session 的輸入框是不可用的。所以「輸入框灰掉、打不了字」不是壞掉,是還沒選工作區。選好之後輸入框就能用。

步驟五:跑第一個任務

開一個 session,官方指南給的第一句任務是:

Summarize this repository and identify its main packages.

預期輸出:Agent 開始讀檔、搜尋、可能執行指令;畫面上看得到它的動作與工具呼叫。官方說明:在目前權限策略下需要核准的操作,Web UI 會先問你。完成後你會看到一段針對這個倉庫的總結。

步驟六:走終端機路線(headless)

同一套設定與憑證,也可以完全不用瀏覽器。官方 CLI 文件列的模式是 dsh --profile headless "job":跑一個全新且會持久化的 session、印出最終答案、然後結束。

cd /path/to/your/project
npx @deepseek-ai/dsh --profile headless "Summarize this repository and identify its main packages."

預期輸出(官方 CLI reference 寫得很具體,可以直接對照):

  • stdout 只印最終答案文字
  • 模型的推理過程以 dsh: reasoning: 標題串流到 stderr(所以你想把答案導向檔案時,不會混進推理文字)
  • 結束時:任務完成 exit code 是 0,其他情況是 1
  • 這個 profile 不會開任何 listening port,也不掛瀏覽器、HTTP 伺服器或 Web runtime

第一次跑 headless 時,官方說明該 profile 會自動從出貨範本初始化,所以你會看到它建立設定檔的過程。

步驟七:確認版本與整棵設定樹

npx @deepseek-ai/dsh --version
npx @deepseek-ai/dsh --profile web --dump-config

預期輸出:--version 印出 launcher 的版本號(官方說明 -V/--version 要在「app 參數邊界」之前才印 launcher 版本,所以照上面這樣寫就對)。--dump-config 印出你這台機器上實際組合出來的整棵插件設定樹,每一行都附註是哪個檔案提供的、以及哪些 overlay 改過它;它只印不啟動(官方說明 dump 不會執行 app 的命令列 provider,而且會順手把缺的 profile 檔初始化出來)。想只看 bundle 層,用 --dump-default-config。

步驟八:知道幾個常用旗標與它的界線

Web profile 的旗標(官方 CLI reference 的表格):--host、--port、可重複的 --trusted-host、--no-open。

npx @deepseek-ai/dsh web --port 8080 --no-open

預期輸出:伺服器在你指定的 port 上提供服務,且不會自動開瀏覽器 —— 你自己到 http://127.0.0.1:8080 開它。

界線也值得先知道:官方明講 CLI 刻意不支援 --host 0.0.0.0,那樣啟動會以 usage error 結束。另外 dsh --help 印的是 launcher 自己的說明,dsh --profile web --help 印的是 Web app 的旗標而且不啟動任何東西 —— 官方建議用後者查旗標。

想從原始碼跑(例如你要改插件):

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

預期輸出:pnpm run build 準備好倉庫的產物,pnpm dsh web 用這些產物啟動(官方說明這條指令不會重新 build)。

怎麼確認你裝對了

兩條指令,一條查版本、一條端到端:

npx @deepseek-ai/dsh --version
npx @deepseek-ai/dsh --profile headless "Reply with exactly: DSH_OK"
echo $?

預期輸出:第一行是版號。第二行的 stdout 應該只有 DSH_OK 這幾個字(推理文字走 stderr)。第三行印出 0,代表官方定義的「任務完成」退出碼。三個都對,就代表安裝、模型設定、憑證解析與 agent 迴圈整條鏈路都是通的。

Web GUI 那半邊的驗證不需要指令:http://127.0.0.1:3080 打得開、Settings → Models 裡看得到你加的供應商、選完工作區後輸入框可以打字。

常見錯誤與修法

前四條是官方 docs/user/guide/providers.md 的 troubleshooting 清單原文對應,後面幾條來自 CLI reference:

症狀原因修法
MISSING_CREDENTIAL憑證引用指向的金鑰不存在到 Models 頁面存一次金鑰,或把被引用的那個環境變數供給它。官方特別說明:引用錯時它會明確失敗,而不是拿環境裡不相干的金鑰將錯就錯
UNKNOWN_MODEL選到一個沒設定的模型改選已設定的模型,或把缺的模型加進那個自訂供應商
「Fetch available models」回 401金鑰不對檢查金鑰。官方說明模型探索打的是 OpenAI 相容的 GET /models;不支援這個端點的閘道要手動輸入模型 id
金鑰與網址都對,閘道卻拒絕所有請求它的請求格式跟 OpenAI 不一樣官方給的第一個修法是設定 compat.supportsDeveloperRole: false 與 compat.maxTokensField: max_tokens;只有推理模型失敗時,前者就是答案
輸入框灰掉、打不了字還沒選工作區按 Choose workspace,加入你啟動 dsh 的那個目錄並選取
輸入框顯示 Select model 且不讓你送先前存的預設模型指向一個已被刪掉的供應商從模型選單重選一個模型
啟動失敗並直接 exit 1設定解析、schema、plugin 開機失敗官方說明最後會有一行 Full diagnostics:,指名一個 startup-<timestamp>-<uuid>.log,位置在 $DSH_HOME/logs/(預設 ~/.dsh/logs/)。先讀那個檔
--host 0.0.0.0 直接被拒官方刻意不支援對外綁定這是有意的安全設計,不是 bug。要在別的機器上用,走 SSH port forwarding
SSH 環境下瀏覽器沒自動開有 SSH_CONNECTION/SSH_TTY 時官方會略過瀏覽器交遞正常行為,它仍會印出主機網址;本機要關掉自動開啟用 --no-open
改了 cordis.patch.yml 但沒生效沒開 HMR 時設定變更要重啟官方說明適配器在下一次請求時會重讀該檔;Web profile 的檔案在 $DSH_HOME/profiles/web/cordis.patch.yml,瀏覽器與伺服器同機時也可以用 Settings 標頭的 Open configuration file 直接開

最後重申一次官方 SAFETY.md 的定性:沙箱、核准提示與權限控制可以降低風險,但不保證隔離,也不能保護它本來就被允許存取的資源;不要把 DeepSeek Harness 當成不可信工作負載的唯一安全控制。要跑不確定的東西,就用一次性 VM 或容器。

下一步