在AI生成程式碼中透過ADRs和契約強制執行不變數
本文介紹瞭如何使用架構決策記錄(ADR)和RFC 2119關鍵字來強制執行AI生成程式碼中的不變數。它描述瞭如何將架構決策記錄為不變數,確保AI代理在生成程式碼前查閱這些記錄,並透過確定性檢查來防止違反。
Zarar Siddiqi在2026年6月30日發表了一篇文章,探討如何在AI生成程式碼中強制執行不變數。不變數源於領域驅動設計,是指系統必須始終滿足的規則,以確保有效狀態。然而,大型語言模型(LLM)生成的程式碼可能看似正確,卻悄悄地違反了這些隱含約束。因此,需要將不變數編碼到AI無法忽略的地方。
文章提出了兩種方法:架構決策記錄(ADR)和RFC 2119關鍵字。ADR用於記錄架構決策,並將其視為不變數。為了有效使用ADR,需要識別何時記錄決策、實際記錄,並指導AI代理將其作為不變數對待。作者透過一個ADR自動建議技能來識別架構轉折點,例如“X vs Y”比較、引入新依賴等。該技能不編寫記錄,而是提醒使用者使用/adr命令。命令會建立包含上下文、決策、選項和後果的ADR檔案,並維護索引頁面。
為了強制AI代理查閱ADR,作者新增了一個確定性鉤子(check-adrs.sh),在程式碼生成停止時執行。它會檢查修改的檔案是否在ADR的範圍內,以及該ADR是否在會話中被開啟過。如果沒有,則阻止程式碼透過。
對於行為需求,使用RFC 2119關鍵字(如SHALL、MUST)結合Gherkin場景(given/when/then)來指定規則。例如,“系統在訂單完成時SHALL建立履行記錄,每條記錄MUST有唯一識別符號”。作者使用OpenSpec工具自動生成規範,並在實現偏離時重寫,以保持規範與程式碼同步。同樣,需要確保AI代理在生成程式碼前查閱規範。
總之,ADR和RFC 2119規範從不同角度解決相同問題:ADR固定架構決策,規範固定行為。兩者都需要確定性檢查來確保代理實際查閱,而不是依賴提示。這些檢查是淺層的,只驗證規則是否被諮詢,而更深層的語義判斷仍需要人工和測試。將更多不變數從文本提示轉移到可強制執行的檢查,可以減少對模型記憶的依賴,保持程式碼庫的穩定狀態。