在 Day 13|可組合的規範架構 中,我們完成了 System Prompt 的模組化設計雛形,每一段規範變成可引用的模組,像拼積木一樣建構出一份符合任務場景的 Prompt。
但今天我們要解決一個更關鍵的問題:
當多個模組之間定義出現衝突,AI 要依照誰的為主?
我們的專案中,原本引入了:@prompts/base/naming.md
此模組中定義如下:
## 命名規範(共通)
- 函式:使用 camelCase
- 變數:使用 camelCase
- CSS class:使用 kebab-case
但某個專案因為沿用舊有 API 結構與團隊慣例,希望使用 snake_case 變數命名,因此引入:@prompts/legacy/naming-override.md
目前 Claude / Cursor 的 .cursorrules 與 CLAUDE.md 並不支援條件語法(如 @if / @when),因此我們採用以下 純語句式策略:
若不同模組之間產生重疊或衝突,請依以下優先順序處理:
naming-override
),請忽略對應的 base 規則。## 載入模組
@prompts/base/style.md
@prompts/base/naming.md
@prompts/base/constraints.md
## Legacy PHP 專案需求
@prompts/legacy/naming-override.md
## 規範合併原則
若 base/naming 與 legacy/naming-override 出現矛盾,請以後者為準。
<!-- version: 1.0 | author: core-team -->
## 命名規範(共通)
- 函式命名使用 camelCase
- 變數命名使用 camelCase
- CSS class 使用 kebab-case
<!-- version: 1.1 | author: legacy-team -->
## 命名規範(Legacy 專案覆蓋)
- **變數命名請改為 snake_case**
- 其他規則遵守 base/naming.md 的設定
類別 | 舉例模組 | 應用說明 |
---|---|---|
語言差異 | @prompts/lang/php.md vs @prompts/lang/python.md | 不同語言可能對縮排、命名、檔案結構有不同偏好 |
測試風格 | @prompts/testing/unit.md vs @prompts/testing/integration.md | 同時引用但需要明確標明哪種測試為主 |
設計系統差異 | @prompts/web/layout.md vs @prompts/ipad/layout.md | 元件結構不一致時,以任務平台為主 |
特性 | 說明 |
---|---|
可人工讀取 | 無需額外轉譯器,設計師、PM 可參與維護 |
自然語意 | 使用 AI 可理解的語句描述繼承與優先邏輯 |
可版本控管 | 每個模組單獨控管,可被 PR / review / rollback |
無條件邏輯 | 無法根據變數做邏輯分支(但可手動管理) |
因為 Claude / Cursor 無法推理你引用模組的意圖順序,所以每次使用模組疊加時,務必加上像這樣的說明:
請使用以下模組完成此次任務:
@prompts/base/naming.md
@prompts/legacy/naming-override.md
當命名規範衝突時,請以 legacy 模組為主。
否則很容易混用內容,導致產出不一致的程式碼。