← Blog

LangChain 解剖 Agent Harness:從模型能力到可交付的工作引擎

Agent = Model + Harness。 若你不是模型,你就是 Harness——LangChain 的 Vivek Trivedy 用這句話開場,但重點不在標語,而在推導方法:從「我們希望 Agent 能做什麼」往回推,每一項能力對應 Harness 裡的一塊工程。

本文對照 Martin Fowler 的控制迴路(guides/sensors)與 OpenAI repo 治理(規模與架構),補上框架與產品視角的元件地圖。建議先讀 閱讀地圖 13


Harness 的邊界:什麼算、什麼不算

Harness = 模型之外的一切:程式碼、設定、執行邏輯。
裸模型不是 Agent;加上狀態、工具執行、回饋迴路、可強制約束,才成為工作引擎。

具體可包括(原文列舉):

  • System prompts
  • Tools、Skills、MCP 及其描述
  • 內建基礎設施(檔案系統、沙箱、瀏覽器)
  • 編排邏輯(子 Agent、handoff、模型路由)
  • Hooks/Middleware(compaction、continuation、lint)

邊界可以爭論,但 Trivedy 選這個切法的原因很實用:逼我們圍繞模型智慧設計系統,而不是把 Agent 當成「會聊天的 API」。


起點:模型原生做不了的事

模型(多數情況)輸入文字/多模態,輸出文字。開箱即用不能

缺口為何需要 Harness
跨互動持久狀態否則每次對話失憶
執行程式否則無法改世界
即時知識否則停在訓練截止日
準備執行環境否則無法安裝依賴、跑測試

聊天 UI 是最早的 Harness:while 迴圈把歷史訊息 append 進 context——你已經用過,只是沒叫它 Harness。

LangChain 的推導模板:

想要的行為(或想修的壞行為)→ 為此設計的 Harness

這與 Fowler 的 steering loop 一致:看見問題 → 改 guide 或 sensor(在 LangChain 語境裡常是加 tool、hook、Skill、腳本)。


檔案系統:最基礎的 primitive

期望行為:Agent 能碰真實資料、把塞不進 context 的內容卸載、跨 session 延續工作。

Harness 設計:提供檔案系統抽象與 fs 操作工具。世界本來就用檔案幹活,模型也在海量「如何用檔案」的 token 上訓練過,因此這幾乎是自然解。

解鎖的能力:

  1. 工作區:讀程式、文件、規格。
  2. 增量與卸載:中間結果寫檔,不必全塞進 context。
  3. 協作表面:人與多 Agent 透過共享檔案協調(Agent Teams 類架構依賴此點)。

Git 在檔案系統上再加版本:追蹤、回滾、分支。後文的 plan 檔、Ralph Loop、長程任務都假設「真相在 repo 裡」。


Bash + 程式碼:通用工具,而非無限預置工具

期望行為:自主解題,不必人類為每種動作預寫工具。

Harness 設計:ReAct 迴圈 + Bash/程式執行。模型可當場寫腳本、呼叫 CLI——比固定工具集更接近「給它一台電腦」。

Harness 仍可提供專用工具(瀏覽器、DB),但預設解題路徑已是 code execution:模型可動態發明工具,而非被工具列表鎖死。

Fowler 14 對照:Bash 輸出 + 測試 runner 是 computational sensors 的載體。


沙箱與環境:在哪裡跑、看見什麼

期望行為:安全執行、可觀察結果、能裝依賴。

Harness 設計

  • 沙箱:隔離執行、按需建立/銷毀、allow-list 指令、網路隔離(企業常要)。
  • 預設工具鏈:語言 runtime、套件、git、測試 CLI、瀏覽器——模型不會自己裝好 Node 或 Playwright,這全是 Harness 責任。

自驗迴路:瀏覽器、log、截圖、測試 runner → Agent 寫 app → 跑測試 → 看 log → 修。
「在哪跑、能用什么、如何驗證」都是 Harness 級設計決策,不是 prompt 能替代的。

這與 Anthropic 長任務文 10 強調 Puppeteer MCP、先跑通 dev server 再 E2E 是同一條「行為可見」路線。


記憶與搜尋:權重之外的知识

期望行為:記住見過的、存取訓練後的新知識。

Harness 設計

機制做法
跨 session 記憶AGENTS.md 等標準;Agent 編輯 → 下次啟動注入 context(簡化版 continual learning)
知識截止Web Search、MCP(如 Context7)查新版本 API、即時資料

無法在執行時改權重時,context 注入是唯一正規管道——這也是為什麼 OpenAI 11 把知識做成 repo 工件。


Context Rot:Harness 即 context 配送系統

期望行為:工作變長時,推理品質不要崩。

Context Rot:context 越滿,推理與任務完成度越差。Harness 必須管理這 scarce resource。

