.prompt.md 深度解說指南

目錄

  1. 核心概念
  2. 檔案結構與語法
  3. 參考語法詳解
  4. 模板設計原則
  5. 通用模板範例
  6. 進階技巧

核心概念

什麼是 .prompt.md 檔案?

.prompt.md 是一種**可重複使用的提示詞模板**,它允許您: - 📝 標準化 常見的 AI 互動模式 - 🔗 動態引用 專案中的檔案、符號或其他提示 - 👥 團隊協作 透過版本控制分享最佳實踐 - ⚡ 快速調用 使用 #prompt: 語法自動完成

為什麼需要 Prompt 模板?

沒有模板的情況:

使用者每次都要重新輸入:
"幫我檢查這個 API 的錯誤處理、參數驗證、回傳格式..."

有模板的情況:

使用者只需輸入:
#prompt:api-review
系統自動展開完整的檢查清單和引用檔案。


檔案結構與語法

基本結構

<!-- 檔案路徑: .github/prompts/your-template.prompt.md -->

[可選的模板說明區塊]

{主要提示內容}
- 使用 #file: 引用檔案
- 使用 #symbol: 引用程式符號
- 使用 #prompt: 組合其他模板

[可選的步驟或檢查清單]

命名規範

類型 命名格式 範例
功能型 {action}-{target}.prompt.md review-api.prompt.md
領域型 {domain}-{task}.prompt.md security-audit.prompt.md
流程型 {workflow}-step{n}.prompt.md deploy-step1.prompt.md

參考語法詳解

1. #file: - 檔案引用

語法:

#file:相對或絕對路徑

範例:

分析 #file:src/main/java/com/bpaas/creditcontrol/service/CreditService.java 的實作

進階用法:

比較以下檔案的差異:
- 主要實作: #file:src/service/UserService.java
- 基底類別: #file:src/service/BaseService.java
- 測試檔案: #file:src/test/java/UserServiceTest.java

最佳實踐: - ✅ 使用專案相對路徑 (如 src/...) - ✅ 可以一次引用多個檔案 - ❌ 避免引用過大的檔案 (超過 2000 行)


2. #symbol: - 符號引用

語法:

#symbol:ClassName.methodName
#symbol:functionName

範例:

重構 #symbol:CreditService.calculateCredit 方法,遵循以下原則:
1. 單一職責
2. 依賴注入
3. 錯誤處理

適用場景: - 方法層級的程式碼審查 - 特定類別的重構建議 - 函式簽名的修改


3. #prompt: - 組合模板

語法:

#prompt:template-name

範例:

<!-- base-java-review.prompt.md -->
檢查 Java 程式碼的:
- 命名規範
- 例外處理
- 註解完整性

<!-- api-review.prompt.md -->
首先執行基本檢查:
#prompt:base-java-review

然後額外檢查 API 專屬項目:
- RESTful 設計原則
- HTTP 狀態碼使用
- 請求/回應格式

好處: - 🔁 避免重複內容 - 🎯 模組化檢查項目 - 🔄 集中管理共用規則


4. #selection - 當前選取內容

語法:

#selection

範例:

<!-- code-explain.prompt.md -->
請詳細說明 #selection 的邏輯:

## 分析項目:
1. 輸入參數的作用
2. 核心演算法步驟
3. 回傳值的意義
4. 潛在的邊界條件

請用中文回答,並附上流程圖。

使用時機: - 使用者在編輯器中選取程式碼 - 輸入 #prompt:code-explain - 系統自動將選取內容注入模板


模板設計原則

1. SMART 原則

原則 說明 範例
**S**pecific (具體) 明確指定要檢查什麼 ❌ "檢查程式碼" → ✅ "檢查錯誤處理和日誌記錄"
**M**easurable (可衡量) 提供可驗證的標準 "確保測試覆蓋率 > 80%"
**A**chievable (可達成) 避免過於籠統的要求 ❌ "寫完美的程式碼" → ✅ "遵循 Google Java Style Guide"
**R**elevant (相關) 聚焦於特定領域 API 模板不檢查 UI 相關項目
**T**ime-bound (限時) 適用於特定階段 "在部署前執行此檢查"

2. 分層設計

通用層 (base-*.prompt.md)
    ↓ 被引用
