.prompt.md 深度解說指南
目錄
核心概念
什麼是 .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 設計
**正確範例:**
**檢查項目:**
- [ ] 使用複數名詞 (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. 問題總結
### 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 (建議做法)
-
模組化設計
base-java.prompt.md (基礎 Java 檢查) ├── api-review.prompt.md (引用基礎 + API 專屬) └── security-audit.prompt.md (引用基礎 + 安全專屬) -
清晰的命名
✅ code-review-java-api.prompt.md ✅ generate-unit-tests.prompt.md ✅ refactor-suggestion-service-layer.prompt.md -
包含範例輸出
| 問題 | 位置 | 建議 | |------|------|------| | ... | ... | ... |## 預期輸出格式 -
版本控制
.github/prompts/ ├── v1/ │ └── legacy-review.prompt.md └── v2/ └── enhanced-review.prompt.md (current) -
團隊協作
- 在 PR 中說明新增的模板用途
- 定期 Review 和更新模板
- 收集團隊反饋優化模板
❌ DON'T (避免做法)
-
過度泛化
❌ 檢查所有可能的問題 (太籠統) ✅ 聚焦特定領域 (API 設計、安全性、效能等) -
硬編碼路徑
❌ #file:src/main/java/com/example/MyService.java ✅ #file:{TARGET_SERVICE} (使用參數) -
忽略使用者體驗
❌ 直接輸出 50 個檢查項目 ✅ 分類、優先級排序、提供摘要 -
缺乏文件
每個模板應包含: - 用途說明 - 使用範例 - 預期輸出格式 -
忽略效能
❌ 一次引用 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 輔助開發中強大的工具,透過:
- 標準化 - 統一團隊的 AI 互動方式
- 可重用 - 避免重複撰寫相同提示詞
- 可組合 - 建構複雜的多步驟工作流程
- 可分享 - 透過版本控制傳播最佳實踐
關鍵成功因素: - 🎯 聚焦特定問題領域 - 📝 提供清晰的輸出格式 - 🔗 善用參考語法 (#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