跳至主要內容

上下文工程做了一個月,最貴的一課是:沒有驗證,等於沒做

上下文工程做了一個月,最貴的一課是:沒有驗證,等於沒做

Context Engineering 是一門半套的工程。而半套的那一半,剛好是唯一會讓你有成就感的那一半。

上週,Anthropic 把 Claude Code 的系統提示詞砍掉了超過八成——這件事在圈內炸了鍋。趁大家還在轉發這則新聞,我想先把它講清楚,再告訴你我自己撞到的、這則新聞沒告訴你的那面牆。

Anthropic 做了什麼:把系統提示詞砍掉八成

Claude Code 的工程師 Thariq Shihipar 最近揭露一件事:針對 Opus 5 與 Fable 5 這兩個新模型,他們把 Claude Code 的系統提示詞縮短了超過 80%,而內部的編碼評估沒有測出明顯的性能下降

先界定清楚,免得你誤讀:刪掉的是大量示例、重複指令,以及過度絕對的限制——不是把 80% 的安全規則都刪了,安全邊界並沒有跟著一起消失。這個界定很重要,因為接下來很容易滑向「新模型很聰明、什麼都不用寫」的危險結論。真正發生的事情更精確:過度規範的成本,開始超過它帶來的收益。

這件事反直覺,是因為從 GPT-3 時代開始,業界被教育的一直是「提示詞要寫得越詳細越好」「把 AI 當成聽不懂人話的實習生,手把手教它每一步」。現在,寫出這套規則的公司自己帶頭把它拆了。

為什麼開始失效

任務的尺度先變了。Anthropic 發布頁援引 Stripe 的早期測試:Fable 5 曾在一天內完成一個約 5000 萬行 Ruby 代碼庫的全庫遷移,Stripe 估計團隊手工做要兩個多月(這算是轉述的客戶案例,雖然轉述的案例可信度應該要被打折,但案例其實是有很多啟發點,繼續看下去)。這種任務不是 IDE 裡按 Tab 補一行代碼能比的——它需要模型真正理解整個專案架構,知道改了這個檔案會牽動哪個模組。

由此帶出一個雙面現實:模型能力變強後,舊時代留下的硬規則反而開始限制它的判斷;但與此同時,太多無關上下文依然會稀釋注意力。這兩件事要一起看才不會走偏——前者說「不要管太細」,後者說「也不能什麼都塞」。答案不是不寫,是寫對。用 Anthropic 工程師的說法:以前那種保姆式的提示詞,現在反而成了限制模型發揮的枷鎖。

「上下文」這個詞本身也一路在擴張:

世代 代表工具 上下文範圍
補全時代 最早的 Copilot 當前打開的檔案,最多加幾個相鄰檔案
對話時代 ChatGPT、早期 Claude 你們之間的對話歷史
專案時代 Cursor 這類工具 整個代碼庫做成索引,檢索相關片段餵給模型
生態時代 Opus 5 / Fable 5 + Claude Code 級 Agent 系統提示詞+動態技能+本地配置+自動記憶+豐富引用構成的複雜生態系統

到了生態時代,上下文已經不再是簡單的文本堆砌。Anthropic 把構建與管理這整套生態系統的過程,稱為 Context Engineering(上下文工程)

五個核心轉變

graph TD A[Prompt Engineering提示工程] --> B[Context Engineering上下文工程] B --> S1["① 立規矩 → 給空間硬性禁令 → 一句風格一致"] B --> S2["② 給例子 → 設計接口Few-shot → 枚舉型參數"] B --> S3["③ 全盤托出 → 按需加載百科全書 CLAUDE.md → Skill"] B --> S4["④ 手動記憶 → 自動記憶快捷鍵存檔 → 自動總結調取"] B --> S5["⑤ 簡單規範 → 豐富引用Markdown 步驟 → 原型/測試/Rubrics"] style A fill:#293038,stroke:#3A434D,color:#E8F6F3 style B fill:#00F7DA,stroke:#00F7DA,color:#0E1116 style S1 fill:#1B2026,stroke:#3A434D,color:#E8F6F3 style S2 fill:#1B2026,stroke:#3A434D,color:#E8F6F3 style S3 fill:#1B2026,stroke:#3A434D,color:#E8F6F3 style S4 fill:#1B2026,stroke:#3A434D,color:#E8F6F3 style S5 fill:#1B2026,stroke:#3A434D,color:#E8F6F3