領域層 (java-*, api-*, security-*)
    ↓ 被引用
專案層 (credit-service-review.prompt.md)

3. 參數化設計

不佳做法:

檢查 src/main/java/UserService.java 是否符合規範

良好做法:

檢查 #file:{USER_SPECIFIED_FILE} 是否符合:
- #file:docs/coding-standards.md
- #file:.github/instructions/java.instructions.md

使用時,使用者替換 {USER_SPECIFIED_FILE} 為實際路徑。


通用模板範例

範例 1: 程式碼審查模板 (通用)

<!-- 檔案: .github/prompts/code-review.prompt.md -->

# 程式碼審查檢查清單

請對 #selection#file:{TARGET_FILE} 進行全面審查:

## 1. 程式碼品質
- [ ] 命名是否清晰且符合規範?
- [ ] 是否有重複的程式碼 (DRY 原則)?
- [ ] 函式長度是否合理 (建議 < 50 行)?
- [ ] 是否有過深的巢狀結構 (建議 < 4 層)?

## 2. 錯誤處理
- [ ] 是否捕獲所有可能的例外?
- [ ] 錯誤訊息是否足夠詳細?
- [ ] 是否有適當的日誌記錄?
- [ ] 是否避免吞掉例外 (empty catch block)?

## 3. 效能考量
- [ ] 是否有不必要的資料庫查詢?
- [ ] 迴圈內是否有昂貴的操作?
- [ ] 是否有記憶體洩漏風險?
- [ ] 是否適當使用快取?

## 4. 安全性
- [ ] 使用者輸入是否經過驗證?
- [ ] 是否有 SQL 注入風險?
- [ ] 敏感資訊是否加密?
- [ ] 是否有適當的權限檢查?

## 5. 測試性
- [ ] 是否容易進行單元測試?
- [ ] 依賴是否透過介面注入?
- [ ] 是否有測試涵蓋核心邏輯?

## 參考標準
- 專案規範: #file:docs/coding-standards.md
- 類似實作: #file:{REFERENCE_FILE}

請以表格形式列出發現的問題,並提供具體的改進建議。

使用方式:

1. 選取要審查的程式碼
2. 在 Chat 輸入: #prompt:code-review
3. (可選) 指定 {TARGET_FILE} 和 {REFERENCE_FILE}


範例 2: API 設計審查模板

<!-- 檔案: .github/prompts/api-design-review.prompt.md -->

# RESTful API 設計審查

審查 #selection 的 API 設計,確保符合 RESTful 最佳實踐。

## 1. HTTP 方法語意
檢查以下對應是否正確:

| 操作 | 正確方法 | 冪等性 |
|------|---------|-------|
| 查詢資源 | GET | 是 |
| 建立資源 | POST | 否 |
| 更新資源 (全部) | PUT | 是 |
| 更新資源 (部分) | PATCH | 否 |
| 刪除資源 | DELETE | 是 |

**檢查項目:**
- [ ] GET 請求不應修改資源
- [ ] POST 用於建立而非更新
- [ ] PUT 是否提供完整資源
- [ ] DELETE 是否需要請求主體

## 2. URL 設計
**正確範例:**
GET /api/users # 取得使用者列表 GET /api/users/{id} # 取得單一使用者 POST /api/users # 建立使用者 PUT /api/users/{id} # 更新使用者 DELETE /api/users/{id} # 刪除使用者
**檢查項目:**
- [ ] 使用複數名詞 (users 而非 user)
- [ ] 避免動詞 (❌ /getUser, ✅ /users)
- [ ] 使用階層結構 (/users/{id}/orders)
- [ ] 保持 URL 簡潔 (避免過深巢狀)

## 3. HTTP 狀態碼
檢查回應是否使用正確的狀態碼:

| 情境 | 狀態碼 | 說明 |
|------|--------|------|
| 成功查詢 | 200 OK | 回傳資源 |
| 成功建立 | 201 Created | 回傳新資源和 Location header |
| 成功更新 | 200 OK | 回傳更新後的資源 |
| 成功刪除 | 204 No Content | 不回傳內容 |
| 參數錯誤 | 400 Bad Request | 回傳錯誤詳情 |
| 未授權 | 401 Unauthorized | 需要認證 |
| 禁止存取 | 403 Forbidden | 已認證但無權限 |
| 資源不存在 | 404 Not Found | 找不到資源 |
| 伺服器錯誤 | 500 Internal Server Error | 系統錯誤 |

