YouMind
登錄

什麼是「Harness」?

@theo
英文2026年10月23日
282K
4.3K
326
179
5.8K

TL;DR

Theo 釐清了「AI Harness」的技術定義,將其與使用者介面區分開來,並解釋其在透過 MCP 讓 LLM 執行工具和與外部系統互動中所扮演的角色。

老實說:我寫這篇文章,是因為我已經厭倦了不斷解釋這件事,而且似乎沒有一份「資源」能好好說明 harness 到底是甚麼。

讀完這篇文章後,你應該會掌握關於 harness 是甚麼、以及它們如何運作的所有必要知識。

人類使用介面

一般來說,人類並不是靠寫程式碼來使用電腦的。我們會透過某種形式的介面,例如終端機、網站或應用程式。

理論上,人類可以為每一個想完成的任務都寫一段獨立的 Python 或 JS 程式碼。但我們不會叫他們這樣做,而是透過按鈕、快捷鍵、指令等方式,讓他們可以使用這些程式碼。

介面的例子:Chrome、Claude Code、ChatGPT App(前身為 Codex)

另外值得一提的是,人類通常……看不到背後的程式碼。人類只會看到介面。

LLM 使用 harness

預設情況下,LLM 唯一能做的就是生成文字。要讓語言模型做到更多事情,它就需要工具。現時大部分 LLM 都經過訓練,懂得使用諸如 "read_file"(用來存取你電腦上的檔案)、"edit_file"(用來修改那些檔案)、"bash"(用來執行指令)和 "search"(用來在網上尋找資料)等工具。

不過,LLM 發出的依然只是文字!它無法像人類一樣點擊按鈕。因此,我們需要一種自訂的文字格式供 LLM 使用,用來表示「你應該執行一些程式碼」。假設我們給 LLM 一個呼叫工具的格式,例如:

<read_file name="README.md">

現在 LLM 就知道可以用這種格式回應。但這仍然只是文字,本身不會產生任何作用!就像在電腦關機時敲鍵盤或移動滑鼠一樣。

必須要有東西去解讀這些回應,然後根據 LLM 的回應內容執行正確的程式碼。

要讓 LLM 真正做事,它需要:

  • 能夠執行操作的工具(read_file、edit_file、bash、search 等)
  • 一套透過文字呼叫這些工具的特定語法
  • 一個能解析訊息、識別該語法並執行程式碼的系統
  • 一種將工具的回應傳回給 LLM 的方法
  • 一份可用工具清單,並附上使用方式的說明

這就是 harness。

「Claude Code 不就是 harness 嗎?」

算是吧。

Claude Code 由兩部分組成:介面和 harness。

當你在終端機執行 "claude" 時,會開啟 Claude TUI。當你在 Claude 桌面應用程式切換到 "code" 分頁時,會開啟 Claude Code GUI。這兩者都不是 harness。

在底層,Claude Code 使用 Anthropic Agent SDK 與 agent 互動。ChatGPT 也是一樣,ChatGPT/Codex 應用程式會與 Codex App Server(內建於 CLI 中)進行互動。

Theo - t3.gg - inline image

我明白大家為甚麼會混淆:因為 Claude Code 和 Codex 都把 harness 直接整合進自己的應用程式裡。

但你也可以把同一個 harness 整合到其他應用程式中!以下是一些例子:

  • Grok Bot 使用了 Cursor 的 harness
  • T3 Code 使用了 Anthropic Agents SDK 和 Codex App Server
  • OpenClaw 使用了 Pi

Harness 是一個獨立的組件,幾乎從不會暴露給使用這些應用程式的人類。

誰擁有這些工具?

試着把 harness 想像成一個廚房。

廚房裡有很多不同的工具:鍋、平底鍋、刀、鍋鏟、攪拌機等等。

沒有任何一個廚房能備齊每位廚師所需的一切。

優秀的 harness 正是基於這個前提而設計,允許用戶帶入自己的工具。

要說清楚一點:大部分重要的工具都是由 harness 直接提供的。Codex 和 Claude Code 都內建了大量工具,而其他像 Pi 這樣的 harness 則精簡得多。

這裡開始變得有點複雜,讓我再畫一張圖表。

Theo - t3.gg - inline image

橙色方塊代表「由 Claude Code 包含的東西」(明確地說,就是 agents sdk)。

你可以加入很多自訂工具,例如 TypeScript 插件,讓你的 LLM 擁有一些檢查程式碼的工具;或者 CUA 插件,讓 agent 可以控制你的電腦。

