SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor

什麼是 Agent Harness?與 LLM 模型的差異解析

Agent Harness 是圍繞 AI 模型運作的程式,負責處理迴圈、工具呼叫、權限與會話狀態。本文解析為何安裝在磁碟上的工具程式與雲端模型不同,並說明 harness 如何透過五步驟迴圈執行指令。

什麼是代理程式外殼 (agent harness)

代理程式外殼是圍繞語言模型運作的程式,負責將模型轉化為代理程式。它包含維持模型持續運作的迴圈、模型可呼叫的工具定義、決定哪些呼叫實際執行的權限規則、跨回合存續的會話狀態,以及執行工作的作業目錄。模型可在此外殼內進行替換。

最後一句話最為關鍵。模型本身在回答問題後就會將你遺忘。外殼則會詢問模型下一步該做什麼、執行模型要求的指令、將結果回饋給模型,並再次詢問。這種重複過程正是人們所稱的「代理程式」。若對相關術語仍感到模糊,AI 代理程式、LLM 與助理之間的差異 可在您選擇工具前釐清這些詞彙。

Harness 不是模型

兩者容易混淆,是因為供應商以同一個品牌名稱發布這兩種產品。

dsh 和 DeepSeek 是不同的產品。DeepSeek Harness 由 github.com/deepseek-ai/deepseek-harness 發布,於 13 August 2026 依 MIT 授權條款提供,是安裝在電腦上的 Node 程式。DeepSeek 模型則是透過 API(application programming interface)提供服務的權重。將 dsh 指向其他供應商的模型後,仍可繼續運作,因為 harness 只需要能接收訊息並回傳工具呼叫的元件。

Claude Code 和 Claude 也是同樣的關係。Claude Code 是 harness:具備迴圈、權限系統,以及檔案和 shell 工具的終端機程式。Claude 則是它預設呼叫的模型系列。Codex 和 Gemini CLI 也採用相同的區分方式。

以下測試每次都能判定兩者的差異。先安裝 harness,再呼叫模型。如果該元件在磁碟上有版本,且在家目錄中有設定檔,就是 harness。如果它只是設定檔中的字串,例如 deepseek-flash,那就是模型。

迴圈的實際運作方式

一個 harness 迴圈的單次執行流程如下。請仔細閱讀,因為 harness 之間的絕大多數差異,都源自這五個步驟內部的細節。

  1. Harness 將目前的對話紀錄以及工具定義列表傳送給模型。
  2. 模型回覆文字,或是要求呼叫其中一項工具。
  3. Harness 根據權限規則檢查該請求,決定直接執行或暫停並詢問使用者。
  4. Harness 執行工具、擷取輸出結果與結束代碼,若輸出過長則會進行截斷。
  5. Harness 將結果附加至對話紀錄中,並回到步驟 1。

步驟 3 是 harness 在日常使用中差異最大的地方。會在每個指令執行前詢問的 harness 非常安全,但也很耗費心力。從不詢問的 harness 終究會在模型判斷錯誤的路徑上執行破壞性指令。目前所有嚴謹的 harness 都具備中間設定:建立一份允許清單(allowlist),清單內的指令可直接執行,其餘指令則需提示確認。

其餘差異則存在於步驟 1。Harness 會寫入隨附於每次請求的系統提示詞(system prompt),而 Claude Code 直接將此控制權交給使用者,因為 輸出樣式會編輯其傳送的系統提示詞,進而改變後續的每一次回覆。對話會隨著每一輪執行而增長,但模型有固定的上下文視窗(context window),因此 harness 必須決定哪些內容要捨棄、哪些要摘要,以及哪些要寫入檔案以便日後讀取。這項決策是導致兩個 harness 在驅動相同模型時,工作品質產生差異的主因。如果這五個步驟對您來說仍過於抽象,解決方法是親手編寫一個簡易的迴圈,這正是 AI 代理學習的階段性路徑 在初期要求您建立的內容。

目前大多數 harness 透過 MCP (model context protocol) 連接外部工具,這是一種讓任何支援該協定的 harness 都能使用工具的標準,因此單一整合即可適用於多個 harness。在 VPS 上執行 MCP 伺服器 涵蓋了這部分的內容。網頁搜尋通常是使用者最先加裝的工具,而 將代理指向您自己的 SearXNG 執行個體 不僅能讓查詢避開第三方,同時也清楚表明代理後續讀取的每一頁內容,都是進入迴圈內部的未受信任輸入。

代理工具組與代理框架