## 4. 請求/回應格式
檢查資料結構:

**請求範例:**
```json
POST /api/users
Content-Type: application/json

{
  "username": "john_doe",
  "email": "john@example.com",
  "role": "admin"
}

回應範例:

201 Created
Location: /api/users/123

{
  "id": 123,
  "username": "john_doe",
  "email": "john@example.com",
  "role": "admin",
  "createdAt": "2025-11-26T10:30:00Z"
}

檢查項目: - [ ] 使用 JSON 格式 - [ ] 欄位命名使用 camelCase - [ ] 日期使用 ISO 8601 格式 - [ ] 分頁使用標準參數 (page, size, sort)

5. 錯誤處理

標準錯誤回應格式:

{
  "error": {
    "code": "INVALID_INPUT",
    "message": "Email format is invalid",
    "details": [
      {
        "field": "email",
        "issue": "Must be a valid email address"
      }
    ],
    "timestamp": "2025-11-26T10:30:00Z",
    "path": "/api/users"
  }
}

檢查項目: - [ ] 錯誤訊息清晰且有幫助 - [ ] 提供錯誤代碼供查詢 - [ ] 敏感資訊不外洩 - [ ] 包含時間戳記和請求路徑

6. 安全性

  • 敏感操作需要認證 (JWT/OAuth)
  • 使用 HTTPS
  • 實作速率限制 (Rate Limiting)
  • 輸入驗證 (防止注入攻擊)
  • CORS 設定正確

參考文件

  • API 指南: #file:docs/api-guidelines.md
  • 現有 API 範例: #file:src/main/java/com/bpaas/creditcontrol/controller/CreditController.java
  • DTO 定義: #file:src/main/java/com/bpaas/creditcontrol/bean/dto/

輸出格式

請以表格形式列出所有發現的問題:

項目 當前實作 問題描述 建議改進 優先級
... ... ... ... 高/中/低

最後提供完整的改進後程式碼範例。

---

### 範例 3: 重構建議模板

```markdown
<!-- 檔案: .github/prompts/refactor-suggestion.prompt.md -->

# 程式碼重構建議

針對 #selection 提供重構建議,目標是提升程式碼的可維護性、可讀性和效能。

## 重構前分析

### 1. 識別 Code Smells
檢查以下常見問題:
- [ ] **Long Method** - 方法過長 (> 50 行)
- [ ] **Large Class** - 類別過大 (> 500 行)
- [ ] **Long Parameter List** - 參數過多 (> 5 個)
- [ ] **Duplicated Code** - 重複的程式碼
- [ ] **Dead Code** - 未使用的程式碼
- [ ] **Speculative Generality** - 過度設計
- [ ] **Feature Envy** - 過度依賴其他類別
- [ ] **Data Clumps** - 總是一起出現的資料群

### 2. 設計原則檢查
評估是否違反以下原則:
- [ ] **SOLID 原則**
  - Single Responsibility (單一職責)
  - Open/Closed (開放封閉)
  - Liskov Substitution (里氏替換)
  - Interface Segregation (介面隔離)
  - Dependency Inversion (依賴反轉)
- [ ] **DRY** - Don't Repeat Yourself
- [ ] **KISS** - Keep It Simple, Stupid
- [ ] **YAGNI** - You Aren't Gonna Need It

## 重構策略

### 步驟 1: 優先級排序
根據以下標準排序:
1. **影響範圍** - 影響多少其他程式碼
2. **風險程度** - 重構的風險高低
3. **效益評估** - 改善的程度

### 步驟 2: 選擇重構技巧
常用技巧:

| 技巧 | 適用情境 | 範例 |
|------|---------|------|
| Extract Method | 方法過長 | 將重複邏輯抽出為獨立方法 |
| Extract Class | 類別職責過多 | 將部分職責移至新類別 |
| Introduce Parameter Object | 參數過多 | 用物件封裝參數 |
| Replace Magic Number | 硬編碼常數 | 使用命名常數 |
| Replace Conditional with Polymorphism | 複雜條件判斷 | 用策略模式替換 |