請注意「工具層」與人類/LLM 層之間的那條線。無論是人類還是 LLM,都無法看到或觸及這些工具。我們根本無從得知它們是否存在。是 harness 把它們暴露出來,既暴露給 LLM,也暴露給介面(這正是我們能看到它們的方式)。

MCP 讓事情變得更複雜一點

MCP(Model Context Protocol)是一項標準,目的是讓 harness 更容易存取外部事物。簡單來說:工具是「在這裡執行程式碼來完成某件事」,而 MCP 則是「向其他地方發出 API 請求來完成某件事」。

工具直接提供程式碼。MCP 則讓程式碼存放在別處,但 LLM 仍然可以透過 MCP 發出請求來做事。

MCP 最常見的用途,是把資料開放給你的 LLM。想讓 ChatGPT 查看你的電郵?用 MCP。想讓 Claude 分析你網站的數據?也是用 MCP。

Chrome 擴充功能有點像工具。它們可以改變網站的運作方式,而方法是透過在你的電腦上、在 Chrome 內執行程式碼。

MCP 則更像網站。你不需要安裝任何東西,只需要知道 URL。有了 URL,你(應該)就能取得使用它所需的全部資訊 :)

把所有東西拼在一起,大概會是這樣:

Theo - t3.gg - inline image

……等等,T3 Code 在那裡做甚麼?讓我解釋一下。

Theo - t3.gg - inline image

T3 Code 會向 LLM 開放自訂功能,讓它們做到 harness 本身做不到的事。舉例來說,我們允許使用 Claude Code 的對話串在 Codex 中生成子 agent。其他工具也能做到這一點,例如 Herdr、Orca 和 Superset。

那麼,為甚麼要以 MCP 的形式開放呢?這是不是為了逃避自建 harness 而耍的小把戲?

回想一下前面這段話:

工具直接提供程式碼。MCP 則讓程式碼存放在別處,但 LLM 仍然可以透過 MCP 發出請求來做事。

T3 Code 有大量程式碼,用來實現跨 harness 子 agent 等酷炫功能。嚴格來說,我們本可以把 T3 Code 所有最酷的功能重新打造成一套插件,分別給 Claude Code、Codex、Antigravity、Pi、Cursor、Muse 使用……

又或者,我們可以把所有程式碼保留在 T3 Code 本身,只對外提供一個簡單的 MCP 伺服器供 LLM 使用 :)

回到廚房的比喻,MCP 幾乎就像是食譜。它們是完成某件事的方法,但本身並不是那件事。

T3 Code 是在向廚房提供一本食譜。它完全不會改變廚房的運作方式。如果廚師決定想看我們的食譜,太好了!他們也可以完全不理會,一切照舊。

……那麼 agent 又是甚麼?

你知道我有多自豪嗎?我一路寫到這裡,都沒有反覆提到「agent」卻又不定義它。這可不容易,哈哈。

簡單總結:當你結合 harness 和 LLM,就會產生 agent。

LLM 只會生成文字,本身不會做任何事。Harness 只是廚房,本身煮不出任何東西。LLM 加上 harness 的組合,才構成一個「agent」。

不同的「agent」往往只是不同的 harness 配置,例如自訂工具、指令、MCP 伺服器等。

T3 Code 是 harness 嗎?

不是。如果你不帶一個 harness 過來,T3 Code 就無法運作。

再次回到廚房的比喻:

  • 廚師 = LLM
  • 廚房 = harness
  • T3 Code = 餐廳

T3 Code 是一家餐廳,讓你隨心帶任何廚房過來。我們有自己喜歡的食譜,也會把這本食譜提供給每個廚房,但除非你吩咐,否則廚師是不會翻開它的 :)

給想深入研究的人……

如果你喜歡這類由上而下、全面剖析的解說,就叫你老闆付錢買我下週推出的 Mega.dev 課程吧。我會在那裡更深入地講解以上所有內容 :)

也歡迎看看 T3 Code。它是開源的,所以你可以叫你的 agent 解釋它的運作原理,進一步深入了解。

一鍵儲存

使用 YouMind AI 深度閱讀爆款文章

保存原文、追問細節、總結觀點,並在一個 AI 工作空間裡把爆款文章沉澱成可複用筆記。

了解 YouMind
寫給創作者

把你的 Markdown 變成乾淨的 𝕏 文章

圖片上傳、表格、程式碼區塊,往 𝕏 上手動重排太痛苦。YouMind 把整篇 Markdown 一鍵轉成乾淨、可直接發佈的 𝕏 文章草稿。

試試 Markdown 轉 𝕏

更多可拆解樣本

近期爆款文章

探索更多爆款文章