System prompt là "hiến pháp" của agent: nó quy định vai trò, phạm vi, cách suy nghĩ và ranh giới an toàn. Một agent tốt hay tệ phần lớn quyết định ở đây.
Cấu trúc một system prompt agent tốt
Một system prompt vận hành được nên có 5 phần:
- Vai trò & mục tiêu: agent là ai, tồn tại để làm gì.
- Năng lực (tools): nó có những công cụ nào, khi nào dùng.
- Quy trình suy nghĩ: bắt buộc theo vòng ReAct (nghĩ trước, hành động sau).
- Ranh giới & an toàn: điều tuyệt đối không làm.
- Định dạng output: trả lời theo khuôn nào để code parse được.
Ví dụ cụ thể
Bạn là "TroLyDatHang", trợ lý tra cứu đơn hàng của shop ABC.
MỤC TIÊU: Giúp khách kiểm tra tình trạng đơn hàng chính xác, lịch sự.
CÔNG CỤ:
- lookup_order(order_id): trả về trạng thái đơn.
- get_shipping(order_id): trả về vị trí vận chuyển.
Chỉ dùng công cụ khi cần dữ liệu thật. Không bịa số liệu.
QUY TRÌNH: Với mỗi yêu cầu, hãy suy nghĩ từng bước:
1) Xác định cần công cụ nào. 2) Gọi công cụ. 3) Dựa vào kết quả để trả lời.
RANH GIỚI:
- Không tiết lộ thông tin đơn của khách khác.
- Nếu không có order_id, hãy hỏi lại, KHÔNG đoán.
- Nếu công cụ báo lỗi, xin lỗi và đề nghị thử lại.
ĐỊNH DẠNG: Trả lời tiếng Việt, ngắn gọn, có emoji thân thiện tối đa 1 cái.
Các bước thiết kế
- Viết một câu vai trò rõ ràng, đặt tên riêng cho agent (giúp nó "nhập vai" ổn định).
- Liệt kê tool kèm mô tả khi nào dùng — LLM chọn tool dựa vào mô tả này.
- Ép suy nghĩ trước hành động: thêm câu "hãy suy nghĩ từng bước trước khi gọi công cụ".
- Ghi rõ ranh giới bằng câu mệnh lệnh phủ định: "KHÔNG bịa", "KHÔNG đoán", "Nếu thiếu dữ liệu, hãy hỏi lại".
- Định nghĩa định dạng output để phần code sau parse được (ví dụ JSON, hoặc văn xuôi có cấu trúc).
- Test với ca khó: đầu vào thiếu thông tin, yêu cầu ngoài phạm vi, tool trả lỗi.
Khung tư duy: "Chỉ dẫn, Ràng buộc, Ví dụ"
System prompt = Chỉ dẫn (làm gì) + Ràng buộc (không làm gì) + Ví dụ (làm thế nào)
Thiếu Ràng buộc, agent sẽ bịa và vượt phạm vi. Thiếu Ví dụ, agent hiểu sai định dạng. Với các tác vụ khó, thêm 1-2 ví dụ mẫu (few-shot) làm chất lượng tăng rõ rệt.
Checklist chất lượng system prompt
- [ ] Có vai trò + mục tiêu một câu.
- [ ] Mỗi tool có mô tả khi nào dùng.
- [ ] Có câu ép "suy nghĩ từng bước".
- [ ] Có ít nhất 2 ranh giới phủ định.
- [ ] Có quy tắc xử lý khi thiếu dữ liệu / tool lỗi.
- [ ] Có định dạng output rõ ràng.
Sai lầm thường gặp
- System prompt mơ hồ kiểu "Bạn là trợ lý hữu ích" — không đủ để agent hành xử nhất quán.
- Không nói khi nào dùng tool, khiến agent hoặc lạm dụng tool hoặc bỏ qua tool.
- Quên xử lý trường hợp thiếu dữ liệu, agent liền bịa order_id giả.
- Nhồi quá nhiều luật mâu thuẫn, LLM sẽ bỏ qua ngẫu nhiên. Ưu tiên ngắn, rõ, không trùng.
- Không có định dạng output, khiến code không parse được hành động của agent (bài sau sẽ cần điều này).
Vì sao few-shot lại quyền lực đến vậy
Khi một tác vụ khó diễn đạt bằng luật (ví dụ: phân loại cảm xúc khiếu nại, hay quyết định khi nào leo thang cho con người), thêm 1-2 ví dụ mẫu vào system prompt thường hiệu quả hơn viết mười dòng luật trừu tượng. LLM học rất nhanh từ ví dụ cụ thể: cho nó thấy một cặp "đầu vào khó → cách xử lý đúng" là nó bắt chước được ngay khuôn mẫu suy nghĩ và định dạng bạn muốn. Nguyên tắc thực chiến: khi agent hành xử sai một kiểu ca cụ thể, thay vì thêm luật, hãy thêm đúng ca đó làm ví dụ mẫu chỉ ra cách xử lý mong muốn. Đây là cách rẻ và nhanh nhất để "dạy" agent mà không cần fine-tune.
Bây giờ agent đã có "hiến pháp". Bài 4 chúng ta trao cho nó "tay chân" — định nghĩa tool đầu tiên.