### 步驟 3: 確保測試涵蓋
- [ ] 重構前執行所有測試
- [ ] 小步重構,每步執行測試
- [ ] 重構後測試應全數通過

## 輸出格式

### 1. 問題總結
發現 {N} 個需要重構的問題: - 嚴重: {count} 個 - 中等: {count} 個 - 輕微: {count} 個
### 2. 詳細建議
對每個問題提供:

**問題 1: [問題名稱]**
- **位置**: 第 X-Y 行
- **類型**: [Code Smell 類型]
- **影響**: [說明影響]
- **重構技巧**: [使用的技巧]
- **重構前程式碼**:
  ```java
  // 原始程式碼
  ```
- **重構後程式碼**:
  ```java
  // 改進後程式碼
  ```
- **改善點**:
  - 降低複雜度
  - 提升可讀性
  - 更容易測試

### 3. 執行計畫
```markdown
## Phase 1: 低風險重構 (建議先做)
1. [ ] 重構項目 A
2. [ ] 重構項目 B

## Phase 2: 中風險重構
1. [ ] 重構項目 C

## Phase 3: 高風險重構 (需要充分測試)
1. [ ] 重構項目 D

參考資料

  • 專案規範: #file:docs/coding-standards.md
  • 重構指南: #file:docs/refactoring-guide.md
  • 類似重構案例: #file:{REFERENCE_REFACTORING}

請用中文回答,並提供詳細的程式碼範例。

---

### 範例 4: 測試生成模板

```markdown
<!-- 檔案: .github/prompts/generate-tests.prompt.md -->

# 單元測試生成

為 #selection 生成完整的單元測試,確保測試品質和覆蓋率。

## 測試框架
- **Java**: JUnit 5 + Mockito
- **JavaScript**: Jest
- **Python**: pytest
- **C#**: xUnit

## 測試結構

### 1. 測試類別命名
```java
// 被測試類別: UserService.java
// 測試類別: UserServiceTest.java

public class UserServiceTest {
    // 測試方法
}

2. 測試方法命名規範

使用 Given_When_Then 格式:

@Test
void givenValidUser_whenCreateUser_thenReturnsCreatedUser() {
    // Arrange (Given)
    // Act (When)
    // Assert (Then)
}

或使用描述式命名:

@Test
void shouldThrowExceptionWhenEmailIsInvalid() {
    // ...
}

測試案例設計

1. 正常流程測試 (Happy Path)

測試預期的正常行為:

@Test
void shouldReturnUserWhenIdExists() {
    // Given
    Long userId = 1L;
    User expectedUser = new User(userId, "John");
    when(userRepository.findById(userId)).thenReturn(Optional.of(expectedUser));

    // When
    User actualUser = userService.getUserById(userId);

    // Then
    assertThat(actualUser).isEqualTo(expectedUser);
    verify(userRepository).findById(userId);
}

2. 邊界條件測試 (Boundary Cases)

測試極端值: - 空值 (null) - 空字串 ("") - 空集合 ([]) - 最大值/最小值 - 零值

@Test
void shouldHandleEmptyEmailGracefully() {
    assertThrows(ValidationException.class, 
        () -> userService.createUser("", "password"));
}

3. 異常情況測試 (Exception Cases)

測試錯誤處理:

@Test
void shouldThrowNotFoundExceptionWhenUserDoesNotExist() {
    // Given
    Long userId = 999L;
    when(userRepository.findById(userId)).thenReturn(Optional.empty());

    // When & Then
    assertThrows(NotFoundException.class, 
        () -> userService.getUserById(userId));
}

4. Mock 依賴

對外部依賴進行 Mock:

@ExtendWith(MockitoExtension.class)
class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @Mock
    private EmailService emailService;

    @InjectMocks
    private UserService userService;

    // 測試方法...
}

測試覆蓋目標

1. 行覆蓋率 (Line Coverage)

  • 目標: > 80%
  • 檢查: 所有程式碼行是否執行過

2. 分支覆蓋率 (Branch Coverage)

  • 目標: > 70%
  • 檢查: 所有 if/else 分支是否測試過

3. 方法覆蓋率 (Method Coverage)

  • 目標: 100% (所有 public 方法)
  • 檢查: 所有公開方法是否有測試

測試清單

針對 #selection 生成以下測試:

✅ 必須測試

  • 主要功能的正常流程
  • 所有公開方法
  • 錯誤處理邏輯
  • 輸入驗證

⚠️ 建議測試

  • 邊界條件
  • 併發情況 (如適用)
  • 效能測試 (如適用)
  • 整合測試 (如適用)

❌ 不需測試

  • 簡單的 getter/setter
  • 純資料類別 (DTO)
  • 第三方套件功能

輸出格式

1. 測試類別結構

package com.example.service;

import org.junit.jupiter.api.*;
import org.mockito.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class {ClassName}Test {

    @Mock
    private {Dependency1} dependency1;

    @InjectMocks
    private {ClassName} target;

    @BeforeEach
    void setUp() {
        // 初始化
    }

    @Nested
    @DisplayName("{Method1} 測試")
    class Method1Tests {
        // 相關測試方法分組
    }

    // 其他測試...
}

2. 測試報告

## 測試覆蓋率總結
- 行覆蓋率: 85%
- 分支覆蓋率: 78%
- 方法覆蓋率: 100%

## 生成的測試案例
1. ✅ {測試名稱 1} - 測試 {功能描述}
2. ✅ {測試名稱 2} - 測試 {邊界條件}
3. ✅ {測試名稱 3} - 測試 {異常處理}

## 未覆蓋的部分
- 第 45-50 行: {原因說明}

參考資料

  • 測試規範: #file:docs/testing-guidelines.md
  • 類似測試: #file:src/test/java/com/bpaas/creditcontrol/service/CreditServiceTest.java
  • Mock 範例: #file:{REFERENCE_TEST}

請生成完整的測試程式碼,包含所有必要的測試案例。

---

### 範例 5: 效能優化模板

```markdown
<!-- 檔案: .github/prompts/performance-optimization.prompt.md -->

