📗 Phần 1 · Nền Tảng · Chương 3

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.

4 giờ học
📝 4 bài học
🎯 15+ ví dụ thực tế
📊 Mức độ: Cơ bản → Trung cấp

🎯 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
📐 1. Cấu Trúc Prompt
Framework C-T-F & 5 yếu tố cần có
🖥 2. Prompting VS Code
Copilot inline, chat, slash commands
🔄 3. Iterative Prompting
Cải thiện output qua follow-ups
🎨 4. Prompt Patterns
5 pattern mạnh nhất cho coding
📚 5. Templates Thực Chiến
10 prompt templates copy & dùng ngay
⚡ 6. Prompts Nâng Cao
15 prompt mẫu cho VS Code Copilot
1

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)

C — Context (Ngữ cảnh)

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..."

T — Task (Nhiệm vụ)

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..."

F — Format (Định dạng)

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

❌ PROMPT KÉM
text
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...

✅ PROMPT TỐT
text
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

  1. Ngôn ngữ và phiên bản

    Python 3.12, Node.js 20, React 18... Tránh để AI đoán.

  2. Framework/Libraries đang dùng

    Express, FastAPI, React, Next.js... AI có behavior khác nhau cho từng framework.

  3. Input và Output mong muốn

    Function nhận tham số gì? Trả về gì? Cấu trúc data như thế nào?

  4. 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?

  5. Error handling yêu cầu

    Throw exception hay return error object? Log ra đâu? Edge cases cần xử lý?


2

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:

python
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:

javascript
// 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

python
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ể:

text — Copilot Chat
# 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

3

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.

1
Prompt ban đầu — context rõ ràng

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.

2
Review output kỹ

Đọ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.

3
Tinh chỉnh với follow-up cụ thể

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.

4
Yêu cầu giải thích khi chưa hiểu

"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.

5
Lặp lại cho đến khi đạt

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

1. Prompt ban đầu
2. AI generate
3. Review & test
4. Refine prompt
5. Kết quả tốt ✓

Ví dụ thực tế: Viết hàm validate form

🔵 LƯỢT 1 — Prompt đơn giản
text
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...

🟢 LƯỢT 2 — Refine với specifics
text
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...

🔵 LƯỢT 3 — Thêm tests
text
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

"Giải thích dòng X trong code trên"
Khi gặp đoạn code không hiểu — AI giải thích chi tiết.
"Có cách nào tốt hơn không?"
AI sẽ đề xuất alternative approach hoặc optimization.
"Refactor code trên để cleaner"
AI sẽ tái cấu trúc code mà không thay đổi logic.
"Edge cases nào tôi chưa xử lý?"
AI liệt kê các trường hợp đặc biệt bạn có thể bỏ sót.
"Viết lại theo pattern [tên pattern]"
VD: "Viết lại theo Observer pattern" hay "dùng async/await thay Promise".
"Tối ưu hiệu năng của hàm trên"
AI phân tích bottleneck và đề xuất cải tiến performance.

4

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:

text
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:

text
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:

text
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:

text
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

text
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.
⚠️
Không share thông tin nhạy cảm với AI

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.


5

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

prompt — Dùng trong Copilot Chat
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ể

prompt — Debug error
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

prompt — Generate 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

prompt — Refactor
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

prompt — README generation
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

prompt — 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

prompt — Code explanation
/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

prompt — TypeScript migration
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

prompt — Database 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

prompt — Optimize performance
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).
💡
Bí quyết dùng prompt hiệu quả:

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.

6

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

Prompt: Audit Code Toàn Diện
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]
Prompt: Giải Thích Code Cho Người Mới
[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?
Prompt: Tìm Bug Trước Khi Chạy
[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

Prompt: Tạo CRUD Complete với Validation
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.
Prompt: Generate Toàn Bộ Tests
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.
Prompt: Viết Script Automation Hoàn Chỉnh
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

Prompt: Refactor Thành Clean Code
[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.
Prompt: Migrate Sang Async/Await
[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

Prompt: Tạo Docker Setup Hoàn Chỉnh
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.
Prompt: GitHub Actions CI/CD Pipeline
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/runtimeSửa lỗi + giải thích nguyên nhân
/tests (chọn function)Cần test nhanhUnit tests đầy đủ
/doc (chọn function)Cần docstring/JSDocDocumentation chuẩn
@workspace /explain structureMới join project lạOverview toàn bộ codebase
@workspace how does [feature] workTìm hiểu feature trong projectTrace code path từ đầu đến cuối
#file:path/to/file.ts thêm X vào YEdit file cụ thể với contextCode 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:

  1. 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
  2. Thử từng prompt với code thực tế của bạn (không dùng ví dụ giả)
  3. Ghi chú: prompt nào cần điều chỉnh? Điều chỉnh thế nào để phù hợp hơn?
  4. Lưu phiên bản đã điều chỉnh vào .vscode/my-prompts.md
  5. Bonus: Tạo VS Code snippet từ prompt yêu thích nhất của bạn
💡 Mẹo từ ThanhDoIT
  • 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 Thực Hành

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 đó
⚠️ 5 Lỗi Prompting Phổ Biến Nhất Cần Tránh
  • 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.
✅ Dấu Hiệu Bạn Đã Prompt Tốt
  • 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
Zalo: 0898 619 966 Z Gọi: 0898 619 966