簡介
人工智慧程式碼生成改變了開發人員的工作方式。但「產生程式碼」和「產生好的程式碼」是兩件截然不同的事情。快速的程式碼工程需要特異性——您必須清楚說明:語言、框架、風格、約束、邊緣情況。
比較:
- 提示不佳:「編寫登入 API」→ 程式碼可以運作,但缺乏驗證,沒有錯誤處理,硬編碼的秘密
- 良好的提示:「編寫 FastAPI 登入端點、bcrypt 密碼、JWT 令牌、速率限制、輸入驗證、正確的錯誤代碼」→ 生產就緒程式碼
1. 程式碼生成-基本技術
1.1 範本提示產生程式碼
= ROLE =
Bạn là senior {language} developer, expert về {framework}.
= TASK =
Viết {loại code}: {mô tả chức năng}
= REQUIREMENTS =
- Language: {language} {version}
- Framework: {framework} {version}
- Style: {coding style/conventions}
- Error handling: {cách xử lý lỗi}
- Security: {yêu cầu bảo mật}
= CONSTRAINTS =
- Không dùng {thư viện/pattern cấm}
- Performance: {yêu cầu}
- Compatibility: {platform/browser}
= OUTPUT =
- Code với comments tiếng Việt
- Type annotations (nếu support)
- Docstring cho public functions
1.2 範例:API 端點
= ROLE =
Bạn là senior Python developer, expert FastAPI + SQLAlchemy.
= TASK =
Viết CRUD API cho User management.
= REQUIREMENTS =
- Python 3.12, FastAPI, SQLAlchemy 2.0, Pydantic v2
- PostgreSQL database
- Bcrypt cho password hashing
- JWT authentication
- Input validation (email format, password strength)
- Proper HTTP status codes (201, 400, 401, 404, 409)
- Pagination cho list endpoint
= CONSTRAINTS =
- Không dùng Flask hoặc Django
- async/await throughout
- Không hard-code secrets (dùng env vars)
= OUTPUT =
- models.py (SQLAlchemy models)
- schemas.py (Pydantic schemas)
- routes.py (API endpoints)
- Mỗi file kèm docstring và comments
💡 練習 1: 使用上述範本為另一個實體(產品、訂單等)產生 CRUD API。比較刪除 CONSTRAINTS 部分與完全保留它時的結果。
2. 程式碼審查
2.1 程式碼審查提示
Review code sau theo checklist:
1. **Security**: SQL injection, XSS, CSRF, secrets exposure?
2. **Performance**: N+1 queries, unnecessary loops, memory leaks?
3. **Error handling**: Có try-catch? Có log errors? Có graceful degradation?
4. **Best practices**: DRY, SOLID, naming conventions?
5. **Edge cases**: Null/empty input? Concurrent access? Large data?
Cho mỗi issue, cung cấp:
- Severity: 🔴 Critical | 🟡 Warning | 🟢 Info
- Dòng code: chỉ ra dòng cụ thể
- Vấn đề: mô tả ngắn
- Fix: code đã sửa
Code cần review:
```{語言}
{在此處貼上代碼}
```
2.2 輸出範例
🔴 Critical - Dòng 15: SQL Injection
Problem: f"SELECT * FROM users WHERE name = '{name}'"
Fix: cursor.execute("SELECT * FROM users WHERE name = ?", (name,))
🟡 Warning - Dòng 28: Missing error handling
Problem: file = open(path) — không có try/except
Fix: Wrap trong try/except, handle FileNotFoundError
🟢 Info - Dòng 5: Naming convention
Problem: def getData() — nên dùng snake_case
Fix: def get_data()
3. 偵錯
3.1 有效的偵錯提示
= CONTEXT =
Language: {language}
Framework: {framework}
File: {filename}
= ERROR =
{貼上錯誤訊息/回溯}
= CODE =
```{語言}
{貼上相關代碼}
```
= EXPECTED BEHAVIOR =
{mô tả behavior mong muốn}
= ACTUAL BEHAVIOR =
{mô tả behavior thực tế}
= WHAT I'VE TRIED =
- {đã thử gì}
- {kết quả}
Hãy:
1. Giải thích nguyên nhân root cause
2. Cung cấp fix cụ thể (code)
3. Giải thích tại sao fix này hoạt động
4. Đề xuất cách phòng tránh trong tương lai
3.2 用人工智慧進行橡皮鴨調試
Tôi đang debug: {mô tả vấn đề}
Hãy hỏi tôi 5 câu hỏi chẩn đoán để thu hẹp nguyên nhân:
1. Câu hỏi về input/data
2. Câu hỏi về environment
3. Câu hỏi về timing/sequence
4. Câu hỏi về dependencies
5. Câu hỏi về edge cases
💡 練習 2: 故意在程式碼中建立錯誤(例如相差一、競爭條件)。使用調試提示讓AI找到它。 AI檢測對了嗎?
4. 測試生成
4.1 提示產生測試
= CODE UNDER TEST =
```{語言}
{貼上函數/類別}
```
= TESTING REQUIREMENTS =
- Framework: pytest / jest / JUnit
- Coverage: aim for >90%
- Types of tests:
✅ Happy path (normal cases)
✅ Edge cases (empty, null, boundary values)
✅ Error cases (invalid input, exceptions)
✅ Integration tests (nếu applicable)
= OUTPUT =
Cho mỗi test:
- Test name mô tả rõ scenario (test_should_return_error_when_email_invalid)
- Arrange-Act-Assert pattern
- Comments giải thích test purpose
4.2 範例
"""Input: function cần test"""
def calculate_discount(price: float, membership: str) -> float:
if price <= 0:
raise ValueError("Price must be positive")
discounts = {"gold": 0.2, "silver": 0.1, "bronze": 0.05}
discount = discounts.get(membership, 0)
return round(price * (1 - discount), 2)
Sinh pytest tests cho function calculate_discount ở trên.
Bao gồm:
- Normal: gold, silver, bronze members
- Edge: price = 0.01, price = 999999
- Error: price = 0, price = -1, membership = None
- Boundary: discount kết quả = 0
5. 重構
5.1 提示重構
Refactor code sau, áp dụng:
1. **DRY** — loại bỏ code trùng lặp
2. **Single Responsibility** — mỗi function 1 nhiệm vụ
3. **Naming** — đặt tên rõ nghĩa
4. **Simplify** — giảm complexity (if/else lồng nhau)
5. **Type safety** — thêm type annotations
Giữ nguyên behavior (không thay đổi logic).
Cho mỗi thay đổi, giải thích:
- BEFORE: đoạn code cũ
- AFTER: đoạn code mới
- WHY: lý do refactor
```{語言}
{貼上程式碼}
```
5.2 遷移提示
Migrate code từ {old_framework} sang {new_framework}:
Constraints:
- Giữ nguyên tất cả functionality
- Cập nhật imports và API calls
- Handle breaking changes giữa 2 versions
- Liệt kê deprecated features cần thay thế
```{語言}
{貼上舊代碼}
```
6. 文檔生成
6.1 提示產生文檔
Viết documentation cho code sau:
1. **Overview:** Mô tả module/class/function làm gì (2-3 câu)
2. **Parameters:** Tên, type, description, default value
3. **Returns:** Type, description
4. **Raises:** Exceptions có thể raise
5. **Examples:** 2-3 ví dụ sử dụng (simple → complex)
6. **Notes:** Edge cases, performance considerations
Format: Google-style docstring / JSDoc
```{語言}
{貼上程式碼}
```
💡练习 3: 从真实项目中获取一个复杂的函数(无文档)。使用提示產生文件。文件準確嗎?
總結
| 使用案例 | 關鍵提示要素 |
|---|---|
| 生成 | 角色、语言、框架、约束、安全 |
| 评论 | 清单、严重性级别、修复建议 |
| 调试 | 错误、代码、预期与实际、尝试过什么 |
| 测试 | 覆盖目标、测试类型、命名约定 |
| 重构 | 原则(DRY、SRP),保持行为 |
| 文档 | 格式、参数、示例、边缘情况 |
一般練習
- ✅ 完成3個小練習(1,2,3)
- 完整周期: 生成代码→审查→修复问题→测试→文档。一切都透過及時的工程設計。實現程式碼覆蓋率 > 80%。
- 提示库: 创建一组 5 个提示模板,用于:生成、审阅、调试、测试、文档。儲存為可重複使用。在 3 個不同的項目上進行了測試。
- 比较: 比较代码生成质量:GPT-4o vs Claude vs Gemini。在同样的提示下,哪种模型生成的代码最好?
下一篇文章: 数据分析和商业写作提示——使用人工智能分析数据、编写报告、创建仪表板见解。