# 效能優化分析

分析 #selection 的效能瓶頸並提供優化建議。

## 分析維度

### 1. 時間複雜度分析
識別演算法複雜度:

| 複雜度 | 說明 | 範例 |
|--------|------|------|
| O(1) | 常數時間 | HashMap.get() |
| O(log n) | 對數時間 | 二元搜尋 |
| O(n) | 線性時間 | 陣列遍歷 |
| O(n log n) | 線性對數 | 快速排序 |
| O(n²) | 平方時間 | 雙層迴圈 |
| O(2ⁿ) | 指數時間 | 遞迴費氏數列 |

**檢查項目:**
- [ ] 是否有巢狀迴圈?
- [ ] 是否可用更高效的資料結構?
- [ ] 是否可用快取減少重複計算?

### 2. 空間複雜度分析
評估記憶體使用:
- [ ] 是否有不必要的物件建立?
- [ ] 是否可重用現有物件?
- [ ] 是否有記憶體洩漏風險?
- [ ] 集合大小是否預先指定?

### 3. 資料庫查詢優化
SQL 效能檢查:

**N+1 查詢問題:**
```java
❌ 效能差:
List<User> users = userRepository.findAll();
for (User user : users) {
    List<Order> orders = orderRepository.findByUserId(user.getId()); // N 次查詢
}

✅ 優化:
List<User> users = userRepository.findAllWithOrders(); // 1 次查詢 (JOIN FETCH)

索引使用: - [ ] WHERE 條件欄位是否有索引? - [ ] JOIN 欄位是否有索引? - [ ] 是否使用了函式導致索引失效?

查詢數量: - [ ] 是否可以批次查詢? - [ ] 是否可以使用分頁? - [ ] 是否有不必要的 JOIN?

4. 網路請求優化

API 呼叫效能: - [ ] 是否可以併行處理? - [ ] 是否可以使用快取? - [ ] 是否需要所有資料欄位? - [ ] 是否可以批次請求?

5. 快取策略

評估快取使用:

適合快取的情境: - 讀多寫少的資料 - 計算成本高的結果 - 外部 API 回應

快取層級:

應用層快取 (Caffeine, Guava Cache)
    ↓ 未命中
分散式快取 (Redis, Memcached)
    ↓ 未命中
資料庫查詢

優化技巧

技巧 1: 使用適當的資料結構

 效能差: 使用 List 查找
List<String> items = new ArrayList<>();
boolean exists = items.contains("target"); // O(n)

 優化: 使用 Set
Set<String> items = new HashSet<>();
boolean exists = items.contains("target"); // O(1)

技巧 2: 延遲載入 (Lazy Loading)

 提前載入所有資料:
class Report {
    private List<BigData> data = loadAllData(); // 不管是否使用都載入
}

 延遲載入:
class Report {
    private Supplier<List<BigData>> dataSupplier = this::loadAllData;

    public List<BigData> getData() {
        return dataSupplier.get(); // 使用時才載入
    }
}

技巧 3: 平行處理

 循序處理:
List<Result> results = new ArrayList<>();
for (Task task : tasks) {
    results.add(process(task)); // 循序執行
}

 平行處理:
List<Result> results = tasks.parallelStream()
    .map(this::process)
    .collect(Collectors.toList());

技巧 4: 批次操作

 逐筆插入:
for (User user : users) {
    userRepository.save(user); // N 次資料庫往返
}

 批次插入:
userRepository.saveAll(users); // 1 次批次操作

技巧 5: 避免過早優化

"Premature optimization is the root of all evil" - Donald Knuth

優先順序: 1. 先確保程式碼正確 2. 測量實際效能瓶頸 (profiling) 3. 優化最慢的 20% 程式碼 4. 驗證優化效果

效能測試

基準測試 (Benchmark)

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public class PerformanceBenchmark {

    @Benchmark
    public void testOriginalMethod() {
        // 原始實作
    }

    @Benchmark
    public void testOptimizedMethod() {
        // 優化後實作
    }
}

效能指標

比較優化前後:

指標 優化前 優化後 改善
平均回應時間 500ms 50ms 10x
CPU 使用率 80% 30% 2.7x
記憶體用量 2GB 500MB 4x
吞吐量 (QPS) 100 800 8x

輸出格式

1. 問題識別

## 發現 {N} 個效能問題

### 嚴重問題 (P0)
- [ ] **問題 1**: {描述}
  - 位置: 第 X 行
  - 當前複雜度: O(n²)
  - 影響: 大資料量下回應時間超過 10 秒

### 中等問題 (P1)
- [ ] **問題 2**: {描述}

### 輕微問題 (P2)
- [ ] **問題 3**: {描述}

2. 優化方案

對每個問題提供:

問題 1: [標題]

原始程式碼:

// 效能差的程式碼

優化程式碼:

// 優化後的程式碼

改善分析: - 時間複雜度: O(n²) → O(n) - 預估改善: 100ms → 10ms (10x 提升) - 權衡取捨: 增加 100MB 記憶體換取速度

測試驗證:

// 效能測試程式碼

3. 執行建議

## 優化優先級

### 立即執行 (本週)
1. [ ] 修復 N+1 查詢問題 (預估改善 5x)
2. [ ] 新增資料庫索引 (預估改善 3x)

### 短期執行 (本月)
3. [ ] 實作快取機制
4. [ ] 優化演算法複雜度

### 長期規劃 (本季)
5. [ ] 考慮使用非同步處理
6. [ ] 評估微服務拆分

參考資料

  • 效能基準: #file:docs/performance-benchmarks.md
  • 優化案例: #file:{REFERENCE_OPTIMIZATION}
  • 架構文件: #file:docs/architecture.md

請提供詳細的優化程式碼和效能測試結果。

---

## 進階技巧

### 1. 組合式模板 (Compositional Templates)

**基礎模板:**
```markdown
<!-- base-checks.prompt.md -->
檢查基本程式碼品質:
- 命名規範
- 註解完整性
- 例外處理