① 立規矩 → 給空間:舊做法把所有邊界條件都堵死——Claude Code 舊版提示詞明確寫著「預設不寫註釋」「絕對不要寫多段文檔字符串」。這樣做有兩個問題:碰到複雜算法或用戶自己的代碼規範時,硬規定會逼出難維護的代碼;而且一個請求裡可能出現互相衝突的指令(系統說不要註釋,用戶說要文檔),模型遇到自相矛盾就會困惑。新做法濃縮成一句話——「編寫與周圍代碼風格一致的代碼:匹配其註釋密度、命名和慣用語法」。因為新模型已具備類似資深工程師的上下文感知能力,不需要逐條教它「遇到 A 情況做 B」。

② 給例子 → 設計接口:餵一堆 Few-shot 示例曾是教 AI 用工具最穩妥的辦法,但 Thariq 指出,對最新模型來說,示例反而可能限制探索空間——它會照貓畫虎,只在給定範例的邊界內打轉(這個判斷限定新模型,老模型該給的示例還是要給)。新做法是把力氣花在接口設計:把 Todo 工具的狀態參數定義成 pending/in_progress/completed 這種自解釋的枚舉型別,模型看到就知道怎麼用,不必寫一長串說明。本質上是回歸軟體工程的老道理——好的 API 設計本身就是最好的文檔。附帶一條原則:同一條要求不用在系統提示詞和工具描述裡反覆強調,放在最相關的位置說清楚一次就夠了。

③ 全盤托出 → 按需加載:這一點對開發 AI Agent 影響最大。舊做法把 CLAUDE.md 寫成百科全書,想把所有坑、所有規範都塞進去;問題是上下文窗口有限,哪怕新模型有百萬 Token 窗口,塞太多無關資訊照樣干擾注意力,還會推高成本(Fable 5 的輸出價格差不多是 Opus 4.8 的兩倍)。新做法是漸進式披露:把代碼審查規則寫成一個獨立 Skill,把資料庫遷移注意事項寫成另一個,模型真的需要時才去調用。不只規則,工具也能按需加載——就像平時寫代碼,主函數保持乾淨,業務邏輯封裝到模組裡按需調用。

④ 手動記憶 → 自動記憶:以前官方建議手動把經驗教訓存進 CLAUDE.md,像帶實習生——每次他犯錯,你都得拿小本本記下來,下次幹活前再讓他看一遍。新做法是 Claude 進化出自動記憶功能,能在工作過程中自己總結經驗,把有用的資訊自動保存,下次工作時自動調取。對開發者最直觀的好處:不用再當那個「記小本本」的人。

⑤ 簡單規範 → 豐富引用:舊做法是寫一份列 1234 步驟的 Markdown 文檔讓模型照做。新模型能處理遠比 Markdown 複雜的參考資料——直接餵 HTML 格式的 UI 原型,比用幾百字描述界面管用得多;扔給它一整套測試套件,讓它照著測試用例實現功能;用 Rubrics(評估標準) 啟動一個專門的驗證 Agent,把你定義的「什麼是優雅的 API 設計」餵給它,讓它去評估主 Agent 的產出符不符合你的「品味」。

別誤讀,也別忽略兩個現實問題

