Bỏ qua để đến nội dung

✍️ 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:


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.


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

Khi 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ụ

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-am

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


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

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

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


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ện

Khi nào dùng:

  • Cần output chất lượng cao
  • Có thời gian cho multi-turn
  • Writing tasks (blog, email, report)

[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: ...
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ạp

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"}
]
)

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

  1. Mở Claude.ai hoặc Gemini
  2. Thử classify sentiment với Zero-shot
  3. Thử lại với 3 ví dụ (Few-shot)
  4. So sánh độ chính xác

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

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ụ Mô tả
PromptPerfect Tự động optimize prompt
LangSmith Debug và test prompts
Promptbase Marketplace mua/bán prompts

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.