組合模板:

<!-- comprehensive-review.prompt.md -->
執行全面審查:

## 步驟 1: 基本檢查
#prompt:base-checks

## 步驟 2: 安全性檢查
#prompt:security-audit

## 步驟 3: 效能檢查
#prompt:performance-check

## 最終報告
綜合以上所有檢查結果,提供優先級排序的改進清單。


2. 條件式模板 (Conditional Templates)

<!-- smart-review.prompt.md -->
根據檔案類型執行不同檢查:

**如果是 Controller:**
- 執行 #prompt:api-design-review

**如果是 Service:**
- 執行 #prompt:business-logic-review

**如果是 Repository:**
- 執行 #prompt:database-query-review

**如果是 Entity:**
- 執行 #prompt:data-model-review

請根據 #file:{TARGET_FILE} 的類型選擇對應的檢查。

3. 參數化模板 (Parameterized Templates)

<!-- custom-review.prompt.md -->
# 客製化審查

請審查 #file:{TARGET_FILE} 並聚焦於以下方面:

## 檢查項目 (請填寫)
1. {FOCUS_AREA_1}
2. {FOCUS_AREA_2}
3. {FOCUS_AREA_3}

## 比較基準 (可選)
- 參考實作: #file:{REFERENCE_FILE}
- 專案規範: #file:{STANDARD_FILE}

