從 Claude Code 原始碼嘗試理解 Harness Engineering

Human steers, Agent executes.

三天前,Claude Code 的原始碼因為意外不小心流出。而沒有什麼方式比閱讀原始碼更來得直接地去理解一款一個軟體產品。而正當我開始咀嚼原始碼的過程,意外發現了每一處 harness Engineering 的影子。

過去幾年,AI 的發展從 prompt engineering 發展至 context engineering,而 context engineering 又發展成 harness engineering。

Harness engineering 一開始由 Mitchell Hashimoto 在 My AI Adoption Journey 中提出,他在當時(兩個月之前)提到使用隱式提示(AGENTS.md)以及特定腳本來讓 AI 整合進工作流中減少人為介入。而不久之後 OpenAI 也發了新的文章 - Harness engineering: leveraging Codex in an agent-first world,其中提到更多有關 AGENTS.md 的使用細節,以及 Harness engineering 如何協助打造一個軟體產品完全 0 人工撰寫的程式碼。當說實在,整篇文章還是更像一套方法論,同時也在推銷自家產品 Codex。

而這次的 Claude Code 原始碼外流事件可以更好地給我們參考 harness engineering 的實踐細節。首先 Boris Cherny 多次強調過 Claude Code 的 harness 非常薄,基本上沒有什麼神秘的部分。但這與 harness engineering 的重要性並無衝突(否則 Claude Code 使用體驗上不會有壓倒性的勝利)。

目前主流的 Agents 產品(包含 Claude Code)基本上都可以收斂到一個標準循環,包含:

1
工具呼叫 -> 萃取結果 -> 填回 context ->  呼叫模型 -> 帶著結果重複


by Jerry Liu’s Post

雖然模型派的人可能不會認同這個理論。但不可否認的是,從短期角度來看,好的收斂以及回饋的確可以讓 LLM 的回答更接近需要的答案。而且這個閉環就如同 Kubernetes 設計中的 Operator Pattern。差異在於要如何定義每一個任務的 desired state 短期內來看還是無法很好地被解決。

回到 Claude Code 原始碼外流有幾個有趣的實踐(這邊不貼原始碼,有興趣可以自己去找):

  1. 不存在與存在一樣重要

    透過 grep 篩選出需要的程式碼片段,餵給模型。比起整包原始碼丟給模型讓他篩選出需要的部分效果還來得好。

  2. Claude Code 的記憶不記程式碼

    重構的過程中,由於程式碼會一直變動,沒有必要讓模型去記特些部分在哪幾行,避免上下文污染。同時,可以扣回到第一點「不存在(錯誤的資訊或是不重要的資訊)與存在一樣重要」。

  3. 上下文壓縮

    (這段還沒有完全讀懂,暫時不解釋。但從分層架構可以發現 Claude Code 對於保持 context 的精準下了非常大的工夫,未來有機會再補充這一段)

而這些只是一小部分 Harness Engineering 實踐。如同 Boris Cherny 所說,這一層很薄很單純。但是 harness engineering 最大可能性的補足了模型的不足。整體回饋的機精妙到像是本身就是一個軟體產品的軟體工程實踐(廣義上來說確實也是一個軟體產品),就如同當時 Kubernetes 橫空出世時讓基礎設施管理有了全新的篇章。

想當然 harness engineering 不會是終點,甚至 Agent 也不一定是終點,只是這一起無心的資安事件,讓我們才有機會一睹 AI 巨頭們對於方法論的具體實踐。