上一篇的規矩是「一次只動一個變因」。做 Agent 的時候,這條規矩會突然變得很難守——因為能動的變因,早就不只是那句 Prompt 了。
回到 Day 01 那間廚房。Prompt 像你交代的菜單:「做一份不要辣的番茄義大利麵。」Context 則是整張備料台:桌上放了哪些食材、前一道菜做到哪裡、冰箱還剩什麼、廚師能不能開烤箱。菜單一個字沒改,端出來的東西還是可能完全不同。
Agent 也是如此。真正影響它判斷的,除了你輸入的那句話,還有 System Prompt、檢索到的文件、工具回傳結果、歷史訊息、Memory,以及它能使用哪些工具與權限。Anthropic 把 context 定義得很直接:從模型取樣時,被放進去的那一整組 token。所以問題也跟著換了——不再只是「指令怎麼寫」,而是什麼樣的 context 配置,最可能產生你要的行為。
關鍵在於,這張備料台是有限的。Day 03 講過登機行李:容量再大,東西擺不好一樣找不到。Context Engineering 等於把那篇的問題往前推一層——Day 03 問的是「怎麼擺」,這裡問的是誰決定擺什麼、什麼時候才擺進去、哪些值得留下來。
把過期文件、無關對話和一堆工具結果全倒進 context,就像把整間冰箱搬上備料台。材料很多,廚師反而更難找到鹽。
那該怎麼辦?兩個現成的做法:
備料台上只放清單。 不把實體內容全部預先載入,而是留下輕量的識別碼——檔案路徑、查詢字串、連結——真的要用的時候才去取。Claude Code 就是這樣運作的:先讀 CLAUDE.md,其餘靠 glob 和 grep 現查。
快滿的時候先收桌。 對話接近上限時做一次摘要,再用摘要重新起一輪,而不是硬把整段歷史拖著走。這也正是 Day 03 說的「舊對話適時摘要」,只是在 Agent 上變成了固定機制。
工具也算在備料台上。Anthropic 有一個好用的判準:如果連人類工程師都說不清某個情境該用哪個工具,就別指望 Agent 做得更好。
所以真正要決定的,是備料台上該放一張清單,還是整台冰箱。前者要多做一點工,後者看起來省事——但廚師會花掉大半時間在找鹽。