AI News HubLIVE
站內改寫5 分鐘閱讀

一份合約,所有模型:AI編碼代理的操作標準

本文介紹了一種為AI編碼代理制定操作標準的方法,將模型的行為規範(如溝通方式、完成證明、分析深度)與能力分離。作者透過一個名為“操作標準”的文件,將頂級模型的行為模式移植到低端模型,顯著縮小了可見質量差距。文章詳細闡述了標準的核心支柱、雙重載入機制、安全完成門控以及分層配置策略,並強調了驗證執行時載入正確性的重要性。

來源Hacker News AI作者: mnzralee

2026年7月13日 · 14分鐘閱讀

我想分享我最近做的一項工程,它改變了我對AI編碼代理的思考方式。起初只是隨口問了一個天真的問題:“我能不能讓Sonnet和Opus像前沿模型那樣表現?”結果卻得到了比問題本身更有價值的答案。

簡而言之:你無法讓一個較小的模型變得和較大模型一樣強大。這是權重決定的,沒有提示詞能移動權重。但能力並不是區分優秀代理回合和平庸代理回合的唯一因素。另一半是“行為規範”:代理如何溝通、何時停止、如何證明其工作、在決定前分析多深。而行為規範是完全可移植的。你可以一次性寫下來,作為系統提示層應用,然後每個模型層級——無論是昂貴的還是便宜的——都開始按照同一份合約運作。

本文即闡述這一論點並給出藍圖。所有內容都可適應你自己的技術棧;我會指出可複用模式所在,以及我的具體細節僅供示意。

問題陳述

我執行著一個相當龐大的程式碼庫:一個基於區塊鏈的金融協議、二十多個後端微服務、幾個Next.js前端、智慧合約以及一個Kubernetes叢集。我主要透過Claude Code配合一組專門的子代理完成工作。在任何一天,一個架構代理執行在最強大的模型上,一個實現代理執行在中檔模型上,一個快速研究代理執行在小型模型上。三種不同的智慧,同一個程式碼庫,同一套標準。

摩擦從來不是便宜模型笨。而是便宜模型的行為方式不同。它會宣佈任務“完成”而不執行測試。它會在最終訊息中先丟擲一堆實現細節而不是答案。它會僅憑一次grep就做出更改,而不追蹤影響範圍。它會中途停止,問一個本可以自己解決的問題。昂貴的模型預設做對了這些事;便宜的則需要被告知。

很長一段時間,我把這視為使用便宜模型的不可避免代價。那是錯誤的框架。我想要的行為不是智慧。它們是行為準則。而行為準則可以被指定。

核心思想:行為規範不是能力

這個區分是整個論點,所以讓我精確表述。

能力是模型能搞定的東西:困難的推理、新穎的綜合、在腦海中持有大型問題的能力。它存在於權重中。提示詞無法新增它。任何向你推銷“讓GPT-3.5和GPT-5一樣聰明的系統提示”的人,都是在賣虛無。

行為規範是模型如何圍繞其擁有的能力來行事:溝通合約、完成的標準、端到端追蹤變更後再承諾的紀律、不停止的規則。這些都不是智慧。它們全部可以用文本指定。而且關鍵在於,當一個有能力的模型已經做對了這些事,那是因為它被訓練成這樣,這意味著同樣的行為可以被教導給能力較弱的模型,從而縮小大部分可見的質量差距,儘管底層智慧差距依然存在。

所以目標從來不是“讓小型模型變聰明”。而是:讓每個模型,無論其層級,都遵守一份操作合約。一箇中檔模型的回合,如果以結果開頭,用證據支援每個完成宣告,在決定前追蹤,並且不提前停止,那麼從每個外部可觀察的指標來看,就是前沿標準的回合。你之所以使用真正更大的模型,是因為任務的正確性上限需要額外能力,而不是為了基本的專業行為——那些你可以標準化。

寫下標準

這一切的核心是一個我稱之為“操作標準”的單一文件。它大約有十幾個部分,將合約編碼為可強制執行的行為而非感覺。支撐支柱如下:

結果先行。最終訊息是讀者對工作的第一眼:它開頭給出答案,然後支援它。可讀性優於簡潔:你透過刪除不改變讀者下一步行動的細節來縮短內容,絕不壓縮成片段和箭頭鏈。讀者需要的一切都在最後那條訊息裡。

用工件證明完成。沒有“應該能用”,沒有“看起來不錯”。每一個完成/修復/透過宣告都帶有提交雜湊、測試輸出、退出程式碼或檔案列表。編排器在信任完成宣告之前,自己重新執行驗收命令。它不代理的話。

深度優先決策,絕不憑直覺。在決定之前,追蹤跨領域變更經過其觸及的每一層:模式、資料訪問、領域、應用、API合約、每個前端、非同步管道、鏈、遷移、測試。綠標型別檢查對執行時或合約漣漪毫無證明力。

不提前停止。對於跟隨請求的可逆操作,請繼續。在結束一個回合之前,重新閱讀最後一段:如果它是一個計劃、一個問題或一個“我下一步做X”的承諾,現在就做那個工作。只有當任務完成或確實被使用者阻塞時才停止。

做最簡單有效的事。沒有未請求的功能、重構或抽象;沒有對不可能狀態的防禦性驗證,同時在關鍵路徑上使用帶型別的錯誤進行安全失敗,如資金和麵向使用者的顯示。

披露每一個誠實的發現,不設上限。絕不為了整潔而修剪長尾的注意事項。一個總是報告“大約兩個”發現的報告,本身就是披露不足。