## 輸出格式
- 詳細程度: {DETAIL_LEVEL} (簡要/詳細/非常詳細)
- 語言: {LANGUAGE} (中文/英文)
- 包含程式碼範例: {INCLUDE_CODE} (是/否)

執行審查並依照指定格式回答。

使用範例:

#prompt:custom-review

{TARGET_FILE} = src/service/PaymentService.java
{FOCUS_AREA_1} = 交易安全性
{FOCUS_AREA_2} = 錯誤回滾機制
{FOCUS_AREA_3} = 日誌完整性
{DETAIL_LEVEL} = 詳細
{LANGUAGE} = 中文
{INCLUDE_CODE} = 是


4. 多階段模板 (Multi-Stage Templates)

<!-- feature-implementation.prompt.md -->
# 功能實作流程

## 階段 1: 規劃 (Planning)
#prompt:feature-planning

**暫停點:** 請使用者確認規劃後再繼續

## 階段 2: 實作 (Implementation)
根據確認的計畫,實作以下檔案:
1. Entity: #file:src/entity/{ENTITY_NAME}.java
2. Repository: #file:src/repository/{ENTITY_NAME}Repository.java
3. Service: #file:src/service/{ENTITY_NAME}Service.java
4. Controller: #file:src/controller/{ENTITY_NAME}Controller.java

每個檔案遵循 #prompt:code-generation-standard

**暫停點:** 請使用者檢視生成的程式碼

## 階段 3: 測試 (Testing)
#prompt:generate-tests

針對所有生成的 Service 和 Controller 建立測試

**暫停點:** 執行測試並報告結果

## 階段 4: 文件 (Documentation)
更新以下文件:
- API 文件: #file:docs/api/
- 架構圖: #file:docs/architecture.md
- CHANGELOG: #file:CHANGELOG.md

## 完成檢查清單
- [ ] 所有程式碼已生成
- [ ] 測試全數通過
- [ ] 文件已更新
- [ ] Code Review 已完成

5. 上下文感知模板 (Context-Aware Templates)

<!-- smart-code-explain.prompt.md -->
# 智慧程式碼說明

分析 #selection 並提供客製化說明:

## 自動偵測
1. **程式語言**: {自動偵測}
2. **程式碼類型**: {自動判斷: 函式/類別/配置/測試}
3. **複雜度**: {自動評估: 簡單/中等/複雜}

## 說明內容 (根據複雜度調整)

### 如果是簡單程式碼:
- 一句話總結功能
- 輸入/輸出說明
- 使用範例

### 如果是中等複雜度:
- 功能描述
- 邏輯流程圖
- 主要步驟分解
- 潛在問題提醒

### 如果是複雜程式碼:
- 詳細功能說明
- 完整流程圖 (Mermaid)
- 逐行邏輯說明
- 設計模式識別
- 優化建議
- 相關文件連結: #file:docs/

## 相關程式碼
自動搜尋並列出:
- 被此程式碼呼叫的方法
- 呼叫此程式碼的位置
- 類似的實作範例

請用{使用者偏好語言}回答。

最佳實踐總結

