Agent Harness 入門:馬具、迴圈、三層記憶——以及為何還要 Eval
Agent Harness 是駕馭無狀態 LLM 的控制層:組裝工作記憶、跑 tool loop、設停止條件。以 Hermes 本機三層記憶(技能/事實/情節)為案例,並補上多數框架仍缺的 tracing 與 eval。
Agent harness、loop engineering、LLMOps——這些詞在網路上爆紅,往往不是因為概念有多玄,而是因為夠簡單。簡單的控制層,才撐得起看起來像「智慧系統」的整棟建築。
若上一篇談 Claude Code,我們強調的是:模型無狀態,狀態在執行環境。本篇把鏡頭拉遠一格:任何 agent 產品——開源本機框架或雲端託管——都在解同一題:如何駕馭一匹機率性的馬(LLM),讓它重複、可停、可記、可觀測。 中間會用開源的 Hermes Agent(Nous Research 一系)當具體案例:本機優先、三層記憶、WhatsApp 閘道、自我寫 skill——並誠實標出它與「完整產品」之間還缺什麼。
馬與馬具:先分清誰在跑、誰在控
大型語言模型預測下一個 token,天生帶隨機性。你有時要創意,有時要「退款這八個人」這種可收斂的結果。於是需要一層馬具(harness):
| 角色 | 是什麼 |
|---|---|
| LLM | 馬——強力、機率、無跨呼叫記憶 |
| Harness | 馬具——系統提示、工作記憶、工具、權限、迴圈與停止條件 |
| 閘道 | 缰繩的入口——桌面 CLI、WhatsApp、Slack、API… |
「Framework」常只是流行語。真正要設計的是:提示如何組裝、工具如何呼叫、記憶如何進場、何時算做完。LangGraph、自研 runtime、Claude Code、Hermes——名字不同,問題同構。
一次 Agent 執行長什麼樣
粗流程可以記成:
使用者提示
+ 對話/系統提示
+ 從記憶庫抽出的工作上下文
→ LLM 推理
→ 迴圈:選工具 → 執行 → 結果回填 → 再推理
→ 結束條件觸發
→ 回覆使用者
→ 寫回情節記憶(必要時更新技能/事實)
你每天在用的「代理」,多半就是這條路。被術語嚇到時,把它還原成這張圖即可。
迴圈工程:重點是「何時停」
Loop 的意義不是炫技,而是不必每一步都由人下指令——代理自己決定還要查什麼、叫什麼工具。
危險在反面:給了終端機、瀏覽器、CRM、付款 API,卻沒有結束迴圈護欄,模型可能空轉、重複呼叫,或卡在權限彈窗半小時你才發現。
實務上的停止條件可以是:
- 任務判準達成(「八筆都已排程或退款」)
- 與使用者確認終點(「要我直接退,還是只列名單?」)
- 權限/安全閘(危險操作必須人點允許)
- 通知機制(卡住時推到本機,而不是靜默等待)
業務例子:客訴排查——讀 CRM → 分出已退/未退 → 跟進會議或觸發退款 → 直到「夠好」再回覆。沒有一體適用的 loop;終點定義屬於產品設計,不是模型魔法。
三層記憶:怎麼做、是誰、發生過什麼
要把代理從「每次重來」變成「越用越貼你」,至少分清三種記憶——Hermes 的本機實作是很好的教學樣本:
1. 程序性記憶(怎麼做)
行為模式、操作手冊、可重複流程。
Hermes 側常落在 skills/*.md(例如:如何把寫 code 委派給 Claude Code CLI、怎麼裝、怎麼認證)。
這和 Claude 生態的 Skills 同族:Markdown 程序,可手寫也可由系統在「值得沉澱」時生成。
2. 語意記憶(是誰/事實)
穩定事實與使用者檔案:最愛 pytest、公司名、內容風格禁忌……
Hermes 用本機 memory.md 純文字,檢索走 關鍵字 Top-K,刻意不用 embedding/RAG——極簡、可讀、可 git。
代價是語意模糊匹配弱;優點是透明、好審計、好改。
3. 情節記憶(發生過什麼)
帶時間的事件與對話。
Hermes 放在本機 state.db;之後可用較便宜的輔助模型做摘要,把值得長期保留的提煉進 memory.md。
工作記憶(當次推理上下文)則是:系統提示 + 當前對話 + 從上述庫抽出的片段。
Agent 執行短暫;庫負責跨執行延續——這與「模型無狀態、狀態在環境」完全一致。
自我完善:自動寫 skill/memory 的黏性
Hermes 的敘事賣點是:任務中若踩坑或重複勞動,代理可把教訓寫回本機技能與事實庫——不預設上雲。
明確指令也可:「記住……」「建立名為 X 的 skill……」。
子代理委派、cron、瀏覽器、終端機,都只是 loop 裡的工具;記憶寫回才是差異化黏著——用久了,換工具等於丟掉「懂我的那份檔案」。
這也解釋為何許多人最終少換 AI 產品:不是模型永遠最強,而是情境資產沉澱在某一 harness 的磁碟上。
本機優先 vs 雲端:同一架構,不同部署選擇
| 本機 harness(如 Hermes 敘事) | 雲端/託管 | |
|---|---|---|
| 狀態 | 預設在你的機器 | Session/記憶在服務商 |
| 閘道 | WhatsApp、桌面 | API、Slack、控制台 |
| 隱私敘事 | 強 | 依契約與合規 |
| 多設備/永遠在線 | 要 VM/常開機器 | 較自然 |
| 運維 | 你自己 | 平台扛擴展與部分觀測 |
沒有絕對正確。產品化時應允許:同一套 harness 邏輯,狀態可落本機或雲——由使用者與合規決定,而不是綁死一種宗教。
還缺的一塊:LLMOps 與 Eval
Harness + 記憶 + loop 只能保證「跑得起來」。要保證「跑得對、跑得穩、改得動」,需要回饋環:
Tracing(追蹤)
一次 run:問了什麼、檢索了什麼、tool 幾次、延遲、token。LangSmith、Langfuse 等工具都在做事件樹。
Eval(評估)
確定性檢查(會議是否真建立、退款是否成功)+必要時 LLM-as-judge;看成功率、延遲、成本。
據講者對 Hermes 的觀察:有日誌與軌跡,完整 eval 產品層偏弱——本機框架常見取捨。
若你在做面向客戶的代理,請把觀測與評估當成一等公民,而不是「感覺這次比較聰明」。
沒有 eval,你不知道該改系統提示、改記憶抽取、還是換模型;迭代會變成玄學。
和 Claude Code 怎麼並讀
| 焦點 | Claude Code 文 | 本篇 |
|---|---|---|
| 無狀態模型 | 按 Enter 組裝什麼 | 同地基 |
| 產品形態 | Anthropic 工程向 CLI/IDE | 開源本機+通訊閘道案例 |
| 記憶 | md/skills/權限 | 三層記憶+自動沉澱 |
| 缺口 | — | 強調 loop 終點與 eval |
可並用:用 Hermes(或同類)當生活/閘道助理,把重 coding 委派給 Claude Code skill;共享的是 harness 思想,不是必須二選一。
可執行的最小清單
- 畫出你的 agent:入口閘道、系統提示、工具表、停止條件。
- 記憶至少分:程序(skill)、事實(profile/memory)、情節(log/db)。
- 本機 Markdown 可以起步;上多用戶再補權限、版本、語意檢索。
- 每個危險工具:allow/ask/deny;卡住要通知。
- 上線前接 tracing;定義 3~5 個可自動驗的成功條件。
- 讓「重複成功的流程」沉澱成 skill,而不是只活在一次聊天裡。
結語
Agent harness 不是新宗教,是控制工程:在機率模型之上,加上組裝、工具、記憶、停止與觀測。
Hermes 這類本機框架示範了一條清楚的產品形狀——閘道進、loop 跑、三層記憶回寫、技能越用越貼——也提醒我們:沒有 eval,自我完善只是半套。
把馬具做好,馬才跑得遠。
把終點設清楚,loop 才不是空轉。
把記憶沉在你信任的地方,代理才會從工具變成你願意每天打開的介面。
流行語會換;這幾塊積木,短期內仍會是代理系統的標配。
延伸閱讀
- Claude Code 為什麼有效:模型無狀態,狀態在執行環境
- 從 CLAUDE.md 到「做夢」:上下文工程如何把模型智力變成可用系統
- Agent 記憶不是一個向量庫
- 腦在雲、手可在你這:Claude Managed Agents 到底解決什麼
我是江中喬,專注於 AI Agent Architecture、Memory Governance 與 Cognitive Diversity,持續研究如何打造能夠長期協作、可信任且可治理的 AI 系統。