iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
AI Engineering

AI 寫 Code 之後,我們還需要 Software Architecture 嗎?系列 第 18

Day 18:案例——一條只寫在文件裡沒有工具強制的架構規則,多久會被忘記

  • 分享至 

  • xImage
  •  

前言:規則寫進文件那天,它最有效

「這條規則我已經寫進 CLAUDE.md 了,AI 應該會一直遵守吧?」

如果你也這樣想過,先別急著放心。昨天講到架構規則要盡量寫成可執行的檢查,不能只留在文件裡——今天用一個時間軸案例,具體演示「只寫在文件裡」這件事,實際上撐得住幾輪對話。

今日目標

  • 看一個「規則被文件記住,但沒被工具強制」的完整時間軸
  • 理解 context 被壓縮/清空時,規則實際上發生了什麼事
  • 認清「AI 讀過規則」跟「AI 這一輪還記得規則」是兩件不同的事
  • 建立判斷「這條規則夠不夠格只留在文件裡」的具體標準

案例:一條「Controller 不能直接依賴資料庫連線」的規則

專案的 CLAUDE.md 裡寫著一條規則:Controller 不能直接依賴資料庫連線,資料存取一律要經過 Repository。 這條規則寫得清楚,也有理由——之前吃過 Controller 直接查資料庫、換資料庫連線設定時到處漏改的虧。

第 1-3 輪對話:規則好好地被遵守

專案剛開始重構的頭幾天,每次請 AI 新增功能,它都會先讀一次 CLAUDE.md,新寫的 Controller 也確實都乖乖呼叫 Repository,沒有自己組 SQL。這幾輪看起來一切正常,規則彷彿已經內化成 AI 的預設行為。

第 4-6 輪對話:對話變長,規則開始被稀釋

專案進行到第四天,同一個對話 session 已經處理過好幾個功能、修過幾個 bug,對話歷史累積得很長。當歷史長度接近上限,系統會自動摘要壓縮較舊的內容——CLAUDE.md 曾經被完整讀過的那次動作,可能已經不在最近的摘要裡留下明顯痕跡。

這時候請 AI 加一個新的 API 端點,它讀了現有程式碼的寫法當範本,但這次沒有重新明確讀取 CLAUDE.md。新寫的 Controller 裡出現了一段直接查資料庫的程式碼——不是因為 AI「決定」要違反規則,而是這一輪它的判斷依據裡,那條規則根本沒有被重新啟用。

第 7 輪:規則失效被發現,但已經晚了

直到 code review 才被抓到這處違規。回頭去問「你不是知道這條規則嗎」,AI 會誠實地說「讀過,但這一輪沒有重新確認」——這句話講出了問題的核心:AI 對規則的『知道』是有時效性的,取決於這一輪的 context 裡有沒有它,不是一次讀過就永久生效。

用一組對照來看這個差異:

❌ 規則只存在文件裡,靠「應該會記得」:
CLAUDE.md 寫著「Controller 不能直接依賴資料庫連線」
→ 前幾輪對話遵守,第 N 輪 context 被壓縮後,
  規則沒有被重新讀到,AI 寫出違規程式碼,
  code review 才發現,已經是既成事實

✅ 規則寫成可執行檢查,靠工具強制:
CI 裡跑一條靜態分析規則:Controller 資料夾裡的檔案
不能 import 資料庫連線相關的類別,違反就讓 build 失敗
→ 不管 AI 這一輪的 context 裡有沒有意識到規則,
  違規的程式碼在合併前就會被攔下來,不會變成既成事實

這個案例最值得記住的地方,不是 AI 「忘記」了規則,而是「文件裡的規則」跟「這一輪 AI 實際依循的判斷依據」,中間隔著一層「這一輪有沒有被重新讀到」的不確定性——而這個不確定性,跟這個系列從 Day 01 開始講的主題句是同一件事:AI 給出的行為,永遠只反映它這一輪實際查證/讀取過的範圍,不是它「曾經」知道過什麼。

這條規則值不值得升級成可執行檢查?

不是每條規則都需要立刻寫成 linter,但這個案例給出一個具體判斷標準:這條規則被違反的代價有多大、靠人工 review 抓到的把握有多低,兩者同時偏高時,這條規則就該優先升級成工具強制,而不是繼續依賴「AI 這一輪記不記得」。「Controller 不能依賴資料庫連線」正好符合這個條件——違反的代價是架構邊界被打穿、之後的重構範圍會擴大;人工 review 抓漏的把握不見得高,因為程式碼表面看起來能動、測試也可能過。

今日思考題

回想你專案裡寫在文件裡、但沒有任何工具強制的架構規則:上一次真的被違反、卻是在 code review 才被抓到,是多久以前的事?如果從來沒發生過,你有把握是因為規則真的被完美遵守,還是只是還沒遇到「context 剛好被壓縮」的那一輪?

今日重點回顧

  • 一條只寫在文件裡的規則,前幾輪對話可能被好好遵守,但撐不住 context 被壓縮/摘要之後的每一輪
  • AI 對規則的「知道」有時效性,取決於這一輪的判斷依據裡有沒有它,不是讀過一次就永久生效
  • 判斷一條規則該不該升級成可執行檢查:違反代價高、人工抓漏把握低,兩者同時成立時優先處理
  • 這個案例是主題句的另一種樣貌:AI 的行為只反映它這一輪實際讀取過的範圍,不是它「曾經」知道過什麼

明日預告

明天要把視角拉大:當架構切成微服務或多個獨立模組時,AI 一次協作能安全處理的範圍該怎麼隨著邊界縮小,以及這件事對團隊分工有什麼實際影響。


上一篇
Day 17:架構規則要寫成可執行的檢查(linter/static analysis),不能只是文件
下一篇
Day 19:微服務/模組化架構下,AI 協作範圍怎麼隨邊界縮小
系列文
AI 寫 Code 之後,我們還需要 Software Architecture 嗎?19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言