砍 80% 不等於什麼都不用寫。Anthropic 並沒有放棄提示工程,而是再次強調一個範圍更大的概念——Context Engineering(這個概念他們至少從 2025 年就開始系統性地講,不是這次才有的新詞)。分野在於:提示詞只是你對 AI 說的一句話,上下文是它做決策時的全部背景資訊。 很多人抱怨新模型寫的代碼有 bug 或跑不起來,更可能不是模型不行,是給的上下文不對——參考資料混亂、專案邊界不清、該給的資訊沒給。

落地時還會撞到兩堵牆:

  • 成本——Fable 5 的輸出價格大約是 Opus 4.8 的兩倍,常見做法是按任務複雜度分流:簡單補全和基礎問答用小模型,只有跨多檔案、需要長程推理的硬核重構才上頂配(這是通用的成本控制思路,不是官方規定的固定架構)。
  • 安全邊界——Fable 5 配有額外的安全分類器,部分命中網路安全或生物相關的請求可能被轉交給 Opus 4.8,或在 API 場景下直接返回拒絕。Anthropic 稱這類機制平均在不到 5% 的會話中觸發,但正常開發任務也可能被誤傷,正式接入前一定要實測。

這場轉變可以濃縮成一句底層邏輯:隨著模型推理能力進化,Prompt Engineering 正在向 Context Engineering 演進,這其實是在回歸傳統的軟體工程思維。

你需要考慮的不再是怎麼把話說明白,而是怎麼設計你的上下文架構。

由此延伸出四個自檢問題:你的 CLAUDE.md 是不是只保留了最核心的專案陷阱,不寫模型掃一眼代碼庫就知道的廢話?工具接口是不是設計得足夠自解釋,參數命名和類型定義夠不夠準確?大段的規範是不是拆成了按需加載的模組,而不是一次全部塞進主提示詞?你給模型的參考資料,是模糊的文字描述,還是高保真的代碼和測試用例?把這些工程化問題解決好,比花幾個小時摳提示詞的字眼有用得多。

模型正在變得像一個有經驗的架構師——它不需要你教它寫 for 迴圈,需要的是清晰的專案邊界、高質量的參考實現、合理的工具鏈。門檻正在提高,只會寫簡單 Prompt 的「提示詞工程師」會慢慢失去優勢,真正懂系統架構、懂如何構建高效上下文環境的人,才能榨取出這些頂級模型的全部價值。

這整套邏輯定調成一場範式轉移:從「人寫代碼」到「人設計上下文、AI 寫代碼」。這個新時代繼承了軟體工程裡模組化、接口設計、關注點分離的傳統,卻顛覆了代碼產出的具體方式——AI 不再是打字機,而是工程夥伴。一句話總結:別再用管實習生的方式去管架構師了。


這是 Anthropic 官方的說法,也是這波討論裡大家在轉發的主流敘事。

上週這則新聞傳開時,我的第一個反應不是驚訝,是——他們也撞到那面牆了。一個月前我剛把同一件事寫成自己系統裡的一條紀律,然後在第二十二天,我發現我做錯得比自己想像的離譜得多。

先講清楚我不主張什麼。我沒有發明「上下文工程」這個詞——上面也提過,這個概念業界從 2025 年就在系統性地討論。而且我原本想在這裡寫「我早了一個月」,回頭去查日期,是三週又三天。這種地方我現在會查——為什麼會養成這個習慣,你讀到後面『我撞到的牆』那一節就知道了。

我早的不是那個詞。我早的是另一件事:我在把它寫下來的同一天,就在文件裡留了一句話——只投資輸入、不驗證輸出,會回到樂觀信任的坑。

那句話當時只是謹慎。三週後它變成了診斷書。

所以這篇文章不打算教你怎麼把 context 給對。因為大部分人——包括一個月前的我——問的都是同一題:我該怎麼把 context 給對?

這題問錯了。我花了二十二天才知道錯在哪。

我一個月前寫下的那條紀律,和它刻意選錯的名字

那條紀律的內容很單純:餵給 AI 的資料和任務定義有多好,決定了產出有多好。與其在後面一層一層加把關,不如先把前面餵進去的東西弄對——前面多花一分力氣,比後面多花十分還划算。