每當新的代理工具組推出時,就會有人提出這個問題,而各方答案之所以不一致,部分原因是供應商本身的定義也不同。以下是較經得起檢驗的說法。

框架是供程式匯入的函式庫。您自行撰寫迴圈,決定何時呼叫模型,並自行處理工具回傳的結果。LangChain 是廣為人知的例子:它提供組成元件,您再以程式碼組合出代理。

代理工具組是供您執行的程式。迴圈已經寫好,工具也已備妥,權限模型通常也有預設值。您在第一次執行命令時就能取得可運作的代理,之後再進行設定。

安裝後的操作方式通常就能判斷類型。如果安裝後需要撰寫程式碼,它就是框架。如果安裝後可以直接與它互動,它就是代理工具組。

這個界線確實仍有爭議,而最清楚的證據來自 LangChain 自己的文件。截至 2026 年 10 月,該文件將 Deep Agents 稱為「代理工具組」,也稱為「建構於 LangChain 代理核心組成元件之上的獨立函式庫」;langchain-ai/deepagents 儲存庫則自稱「內建完整功能的代理工具組」。這兩種描述都合理。Deep Agents 是供您匯入的 Python SDK(軟體開發套件),因此依照安裝測試,它屬於函式庫;但它提供了足夠多的預設行為,因此使用方式又像代理工具組。Microsoft 於 2026 年 7 月發布穩定版代理工具組;同月,其 Foundry Hosted Agents 正式全面推出。這表示代理工具組如今已成為產品類別,而不只是術語。

因此,請改問能預測工作量的問題。如果您撰寫迴圈,就必須負責這個迴圈,包括重試、內容裁剪、權限提示,以及記錄執行過程。如果迴圈已經隨產品提供,您就會沿用他人對這些問題的處理方式。這樣能大幅縮短開始使用的時間,但日後也更難修改。

Harness 與聊天視窗的差異

聊天視窗與 Harness 皆會顯示模型輸出,兩者的差異在於運算作業執行的位置。在聊天視窗中,模型執行的任何程式碼皆於供應商的沙盒環境內運作,處理您上傳的檔案,且該工作階段結束後資料即會消失。Harness 則是在您啟動它的機器上執行工具,並以啟動該工具的使用者身分,直接針對您的真實檔案進行操作,且其環境中包含您的真實憑證。

這兩句話概括了其全部優勢與風險。代理程式終於能夠執行實際工作,但同時,代理程式也可能刪除這些工作成果。

實際有人在使用的 harness

這份清單特意標註為 19 August 2026。這個類別每週都在變化,任何整理很快就會過時。

  • Claude Code 和 Codex 是供應商提供的 harness。它們以終端機為主,預設綁定自家模型,權限處理也最完善。Claude Code、Cursor、Codex 與 Copilot 的比較會完整說明這些工具。
  • DeepSeek Harness (dsh) 採用 MIT 授權,核心理念是所有功能都是 plugin,因此模型、工具、工作階段、sandbox 與使用者介面都能替換。每個安裝的 plugin 都會以 agent 本身的權限執行,因此在此環境中,加入 dsh plugin 前先確認它能存取的內容比固定工具組的 harness 更重要。19 August 2026 時,它在 GitHub 上約有 166,800 顆 stars,距離發布僅 6 天。
  • Hermes 由 Nous Research 開發,是通用型自主 agent,不是 coding 工具。它於 February 2026 以 MIT 授權發布,內建儲存採本機方式:記憶與技能以檔案形式存放在 ~/.hermes,工作階段歷史則存放在本機 SQLite 資料庫。啟用 Mem0 或 Hindsight 等選用的外部記憶提供者後,情況就不只如此。截至 October 2026,Hermes 文件說明,啟用中的提供者會在每次回應後收到每一輪對話,以及每次內建記憶寫入的副本。因此,資料也會儲存在該提供者處。啟用前值得先閱讀Hindsight 與 Mem0 的比較;在 VPS 上自行託管 Hermes則會說明其餘步驟。
  • Omnigent 是 meta-harness:它會在單一 API 後方驅動包括 Claude Code 和 Codex 在內的其他 harness,並提供共用工作階段、支出上限與作業系統層級的 sandbox。Omnigent 作為多 agent harness會說明這種架構帶來的功能。
  • OneCLI 是面向團隊的 sandbox harness,核心是 gateway。gateway 會將真實憑證注入對外請求,因此 agent 本身始終只能看到 placeholder key。

