
Prompt Engineering Cơ Bản: Kỹ thuật tối ưu prompt cho LLM hiệu quả
Prompt engineering là nghệ thuật viết hướng dẫn (prompt) để large language model (LLM) trả về kết quả chính xác, nhất quán và hữu ích. Mô hình như GPT-4, Claude, hay Llama 3 có khả năng tuyệt vời nhưng cũng dễ hiểu sai nếu hướng dẫn mơ hồ. Nắm vững prompt engineering giúp bạn tận dụng tối đa LLM cho coding, viết lách, phân tích dữ liệu, và hàng trăm tác vụ khác.

Nguyên tắc cốt lõi: Rõ ràng, Cụ thể, Có ngữ cảnh
Mọi prompt tốt đều tuân thủ ba nguyên tắc:
- Rõ ràng (Clarity): Lệnh đơn giản, không mơ hồ. Thay vì “viết code tốt hơn”, hãy dùng “refactor hàm này theo clean architecture, tách business logic ra service riêng”.
- Cụ thể (Specificity): Cung cấp format đầu ra mong muốn, ràng buộc, ví dụ. “Trả về JSON array với schema: [{id: int, name: string, price: float}]”.
- Có ngữ cảnh (Context): Cho model biết vai trò, đối tượng người đọc, mạch văn bản. “Bạn là senior iOS developer. Viết README cho team junior…”.
Kỹ thuật Few-shot Prompting
Few-shot cung cấp 2-5 ví dụ (shots) trong prompt để model học pattern. Hiệu quả cao cho tác vụ định dạng, phân loại, trích xuất.
Phân loại feedback khách hàng thành: BUG, FEATURE, QUESTION, PRAISE
Ví dụ:
Input: "App crash khi mở settings" → Output: BUG
Input: "Có thêm dark mode không?" → Output: FEATURE
Input: "Cách export data?" → Output: QUESTION
Input: "Tuyệt vời, update nhanh!" → Output: PRAISE
Input: "Tại sao sync không chạy background?" → Output:
Model sẽ tiếp tục pattern: QUESTION. Few-shot hoạt động tốt nhất khi ví dụ đa dạng, bao phủ edge case.
Chain-of-Thought (CoT) — Buộc model suy nghĩ từng bước
Thêm “Hãy suy nghĩ từng bước” hoặc “Reasoning step by step” vào prompt ép model phân rã bài toán phức tạp. CoT cải thiện đáng kể kết quả cho toán học, logic, code generation.
Viết hàm Python tính Fibonacci tối ưu. Hãy giải thích tư duy từng bước:
1. Xác định yêu cầu đầu vào/đầu ra
2. Chọn thuật toán (recursive vs iterative vs memoization)
3. Xử lý edge case (n < 0, n lớn)
4. Viết code với docstring
Kết quả: model sẽ đưa ra giải pháp có suy nghĩ rõ ràng, dễ verify, thay vì chỉ ném code.
System Prompt — Thiết lập nhân cách và quy tắc toàn cục
System prompt định hình hành vi mặc định của model trước khi user gửi message. Dùng cho:
- Gán vai trò: “Bạn là code reviewer nghiêm khắc, chỉ output diff format”.
- Đặt ràng buộc: “Không dùng thư viện ngoài stdlib. Code phải pass type checker mypy –strict”.
- Kiểu trả về: “Luôn trả về JSON valid, không markdown, không giải thích thêm”.
Khi dùng API, system prompt là message đầu tiên với role=”system”. Trong chat UI, nhiều platform cho set “Custom instructions” đóng vai trò tương tự.

RAG Prompting — Kết hợp retrieval để giảm hallucination
Khi cần kiến thức ngoài training data (tài liệu nội bộ, API mới, legal docs), dùng Retrieval-Augmented Generation. Prompt template:
Dựa trên context dưới đây, trả lời câu hỏi. Chỉ dùng thông tin từ context.
Nếu context không đủ, trả lời: "Không đủ thông tin".
Context:
{documents}
Câu hỏi: {question}
Trả lời:
RAG prompt quan trọng: ép model “chỉ dùng context”, “trích dẫn source”, “không bịa đặt”. Kết hợp với citation format như [doc1], [doc2] để verify.
Structured Output — Buộc JSON schema
Đừng để model tự do format. Chỉ định schema JSON và dùng tool/function calling nếu platform hỗ trợ (OpenAI function calling, Ollama structured output, Instructor library).
Trả về object JSON theo schema:
{
"type": "object",
"properties": {
"summary": {"type": "string"},
"key_points": {"type": "array", "items": {"type": "string"}},
"action_items": {"type": "array", "items": {"type": "string"}}
},
"required": ["summary", "key_points", "action_items"]
}
Kết hợp với Instructor (Python) hoặc Outlines để validate tự động tại runtime.
Prompt Patterns thường gặp cho Developer
| Tác vụ | Pattern mẫu |
|---|---|
| Code generation | “Viết {language} function {mô tả}. Yêu cầu: {constraints}. Test case: {input} → {expected}” |
| Code review | “Bạn là senior {lang} dev. Review diff này: {code}. Tìm: bug, performance, readability, security. Format: file:line – severity – mô tả – suggestion” |
| Debug assist | “Error: {log}. Code: {snippet}. Hãy: 1) Giải thích root cause 2) Đề xuất fix 3) Test case để verify fix” |
| Document generation | “Tạo README/OpenAPI spec cho {project}. Bao gồm: overview, install, usage, config, examples. Audience: {junior/senior/external}” |
Cạm bẫy thường gặp
- Over-prompting: Prompt quá dài làm giảm attention quality. Giữ prompt dưới 4k tokens khi có thể.
- Conflict instructions: “Viết ngắn gọn” nhưng “giải thích chi tiết” — model bế tắc. Ưu tiên một mục tiêu chính.
- Thiếu negative constraint: Không cấm điều gì (ví dụ: “không dùng regex”, “không import numpy”). Model thường dùng tool phổ biến trừ khi cấm rõ.
- Dựa vào knowledge cutoff: Model không biết thư viện mới, API version mới. Cung cấp docs hoặc dùng RAG.
Kết luận
Prompt engineering không phải “hack” hay “magic” — là kỹ thuật giao tiếp có cấu trúc với mô hình xác suất. Bắt đầu từ rõ ràng, cụ thể, có ngữ cảnh; áp dụng few-shot cho pattern, CoT cho logic, system prompt cho nhân cách, RAG cho kiến thức mới, structured output cho tích hợp hệ thống. Lặp lại, đo lường, tinh chỉnh — giống như refactor code. Tham khảo thêm: Prompting Guide, OpenAI Prompt Engineering Guide, và paper gốc Chain-of-Thought Prompting Elicits Reasoning in Large Language Models.