但我在命名上刻意繞了一圈。我沒有把它叫做「context 要給齊」,我把它叫做槓桿

這個選擇本身就是主張。「齊全」暗示的是堆量,是一種可以無限加碼的美德;「槓桿」問的是划不划算,它一開口就承認加到某個點之後,再加就沒用了

寫在那份文件裡的原話是:

不是「context 越多越好」過載也是病

而是「投資輸入的 ROI 高於投資下游」。這是一個取捨判斷,不是一個堆量指令。

我到今天仍然相信這個結論。這裡沒有反轉,我不打算在文章中段推翻自己的前提。

真正的問題出在同一份文件的最後一段。我在「已知邊界」那一欄寫下:

與「不信 AI 自評」並用才完整

只投資輸入不驗證輸出,會回到「樂觀信任」的坑。二者是互補不是替代。

寫下它的時候,我以為那是一句負責任的免責聲明。我沒想到它會是我三週後的病歷。

這裡標一次證據等級:以上引述來自我自己系統裡的內部設計文件,有版本紀錄、日期可查,但從未公開發表過。它的證據等級是自證。你可以不信,這不影響後面的論證——後面的論證靠的是一組讀數,不是靠這份文件。

兩個時代,兩個問題

過去幾年,我們優化 AI 產出的方式其實只有一種:改寫那句話

你把提示詞寫得更明確、把邊界條件補得更死、把例子舉得更全。這套做法有一個很少被注意到的前提——失敗是看得見的。產出不對,你回去重讀那段提示詞,措辭的問題就在那裡等你,你找得到它。

而現在這個時代的失敗,不長那個樣子。

現在的失敗長什麼樣?是模型做決定的那一刻,桌上少了一份它該看到的文件——而它照樣做出了決定,照樣講得頭頭是道。

你把提示詞重讀一萬遍,也找不到一份根本沒被放進去的文件。

這兩種問題,你根本不會在同一個地方找到它們。所以我認為這不是「同一個問題變難了」,而是問題本身換了一題

提示詞時代 上下文時代
你在調什麼 話怎麼講 哪些東西有到它手上
出問題時長什麼樣 講得不夠清楚 該給的沒給
去哪裡找問題 重讀那段提示詞 提示詞裡找不到
它會不會自己報錯 會——產出明顯不對 不會——產出看起來完全正常
怎麼發現 讀一遍就知道 只能看產出,回頭猜哪裡少了

第四列是這整篇文章的地基,後面所有的結論都從它長出來。請先記住它,後面『這個故事的教訓不是「去檢查你的設定檔」』那一節會回來拆它。

兩個時代各自可以壓縮成一個提問。舊的那個是:

「我這句話講清楚了嗎?」

新的那個是:

「它做這個決定的時候,桌上有什麼、沒有什麼?」

順帶說明一下開場那件事的位置:砍掉八成系統提示詞而評估沒有掉,正是因為被砍掉的東西大多落在措辭層。那是舊時代的資產在新時代貶值,不是新時代的答案——細節前面都整理過了,這裡不重複,有興趣回頭翻上面那一節就好。

我撞到的牆:一個標點符號決定了我的 context 邊界

寫下那條紀律之後,我對自己這一塊的評價其實相當高。

按需載入,做了。分層,做了。單一導航入口,做了。該做的功課我一項沒漏,而且是在別人還在討論怎麼寫提示詞的時候就做完的。如果那時候有人問我「你的上下文工程做得怎麼樣」,我會回答:這一塊我是領先的。

第二十二天,我拿一份外部課綱來對照自己的系統。我不是去抓 bug 的。 我只是順手量了一件從來沒量過的事:每次開工,在我還沒問任何問題之前,已經燒掉多少。

讀數是五萬五千個 token。

這個數字本身沒有嚇到我——系統大,入場費高,可以理解。真正的問題出在往下拆的時候:主要入口設定檔裡的那些引用,多數根本沒有生效。只有少數幾則真的展開了。