✅ DO (建議做法)

  1. 模組化設計

    base-java.prompt.md          (基礎 Java 檢查)
    ├── api-review.prompt.md     (引用基礎 + API 專屬)
    └── security-audit.prompt.md (引用基礎 + 安全專屬)
    

  2. 清晰的命名

    ✅ code-review-java-api.prompt.md
    ✅ generate-unit-tests.prompt.md
    ✅ refactor-suggestion-service-layer.prompt.md
    

  3. 包含範例輸出

    ## 預期輸出格式
    
    | 問題 | 位置 | 建議 | |------|------|------| | ... | ... | ... |
    
    

  4. 版本控制

    .github/prompts/
    ├── v1/
    │   └── legacy-review.prompt.md
    └── v2/
        └── enhanced-review.prompt.md (current)
    

  5. 團隊協作

  6. 在 PR 中說明新增的模板用途
  7. 定期 Review 和更新模板
  8. 收集團隊反饋優化模板

❌ DON'T (避免做法)

  1. 過度泛化

    ❌ 檢查所有可能的問題 (太籠統)
    ✅ 聚焦特定領域 (API 設計、安全性、效能等)
    

  2. 硬編碼路徑

    #file:src/main/java/com/example/MyService.java
    ✅ #file:{TARGET_SERVICE}  (使用參數)
    

  3. 忽略使用者體驗

    ❌ 直接輸出 50 個檢查項目
    ✅ 分類、優先級排序、提供摘要
    

  4. 缺乏文件

    每個模板應包含:
    - 用途說明
    - 使用範例
    - 預期輸出格式
    

  5. 忽略效能

    ❌ 一次引用 20 個大型檔案
    ✅ 只引用必要的關鍵檔案,使用摘要代替全文
    


實戰演練

練習 1: 建立您的第一個模板

任務: 為您的專案建立一個程式碼審查模板

步驟: 1. 識別團隊最常見的程式碼問題 2. 參考本文的 code-review.prompt.md 範例 3. 客製化檢查項目符合專案需求 4. 加入專案特定的參考檔案 5. 測試模板並收集反饋

範本結構:

# {專案名稱} 程式碼審查

## 專案特定檢查
- [ ] {專案規則 1}
- [ ] {專案規則 2}

## 通用檢查
#prompt:base-code-review

## 參考文件
- #file:{專案規範文件}
- #file:{架構設計文件}


練習 2: 組合多個模板

任務: 建立一個全面的功能交付檢查清單

組合:

<!-- feature-delivery-checklist.prompt.md -->

# 功能交付檢查清單

## 1. 程式碼品質
#prompt:code-review

## 2. 測試覆蓋
#prompt:test-coverage-check

## 3. 效能驗證
#prompt:performance-check

## 4. 安全性審核
#prompt:security-audit

## 5. 文件完整性
- [ ] API 文件已更新
- [ ] README 已更新
- [ ] CHANGELOG 已記錄

## 6. 部署準備
- [ ] 環境變數已設定
- [ ] 資料庫遷移腳本已準備
- [ ] 回滾計畫已確認

請逐項檢查並報告結果。


結論

.prompt.md 檔案是 AI 輔助開發中強大的工具,透過:

  1. 標準化 - 統一團隊的 AI 互動方式
  2. 可重用 - 避免重複撰寫相同提示詞
  3. 可組合 - 建構複雜的多步驟工作流程
  4. 可分享 - 透過版本控制傳播最佳實踐

關鍵成功因素: - 🎯 聚焦特定問題領域 - 📝 提供清晰的輸出格式 - 🔗 善用參考語法 (#file, #symbol, #prompt) - 🧪 持續測試和優化模板 - 👥 收集團隊反饋迭代改進

開始建立您的第一個 .prompt.md 模板,讓 AI 成為您團隊開發流程中不可或缺的一員!


附錄: 快速參考

參考語法速查表

語法 用途 範例
#file:path 引用檔案 #file:src/UserService.java
#symbol:Name 引用符號 #symbol:UserService.getUser
#prompt:name 引用模板 #prompt:code-review
#selection 當前選取 在編輯器中選取程式碼後使用

常用模板列表

模板 用途 檔案名稱
程式碼審查 全面檢查程式碼品質 code-review.prompt.md
API 審查 RESTful API 設計檢查 api-review.prompt.md
重構建議 識別並重構 Code Smells refactor.prompt.md
測試生成 自動生成單元測試 generate-tests.prompt.md
效能優化 找出效能瓶頸 performance.prompt.md
安全審核 檢查安全漏洞 security-audit.prompt.md

文件版本: 1.0
最後更新: 2025年11月26日
作者: GitHub Copilot
授權: MIT License