Primitive解決什麼
Compaction視窗將滿時摘要/卸載;否則 API 直接爆錯——Harness 必須有策略,不能丟給使用者
Tool output offloading巨大 tool 輸出:保留頭尾 token 進 context,全文落檔,需要時再讀
Skills(漸進揭露)避免啟動時塞滿所有 MCP/工具說明;模型沒選擇「一開始就載入」,是 Harness 保護模型

這與 blog 10 的 compaction 討論互補:Anthropic 說 compaction alone 不夠;LangChain 說 compaction 是 Harness 必備之一,還要搭配檔案、plan、git。


長程自治:primitive 如何疊加

期望行為:複雜工作、長時間、正確、自主。

現有模型的痛點(原文):

  • 過早停止(early stopping)
  • 分解能力差
  • 跨多個 context window 不連貫

複合解法(缺一不可):

  1. 檔案 + Git
    長任務可產生百萬 token 級中間產物;檔案持久化進度;git 讓新 Agent 快速讀歷史;多 Agent 共用「工作帳本」。

  2. Ralph Loop(Harness 模式)

    • Hook 攔截模型「想結束」的嘗試。
    • 乾淨 context 重注入原始目標。
    • 從檔案讀上一輪狀態,強迫繼續直到達成 completion goal。
      沒有檔案系統就無法「新一輪讀舊狀態」。
  3. Planning + 自驗

    • 目標分解寫進 plan 檔(filesystem)。
    • Prompt 提醒如何用 plan。
    • 每步完成後:跑測試 suite(hook 餵錯誤)或 prompt 自評。
      驗證把解法錨定在測試,形成自我改進信號。

這裡能看到 blog 10 的 initializer/coding agent、feature list 與 LangChain 產品 primitive 的概念對齊:都是把「交接與完成定義」外部化。


模型訓練與 Harness 共演化

Claude Code、Codex 等常 post-train 時把 Harness 一併納入

有用 primitive → 進 Harness → 下一代模型更擅長在該 Harness 內行動

副作用(過擬合):換工具實作可能變差。Codex 5.3 prompting guide 提到 apply_patch 格式——理論上聰明模型應能換 patch 法,但共訓會綁定特定 Harness。

Terminal Bench 2.0 啟示(原文強調):

  • 同一 Opus 4.6,在 Claude Code harness 分數遠低於其他 harness。
  • LangChain 先前文章:只改 harness,編碼 Agent 從 Top 30 → Top 5

實務結論:選模型要看「在你的任務、你的 harness 上」的表現,不是只看 leaderboard。投資 harness 的 ROI 可能大於換模型。


Harness 會變少嗎?為什麼仍要學 Harness Engineering

模型可能內建更多規劃、自驗、長程一致性 → 部分 context 注入減少。
但 LangChain 認為 Harness Engineering 會像 Prompt Engineering 一樣長期存在

  • 環境、工具、狀態、驗證迴路讓任何模型更有效率。
  • 今日 Harness 常「補模型不足」,但也圍繞模型智慧做系統設計

deepagents 研究方向(原文):

  • 上百 Agent 並行同一 codebase 的編排
  • Agent 分析自己的 trace,修 harness 級失敗模式
  • Just-in-time 組裝工具與 context,而非全預配置

與 Fowler、OpenAI、Anthropic 的對照表

主題LangChain 15Fowler 14OpenAI 11Anthropic 10
定義 Harness模型外一切outer harness知識地圖+邊界+觀測initializer+coding
狀態檔案、git、AGENTS.mddocs/、AGENTS.mdprogress、feature list
驗證沙箱內測試、瀏覽器sensorsE2E、UI、指標Puppeteer E2E
長程Ralph、compaction生命週期鋪感測器GC 漂移漸進特徵

啟示與建議:從元件清單到實作順序

若你要自建或評估一個 Coding Agent 產品,可依賴程度排序檢查:

  1. 檔案 + git 是否一等公民?
  2. Bash/code exec 是否預設可用且安全(沙箱)?
  3. Compaction + tool offload 是否在長任務預設開啟?
  4. AGENTS.md/記憶檔 是否有明確生命週期?
  5. Plan + 測試 hook 是否定義「完成」?
  6. 是否誤以為 更長 system prompt 可取代以上任一項?

團隊討論時,用 LangChain 的詞彙(filesystem、Ralph、Skills)對 Fowler 的詞彙(guide、sensor),可以避免「我們已經有 linter 了」其實只覆蓋了 sensor 的一小角。


小結

LangChain 這篇文章的價值是把 Harness 零件化與推導鏈寫清楚:每一項能力都回答「模型原生缺什麼 → Harness 補什麼」。實作時仍要回到 Fowler:哪些是 computational、哪些是 inferential,以及 behaviour harness 是否只靠 AI 測試在撐。


原文出處:
Vivek Trivedy. The Anatomy of an Agent Harness.
網址:https://blog.langchain.com/the-anatomy-of-an-agent-harness/

Looking for an AI platform or Agentic AI partner? I help teams ship enterprise-grade RAG, multi-agent, and real-time AI systems.

Contact