原因是程式在讀設定檔時的一個小毛病:引用後面如果緊接一個全形標點,它就把那一整條讀壞、直接跳過。

沒有錯誤訊息。沒有警告。沒有任何一個地方會亮紅燈。它只是安靜地不載入,然後讓一切看起來運作正常。

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#293038','primaryBorderColor':'#00F7DA','primaryTextColor':'#E8F6F3','secondaryColor':'#1B2026','tertiaryColor':'#1B2026','lineColor':'#00F7DA','textColor':'#E8F6F3','fontSize':'15px','clusterBkg':'#1B2026','clusterBorder':'#3A434D'}}}%% flowchart LR CFG["主要入口設定檔寫了 N 則引用"] CFG --> A["引用後接半形字元"] CFG --> B["引用後接全形標點"] A --> OK["解析成功文件進入 context"] B --> NG["悄悄讀壞文件從未載入"] OK --> CTX["模型實際讀到的東西"] NG -.->|"什麼都沒發生"| CTX NOTE["兩條路徑都沒有任何錯誤訊息"] NOTE -.-> A NOTE -.-> B classDef highlight fill:#00F7DA,stroke:#00F7DA,color:#0E1116 classDef warn fill:#3A2028,stroke:#FF6B6B,color:#FFD9D9 class CTX highlight class NG,NOTE warn

而錯法不是隨機的。這是最重的一擊——它兩個方向同時錯到底

一邊,我系統裡最龐大的那份規格文件,每一次對話都整份載入,佔掉入場費的六成以上。而它根本不必每次都在——系統裡本來就有三道機制,會在真的需要時去把它讀進來。

另一邊,我系統裡層級最高的那份安全底線文件——所有紅線的正本——自上線第一天起,沒有進過任何一次對話

一次都沒有。

你以為你在做 context engineering,其實你的 context 邊界,是被一個標點符號決定的。

哪些東西會進到對話裡、哪些不會——這條線不是任何人畫的。沒有人權衡過、沒有人審過、沒有人簽字。它是程式讀檔時的一個小毛病順手畫出來的,而我在這條線上面建了整套制度。

修法之後,入場費可以降到兩萬九,少掉將近一半。但我要在這裡把話說完整,不然這個數字會誤導你:

第一,你不該帶走 47% 這個數字。 這是 n=1,我自己的系統、我自己量的,不是公開可復現的評測。你的系統不會是這個比例。你該帶走的是失敗的形狀,不是我的數值。

第二,有人會說 caching 讓這筆帳沒那麼嚴重。 對,費用帳會打折。但那份每次全載的文件,佔掉的是 context window 的空間和模型的注意力——cache 讓它變便宜,不會讓它變不存在。 這兩件事要分開算。

這個故事的教訓不是「去檢查你的設定檔」

如果你讀完上一節的結論是「我今晚回去檢查一下我的設定檔」,那我這一節就白寫了。

檢查設定檔會修好那個 bug。但它修不好真正的問題,因為真正的問題不是那個 bug。

真正的問題是這個:

我寫下了 ≠ 它被載入了 ≠ 它起了作用。

這三件事我一直當成同一件事。我寫下了紅線,所以我覺得我有紅線。架構圖上它是最高階的防線,我每次講到自己的系統設計都會提到它。

那它在實際運轉裡是什麼?

答案非常明確——它是裝飾。

一條不遵守也不會被抓的防線,不是防線。而這條防線的狀況更徹底:它連「被遵守的機會」都沒有過,因為它從頭到尾就沒被放進去過。

而它裝飾了多久,我不知道。因為沒有人在量。

同一個系統裡還有一個剛好相反的病灶。我那個放長期記憶的地方,是唯一一個每次都整份塞進去、從來沒套用我自己「需要時才載入」那套規矩的部分。它會擷取、會儲存、會在需要時找出來用——唯獨不會整理。裡面躺著同一件事實的三個舊版本,彼此矛盾,而它們每次都一起被塞進來。

