Prompt Engineering
Prompt Engineering là nghệ thuật và khoa học viết các instruction (prompt) hiệu quả để hướng dẫn AI thực hiện tác vụ như mong muốn.
📚 Bài viết liên quan:
- Generative AI - Hiểu cách AI hoạt động
- Context Engineering - Tối ưu toàn bộ context
- Context Window - Giới hạn tokens
Tại sao Prompt Engineering quan trọng?
Cùng một model, cùng một câu hỏi, nhưng cách hỏi khác nhau:
❌ "Viết code"
→ Output không rõ ràng, thiếu context
✅ "Viết một hàm Python tên `calculate_factorial` nhận parameter `n` (int),
return n! sử dụng đệ quy. Thêm type hints và docstring theo Google style."
→ Output chính xác, đầy đủ💡 Quy tắc vàng: Prompt càng cụ thể, output càng chất lượng.
Các kỹ thuật Prompt Engineering
1. Zero-Shot Prompting
Yêu cầu AI thực hiện tác vụ không cần ví dụ. Chỉ dựa vào instruction rõ ràng.
Prompt:
"Phân loại sentiment của câu sau thành 'positive', 'negative', hoặc 'neutral':
'Sản phẩm này thật tuyệt vời, tôi rất hài lòng!'"
Output: positiveKhi nào dùng:
- Tác vụ đơn giản, phổ biến
- Model đã được train trên task tương tự
- Cần response nhanh, không có thời gian chuẩn bị ví dụ
2. Few-Shot Prompting
Cung cấp vài ví dụ trước khi yêu cầu thực hiện task.
Prompt:
"Chuyển đổi tên tiếng Anh sang tiếng Việt:
John → Giôn
Michael → Mai-cồ
Elizabeth → Ê-li-za-bét
William →"
Output: Uy-li-amKhi nào dùng:
- Task phức tạp cần hiểu pattern
- Muốn kiểm soát format output
- Model chưa biết task này (ít phổ biến)
Mẹo: 3-5 ví dụ thường là đủ. Nhiều hơn có thể tốn tokens không cần thiết.
3. Chain-of-Thought (CoT)
Yêu cầu AI giải thích từng bước trước khi đưa ra kết luận.
❌ Zero-shot:
"A có 15 quả táo, cho B 6 quả, B cho lại A 3 quả. A có bao nhiêu quả?"
→ Model có thể tính sai
✅ Chain-of-Thought:
"A có 15 quả táo, cho B 6 quả, B cho lại A 3 quả.
Hãy tính từng bước và cho biết A có bao nhiêu quả?"
Output:
"Bước 1: A ban đầu có 15 quả
Bước 2: A cho B 6 quả → A còn 15 - 6 = 9 quả
Bước 3: B cho lại A 3 quả → A có 9 + 3 = 12 quả
Đáp án: A có 12 quả táo"Khi nào dùng:
- Bài toán logic, toán học
- Cần trace được quá trình suy luận
- Muốn verify từng bước
Biến thể:
- Zero-Shot CoT: Thêm “Let’s think step by step” vào cuối prompt
- Self-Consistency: Chạy nhiều lần, chọn kết quả xuất hiện nhiều nhất
4. Role Prompting
Yêu cầu AI đóng vai một nhân vật hoặc chuyên gia.
system = """Bạn là một Senior Python Developer với 10 năm kinh nghiệm.
Bạn ưu tiên:
- Clean code và type hints
- Docstrings theo Google style
- Unit tests với pytest
- Error handling đầy đủ"""
user = "Review đoạn code sau và đề xuất cải thiện: ..."Khi nào dùng:
- Cần expertise trong lĩnh vực cụ thể
- Muốn giọng điệu/style nhất quán
- Build chatbot với persona riêng
5. Structured Output
Yêu cầu AI trả về format cụ thể (JSON, Markdown, CSV…).
Prompt:
"Phân tích bài viết sau và trả về dưới dạng JSON với các trường:
- title: Tiêu đề bài viết
- summary: Tóm tắt 2-3 câu
- keywords: Array các từ khóa chính
- sentiment: positive/negative/neutral
Bài viết: [nội dung...]"
Output:
{
"title": "...",
"summary": "...",
"keywords": ["AI", "Machine Learning"],
"sentiment": "positive"
}Mẹo nâng cao: Nhiều API hiện đại hỗ trợ JSON Mode đảm bảo output luôn là JSON hợp lệ.
6. Self-Reflection / Critique
Yêu cầu AI tự đánh giá và cải thiện output.
Prompt (2 bước):
1. "Viết một đoạn văn giới thiệu về Python"
→ Output lần 1
2. "Hãy đọc lại đoạn văn trên và:
- Chỉ ra 3 điểm có thể cải thiện
- Viết lại version tốt hơn"
→ Output được cải thiệnKhi nào dùng:
- Cần output chất lượng cao
- Có thời gian cho multi-turn
- Writing tasks (blog, email, report)
Cấu trúc Prompt hiệu quả
Template cơ bản
[ROLE] (Tùy chọn)
Bạn là [vai trò] với [kinh nghiệm/đặc điểm].
[CONTEXT]
Bối cảnh: [mô tả tình huống]
[TASK]
Nhiệm vụ: [mô tả cụ thể task cần làm]
[FORMAT]
Output format: [định dạng mong muốn]
[CONSTRAINTS]
Lưu ý:
- [ràng buộc 1]
- [ràng buộc 2]
[EXAMPLES] (Tùy chọn)
Ví dụ:
Input: ...
Output: ...Ví dụ thực tế
Bạn là một chuyên gia SEO với 5 năm kinh nghiệm.
Bối cảnh: Tôi đang viết blog về lập trình Python cho người mới bắt đầu.
Nhiệm vụ: Viết meta description cho bài viết về "Python List Comprehension".
Output format:
- Độ dài: 150-160 ký tự
- Chứa keyword chính
- Có call-to-action
Lưu ý:
- Giọng văn thân thiện, dễ hiểu
- Tránh jargon kỹ thuật phức tạpSystem Prompt vs User Prompt
| Loại | Mục đích | Ví dụ |
|---|---|---|
| System Prompt | Thiết lập vai trò, quy tắc, context chung | ”Bạn là trợ lý lập trình Python…” |
| User Prompt | Yêu cầu cụ thể từng lần | ”Viết hàm sort list” |
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system="Bạn là trợ lý lập trình. Luôn trả lời bằng tiếng Việt. "
"Code phải có type hints và docstring.",
messages=[
{"role": "user", "content": "Viết hàm tính số Fibonacci thứ n"}
]
)Các lỗi thường gặp
❌ Prompt quá mơ hồ
Sai: "Giúp tôi với code"
Đúng: "Giúp tôi debug lỗi TypeError trong hàm calculate_sum ở dòng 15.
Đây là code: [paste code]"❌ Thiếu context
Sai: "Tại sao lỗi này xảy ra?"
Đúng: "Tôi đang build React app với TypeScript. Khi chạy `npm run build`
tôi gặp lỗi sau: [paste error]. Đây là file có vấn đề: [paste code]"❌ Yêu cầu quá nhiều cùng lúc
Sai: "Viết một ứng dụng web hoàn chỉnh với login, dashboard, API..."
Đúng: Chia thành các bước nhỏ:
1. "Thiết kế database schema cho user authentication"
2. "Viết API endpoint login với FastAPI"
3. "Viết React component cho form đăng nhập"❌ Không specify output format
Sai: "Liệt kê các framework Python"
Đúng: "Liệt kê 5 framework Python phổ biến nhất dưới dạng bảng với các cột:
Tên | Use case chính | Ưu điểm | Nhược điểm"Bài tập thực hành 🧪
Bài 1: So sánh Zero-shot vs Few-shot
- Mở Claude.ai hoặc Gemini
- Thử classify sentiment với Zero-shot
- Thử lại với 3 ví dụ (Few-shot)
- So sánh độ chính xác
Bài 2: Chain-of-Thought
Hỏi một bài toán logic:
"Trong một cuộc đua, bạn vượt qua người đứng thứ 2.
Bạn đang đứng thứ mấy?"Thử với và không có “Hãy suy nghĩ từng bước”.
Bài 3: Viết System Prompt
Tạo system prompt cho:
- Chatbot hỗ trợ khách hàng tiệm cafe
- Trợ lý viết email chuyên nghiệp
- Gia sư dạy toán cho học sinh cấp 2
Công cụ hỗ trợ
| Công cụ | Mô tả |
|---|---|
| PromptPerfect | Tự động optimize prompt |
| LangSmith | Debug và test prompts |
| Promptbase | Marketplace mua/bán prompts |
Tóm tắt
| Kỹ thuật | Mô tả | Dùng khi |
|---|---|---|
| Zero-Shot | Không cần ví dụ | Task đơn giản, phổ biến |
| Few-Shot | Cho 3-5 ví dụ | Cần kiểm soát format |
| Chain-of-Thought | Yêu cầu giải thích từng bước | Toán, logic |
| Role Prompting | Đóng vai chuyên gia | Cần expertise cụ thể |
| Structured Output | Yêu cầu format cụ thể | JSON, Markdown… |
Bài tiếp theo: Embedding - Vector representations cho text.