其中 3 個經常同時出現在候選清單中,因此值得閱讀DeepSeek Harness、Claude Code 與 Omnigent 並列比較,了解它們在模型綁定、授權、成熟度,以及各自需要在伺服器上執行的內容方面有何差異。

dsh 的快速入門只需執行單一命令,執行一次也是了解 harness 的最快方式。該命令需要機器上已安裝 Node.js。

npx @deepseek-ai/dsh web

這會在 http://127.0.0.1:3080 啟動 Web UI(使用者介面)。依賴它之前,請先閱讀 README,因為 dsh 將自身描述為 developer preview,並明確表示未來會有不相容的變更。如果第一個命令直接失敗,或抓取到非預期的 build,固定 dsh 的確切版本並清除 npx cache通常就能恢復執行。在 VPS 上執行 DeepSeek Harness會說明伺服器安裝方式,為什麼該位址以 127.0.0.1 開頭則會解釋 loopback 預設值。

路由器位於 harness 之上

模型路由器是 harness 與供應商 API 之間的本地代理。Claude Code Router 即為常見範例:它預設綁定至 127.0.0.1:3456,接收 Claude Code 原本會發送給其供應商的請求,並將其轉發至您設定的任何供應商。Harness 本身不會察覺任何變動。

路由器之所以存在,是因為模型可隨意替換,這也驗證了本文的核心觀點。由於代理層會檢視所有提示詞(prompt)並持有所有供應商金鑰,這也集中了風險。請將其視為基礎設施,而非便利工具。Harness 存放 API 金鑰與模型設定的位置 與此處面臨的問題屬於同一層級。

VPS 上執行 harness 時的變化

harness 從筆記型電腦移到租用的伺服器後,會有 4 項變化。

關閉上蓋後仍會繼續執行。 長時間工作不會因為通勤或電池耗盡而中斷。在 tmux 中啟動工作,然後讓工作與工作階段分離:

tmux new -s agent
# start the harness, then press Ctrl-b and then d to detach
tmux attach -t agent

需要在重新開機後恢復執行的工作,使用者服務比終端機工作階段更合適:

loginctl enable-linger $USER
systemctl --user status my-agent.service

loginctl enable-linger 是許多人忽略的部分。沒有這項設定時,當最後一個 SSH(secure shell)工作階段關閉,systemd 就會停止使用者服務。因此 agent 會在登出時終止,而且不會輸出錯誤。在沒有圖形介面的環境中使用 systemd 執行 dsh 包含所需的 unit file。在該伺服器上執行一個工作階段後,再啟動第二個工作階段不會增加額外成本;同一台機器上的 2 個 Claude Code 工作階段可以彼此傳送訊息,因此你今天早上啟動的工作階段可以將工作交給另一個工作階段,而不必手動轉交。

會保存你的金鑰。 provider key 現在儲存在該伺服器的設定檔中。確認哪些人可以讀取該檔案:

ls -l ~/.config

任何以你的使用者身分執行的程序都能讀取該檔案,包括 agent,以及 agent 選擇執行的任何程式。

可以連線到你的其他機器。 VPS 若與其他機器位於同一個私有網路,agent 就能取得通往這些機器的路由。這正是其用途,但也代表相同的影響範圍。

無論你在哪裡都能連線。 多數 harness 會提供 Web UI,而且通常會基於安全理由將其繫結至 loopback。請檢查你的設定:

ss -tlnp | grep 3080

127.0.0.1:3080 表示只有伺服器本身可以連線。0.0.0.0:3080 表示 UI 會在所有介面上監聽,因此任何能連線到伺服器公開位址的使用者都可以連線,除非前方的防火牆封鎖該埠。截至 2026 年 10 月,dsh 會在啟動時拒絕這類萬用字元位址,但許多其他 Web UI 仍會接受。請透過 SSH tunnel 存取 loopback UI,不要變更繫結位址:

ssh -N -L 3080:127.0.0.1:3080 you@your-server

接著在筆記型電腦的瀏覽器中開啟 http://127.0.0.1:3080。網路流量會在 SSH 工作階段內傳輸,因此不會有新的服務暴露於網際網路。

這些特性同時也是安全性上的理由

請再次從攻擊者的角度閱讀這四項特性。