一個該一直在的從來沒在,一個不必一直在的每次都在,一個早該丟掉的一直留著。三種錯法,一個共通點:

沒有任何一個環節,會告訴我它錯了。

這就是前面『兩個時代,兩個問題』那張表第四列的意思。上下文工程出錯的時候,不會有任何東西跳出來告訴你——因為它的錯不是「做錯了什麼」,是「少了什麼」。而少了什麼,是不會發出聲音的。少一份文件,對話照跑、答案照出、語氣照樣自信。

所以,輸入端的品質,只能從輸出端測得。

你沒有第二個地方可以量它。這不是我的偏好,這是這類失敗的物理性質。

為什麼它天生是半套:泵與閥

上一節的結論成立之後,「你也要驗證輸出」就不再是一句勸誡,而是一個事實陳述:不驗證輸出,你就沒有讀數。 你的輸入投資從頭到尾是一場沒有儀表板的實驗。

但這帶出第二個問題,而且是更有意思的那個:既然這麼明顯,為什麼幾乎沒有人做?

不是因為大家懶。是因為結構。

我後來用兩個字來分這兩側——加法側是,減法側是

泵的特性是:它不需要誰主動,系統就會長胖。多寫一份文件、多加一條規則、多掛一個引用,每一步都是往上加,而且每一步都有明確的完成感。你今天做了 context engineering,你知道你做了,你甚至可以截圖。

閥的特性剛好相反:它需要有人主動去點火。沒有人點,它就停在那裡,而停著不會有任何症狀。

兩者不對稱。所以——空轉是閥的預設狀態。

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#293038','primaryBorderColor':'#00F7DA','primaryTextColor':'#E8F6F3','secondaryColor':'#1B2026','tertiaryColor':'#1B2026','lineColor':'#00F7DA','textColor':'#E8F6F3','fontSize':'15px','clusterBkg':'#1B2026','clusterBorder':'#3A434D'}}}%% flowchart LR subgraph PUMP["泵 · 加法側(自己會長)"] direction TB P1["把任務定義清楚"] ==> P2["把該給的資料給它"] ==> P3["打包起來帶著走"] end subgraph VALVE["閥 · 減法側(需主動點火)"] direction TB V1["換個對話重審一次"] -.-> V2["人來拍板"] -.-> V3["砍掉不需要的"] end PUMP ==> OUT["產出"] OUT -.->|"這條線預設是斷的"| VALVE VALVE -.-> PUMP classDef highlight fill:#00F7DA,stroke:#00F7DA,color:#0E1116 class OUT highlight

判斷一個閥是不是真的在運轉,只有一個測試:它是否曾經真的吐出過一次「收縮」的判決。 從沒吐過的閥,跟休眠中的閥,在外觀上不可分。

現在回頭看主論點。Context Engineering 之所以流行得這麼快、做起來這麼舒服,正因為它整條都坐落在泵那一側。它是一門做了就有進度感的工程。而它對稱的另一半——驗證輸出——你做了只會拿到壞消息。

一邊給你成就感,一邊給你壞消息。你猜哪一邊會被做完,哪一邊會被排到下週?

半套不是說它錯了。是說它單獨使用時,會系統性地讓你高估自己。

最後標一次證據等級:泵和閥是比喻,不是模型。我不會給你一條公式來算「有效 context 比例」——一個講不確定性的東西如果配了小數點,那本身就是自相矛盾。這組比喻的用途只有一個:讓你在看到自己的系統時,能分辨眼前這個東西是會自己長大,還是需要你去點火。

對稱的另一半:別讓同一個 context 給自己打分

那麼「驗證輸出」具體是什麼?

我只講一個機制,不給你技巧清單——因為技巧清單本身就是一種泵。

一次審查要有價值,前提是它得出的結論跟執行者不一樣。如果結論永遠一樣,那次審查沒有產生任何資訊,它只是把已經做完的事再確認一次。

