Nguyên tắc prompt bám cơ chế: cấu trúc, ví dụ, tách suy luận
Không sưu tầm mẹo câu chữ. Ba nguyên tắc bền vì bám cơ chế model: cấu trúc rõ để attention bám vào, ví dụ đúng dạng, tách bước suy luận.
TL;DR: Prompt tốt không phải sưu tầm câu thần chú — mẹo đó rot theo phiên bản model vì bám quirk huấn luyện, không bám cơ chế. Ba nguyên tắc bền vì bám đúng cơ chế: (1) cấu trúc rõ — vai trò, delimiter, tách instruction/data — cho attention chỗ bám; (2) ví dụ đúng dạng (few-shot) — model bắt chước pattern trong context, ví dụ sai dạng hại hơn không ví dụ nào; (3) tách bước suy luận trước kết luận — token sinh ra là context cho token sau, cho model chỗ tự sửa sai. Cả ba suy ra từ cách model hoạt động, nên bền qua nhiều thế hệ model.
1. Một prompt tưởng ổn — đoán trước khi xem vì sao sai
Bạn viết script kiểm thử cho một luồng giao dịch ở môi trường UAT ngân hàng: trích 4 trường (transaction_id, amount, status, timestamp) từ email thông báo dạng text để đưa vào bộ so khớp tự động. Bạn viết nhanh một prompt gọi LLM làm việc này:
Doc email giao dich duoi day va cho toi biet moi thong tin lien quan, giao dich thanh cong khong, so tien bao nhieu. Day la moi truong UAT nen du lieu khong phai that. Email: "Kinh gui quy khach, giao dich GD001238 da duoc xu ly luc 2026-07-20 14:32. So tien: 1.500.000 VND cho giao dich chinh, cong them phi 15.000 VND. Trang thai: THANH CONG." Tra loi ngan gon giup toi.Trước khi đọc phần giải thích ở mục 2, hãy đoán: nếu chạy prompt trên 50 lần với 50 email khác nhau, kết quả nào không ổn định giữa các lần chạy? Viết ra dự đoán của bạn rồi so với phần cơ chế bên dưới.
Analogy — giao việc cho thực tập sinh mới
Giao brief mơ hồ ("làm báo cáo giao dịch tuần này đi") cho một thực tập sinh mới ra kết quả may rủi: không mẫu, không ví dụ, không yêu cầu trình bày số liệu trước khi chốt. Giao brief có cấu trúc — mục cần có, một báo cáo mẫu đúng định dạng, yêu cầu liệt kê số liệu trước khi kết luận — ra kết quả ổn định hơn hẳn dù cùng một người làm. Ba nguyên tắc ở mục 2 map đúng ba khác biệt đó:
| Đời thường | Prompt |
|---|---|
| Tách rõ việc cần làm với dữ liệu đính kèm | Cấu trúc rõ — ROLE/INSTRUCTION/<data> (2.1) |
| Đưa báo cáo mẫu đúng định dạng trước khi giao việc | Ví dụ đúng dạng — few-shot (2.2) |
| Yêu cầu liệt kê số liệu trước khi chốt kết luận | Tách bước suy luận trước kết luận (2.3) |
2. Ba nguyên tắc bám cơ chế
2.1 Cấu trúc rõ — vai trò, delimiter, phân vùng instruction/data
Mỗi token dùng query để "hỏi" các token khác, rồi lấy thông tin theo trọng số liên quan — một phép tra cứu mềm trên toàn bộ token trong context, không phải model "đọc hiểu" có ý thức phân biệt lệnh với dữ liệu.
Vì attention tra cứu trên toàn bộ token không phân biệt nguồn gốc, lệnh và dữ liệu trộn chung một khối văn bản khiến model không có tín hiệu nào để biết đoạn nào là chỉ thị cần tuân theo, đoạn nào chỉ là nội dung xử lý. Delimiter — nhãn khối, thẻ ngoặc, tiêu đề section — không "dạy" model hiểu nghĩa, nó tạo ra token đặc biệt lặp lại nhất quán mà attention học được cách gán trọng số khác cho vùng theo sau. Đây là lý do prompt có vai trò rõ (ROLE:), chỉ thị rõ (INSTRUCTION:) và dữ liệu tách khối (<data>...</data>) ổn định hơn một đoạn văn xuôi trộn cả ba.

