Notes on fidelity
使用 Fable 5 後的心得
昨天把 Fable 5 開到全強度跑了一輪。額度很快燒光,而我原本想解決的飄移雜訊——agent 偏離最原始訊號、自己「病眼生華」:像一隻生病的眼睛,在空中看見不存在的花,還真心相信那是花——不但沒少,反而更嚴重。第一個直覺是「等準確度追上來」。這篇要說的是:這是範疇錯誤。準確度永遠不會從模型那條軸追上來,因為它根本不住在模型裡。
Wrong axis
我把準確度當成模型的一個「生長很慢」的屬性——找錯地方了。對原始訊號的忠實度不主要住在模型的權重裡;它「長得慢」不是因為難長,是因為我在錯的軸上量它。忠實度是系統的屬性:模型 + 驗證 + 外部狀態。而且具體是我建的那部分,不是我買的那部分。
能力與忠實度是兩條軸,後者不是前者的函數。所以「等準確度追上」永遠等不到。好消息是——這條軸是我自己的,與模型版本無關。
Why stronger exposes more
拆開算就清楚。預期損失 ≈(出錯率)×(每個錯的偵測成本)×(漏掉一個錯的代價)。能力把第一項壓低,但壓得慢;同時把第二、三項推高,推得快。
所以昨天的體感不是「Fable 5 比較笨」——它的錯不是變多,是變得更像真的。遲鈍的病眼看到幾點模糊光斑;聰明的病眼建構出整座自洽的花園。
聰明的病眼,建構出整座自洽的花園。
而「自洽」正是平常拿來當真假代理(proxy)的東西;當生成端能產出自洽的假,coherence 就不再是有效訊號。這就是「沒完沒了」:不是花更多,是花到我分不出真假,除非再付更多錢去分。再加上強模型每回合做更多、詮釋更多,飄移面積本身就更大。槓桿不在出錯率(買能力),在偵測成本(建驗證)。
Where the disease lives
一個工程關鍵:病住在開放式生成這個模式裡,不住在受限判別裡。模型自由生成時 latitude 很大,病眼的先驗有空間去填;同一個模型做窄二值判斷——「輸出裡有沒有逐字包含欄位 Y 的值:有/無」——latitude 幾乎為零,答案被輸入鎖死,病沒地方發作。
而且這種檢查往往能做成純確定性的,把模型整個拿掉。
The right cognitive mode
所以答案不是更好的眼——用更大的檢查模型去查大模型,那是拿同一種病的眼去查病眼。答案是換一種認知模式,借佛家兩個詞:破相、知幻即離——白話說:不跟幻影逐一辯論,認出它是幻影的當下就放手,不糾纏。
落到工程上就一句話:不逐一分析每朵花的真假,而是認出它整類是「生成物」,在外部驗證通過前,不給它任何 reality-status——不當真、不下判斷、不拿它當下一步的地基。
Four moves
收緊既有,而非新建。
pin 原始訊號。收到的當下就 pin 進確定性儲存,逐字、不可變。之後每個下游輸出對它做 diff——不是問模型「你覺得你滿足規格了嗎」(問病眼),是確定性或極廉價的比對。簽名 covenant 的直覺就是這個,把它擴張到包含字面的原始請求,不只衍生規則。
用不同的「性」驗證。不是用更大的模型,是用可執行測試、schema、ground truth 查表,以及最便宜的模型只做窄二值檢查。
減法縮小詮釋面積。飄移的複利跟每個無監督步驟裡「模型自己決定/填空」的量成正比。步驟之間插確定性 checkpoint,讓飄移過不了一跳。要縮的是授權,不是模型。
經濟閘門。三層 dispatch。Fable 5 當最後手段,跑在廉價驗證的籠子裡,永遠不當持有狀態或意圖的前線。不再花 premium token 生成飄移、再花一次偵測它。
The moat is built on the sameness
無論 Fable 5 還是將來更強的模型,飄移都在——這是一個不變量。護城河的定義恰好是:建立在不變量上、不被時間或供應商下一次發版侵蝕的投資。
AI 時代的工程投資分兩類。一類建在模型目前的弱點上,下一代修掉,投資歸零——Metis Prime 從 19 核收斂到 4–6,被吃掉的正是做記憶、補推理、堆能力那些層。另一類建在模型永遠的弱點上——驗證層、dispatch 閘門、covenant 屬於這類;模型越強、token 越貴,未偵測錯誤的單價越高,這層越值錢。
憑什麼確定飄移是「永遠」?結構性理由:忠實度需要外部參照,而外部參照在定義上不在模型權重裡。模型再強也無法對照一個它不持有的 ground truth。更硬的一點——即使供應商將來 ship 通用驗證功能,它也只能 ship「驗證這個動作」,無法 ship「對我的原始訊號、我的簽名 covenant、我的領域狀態的驗證」,因為那是我的資料,不是他們的權重。驗證必然本地建。
最後一步:所有人用同一個 Fable 5、付同一個價。大家共享的東西,在定義上不可能是任何人的護城河。模型層是自來水,不是井。差異化只可能在模型層之外,而我多年的工程重心剛好全押在那一層。所以「一樣」表面是壞消息(病永遠治不好),實質是保證書(解永遠不過時):等下一代修好飄移的人,每代都得重建一次;建在不變量上的那層,跨過重新定價、跨過下一代模型,持續複利。
Enclosed, not solved
要小心一個誘人的說法:「知道問題在哪,所以不犯錯。」這正是病眼的陷阱——越聰明越覺得自己看穿了。真正發生的不是這個。問題被解決與問題被圍住是兩回事。
飄移沒有消失,模型每輪照樣生成雜訊、照樣長花;改變的只是:錯發生時,它撞到一道確定性的牆,過不了那一跳。病照犯,但被關在籠子裡空轉,到不了下游。所以嚴格講,是放棄治好病、改為圍住病,而圍籬建在「病永遠會犯」這個不變量上,所以永遠有效。「知道會犯,所以永遠圍著」——安全放在結構上,不放在認知上;它不依賴我此刻眼睛好不好。
這對上 知幻即離:那個「離」不是讓幻消失,是不給它 reality-status——相還在,但不據此行動、不往上疊。
修行人的圍籬,練到最後是要拆掉的——警覺內化成本能,看與被看合而為一,不再需要外部的牆。工程的驗證層不能這樣收——它的整個要害就在外部,一旦內化進模型自己的判斷,就退回病眼查病眼。一個向內收到牆消失,一個必須永遠在外、永遠是另一雙手。
Designing the precept-body
這套防護可以用一個很老的結構來看:最上面是普遍原理(控制反轉、未經外部驗證不授予 reality-status、human-in-the-loop 是憲法等級);往下是具體規則(每一條 hook 檢查、每一款 TOML);再往下是執行紀錄(日誌裡真正發生過的合規)。這三層都看得見、寫得出來。但還有第四樣,最容易被漏掉——這裡借用律學一個舊詞,叫戒體:規則背後那個讓它不論何時都真的生效、真的攔得住事的東西。多數人設計 AI 憲法,寫好 prompt 裡的規則清單,就以為第四樣也有了。這是根本的認錯對象:清單是清單,讓清單生效的東西,是另一回事。
落腳點。人可以把戒體放在心裡:人的念頭一個接一個,中間不斷線,今天記得的承諾,明天那個「我」還接得上。Agent 沒有這條路——每次呼叫都是重新生出來的,一輪結束 context 就死了,權重不會因為這輪答應了什麼,下輪就記得、就守約。它身上唯一連續的東西,是模型之外的確定性層:repo、hooks、簽好名的 covenant、pinned 原始訊號。所以答案不是選出來的,是被逼出來的——別的地方都留不住。V5AI 的戒體只能安在執行路徑上、模型之外。
放對了沒有,判準只有一條:模型在恍神、在自我合理化、在病眼又開花的那個當下,防護是不是照樣起作用——不需要它自己想起來才生效。prompt 裡的「請務必驗證」,要靠模型當下剛好記得、剛好願意配合,那是勸告,不是戒體;deterministic hook 在每個動作上必然觸發,不問模型那一刻在想什麼——那才是。
刪掉什麼,防護功能就消失,戒體就在那裡。若刪掉 prompt 安全就沒了,戒體放錯了地方。
怎麼立起來。戒不是隨口許願許來的——要有正式的場合、有見證、有明確說出來的心意;簽名這個動作本身,就在製造約束力。所以 covenant 的修訂規格必須比日常操作更高:冷靜狀態下改(不在事故中途)、由人簽署、版本化、寫清楚為什麼改;agent 可以起草,永遠不能批准自己的規則。事故火線上熱改的條款,效力天生打折;事後冷靜下來正式重簽的,才算數。
誰有權開例外。off/quiet/strict 三種模式都站得住——例外從一開始就是制度的一部分,不是漏洞。但開例外的權力有歸屬:正在看走眼的那一方,不能自己宣布這次例外。模式由簽署過的 policy 按情境預先劃定,不臨場切換;每次降級都是被正式記錄的事件,有明確範圍(限這個任務、或限這段時間);agent 永遠無權給自己降級。還有一條誠實原則:公開放下,無罪;偷偷不守,才是腐敗。正式聲明「此 sandbox 任務關閉檢查」,乾淨;掛著 strict 的招牌、實際上早就靜默不執行——戒體從那一刻已經死了,只是我還不知道。這正堵住已見過的退化路徑:摩擦 → 習慣性 off → 空殼。
違規分幾級。不是所有犯規都一樣重。
關鍵依存:「可以修復」之所以成立,全靠 checkpoint。沒有 pinned state,一切錯都是斷頭罪,因為沒有乾淨的版本可以退回去。
規則怎麼長出來。不預先立假想罪——每條規則的誕生,都對應一次真實踩過的坑(我們的 lidi 驗證機制,本身就誕生於一次捏造事件)。所以每條 hook 記錄自己為了哪次事故而存在,定期回頭審,起因已經消失的就退役。這是把減法用在規則自己身上,防的是驗證層自己膨脹成官僚——規則多到淹沒作業的那天,就是拜規則,忘了規則為何而立。
順序不能倒。先有戒,才有定;先有定,才有慧。授權被規則收窄,執行落進 pinned、checkpointed 的走廊,跑十次是同一條路——這是定。有了釘死的 ground truth,diff 才有判準,真假立判,「聽起來合理」再也矇混不過去——這是慧。沒有戒體,聰明只是病眼的自信。
最後一個反轉:人的戒體往內放(依靠不斷線的心),agent 的戒體必須永遠往外放(依靠不斷線的確定性層),因為 agent 的「心」不連續——哪天想把這些判斷收進模型自己的腦子裡,讓它自己拿捏分寸、不再需要外部把關,那不是這套系統練成熟了,是它開始壞掉的那一刻。
Non-abiding
最後回到根上——但「回到」這個詞得先擋一下:無住不是一個離開了、要折返的地點;若有一處可回,那處即是住。無住在這套系統裡不是玄談,它就是那條不變量的另一個名字。
應無所住而生其心——後半句常被漏掉:不是無所住就好,是無所住「而生其心」。心照生,花照長,agent 照樣每輪生成,不是把什麼都不輸出、把系統凍成死寂。是生而不住:輸出照出,但不在任何一次輸出上停下來當作真、當作最終、當作可據以行動的地基。生成與不緊抓,同時發生。
這剛好解釋了為什麼 agent 的戒必須向外。住,是心停在某個地方、結成一個固定的自己;agent 之心本不連續、每輪生滅,連「停」的載體都沒有——這不是缺陷,是它天然的無住。錯在想給它一個「住」:把戒內化,等於強造一個連續的自我讓戒有處可停,逆著它的無住。往外放不是退而求其次,是順著它的本性:確定性的連續層可以有住(它就該是釘死的、不動的、可重現的),生成層任其無住地生滅。住者住,無住者無住,各安其位。
還有最容易滑掉的一層:別把「無住」修成新教條,又抓著它不放。若開始用「這夠不夠無住」當尺去量每個設計、去加一個「無住性」的檢查層,就已經住在無住上了——連「放下」這件事本身,也得放下。
The test is in the repo
驗證在 repo,不在心裡。
這整篇會不會「太好了」,不取決於它多工整——偈子越工整,越可能只是 coherence 冒充真值。它值不值錢,取決於它讓系統長出什麼。
如果這篇真的看見了什麼,它長出來的會是減法:條款變少、授權收窄、不再想給 V5AI 加一個「利益眾生」的宏大使命層。如果只是假的看見——只是換了一層更精緻的自我感覺——長出來的會是加法:因為「我已經在利益眾生」而想增設更崇高的目的、更大的自主。哪個是真,不由寫完此刻的歡喜判,由接下來幾週的 repo 判。
不結。