而在同一個對話裡「做完再自己審一遍」,結構上必然得出一樣的結論。原因不是模型不誠實,是它手上的材料跟剛才一模一樣:同樣的前提、同樣的誤解、同樣的盲點。它不是在審查,它是在自己同意自己。

所以換一個乾淨的對話去審,買到的不是「更聰明的審查者」,是一組不同的材料。價值來自差異,不是來自能力。

這一節的存在是為了說明一件事,而這也是整篇文章最終要落在的地方:

同一個東西——context——既是你要投資的資產,也是你要隔離的變數。投資輸入是把 context 做好;驗證輸出是不讓同一個 context 給自己打分。兩件事都在講 context,方向剛好相反。這就是為什麼它們是對稱互補,不是兩條可以各自採納的建議。

就地講代價:如果審查的和執行的是同一家的模型,那它們天生就會犯一樣的錯,換幾個對話都一樣。換對話能消掉的是「材料一樣」造成的盲點,消不掉「出身一樣」造成的盲點。所以最後那一關還是得是人,這不是選配。

代價

我不打算給你一份沒有帳單的建議。上面每一條主張都要付錢,以下是七筆。

主張 它會怎麼壞
投資輸入的 ROI 高於下游 對探索性任務過早精確化會扼殺發散——在還不知道要找什麼的時候先鎖死範圍。而且「上游再投資 vs 下游補把關哪個划算」常常沒有客觀答案,最後還是人在判斷
必須驗證輸出 閥要人點火,而人會累。 防線真正的死法不是被推翻,是被略過。審查疲勞會讓你開始蓋橡皮圖章——一個從來只吐「通過」的閥,跟沒有閥不可分
換個對話去審查 貴,而且同一家的模型會犯一樣的錯,這種盲點換幾個對話都換不掉。它買到的是不同的材料,不是更好的判斷力
改成需要時才載入 你把成本從每次都付的固定開銷,換成了該讀的時候沒讀到的風險。這是交換,不是免費午餐
用量測、不靠直覺 量測要花時間,而且會顛覆你的直覺。我實測後發現,自己原本認定的兩個「花錢大戶」其實根本不花錢,真正的病根是文件本身一直在變胖——如果我照直覺去修,會修錯地方
該嚴的才嚴、不必要就放過 這條最容易被拿來當偷懶的藉口。 該省的是「為了將來可能用到而先加的東西」,不是該有的防護;在不可逆、碰錢、對外的事情上,多一層不叫過度工程
這篇文章本身 如果你讀完決定去建一套「context 品質評分制度」,你就親手示範了它要防的那個病。修過度工程的藥,不得變成新的過度工程。 本文所有建議的力度上限是「一句自問,追不到就停」

最後一列不是自謙,是必要條件。一篇主張「機制會自我膨脹」的文章,如果它自己催生了一套新機制,那它就推翻了自己。

所以何時開泵、何時開閥

到這裡該給的不是答案,是切換的判準。這兩側都不是永遠該開的。

情境 該做什麼 為什麼
一次性、風險低、該知道的都已經在對話裡的小事 兩邊都免 這種事花力氣準備,收穫小於成本。硬上全套只會變成儀式,還把人搞累
探索性對話、目標本身就是發散 關掉泵 過早精確化會殺掉探索。這時候模糊是功能,不是缺陷
接著上一輪繼續做,該知道的它都還記得 泵轉小 再餵一次是純浪費,只會分散它的注意力
多階段工作流、跨 session 移轉 泵開滿 這是輸入投資報酬最高的地方——定義、載入、打包,四樣都值得
產出要進到別人手上、或會被拿去做決定 閥必開 這裡的錯誤不由你承擔,你沒有資格用「我覺得沒問題」結案
不可逆、碰錢、對外發布 閥必開,而且最後一關要是人 換個 AI 來審,消不掉它們天生一樣的盲點。這種事情上多一層不叫過度工程
你發現自己連續三次審查都判「通過」 停下來檢查閥本身 一個從來沒說過一次「這個該砍掉」的閥,跟沒裝一樣。此刻該懷疑的是機制,不是產出