它會無人值守地執行,因此沒有人會注意到模型誤判路徑的那一刻。它持有你的金鑰,因此只要有一個設定檔可被讀取,整個 provider 帳戶就可能遭到暴露。它可以連線到你的其他機器,因此 prompt injection,也就是隱藏在代理程式讀取的網頁或檔案中的指令,現在就有了通往資料庫主機的路徑。它可以從任何地方連線,因此若 Web UI 監聽公開位址,前方沒有防火牆,且本身也沒有驗證機制,任何找到它的人都能將其當成 shell 使用。dsh 會在啟動時列印的 URL 中放入程序 token,這能提供一些幫助;但該 URL 現在就是一組憑證,因此必須像密碼一樣謹慎分享。

每種情況的修正方式都很單調,而且每次都相同。為代理程式建立專用的低權限使用者帳戶,不要使用你的帳戶:

sudo adduser --disabled-password --gecos "" agent

讓 Web UI 僅監聽 loopback,並透過 SSH 連線。提供仍足以讓代理程式完成工作的最小權限憑證;將秘密資訊排除在 AI 代理程式之外 一節會詳細說明這點。對於你不在場監看的工作,使用拋棄式機器比仔細設定的機器更適合:在可拋棄式 VM 中執行程式碼代理程式 與 在 VPS 上安全執行 Claude Code 都採用這種方式。

需要使用 agent harness 嗎?

如果工作是一次處理一個問題,聊天視窗就已經足夠;使用 harness 只會多出一個需要監督的迴圈。當任務需要對實際檔案執行許多步驟,或必須在你休息時持續執行,harness 才開始發揮價值。

這個類別中的大多數工具仍在早期階段。截至 2026 年 10 月,dsh 在自己的 README 中仍標示為 developer preview,其他工具的變動速度也很快,今天撰寫的設定檔下個月可能就需要修改。因此,設定應保持精簡且可重現,並記錄所做的變更。同樣的克制也適用於執行迴圈;讓 agent 優先採用可行的最小變更的 skill,能讓你在無人監督的執行結束後實際讀懂 diff。先在一台伺服器上使用一個 harness,交給它一項工作和一把權限範圍狹窄的 key。等第一項工作連續一週都沒有問題後,再逐步擴大其存取權限。目前值得執行的 self-hosted agents 是選擇第一個 agent 的合理起點。

FAQ

用簡單的方式說明,什麼是 agent harness?

它是包覆模型運作的程式。模型會產生文字,並要求使用工具。harness 會執行持續提出要求的迴圈、執行模型要求使用的工具、強制執行哪些工具可在未經許可下執行的規則,並在多次互動之間保存工作階段狀態與檔案。替換模型後,harness 仍可運作,這最清楚地顯示兩者是分開的元件。

Claude Code 是模型還是 harness?

Claude Code 是 harness。它是具備迴圈、權限系統,以及內建檔案與 shell 工具的終端機程式。Claude 是它預設呼叫的模型系列。DeepSeek Harness (dsh) 也採用相同的分工;它是可安裝的 Node 程式,而 DeepSeek models 則透過 API 提供服務。你會在電腦上安裝 harness,並透過網路呼叫模型。

agent harness 與 agent framework 有什麼差異?

framework 是你匯入並據以撰寫程式碼的函式庫,因此迴圈、重試與 context 處理都由你負責。harness 是你直接執行的程式,因此這些功能都已隨附預設值,你只需進行設定而不必自行撰寫。實務上兩者的界線並不明確:截至 October 2026,LangChain 的 Deep Agents 是可匯入的 SDK,而其本身的 repository 稱它為內建完整功能的 agent harness。請先確認你是否需要自行撰寫迴圈。答案就能決定哪個詞較符合你的情境。

我需要 VPS 才能執行 agent harness 嗎?

不需要。此處列出的每個 harness 都能在筆記型電腦上執行。伺服器會帶來 4 項差異:關上螢幕後,agent 仍會持續執行;它能將金鑰保存在持續開機的機器上;它能連線至其他伺服器;你也能從任何裝置返回相同的工作階段。這些同時都是安全性考量,因此請為 agent 設定專用使用者帳號,並讓任何 Web UI 僅繫結至 127.0.0.1。

我可以在同一個 harness 中使用不同的模型嗎?

通常可以,這正是 harness 的定義特性。多數 harness 會在其設定中接受模型名稱與 base URL,因此將它指向其他供應商通常只需修改設定,而不必重新撰寫程式。如果 harness 不支援,Claude Code Router 等本機 router 可以置於 harness 與供應商之間並轉換要求,預設繫結至 127.0.0.1:3456。請謹慎使用此 proxy,因為它能查看每個提示並持有所有金鑰。