Viết system prompt: định nghĩa vai trò và ranh giới cho agent
System prompt là "hợp đồng lao động" của agent: nó nói agent LÀ AI, LÀM GÌ, KHÔNG được làm gì, và trả kết quả theo định dạng nào. Một system prompt tốt quyết định 70% chất lượng đầu ra.
Cấu trúc R-C-T-F
Một system prompt vững thường có 4 phần:
- Role (vai trò): agent là ai, cho ai.
- Context (bối cảnh): dữ liệu, quy tắc, giọng văn của bạn.
- Task (nhiệm vụ): làm gì, theo bước nào.
- Format + ranh giới (định dạng + điều cấm): trả ra sao, không được làm gì.
Ví dụ: agent soạn báo giá cho freelancer
[ROLE]
Bạn là trợ lý báo giá của Lan, một freelancer thiết kế đồ họa.
[CONTEXT]
- Bảng giá: logo 3.000.000đ, bộ nhận diện 12.000.000đ, banner 500.000đ/cái.
- Giọng văn: thân thiện, chuyên nghiệp, xưng "mình" - gọi khách "anh/chị".
- Thời gian giao chuẩn: logo 5 ngày, nhận diện 15 ngày.
[TASK]
Từ brief của khách, hãy:
1. Xác định hạng mục và số lượng.
2. Tính tổng giá theo bảng giá.
3. Nêu thời gian giao dự kiến.
4. Soạn email báo giá hoàn chỉnh.
[FORMAT & RANH GIỚI]
- Trả về đúng cấu trúc: {tom_tat, bang_gia, email_nhap}.
- KHÔNG tự giảm giá. Nếu khách xin giảm, ghi chú "cần Lan duyệt".
- Nếu brief thiếu thông tin, LIỆT KÊ câu hỏi cần hỏi thêm, KHÔNG đoán bừa.
- KHÔNG gửi email. Chỉ soạn nháp.
Vì sao phần "ranh giới" quan trọng nhất
Agent luôn muốn "làm cho xong". Nếu không cấm rõ, nó sẽ đoán giá, tự hứa deadline, hoặc bịa thông tin (hallucination). Ba câu lệnh vàng:
- "Nếu thiếu dữ liệu, HỎI, đừng đoán."
- "Nếu không chắc, nói 'không chắc' + lý do."
- "KHÔNG thực hiện hành động ra bên ngoài (gửi/thanh toán) khi chưa được duyệt."
Các bước viết system prompt
- Viết Role một câu: agent là ai, phục vụ ai.
- Nhồi Context: dán bảng giá, giọng văn, quy tắc thật của bạn.
- Liệt kê Task thành các bước đánh số.
- Khóa Format: yêu cầu output theo cấu trúc cố định (dễ kiểm tra/tự động hóa).
- Thêm ranh giới: 3 câu lệnh vàng ở trên + điều cấm riêng của nghề bạn.
- Test với 5 đầu vào thật, gồm cả ca khó (brief thiếu thông tin).
Mẹo: yêu cầu output có cấu trúc
Nếu agent phải nối vào bước tự động sau, hãy ép JSON:
Trả về DUY NHẤT JSON hợp lệ:
{"tom_tat": "...", "tong_gia": 0, "can_hoi_them": [], "email_nhap": "..."}
Sai lầm thường gặp
- Prompt mơ hồ: "hãy làm báo giá chuyên nghiệp" — agent tự bịa quy tắc.
- Quên giọng văn: email ra đúng nội dung nhưng nghe như robot, mất chất cá nhân của bạn.
- Không cấm hành động: agent tự gửi email hoặc tự hứa giảm giá.
- Không định dạng output: mỗi lần chạy ra một kiểu, không tự động hóa được bước sau.
- Không test ca khó: chỉ thử brief đẹp, tới brief thiếu info là agent đoán bừa.
Checklist
- [ ] Có đủ R-C-T-F
- [ ] Dán dữ liệu thật (giá, giọng văn)
- [ ] Có 3 câu lệnh vàng chống bịa
- [ ] Output có cấu trúc cố định
- [ ] Đã test 5 đầu vào gồm ca khó
<!--les-append-->
Vì sao system prompt "trôi" và cách chống
Một system prompt tốt vẫn xuống cấp theo thời gian, vì hai lý do:
- Bảng giá và quy tắc thật của bạn đổi, prompt thì không. Sau ba tháng agent báo giá theo bảng cũ — và nó báo rất tự tin.
- Bạn thêm dần ngoại lệ mỗi lần gặp ca lạ, và sau mười lần prompt trở thành một danh sách mâu thuẫn.
- Ghi ngày cập nhật ngay trong prompt:
[CONTEXT — cập nhật 2026-09-01]. Khi bạn đọc lại và thấy ngày cũ ba tháng, bạn biết phải kiểm. - Tách dữ liệu ra khỏi prompt. Bảng giá nên nằm trong một file hoặc Sheet mà agent đọc qua tool, không nằm trong prompt. Khi đó cập nhật giá là sửa một ô, không phải sửa prompt.
Kiểm system prompt bằng năm ca cố định
"Test với 5 đầu vào thật" nên thành một bộ cố định bạn chạy lại mỗi lần sửa prompt. Năm ca nên gồm:
| Ca | Kiểm điều gì |
|---|---|
| Brief đầy đủ, hạng mục có trong bảng giá | Đường cơ bản |
| Brief thiếu thông tin quan trọng | Nó hỏi hay đoán? |
| Yêu cầu hạng mục không có trong bảng giá | Nó nói không biết hay bịa giá? |
| Khách xin giảm giá | Nó tự giảm hay ghi "cần duyệt"? |
| Brief có yêu cầu gấp, deadline ngắn | Nó tự hứa deadline hay nêu thời gian chuẩn? |
Mỗi lần sửa prompt, chạy lại cả năm. Sửa để xử lý một ca mới rất dễ làm hỏng một ca cũ, và bạn chỉ phát hiện điều đó nếu chạy lại.
Ranh giới quan trọng nhất với freelancer
Một câu nên có trong mọi system prompt của người làm tự do:
> Không bao giờ cam kết thay tôi. Không hứa deadline sớm hơn thời gian chuẩn, không giảm giá, không nhận thêm phạm vi. Nếu khách yêu cầu, ghi vào phần can_duyet để tôi quyết.
Lý do rất cụ thể: với freelancer, một lời cam kết sai không phải một sự cố quy trình — nó là tiền của bạn và uy tín của bạn. Và agent, nếu không bị cấm, sẽ luôn chọn làm khách hàng vui, vì đó là điều nó được huấn luyện để làm. <!--/les-append-->