🎯 什麼情境該想到我

當你「明明跟 agent 說了用最新寫法,它還是產出三年前的程式碼」的時候。

⚙️ 怎麼用(步驟 / 公式)

先分清楚是哪一種病——這兩種原因的解法完全不同:

病因症狀解法
訓練資料落後模型根本沒看過這個 API只能餵它——把新特性的簽章與範例放進 context
頻率偏誤模型知道新寫法,但舊寫法在訓練語料裡更常見,所以輸出還是舊的給明確的「舊 → 新」對照表。光說「請用最新寫法」沒有用

第二種是多數人沒意識到、卻更常見的那個。模型的輸出跟隨訓練語料的分布,不是新穎度或品質——它不會因為「知道」就改變偏好。

  1. 列一份「舊 → 新」對照表,不要只寫規則。每條給:舊寫法程式碼、新寫法程式碼、最低版本需求
    對照具體到能直接比對,模型才有東西可以照著換。
  2. 標上影響程度,讓 agent 有優先順序。可以用「幾乎每個專案都有數十處/每專案 5–20 處/1–5 處/罕見」這種可判斷的分級,而不是「重要/次要」。
  3. 要求它先偵測專案的版本go.modpackage.jsonpyproject.toml*.csproj…),只用到該版本為止可用的特性
    少了這步,你會拿到編不過的程式碼——這比舊寫法更糟。
  4. 放在 agent 讀得到的地方:skill/plugin/CLAUDE.md。對照表放在很少被讀的檔案裡等於沒寫。
  5. 跟既有的自動化工具分工:多數生態都有「把舊碼自動升級」的工具(Go 的 modernize、JS 的 codemod、Python 的 pyupgrade)。
    那些管既有程式碼,對照表管新產出的程式碼——兩邊目標相同、時機不同。

🧪 我實際套用的紀錄

  • 2026-08-28:(待填)

⚠️ 注意 / 什麼時候不適用

  • 「新的」不等於「該用的」。有些新 API 有效能或語義上的取捨,別把對照表寫成無條件替換;有疑慮的條目要註明適用條件。
  • 對照表會過期,而且它自己就是一份要維護的東西。與其自己寫,先找官方或社群維護的版本。
  • 版本偵測是硬需求,不是加分項。沒有它,這套會把「過時但能編」變成「先進但編不過」。
  • 這解決不了設計品質。它讓寫法現代化,但架構爛還是爛——那是另一回事。
  • 同樣的心法可以反過來用:如果專案刻意要停在舊版本(相容性需求),也要明講,否則 agent 會自作主張用新語法。

🔗 相關工具