Quay lại prompt mở bài: lệnh và email nằm chung một câu, không nhãn phân tách — email ngắn thì model vẫn đoán đúng, nhưng thêm dòng phí giao dịch (một số tiền khác trong cùng khối) thì độ chính xác giảm không kiểm soát được.
2.2 Ví dụ đúng dạng (few-shot) — model bắt chước pattern
Brown và cộng sự chỉ ra rằng đưa vài ví dụ input–output đúng định dạng vào context (few-shot) giúp model tổng quát hoá sang input mới, không cần cập nhật trọng số (Brown et al., Language Models are Few-Shot Learners, arXiv:2005.14165). Cơ chế không huyền bí: model dự đoán token kế tiếp bằng cách nhận diện pattern lặp lại trong context — vài ví dụ đúng dạng tạo pattern rõ, model tiếp tục pattern đó cho input mới.
Hệ quả trực tiếp: ví dụ sai dạng hại hơn không có ví dụ nào. Nếu ví dụ mẫu viết amount dạng chuỗi ("1.500.000 VND") trong khi bạn cần số thuần, model bắt chước đúng pattern sai đó — nó không "biết" bạn muốn số, nó chỉ thấy pattern và tiếp tục.
Context window có hạn mức token cố định — mọi thứ nhét vào prompt, kể cả ví dụ mẫu, cạnh tranh chỗ với phần còn lại. Quá nhiều ví dụ đẩy dữ liệu thật ra gần rìa context, đúng vùng model dễ bỏ sót.
Vì vậy nguyên tắc thực dụng là 1-3 ví dụ đúng dạng, đại diện đúng trường hợp khó (ví dụ: một email có cả phí giao dịch, để model thấy cách xử lý trường hợp nhiều số tiền) — không phải càng nhiều ví dụ càng tốt.
2.3 Tách bước suy luận trước kết luận
Wei và cộng sự cho thấy yêu cầu model trình bày bước suy luận trung gian trước kết luận cuối (chain-of-thought) cải thiện đáng kể độ chính xác trên tác vụ nhiều bước (Wei et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, arXiv:2201.11903). Lý do bám thẳng cách model sinh văn bản: mỗi token dựa trên toàn bộ token đã sinh trước đó làm context — kể cả token model vừa viết. Khi model viết "tien chinh 1.500.000, phi rieng 15.000" trước khi kết luận, hai con số đó thành context cho bước kết luận, giúp tránh cộng nhầm. Bị ép trả lời ngay, model mất hẳn chỗ tự đối chiếu.
Mỗi token được chọn từ một phân phối xác suất; temperature/top-p quyết định model "liều" tới mức nào ở mỗi lần chọn. Trả lời trực tiếp dồn toàn bộ rủi ro vào một chuỗi lựa chọn ngắn; tách suy luận trải rủi ro đó ra nhiều bước, mỗi bước có context tốt hơn để dựa vào.
Áp cả ba nguyên tắc vào đúng scenario mở bài — nhưng đừng đọc thẳng đáp án. Tự điền hai phần TODO dưới đây trước:
ROLE: Ban la he thong trich xuat du lieu giao dich cho moi truong UAT ngan hang.
INSTRUCTION:
-- TODO: tu dien theo 2.1 - liet ke 4 truong can trich (transaction_id, amount,
-- status, timestamp), quy tac khi thieu truong, va yeu cau lam gi truoc khi
-- tra loi (goi y: 2.3).
VI DU:
-- TODO: tu dien theo 2.2 - viet MOT vi du input/output dung dang, chon dung
-- truong hop kho (email co ca tien chinh lan phi).
<data>
"Kinh gui quy khach, giao dich GD001238 da duoc xu ly luc 2026-07-20 14:32. So
tien: 1.500.000 VND cho giao dich chinh, cong them phi 15.000 VND. Trang thai:
THANH CONG."
</data>
Viết ra cả hai phần TODO trước khi cuộn xuống: INSTRUCTION áp nguyên tắc 2.1 (tách việc cần làm khỏi dữ liệu) và 2.3 (yêu cầu liệt kê suy luận trước kết luận); ví dụ few-shot áp nguyên tắc 2.2 (đúng dạng, đúng trường hợp khó). Chỉ so với đáp án sau khi đã viết xong.
Đáp án tham khảo:
INSTRUCTION:
Doc noi dung email trong the <data>. Trich 4 truong: transaction_id (chuoi),
amount (so, CHI tinh giao dich chinh, KHONG cong phi), status ("SUCCESS" hoac
"FAILED"), timestamp (ISO 8601). Neu thieu truong nao, dien null. KHONG suy dien
gia tri khong xuat hien trong email. Truoc khi tra loi, liet ke tung truong va
cau/cum tu dung de suy ra no, sau do tra loi dung JSON theo dinh dang vi du.
VI DU:
<data>
"Giao dich GD000901 thanh cong luc 2026-06-01 09:10. So tien: 500.000 VND, phi
5.000 VND."
</data>
Suy luan:
- transaction_id: "GD000901"
- amount: 500000 (khong tinh phi 5.000)
- status: "SUCCESS"
- timestamp: "2026-06-01T09:10:00"
Tra loi:
{"transaction_id": "GD000901", "amount": 500000, "status": "SUCCESS", "timestamp": "2026-06-01T09:10:00"}
Đáp án khớp ba nguyên tắc: INSTRUCTION tách khỏi <data> (2.1); ví dụ đúng trường hợp khó — có cả tiền chính lẫn phí (2.2); bước "Suy luận" bắt buộc trước "Trả lời" (2.3). Model không còn cộng nhầm phí vào amount, và output luôn đúng shape JSON để parse được.
3. Vì sao nguyên tắc thì bền, còn "mẹo câu chữ" thì rot?
Mẹo kiểu "hứa tip 20 đô", "đóng vai chuyên gia 20 năm kinh nghiệm" từng lan truyền vì tăng nhẹ chất lượng trên một model, một thời điểm huấn luyện cụ thể — hiệu ứng tới từ cách model đó được RLHF/fine-tune, không phải quy luật kiến trúc. Đổi vòng huấn luyện, hiệu ứng biến mất hoặc đảo chiều.
Ba nguyên tắc ở mục 2 thì khác: attention luôn tra cứu có trọng số (2.1), model luôn bắt chước pattern (2.2), sinh văn bản luôn autoregressive (2.3). Câu hỏi phân biệt nguyên tắc thật với mẹo đang rot: nó suy ra được từ cách model hoạt động, hay chỉ quan sát từ một lần thử?
4. Pitfall tổng hợp
❌ Nhầm 1 — càng nhiều ví dụ few-shot càng tốt: nhồi 10 ví dụ "cho chắc" đẩy dữ liệu thật ra xa, không tăng pattern mới đáng kể sau ví dụ thứ 2-3. ✅ Chọn 1-3 ví dụ đại diện đúng trường hợp khó thay vì nhiều ví dụ dễ giống nhau.
❌ Nhầm 2 — delimiter càng nhiều thẻ càng an toàn: bọc mọi câu bằng thẻ XML lồng nhiều tầng khiến prompt dài gấp đôi mà không rõ hơn.
✅ Một cặp delimiter rõ ràng mỗi vùng (ROLE/INSTRUCTION/<data>) đủ để attention phân vùng.
❌ Nhầm 3 — yêu cầu suy luận nhưng không giới hạn output cuối: chỉ nói "suy nghĩ từng bước" mà không nói rõ định dạng cuối, model dễ lan man, quên kết luận. ✅ Luôn kèm cấu trúc output ngay sau yêu cầu suy luận — tách bước không có nghĩa bỏ ràng buộc định dạng.
5. 📚 Đào sâu
- Language Models are Few-Shot Learners (Brown et al., arXiv:2005.14165) — nguồn cho nguyên tắc 2.2: model học pattern từ vài ví dụ, không cần cập nhật trọng số.
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Wei et al., arXiv:2201.11903) — nguồn cho nguyên tắc 2.3: bước suy luận trung gian cải thiện độ chính xác trên tác vụ nhiều bước.
Ghi chú: con số đo trên benchmark thời điểm công bố sẽ khác ở model đời sau, nhưng cơ chế (bắt chước pattern; token sau dựa token trước) không đổi.
6. Liên hệ các bài khác
- Bài tiếp theo — Fine-tune khi nào — khi ba nguyên tắc ở bài này vẫn không đủ, fine-tune mới đáng chi phí.
- Context window — bộ nhớ làm việc hữu hạn — vì sao thêm ví dụ few-shot không phải luôn miễn phí.
- Sampling — temperature và top-p — cơ chế chọn token mà nguyên tắc tách suy luận khai thác.
- Attention — phép truy vấn có trọng số — cơ chế nền cho cấu trúc/delimiter có tác dụng.
7. Tóm tắt
- Mẹo câu chữ (câu thần chú, hứa tip) rot theo model version vì chỉ ăn theo quirk huấn luyện của một model cụ thể.
- Ba nguyên tắc bền vì suy ra trực tiếp từ cơ chế: cấu trúc rõ, ví dụ đúng dạng, tách bước suy luận.
- Cấu trúc rõ cho attention chỗ bám, tránh lẫn lệnh với dữ liệu; ví dụ few-shot hoạt động vì model bắt chước pattern.
- Tách bước suy luận tận dụng tính autoregressive: token sinh ra là context cho token sau, cho model chỗ tự sửa sai.
- Thêm ví dụ hay thêm delimiter không phải luôn tốt hơn — cả hai tốn chỗ trong context window có hạn.
- Yêu cầu suy luận vẫn phải kèm ràng buộc định dạng output cuối, không thì model lan man.
8. Tự kiểm tra
Q1Vì sao tách instruction và data bằng delimiter rõ lại giảm lỗi, xét theo cơ chế attention là một phép tra cứu có trọng số trên mọi token?▸
Attention không tự nhiên phân biệt "lệnh" với "dữ liệu" — nó chỉ tính trọng số liên quan giữa các token dựa trên nội dung, nên lệnh và dữ liệu trộn chung một khối văn bản không để lại tín hiệu nào cho model biết vùng nào cần tuân theo. Delimiter tạo ra token đặc biệt lặp lại nhất quán mà model học được cách gán vai trò khác cho vùng theo sau, giúp attention phân vùng rõ hơn và giảm khả năng model coi một chi tiết trong dữ liệu là một chỉ thị bổ sung.
Q2Một ví dụ few-shot sai định dạng (input/output không khớp shape bạn cần) có thể hại hơn việc không đưa ví dụ nào không? Giải thích theo cơ chế.▸
Có. Model không hiểu "ý định" đằng sau ví dụ, nó chỉ nhận diện pattern trong context và tiếp tục pattern đó. Ví dụ sai dạng (như amount viết chuỗi có đơn vị thay vì số thuần) khiến model học đúng cái pattern sai và lặp lại ổn định trên input mới — trong khi không có ví dụ nào, model ít nhất còn dựa vào phần instruction mô tả bằng lời.
Q3Vì sao yêu cầu model liệt kê bước suy luận trước khi trả lời JSON lại cải thiện độ chính xác, xét cơ chế sinh token tự hồi quy (autoregressive)?▸
Mỗi token được sinh dựa trên toàn bộ token đã có trước đó, kể cả token do chính model vừa viết. Khi model viết ra bước suy luận trung gian, những bước đó trở thành context bổ sung cho token kết luận, cho model chỗ dựa để đối chiếu trước khi chốt câu trả lời — bị ép trả lời ngay thì kết luận phải nảy sinh từ một bước sinh token duy nhất, không có cơ hội tự sửa sai giữa chừng.
Q4Cho prompt: "Trich amount tu email nay: ...GD5, 200.000 VND phi giao dich, 2.000.000 VND tien hang..." — không delimiter, không ví dụ, không yêu cầu suy luận. Dự đoán một lỗi cụ thể có thể xảy ra và giải thích cơ chế gây ra nó.▸
"Trich amount tu email nay: ...GD5, 200.000 VND phi giao dich, 2.000.000 VND tien hang..." — không delimiter, không ví dụ, không yêu cầu suy luận. Dự đoán một lỗi cụ thể có thể xảy ra và giải thích cơ chế gây ra nó.Nhiều khả năng model trả về amount: 200000 (lấy số tiền xuất hiện trước) hoặc cộng gộp hai số thành 2200000, thay vì đúng số tiền hàng 2.000.000. Không delimiter phân định "đâu là amount thật", không ví dụ minh hoạ cách xử lý khi có nhiều số tiền, không bước suy luận buộc liệt kê từng số trước khi chọn — ba khoảng trống cộng dồn khiến model chọn theo vị trí xuất hiện thay vì theo ngữ nghĩa đúng.
Q5Vì sao "câu thần chú" kiểu hứa tip hay đóng vai chuyên gia có thể có tác dụng ở một phiên bản model nhưng biến mất ở phiên bản sau, trong khi ba nguyên tắc ở bài này thì không?▸
Hiệu ứng câu thần chú tới từ cách một model cụ thể được RLHF/fine-tune — quirk học từ đúng lần huấn luyện đó, không phải quy luật kiến trúc, nên đổi vòng huấn luyện là mất đảm bảo. Ba nguyên tắc ở bài này suy ra từ những thứ không đổi giữa các model transformer: attention tra cứu có trọng số, model bắt chước pattern, sinh văn bản luôn autoregressive — bám bất biến kiến trúc thì còn đúng qua nhiều thế hệ model.
Bài tiếp theo: Fine-tune — khi nào xứng đáng
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên