AI 工具鏈整合
2025 年的開發者,如果不使用 AI 輔助工具,就像 2015 年的開發者不用 StackOverflow——你會落後整個世代。
這章教你如何系統性地整合 AI 工具到你的開發流程中。
🔥 Vibe Prompt
「幫我建立一個 AI 輔助開發工作流:GitHub Copilot 的最佳提示技巧、AI 程式碼審查 Checklist、用 AI 自動產生測試案例、以及整合 ChatGPT/Claude 到日常開發中的 SOP。」
GitHub Copilot 進階用法
不只是自動補全
// 寫註釋讓 Copilot 理解你的意圖
// 輸入:
// Function to validate email format and check against blocked domains
// Returns { valid: boolean, reason: string }
// Copilot 會自動產生:
function validateEmail(email: string): { valid: boolean; reason: string } {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
return { valid: false, reason: "Invalid email format" };
}
const blockedDomains = ["tempmail.com", "throwaway.com"];
const domain = email.split("@")[1];
if (blockedDomains.includes(domain)) {
return { valid: false, reason: "Domain is blocked" };
}
return { valid: true, reason: "OK" };
}
提示工程(Prompt Engineering)技巧
| 技巧 | 範例 |
|------|------|
| 指定語言與框架 | // Python FastAPI route with Pydantic validation |
| 提供輸入輸出範例 | // Input: [1,2,3,4,5] → Output: [2,4,6,8,10] |
| 分解複雜任務 | // Step 1: Parse CSV. Step 2: Validate data. Step 3: Insert to DB |
| 指定設計模式 | // Singleton pattern for database connection |
| 給錯誤範例要求修正 | // Fix: this code has a race condition |
Copilot 實戰場景
# 場景 1:寫測試
# pytest test for the validate_email function above
def test_validate_email():
assert validateEmail("user@example.com") == {"valid": True, "reason": "OK"}
assert validateEmail("invalid") == {"valid": False, "reason": "Invalid email format"}
assert validateEmail("user@tempmail.com") == {"valid": False, "reason": "Domain is blocked"}
# 場景 2:寫 API 文件
# Generate OpenAPI documentation for FastAPI app
"""
/api/v1/users:
get:
summary: List users
parameters:
- name: page
in: query
schema: integer
- name: limit
in: query
schema: integer
responses:
200:
description: User list
"""
# 場景 3:寫 SQL 查詢
# Find top 10 users by order amount in the last 30 days
query = """
SELECT u.id, u.name, SUM(o.amount) as total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.created_at >= NOW() - INTERVAL '30 days'
GROUP BY u.id, u.name
ORDER BY total DESC
LIMIT 10
"""
AI 程式碼審查
建立 AI 審查 Checklist:
| 類別 | 檢查項目 | |------|---------| | 安全性 | SQL injection、XSS、CSRF、敏感資訊洩露 | | 效能 | N+1 query、不必要的迴圈、記憶體洩漏 | | 可讀性 | 命名是否清楚、函數是否太長、註釋是否充分 | | 錯誤處理 | try-catch 是否正確、錯誤訊息是否有幫助 | | 型別安全 | TypeScript 型別是否正確、Python type hints | | 測試覆蓋 | 邊界案例、錯誤路徑、整合測試 |
# AI 審查範例:這程式有什麼問題?
def get_user_data(user_id):
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
# ❌ SQL injection 風險
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
data = cursor.fetchone()
conn.close()
return data
# ✅ AI 修正後
from contextlib import closing
def get_user_data(user_id: int) -> dict | None:
with closing(sqlite3.connect("users.db")) as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
row = cursor.fetchone()
if row:
return {"id": row[0], "name": row[1], "email": row[2]}
return None
AI 自動化測試生成
# 給 Copilot 一個函數,讓它自動產生測試
# Function to test:
def calculate_discount(price: float, tier: str) -> float:
"""Calculate discount based on membership tier."""
discounts = {"basic": 0, "premium": 0.2, "vip": 0.35}
discount_rate = discounts.get(tier, 0)
return price * (1 - discount_rate)
# Copilot 產生的測試:
def test_calculate_discount():
# 正常情況
assert calculate_discount(100, "basic") == 100
assert calculate_discount(100, "premium") == 80
assert calculate_discount(100, "vip") == 65
# 邊界情況
assert calculate_discount(0, "vip") == 0
assert calculate_discount(100, "unknown") == 100
# 浮點數
assert abs(calculate_discount(99.99, "premium") - 79.992) < 0.001
建立你的 AI 開發工作流
每日開發 SOP:
1. 早上:用 AI 回顧 PR(貼 diff 給 ChatGPT 審查)
2. 編寫:Copilot 即時補全程式碼
3. 除錯:將錯誤訊息貼給 AI,獲取解決方案
4. 測試:AI 自動產生測試案例
5. 文件:AI 產生 API 文件與 README
6. 重構:AI 建議重構方案
7. 部署:AI 協助撰寫 Dockerfile 與 CI/CD
實戰練習
💡 Vibe Coding 練習:請 AI 幫你:
- 建立一個 PR Review Checklist 模板
- 建立一個 AI 提示詞庫(prompt library)涵蓋常見開發場景
- 建立一個自動化工具,將錯誤訊息餵給 AI 並回傳解決方案
- 建立一個測試生成器,根據函數簽名自動產生測試框架