✍️ 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?
Phần tiêu đề “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
Phần tiêu đề “Các kỹ thuật Prompt Engineering”1. Zero-Shot Prompting
Phần tiêu đề “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
Phần tiêu đề “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ônMichael → 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)
Phần tiêu đề “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
Phần tiêu đề “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
Phần tiêu đề “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
Phần tiêu đề “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ả
Phần tiêu đề “Cấu trúc Prompt hiệu quả”Template cơ bản
Phần tiêu đề “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ế
Phần tiêu đề “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
Phần tiêu đề “System 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
Phần tiêu đề “Các lỗi thường gặp”❌ Prompt quá mơ hồ
Phần tiêu đề “❌ 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
Phần tiêu đề “❌ 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
Phần tiêu đề “❌ 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
Phần tiêu đề “❌ 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 🧪
Phần tiêu đề “Bài tập thực hành 🧪”Bài 1: So sánh Zero-shot vs Few-shot
Phần tiêu đề “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
Phần tiêu đề “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
Phần tiêu đề “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ợ
Phần tiêu đề “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
Phần tiêu đề “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.