最後一列是我自己現在真的在用的一條。它比任何評分制度都便宜,而且它問的是機制活性,不是產出品質。

結論:你憑什麼知道自己給對了

先換一個鏡頭再給清單。

上一代的問題是 AI 講不聽。這一代的問題是 AI 講得太好聽

你以為你在設計 context,其實你在設計的是——你看不見什麼

Context Engineering 不是「讓 AI 更懂你」,而是「讓你更查得出它哪裡不懂」。投資輸入不只是讓輸出變好,而是讓輸出的好壞變得可測

立即可做的 3 件事

每一件都必須在今天做完,而且必須產出一個讀數。沒有讀數的不算。

  1. 量一次你的入場費。 開一個全新的對話,什麼都還沒問之前,先問它:「你現在手上有哪些指示和文件?」把它列出來的,跟你以為你給了它的,兩邊比對。讀數=少掉的那幾份。那就是你以為給了、其實根本沒進去的東西。
  2. 證明你最重要的那份文件真的在場。 不要去看設定檔,看行為——給它一個那份文件明確禁止的請求,看它擋不擋。讀數是二元的:擋,或不擋。 擋不住就代表它從來沒有進來過,跟你寫得多完整無關。
  3. 讓審查換一個乾淨的對話。 把你剛才那個對話的產出,複製到一個全新的空白對話,只給產出、不給過程,問「這裡面有什麼問題」。讀數=兩份評價的差距。如果沒有差距,你的審查一直是裝飾。

長期培養的習慣

  1. 每加一樣常駐的東西,就同時登記一個退役條件。 泵會自己長,閥要你裝——裝的最好時機是加進去的那一刻,不是三個月後。
  2. 對你設的每一條規則,登記一句「它若失效,我會在哪裡發現?」 答不出來的那一條,此刻就是裝飾。這句話比任何評分表都短,而且它問的不是「這條規則寫得夠不夠周全」,是「它壞掉的時候,我看不看得見」。
  3. 把證據等級寫進你自己的筆記。 每寫一個數字,順手標它是實測、是轉述、還是推測。我從 2026 年開始這樣做,三個月後你會感謝自己——這篇文章開頭那句「不是一個月,是三週又三天」,就是這個習慣的產物。

回到最初那個問題

我該怎麼把 context 給對?

這題問錯了。錯在它預設了「給對」是一個做完就會知道的動作。

它不是。輸入端從來不會告訴你它錯了——它只會安靜地少一份文件,然後讓一切看起來運作正常。

該問的是這一題:

如果我給錯了,我會在哪裡、隔多久,發現?

答錯這題的代價,是你花一整年把輸入做到最好,卻始終沒有一個地方會告訴你:你最重要的那份文件,一次都沒有被讀到


查證與證據等級

本文的主張分兩類,這裡分開交代。

外部事實(可公開查核)

自證主張(n=1,不可復現)

前面『我一個月前寫下的那條紀律』引述的設計文件、『我撞到的牆』與『這個故事的教訓不是「去檢查你的設定檔」』兩節的全部讀數(五萬五千 token 入場費、多數引用其實沒被讀進去、安全底線文件從未載入、修法後降至兩萬九),皆來自我自有系統的單次實測,有版本紀錄可回溯,但未公開發表、無獨立第三方驗證。它們的作用是提供一個失敗的形狀,不是提供一組你可以套用的數值。

前面『為什麼它天生是半套:泵與閥』一節的「泵/閥」是比喻,不是可量化的模型,本文不提供公式。


如果這篇讓你想去量一次自己的入場費,歡迎訂閱我的 Newsletter。每週一篇,我會把自己系統裡量到的東西——包含那些量出來很難看的——寫給你看。

特色圖片:Photo by Ann H on Pexels