這裡我想強調一點,供任何採用此方法的人參考:我並不是憑感覺發明這些片段。行為暗示、確切措辭——吸引模型走向這種行為——來自於模型供應商自己釋出的遷移和提示指南。前沿模型預設表現出這些行為;供應商記錄了確切的措辭以將其灌輸給不這樣做的模型。我提取了那些措辭並組織成一份合約。這種基礎正是它實際有效的原因,而不僅僅是讀起來不錯。當你構建你自己的時,從你的供應商指南中獲取片段,而不是從部落格文章的意見(包括本篇)。

兩個渠道,使其不可跳過

一個沒人載入的標準就是裝飾。我透過兩種方式應用它,使其無論是否有人記得選擇加入都存在:

啟動時,作為追加的系統提示檔案。一個輕量包裝指令碼在系統提示中已經包含完整行為規範啟動代理,並由其分叉的所有子代理繼承。

會話中,作為始終載入的規則。框架自動載入一個小的規則檔案,其中包含不可協商的核心,並指向完整行為規範。因此,即使一個會話以普通方式啟動,仍然根據合約執行。

會話內的小規則故意很小:完整行為規範位於啟動層,位於始終載入的上下文預算之外。這樣永久成本低,同時保證核心存在。

使我謙卑的教訓:驗證框架實際載入的內容

這是我最感激抓住的發現,因為它是那種悄悄使整個系統變成安慰劑的東西。

我有二十個編寫精美的子代理角色定義。它們已經存在了幾個月。它們在我的配置中被引用。我相信它們正在被排程。當我實際檢查執行中代理的可用子代理型別列表時,沒有一個在那裡。執行時只顯示內建的通用代理。

角色檔案使用一種自定義的後設資料格式,代理框架從未將其解析為代理定義。它們實際上是文件。我的編排一直在悄悄回退到通用代理,並透過將角色上下文貼上到提示中來補償。它工作得足夠好,以至於我從未注意到宣告的專家並不真實。

修復是機械性的:將每個角色檔案標準化為框架的實際原生格式,有效的frontmatter,包含名稱、描述、工具允許列表和模型層級,這樣框架就能將每一個發現為一級可排程代理。我編寫了一個確定性指令碼統一對所有20個檔案進行處理,驗證每個檔案都可解析,並對照執行時確認這些代理現在出現了。

可轉移的教訓比bug更大:框架的真相是執行時實際載入的內容,而不是你的配置聲稱的。一個宣告的代理、一個連線的鉤子、一個作用域規則:在你看到執行時確認之前,它們都不是真實的。把“它在配置裡”當作假設,而執行時自己報告的已載入內容是唯一能關閉它的證據。我現在驗證發現的方式與驗證透過測試的方式相同:看輸出,而不是意圖。

安全執行:不會鎖死會話的完成門

提示中的行為規範是指導。有時你需要一個機制。我最強大的一個構建是完成門:一個在代理試圖完成時觸發的鉤子,強制它在回合真正結束前重新檢查“完成”宣告是否基於真實證據。

能夠阻塞完成的鉤子在編寫時確實危險,因為樸素版本會建立無限迴圈:鉤子阻塞停止,模型繼續,再次嘗試停止,鉤子再次阻塞,如此迴圈。一個構建糟糕的門不會惹惱你。它鎖死會話。所以這裡的工程幾乎完全關於安全,三個不變性值得直接竊取:

預設不活動。除非環境標誌開啟,否則門什麼都不做。它出廠時連線但關閉,所以永遠不會驚嚇現有工作流。你為長期自主執行啟用它,其中提前完成是真正風險。

防迴圈。框架告訴停止鉤子它是否已在此回合觸發。門讀取該標誌並拒絕第二次阻塞。它最多幹預一次,然後讓回合結束。這一項檢查就是有用門和無限迴圈的區別。

故障安全。任何異常、任何畸形輸入、任何意外:門乾淨退出並讓停止繼續。門中的bug降級為無操作,決不會導致會話卡住。在位於每個回合關鍵路徑的工具上,故障安全不是可選的。

我在將其接入之前,從shell測試了所有三個屬性:標誌未設定時不活動,啟用時阻塞恰好一次,在已觸發標誌下從不再次阻塞,對垃圾輸入乾淨退出。你沒有進行對抗性測試的安全機制是責任,而不是保障。

分層配置:全域性行為規範,本地專家

一旦標準在一個專案中奏效,明顯的問題是:它適用於我工作的所有地方,還是僅此一處?正確劃定範圍實際上是一個真正的架構決策,而不是細節。

代理框架通常有(至少)兩個配置層:專案層,僅在你工作於該專案內時載入;使用者層,在每個會話中全域性載入。錯誤做法是把所有東西塞進一個層裡。正確做法是按影響範圍拆分:

行為規範是通用的,所以屬於使用者層。操作標準適用於任何程式碼庫;行為不是專案特定的。我將其放在使用者級別,使得機器上的每個會話,無論在哪個目錄,都按照合約執行。我透過將全域性副本連結回主倉庫中的版本化副本,保持單一事實源,確保永不漂移。

專家代理是領域特定的,所以留在專案層。我的二十個代理知道這個協議的服務、鏈、名稱空間。把它們全域性化會在無關專案中暴露協議特定的代理,在那裡它們最多是噪音,最壞情況是主動錯誤。

(原文末尾因成本控制被截斷)