Kỹ Năng Prompting
Nghệ thuật giao tiếp với AI — kỹ năng quyết định 80% chất lượng output bạn nhận được. Học cách viết prompt như một chuyên gia.
🎯 Mục tiêu học tập
- Hiểu cấu trúc của một prompt hiệu quả
- Biết cách cung cấp đủ ngữ cảnh cho AI
- Thực hành iterative prompting để cải thiện output
- Nắm vững 5 pattern prompt mạnh nhất cho lập trình
Bài 3.1 — Cấu Trúc Một Prompt Tốt
Prompt là câu lệnh bạn gửi cho AI. Một prompt tốt không cần dài — nó cần đủ rõ ràng và đủ ngữ cảnh. Hầu hết mọi người viết prompt kém không phải vì lười, mà vì không biết cần cung cấp thông tin gì.
Framework C-T-F (Context — Task — Format)
AI cần biết bạn đang làm gì, ngôn ngữ/framework đang dùng, và level của bạn. Không có context = AI đoán mò.
VD: "Tôi đang xây dựng REST API bằng Express.js, đang dùng MongoDB và Mongoose..."
Mô tả cụ thể bạn muốn AI làm gì. Dùng động từ hành động: viết, tạo, sửa, giải thích, tối ưu...
VD: "...viết middleware xác thực JWT token, kiểm tra token trong header Authorization..."
Chỉ định output bạn muốn: có comment không, có tests không, có error handling không, ngắn hay đầy đủ.
VD: "...trả về 401 nếu token không hợp lệ, có comments giải thích, bao gồm error handling."
So sánh Prompt Kém vs Prompt Tốt
viết hàm login
Vấn đề: AI không biết ngôn ngữ nào, framework nào, authentication mechanism nào, error handling ra sao...
Tôi đang xây dựng REST API với Node.js/Express và MongoDB/Mongoose.
Viết async route handler cho POST /api/auth/login với:
- Input: { email, password } trong req.body
- Kiểm tra email tồn tại trong DB (User model có trường password đã hash bằng bcrypt)
- So sánh password, nếu đúng trả về JWT token (expires 7 ngày)
- Error cases: user không tồn tại (404), sai password (401), lỗi server (500)
- Dùng try/catch, có JSDoc comment
- Không trả về password trong response
Kết quả: AI tạo ra code production-ready với đầy đủ error handling, security, và documentation.
5 Thông Tin Luôn Cần Cung Cấp
- Ngôn ngữ và phiên bản
Python 3.12, Node.js 20, React 18... Tránh để AI đoán.
- Framework/Libraries đang dùng
Express, FastAPI, React, Next.js... AI có behavior khác nhau cho từng framework.
- Input và Output mong muốn
Function nhận tham số gì? Trả về gì? Cấu trúc data như thế nào?
- Constraints (Ràng buộc)
Không dùng thư viện bên ngoài? Phải tương thích với code cũ? Giới hạn performance?
- Error handling yêu cầu
Throw exception hay return error object? Log ra đâu? Edge cases cần xử lý?
Bài 3.2 — Prompting Trong VS Code với Copilot
Prompting trong VS Code khác với prompting trong ChatGPT — Copilot có thể "nhìn" vào code bạn đang viết, biết tên file, các hàm xung quanh, và cấu trúc project. Hãy tận dụng điều này.
Kỹ thuật 1: Comment-Driven Development
Viết comment mô tả những gì bạn muốn làm, rồi để Copilot generate code:
import requests
from bs4 import BeautifulSoup
# Hàm scrape tiêu đề bài viết từ một URL
# Input: url (string)
# Output: list[str] chứa tiêu đề các bài viết
# Xử lý exception nếu URL không hợp lệ hoặc request thất bại
def scrape_titles(url: str) -> list[str]:
# Copilot sẽ generate code ở đây
...
Kỹ thuật 2: Đặt tên hàm/biến gợi ý
Tên hàm rõ ràng giúp Copilot hiểu ý định của bạn mà không cần comment dài:
// Copilot hiểu ngay ý định từ tên hàm rõ ràng:
async function fetchUserByEmailAndValidatePassword(email, password) { ... }
function convertCelsiusToFahrenheit(celsius) { ... }
function parseMarkdownToHTML(markdownText) { ... }
function validateEmailFormat(email) { ... }
Kỹ thuật 3: Ví dụ Input/Output trong Comment
def group_by_category(items):
"""
Group items by their 'category' field.
Input:
items = [
{"name": "Apple", "category": "fruit"},
{"name": "Carrot", "category": "vegetable"},
{"name": "Banana", "category": "fruit"}
]
Output:
{
"fruit": [{"name": "Apple"}, {"name": "Banana"}],
"vegetable": [{"name": "Carrot"}]
}
"""
# Copilot nhìn vào ví dụ và tự viết code đúng ngay lập tức
Kỹ thuật 4: Copilot Chat với File Context
Trong Copilot Chat, bạn có thể tag file cụ thể:
# Tham chiếu file trong chat:
Nhìn vào file #userController.js, hàm createUser đang không validate email.
Thêm validation email và trả về lỗi 400 nếu email không hợp lệ.
# Hỏi về toàn bộ workspace:
@workspace Liệt kê tất cả các API endpoints trong project này
# Hỏi về code đang mở:
#editor Giải thích tại sao hàm này có thể gây memory leak
Bài 3.3 — Iterative Prompting
Ít khi AI cho ra kết quả hoàn hảo ngay lần đầu. Iterative prompting là kỹ năng cải thiện output qua nhiều lượt — đây là cách developer chuyên nghiệp thực sự làm việc với AI.
Cung cấp: ngôn ngữ/framework, yêu cầu cụ thể, constraints quan trọng. Không cần hoàn hảo — mục tiêu là có code để bắt đầu review.
Đọc từng dòng. Xác định: phần nào đúng, phần nào sai, phần nào thiếu. Đừng accept code mà chưa hiểu — test thủ công ít nhất happy path.
Nêu rõ vấn đề: "Hàm này trả về null khi input là 0, hãy fix" hoặc "Thêm error handling cho trường hợp X". Cụ thể hơn = output tốt hơn.
"Giải thích tại sao dùng useCallback ở đây" hoặc "Tại sao không dùng forEach mà dùng reduce?" — hiểu code trước khi dùng.
3-5 vòng là bình thường. Mỗi vòng bạn học thêm về cách AI hiểu vấn đề. Lưu lại prompts tốt để tái sử dụng cho lần sau.
Quy trình Iterative Prompting
Ví dụ thực tế: Viết hàm validate form
Viết hàm validate form đăng ký
→ AI tạo ra hàm cơ bản, nhưng thiếu nhiều cases. Bạn review và thấy cần thêm...
Tốt, nhưng hãy cải thiện hàm trên:
1. Thêm validate password phải có ít nhất 8 ký tự, 1 chữ hoa, 1 số
2. Validate tên phải từ 2-50 ký tự, không chứa số
3. Trả về object { isValid: bool, errors: { field: message } }
4. Viết bằng TypeScript với proper types
→ Tốt hơn nhiều. Nhưng bạn muốn unit tests...
Giờ viết unit tests cho hàm này bằng Jest.
Phải cover: valid case, invalid email, password quá ngắn,
password không có chữ hoa, tên quá dài.
Các câu follow-up hữu ích
Bài 3.4 — Prompt Patterns Nâng Cao
Đây là 5 "pattern" prompt mạnh nhất mà senior developer dùng hàng ngày. Học thuộc lòng các pattern này.
Pattern 1: Role Prompting
Gán cho AI một "vai trò" để nó respond với chuyên môn phù hợp:
Bạn là một senior Python developer với 10 năm kinh nghiệm,
chuyên về data processing và API design. Hãy review đoạn code
sau và chỉ ra vấn đề về performance, security, và code quality:
[code của bạn]
Pattern 2: Chain of Thought
Yêu cầu AI "nghĩ từng bước" trước khi đưa ra code — cho ra kết quả chính xác hơn với bài toán phức tạp:
Tôi cần thuật toán tìm đường đi ngắn nhất trong graph.
Trước khi viết code, hãy:
1. Phân tích bài toán và chọn thuật toán phù hợp
2. Giải thích tại sao chọn thuật toán đó
3. Mô tả các bước thực hiện bằng pseudo-code
4. Sau đó mới viết code Python đầy đủ
Pattern 3: Few-Shot Prompting
Cung cấp vài ví dụ input/output để AI học pattern và áp dụng:
Viết function theo pattern sau:
Ví dụ 1:
Input: "hello world"
Output: "Hello World" (capitalize mỗi từ)
Ví dụ 2:
Input: "foo bar baz"
Output: "Foo Bar Baz"
Giờ viết function JavaScript thực hiện việc này,
handle edge cases: chuỗi rỗng, nhiều spaces, ký tự đặc biệt
Pattern 4: Rubber Duck Debugging
Paste code bị bug và nhờ AI "đóng vai" người debug cùng bạn:
Code của tôi bị lỗi sau:
Error: TypeError: Cannot read properties of undefined (reading 'map')
at UserList (UserList.jsx:12)
Đây là code:
[paste code]
Bạn đóng vai một developer giúp tôi debug:
1. Giải thích lỗi này có nghĩa gì
2. Điểm đến dòng chính xác gây ra lỗi
3. Tại sao lỗi xảy ra
4. Cách fix và prevent trong tương lai
Pattern 5: Security Review
Hãy đóng vai một security engineer và review đoạn code sau.
Tìm tất cả các vấn đề bảo mật theo OWASP Top 10:
- SQL Injection
- XSS
- Insecure data exposure
- Missing authentication checks
- Hardcoded credentials
[paste code]
Với mỗi vấn đề tìm được: mô tả lỗ hổng, mức độ nghiêm trọng (High/Med/Low), và cách fix.
Khi dùng ChatGPT/Claude công khai: KHÔNG paste API keys, passwords, tokens, hoặc dữ liệu cá nhân của user vào prompt. Với Copilot trong VS Code thì an toàn hơn vì context không được share công khai.
Bài 3.5 — Thư Viện 10 Prompt Templates Thực Chiến
Dưới đây là 10 prompt templates được tối ưu cho các tình huống lập trình phổ biến nhất. Mỗi template có phần giải thích tại sao nó hoạt động tốt.
Template 1 — Tạo CRUD API Endpoints
Tôi đang dùng Express.js + Prisma + SQLite.
Tạo CRUD endpoints đầy đủ cho entity "Product" với các trường:
- name: string (bắt buộc, tối đa 100 ký tự)
- price: number (bắt buộc, lớn hơn 0)
- stock: number (mặc định 0)
- categoryId: number (FK tới Category)
Yêu cầu:
- Validation với express-validator
- Proper HTTP status codes (201, 200, 404, 400)
- Prisma query với relation (include Category)
- Ownership check: chỉ admin mới xóa được
Tổ chức code theo pattern: routes → controller → prisma query
Template 2 — Debug Lỗi Cụ Thể
Tôi gặp lỗi này khi chạy code:
[dán error message đầy đủ vào đây]
Stack trace:
[dán stack trace vào đây]
Context:
- Node.js 20, Express 4.18
- File lỗi: src/controllers/userController.js, dòng 47
- Tôi đang cố [mô tả ý định của bạn]
Code liên quan:
[dán đoạn code gây lỗi]
Hãy:
1. Giải thích tại sao lỗi xảy ra
2. Đưa ra fix cụ thể
3. Giải thích cách tránh lỗi này trong tương lai
Template 3 — Viết Unit Tests
Viết unit tests (Vitest) cho function này:
[dán function cần test]
Test cases cần cover:
- Happy path (input hợp lệ, output đúng)
- Edge cases: empty string, null, undefined, 0
- Error cases: invalid types, out of range values
Format: describe/it với tên test bằng tiếng Việt để dễ đọc.
Mỗi it() chỉ test một điều duy nhất.
Dùng expect().toBe() hoặc expect().toEqual() phù hợp.
Template 4 — Refactor Code
Refactor đoạn code này để:
1. Dễ đọc hơn (meaningful variable names, clear logic flow)
2. Hiệu quả hơn (giảm complexity, tránh redundant computation)
3. Theo best practices của JavaScript hiện đại (ES2022+)
Code hiện tại:
[dán code]
Ràng buộc:
- KHÔNG thay đổi function signature (input/output)
- KHÔNG thay đổi behavior, chỉ cải thiện cấu trúc
- Giữ compatibility với Node.js 18+
Sau khi refactor, giải thích ngắn gọn mỗi thay đổi bạn đã làm.
Template 5 — Viết README Chuyên Nghiệp
Viết README.md cho project này:
Project: [tên project]
Mô tả: [1 câu mô tả project làm gì]
Stack: [liệt kê tech stack]
Tính năng chính: [liệt kê 3-5 tính năng]
README cần có các section:
1. Badges (build status, npm version nếu có)
2. Screenshot hoặc demo GIF placeholder
3. Tính năng (Features) — dạng bullet points
4. Yêu cầu hệ thống (Prerequisites)
5. Cài đặt (Installation) — từng bước với code blocks
6. Cấu hình (Configuration) — giải thích các biến .env
7. Cách dùng (Usage) — ví dụ commands cụ thể
8. API Reference (nếu là backend)
9. Contributing
10. License
Viết bằng tiếng Anh, dùng Markdown chuẩn GitHub.
Template 6 — Tạo React Component
Tạo React component "DataTable" với các tính năng:
- Props: data (array of objects), columns (config array), loading (boolean)
- Tính năng: sort theo cột khi click header, filter theo input text, pagination (10 items/page)
- UI: Tailwind CSS, responsive, dark mode support
- State management: chỉ dùng useState và useMemo, không cần external library
- TypeScript: định nghĩa interfaces cho props
Columns config format:
{ key: string, label: string, sortable?: boolean, render?: (value, row) => ReactNode }
Ví dụ usage:
Template 7 — Explain Code
/explain
[dán code cần giải thích]
Giải thích theo cấu trúc:
1. Mục đích tổng thể của đoạn code này là gì?
2. Từng bước logic hoạt động như thế nào? (numbered list)
3. Các concept hoặc pattern đặc biệt được dùng (ví dụ: closure, recursion, design pattern)
4. Potential issues hoặc edge cases cần lưu ý
5. Ví dụ cụ thể với input/output
Giải thích bằng tiếng Việt, phù hợp cho người học 6 tháng kinh nghiệm.
Template 8 — Thêm TypeScript Types
Convert JavaScript này sang TypeScript với type safety đầy đủ:
[dán JS code]
Yêu cầu:
- Định nghĩa interfaces/types cho tất cả objects
- Dùng generic types nơi phù hợp
- Strict null checks (không dùng any trừ khi thực sự cần)
- Xử lý union types cho optional fields
- Return types explicit cho tất cả functions
- Tạo separate file types.ts nếu nhiều interfaces
Template 9 — Database Schema Design
Thiết kế database schema (Prisma) cho ứng dụng [mô tả app].
Các entities chính:
- [liệt kê entities, ví dụ: User, Post, Comment, Tag]
Business rules:
- [liệt kê các quy tắc, ví dụ: 1 user có nhiều posts, 1 post có nhiều tags]
- [ví dụ: user có thể like post, nhưng chỉ 1 lần]
Yêu cầu:
- Tối ưu cho query phổ biến: [liệt kê queries, ví dụ: lấy posts của user, đếm likes]
- Indexes phù hợp
- Cascade delete rules (khi xóa user → xóa posts)
- Timestamps (createdAt, updatedAt) cho tất cả models
Output: Prisma schema đầy đủ + giải thích design decisions
Template 10 — Performance Optimization
Phân tích và tối ưu performance cho đoạn code này:
[dán code]
Context:
- Function này được gọi [X] lần mỗi giây
- Dataset size: [X] items
- Bottleneck hiện tại: [mô tả vấn đề bạn thấy, ví dụ: slow render, memory leak]
Yêu cầu phân tích:
1. Tìm N+1 query problems nếu có
2. Tìm unnecessary re-renders (React)
3. Gợi ý caching strategy phù hợp
4. Đề xuất data structure tốt hơn nếu cần
Đưa ra code sau khi optimize cùng benchmark estimate (Big O notation).
Context càng cụ thể thì kết quả càng tốt. Luôn cung cấp: (1) tech stack đang dùng, (2) ràng buộc và yêu cầu, (3) format output mong muốn. Nếu kết quả chưa đúng, thêm "Lần này tập trung vào X, bỏ qua Y" thay vì viết lại từ đầu.
Bài 3.6 — 15 Prompt Mẫu Nâng Cao Cho VS Code Copilot
Đây là bộ sưu tập prompt chuyên sâu dành riêng cho VS Code + GitHub Copilot. Lưu lại và dùng hàng ngày — chúng sẽ tiết kiệm hàng giờ làm việc của bạn.
Cách dùng hiệu quả nhất: Mở VS Code → Ctrl+Shift+I (Copilot Chat) → paste prompt → thay phần trong ngoặc vuông bằng thông tin thực của bạn. Lưu những prompt hay vào file .vscode/prompts.md trong project để dùng lại.
Nhóm 1: Hiểu & Phân Tích Code
Hãy audit file [tên file] này và cho tôi báo cáo theo cấu trúc: ## 🔴 Lỗi nghiêm trọng (cần fix ngay) ## 🟡 Cải thiện nên làm (performance, readability) ## 🟢 Thực hành tốt (điểm cộng) ## 💡 Đề xuất refactor Tập trung vào: security, performance, error handling, và code maintainability. Tech stack: [Python/JS/TS + framework của bạn]
[Paste code cần giải thích] Giải thích code trên cho người chưa biết [ngôn ngữ], theo cấu trúc: 1. Mục đích tổng thể (1-2 câu) 2. Từng function/block làm gì (dùng ngôn ngữ đơn giản, không jargon) 3. Luồng dữ liệu: input → xử lý → output 4. Analogies thực tế (so sánh với điều gì trong đời thường) 5. Điều gì có thể xảy ra nếu code này bị xóa?
[Paste function/module cần kiểm tra] Giả vờ bạn là một QA engineer khắt khe. Tìm tất cả potential bugs: - Edge cases chưa xử lý (null, empty, negative, overflow) - Race conditions hoặc async issues - Memory leaks - Unhandled exceptions - Logic errors ẩn Với mỗi bug, show: vị trí + input gây bug + hậu quả + cách fix
Nhóm 2: Viết & Generate Code
Viết CRUD API hoàn chỉnh cho entity [tên — ví dụ: Product]:
Fields: [list fields với type — ví dụ: name: string, price: float, stock: int]
Framework: [FastAPI/Express/Django/etc]
Database: [PostgreSQL/MySQL/SQLite/MongoDB]
Yêu cầu:
- Input validation với error messages rõ ràng (tiếng Việt ok)
- Pagination cho GET all (default: page=1, limit=20)
- Filter/search theo [field cụ thể]
- Response format nhất quán: {success, data, message, errors}
- HTTP status codes đúng chuẩn
- Comments giải thích logic phức tạp
Bắt đầu với models/schemas, sau đó routes, sau đó service layer.
Viết test suite đầy đủ cho function/class sau: [Paste code cần test] Yêu cầu: - Framework: [pytest/jest/vitest/etc] - Happy path tests (input bình thường → output đúng) - Edge case tests (null, empty, boundary values, large input) - Error case tests (invalid input → exception/error đúng) - Mock external dependencies (API calls, DB, file system) - Test names mô tả rõ: "should_return_X_when_Y" - Coverage target: ≥ 90% Thêm conftest.py với fixtures dùng chung nếu cần.
Tạo Python script để tự động hoá task sau: [Mô tả chi tiết task — ví dụ: đọc tất cả file .csv trong folder, merge thành 1 file, xoá duplicate, sort theo cột date] Yêu cầu: - Chạy từ VS Code terminal: python script.py [args] - Dùng argparse cho command-line arguments - Logging rõ ràng (INFO, WARNING, ERROR) — ghi vào file + print console - Progress bar nếu xử lý nhiều items (dùng tqdm) - Dry-run mode: --dry-run để xem sẽ làm gì mà không thực thi - Error handling: tiếp tục xử lý items tiếp theo nếu 1 item bị lỗi - Report cuối: bao nhiêu thành công, bao nhiêu thất bại, danh sách lỗi Thêm requirements.txt và README ngắn về cách dùng.
Nhóm 3: Refactor & Tối Ưu
[Paste code cần refactor] Refactor code trên theo nguyên tắc Clean Code: 1. Đổi tên variables/functions thành tên mô tả rõ ý nghĩa 2. Extract magic numbers/strings thành named constants 3. Chia functions dài (>20 dòng) thành nhiều hàm nhỏ rõ ràng 4. Xoá code trùng lặp (DRY principle) 5. Thêm type hints (Python) / TypeScript types 6. Thêm docstrings cho public functions Giữ nguyên logic — chỉ cải thiện readability và maintainability. Sau khi refactor, giải thích 3 thay đổi quan trọng nhất và lý do.
[Paste code synchronous cần convert] Convert code trên sang async/await pattern: - Language: [Python với asyncio / JavaScript / TypeScript] - Xác định những operations có thể chạy parallel (Promise.all / asyncio.gather) - Giữ error handling đúng với async context - Thêm timeout cho I/O operations - Giải thích tại sao từng thay đổi giúp tăng performance Estimate improvement: so sánh thời gian sync vs async với [số lượng items] items.
Nhóm 4: DevOps & Deployment
Tạo Docker setup cho project [mô tả project ngắn gọn]: Tech stack: [ví dụ: Python FastAPI + PostgreSQL + Redis + Nginx] Environment: Development + Production Cần: - Dockerfile cho từng service (multi-stage build cho production) - docker-compose.yml cho development (với hot reload) - docker-compose.prod.yml cho production (với health checks) - .env.example với tất cả environment variables cần thiết - .dockerignore tối ưu - Makefile với các lệnh: make dev, make build, make deploy, make logs Thêm comments giải thích các lựa chọn quan trọng.
Tạo GitHub Actions workflow cho project [mô tả]: Trigger: push to main + pull requests Pipeline gồm: 1. Lint & type check ([ESLint+tsc / flake8+mypy]) 2. Unit tests với coverage report (fail nếu < [X]%) 3. Build Docker image 4. Security scan (dùng trivy hoặc snyk) 5. Deploy to [staging/production] (provider: [Vercel/Railway/AWS/DigitalOcean]) Cache node_modules / pip packages để tăng tốc. Notification Slack/Email khi deploy thành công hoặc fail. Secrets: LIST tất cả GitHub Secrets cần cấu hình.
Nhóm 5: Copilot Slash Commands Nâng Cao
| Command / Prompt | Dùng Khi Nào | Kết Quả |
|---|---|---|
/explain (chọn code trước) | Không hiểu đoạn code nào đó | Giải thích dòng từng dòng |
/fix (chọn code có lỗi) | Có lỗi compile/runtime | Sửa lỗi + giải thích nguyên nhân |
/tests (chọn function) | Cần test nhanh | Unit tests đầy đủ |
/doc (chọn function) | Cần docstring/JSDoc | Documentation chuẩn |
@workspace /explain structure | Mới join project lạ | Overview toàn bộ codebase |
@workspace how does [feature] work | Tìm hiểu feature trong project | Trace code path từ đầu đến cuối |
#file:path/to/file.ts thêm X vào Y | Edit file cụ thể với context | Code change với full context |
Bí quyết xây dựng Prompt Library cá nhân: Tạo file .vscode/my-prompts.md trong mỗi project. Mỗi khi có prompt tốt, lưu lại với format: Tên → Khi nào dùng → Prompt text → Ví dụ output. Sau 1 tháng bạn sẽ có bộ prompts tuỳ chỉnh cực kỳ hiệu quả cho project đó.
🎯 Thách Thức Tổng Hợp — Build Prompt Library:
- Chọn 3 prompt từ bài này phù hợp nhất với công việc hiện tại của bạn
- Thử từng prompt với code thực tế của bạn (không dùng ví dụ giả)
- Ghi chú: prompt nào cần điều chỉnh? Điều chỉnh thế nào để phù hợp hơn?
- Lưu phiên bản đã điều chỉnh vào
.vscode/my-prompts.md - Bonus: Tạo VS Code snippet từ prompt yêu thích nhất của bạn
- Prompt tốt nhất là prompt ngắn gọn, cụ thể. Tránh viết essay — AI xử lý tốt nhất khi bạn cho nó 1 task rõ ràng mỗi lần.
- Luôn cung cấp "stack context" trong prompt: "Tôi dùng React 18 + TypeScript + Vite" thay vì chỉ nói "viết component React".
- Khi AI trả lời sai, đừng vứt prompt — hãy refine nó. Thêm constraint hoặc ví dụ cụ thể. Iterative prompting là kỹ năng quan trọng nhất.
- Lưu những prompt tốt vào file snippets hoặc Notion/Obsidian. Theo thời gian bạn sẽ có bộ sưu tập prompt cá nhân cực kỳ giá trị.
Bài tập 3.1 — Viết Prompt Chuẩn
Viết lại các prompt kém sau thành prompt tốt theo framework C-T-F:
- Prompt kém 1: "tạo todo list" → Viết lại prompt đầy đủ
- Prompt kém 2: "sửa lỗi code" → Viết lại với context cụ thể
- Prompt kém 3: "làm login page đẹp" → Thêm framework, design requirements
- Thực hành: dùng prompt tốt nhất để tạo function validate form trong VS Code
- Thực hành: dùng iterative prompting thêm 3 follow-up để improve function đó
- Quá ngắn, thiếu ngữ cảnh: “viết login” → AI không biết framework, auth method, requirements. Kết quả: generic code không dùng được.
- Hỏi nhiều thứ cùng lúc: 1 prompt = 1 task. Prompt dài yêu cầu 10 thứ cùng lúc → AI thường bỏ sót hoặc làm không kỹ.
- Không iterate: Nhận output đầu tiên → copy thẳng vào code. Output đầu thường chỉ đạt 70-80% yêu cầu — 2-3 follow-up sẽ ra sản phẩm tốt hơn nhiều.
- Không verify context: Hỏi AI về API/library mà bạn không check phiên bản. AI có thể dùng syntax của phiên bản cũ (training cutoff).
- Phụ thuộc AI cho business logic: AI giỏi code patterns — nhưng logic nghiệp vụ đặc thù của dự án bạn phải tự nghĩ, AI chỉ implement.
- Output đầu tiên dùng được ≥80% mà không cần sửa nhiều
- AI không hỏi lại “bạn muốn dùng framework nào?” — vì context đã rõ
- Code AI generate có error handling, type hints, và docstring đúng yêu cầu
- Khi iterate, mỗi follow-up cải thiện rõ rệt — không phải AI viết lại từ đầu
- Bạn có thể giải thích lại cho người khác những gì đoạn prompt đó làm
🗒 Tóm Tắt Chương 3
- Framework C-T-F: Context (ngữ cảnh) — Task (nhiệm vụ) — Format (định dạng)
- Luôn cung cấp: ngôn ngữ, framework, input/output, constraints, error handling
- Kỹ thuật trong VS Code: comment-driven, đặt tên rõ, ví dụ I/O trong docstring
- Iterative prompting: prompt → review → refine → lặp lại đến khi đạt kết quả tốt
- 5 patterns nâng cao: Role, Chain of Thought, Few-shot, Rubber Duck, Security Review
- Bảo mật: KHÔNG paste credentials, PII, hoặc secrets vào AI chat công khai