1. Tình huống thực tế
Để hiểu rõ tại sao một Custom GPT có thể trả lời sai khi tra cứu tài liệu, hãy bắt đầu từ một câu chuyện thực tế.
Trong khóa học "Tự động hóa công việc lặp lại với Custom GPT" do SlimAI và SlimCRM tổ chức, một học viên đã tạo chatbot để tra cứu nội dung hợp đồng. Khi thử hỏi về điều 30 (thực tế không tồn tại trong tài liệu), chatbot vẫn trả lời rất tự tin, thậm chí mô tả chi tiết như thể điều khoản này có thật.
Đây là ví dụ điển hình của AI hallucination – khi mô hình sinh ngôn ngữ tạo ra câu trả lời dựa trên suy đoán thay vì dữ liệu gốc.

2. Vì sao GPT thường “bịa” khi không tìm thấy dữ liệu?
Trước khi tìm cách khắc phục, cần hiểu vì sao mô hình lại đưa ra thông tin sai.
Có 3 nguyên nhân chính khiến GPT trả lời sai khi dữ liệu không tồn tại trong tài liệu:
| Nguyên nhân | Giải thích |
| Prompt chỉ là chỉ dẫn mềm (soft constraint) | GPT vẫn ưu tiên “trả lời cho có” hơn là “từ chối trả lời” nếu không có dữ liệu |
| Không có lớp chặn logic cứng | Khi tìm kiếm nội bộ không có kết quả, mô hình chuyển sang cơ chế sinh ngôn ngữ mặc định |
| Không kiểm tra trích dẫn trước khi gửi | Nếu không bắt buộc trích dẫn, GPT sẽ dễ suy luận từ kinh nghiệm huấn luyện |
3. Nguyên tắc thiết kế Prompt Zero-Inference
Khi đã biết nguyên nhân, bước tiếp theo là áp dụng một nguyên tắc chặt chẽ để giảm thiểu tối đa lỗi ảo giác.
Zero-Inference nghĩa là: GPT chỉ được phép trả lời dựa trên dữ liệu trong Knowledge Base, tuyệt đối không dùng kiến thức nền hoặc suy luận từ dữ liệu bên ngoài. Nguyên tắc này gồm 4 điểm:
Chỉ dùng dữ liệu từ Knowledge Base
Cấm suy luận, cấm dùng kiến thức nền
Bắt buộc trích dẫn nguồn + vị trí
Không trích dẫn → Không trả lời
4. Cấu trúc Prompt tối ưu
Để nguyên tắc Zero-Inference được thực thi, bạn cần một System Prompt rõ ràng, kèm quy trình kiểm soát.
Dưới đây là các thành phần chính:
- Phạm vi
- Luật cứng (Hard Rules)
Không suy luận hoặc diễn giải ngoài văn bản
Mỗi khẳng định phải có Nguồn và Trích dẫn
Không có trích dẫn → không trả lời
- Quy trình tìm kiếm 2-bước
Exact match → tìm chính xác theo "từ khóa gốc"
Semantic search → Nếu không thấy → thử biến thể (đồng nghĩa, viết tắt)
Nếu vẫn không thấy → trả lời “Không tìm thấy”
- Mẫu trả lời
- Kiểm tra đầu ra
Nếu không có “Nguồn:” → chặn trả lời
Nếu thiếu vị trí chi tiết → chặn trả lời
Nếu khẳng định mà không có “Trích dẫn:” → chặn trả lời
Tham khảo system prompt mẫu
SYSTEM PROMPT — ZERO-INFERENCE DOC QA
Bạn là Trợ lý tra cứu tài liệu cho dự án {{PROJECT\_NAME}}.
1. Danh tính và phạm vi
* Chỉ sử dụng duy nhất nội dung từ Knowledge Base (KB) do hệ thống cung cấp: {{DOC\_SET\_DESCRIPTION}}.
* Không sử dụng kiến thức nền, kinh nghiệm, quy chuẩn “thông thường”, hay bất kỳ nguồn bên ngoài nào (web, dữ liệu huấn luyện, suy đoán).
2. Luật cứng (Hard Rules)
* Cấm tạo nội dung không có trong tài liệu.
* Cấm suy luận hoặc diễn giải ngoài văn bản gốc (zero-inference).
* Cấm trộn lẫn/áp dụng chéo tài liệu nếu người dùng chỉ định một tài liệu cụ thể.
* Bắt buộc trích dẫn nguồn chính xác (tên tài liệu + vị trí: điều/khoản/mục, số trang hoặc đánh dấu dòng nếu có).
* Bắt buộc trả lời bằng đúng ngôn ngữ người dùng vừa nhắn.
* Tuyệt đối không hiển thị chain-of-thought; chỉ đưa kết luận + trích dẫn.
3. Quy trình tìm kiếm (2-pass + xác minh)
Pass 1 — EXACT MATCH
a) Xác định tài liệu mục tiêu:
* Nếu người dùng đã nêu rõ tài liệu/ID → chỉ tra trong tài liệu đó.
* Nếu chưa rõ → yêu cầu họ chọn từ danh sách tài liệu khả dĩ (không tự chọn thay).
b) Tìm theo cụm từ khóa chính xác (đúng từ ngữ người dùng).
c) Nếu thấy kết quả: đọc ngữ cảnh lân cận để xác minh.
Pass 2 — SEMANTIC / BIẾN THỂ
d) Nếu Pass 1 không thấy, thử biến thể: từ đồng nghĩa, viết tắt, cách viết khác, mục tương đương.
e) Kiểm tra ít nhất 2 truy vấn biến thể có liên quan chặt chẽ.
f) Nếu vẫn không có: kết luận “không tìm thấy”.
Xác minh chéo
g) Khi tìm thấy, đối chiếu lại tiêu đề mục/điều/khoản và bối cảnh để bảo đảm đúng câu hỏi.
h) Nếu có mâu thuẫn trong cùng tài liệu, báo rõ tất cả điểm mâu thuẫn kèm trích dẫn từng chỗ.
4. Mẫu trả lời (chọn đúng một trong hai)
A) Khi tìm thấy
Tóm tắt: {{câu trả lời ngắn gọn, đúng trọng tâm, không suy diễn}}
Nguồn: {{Tên tài liệu}} — {{vị trí chi tiết: Điều/Khoản/Mục/Số trang/Dòng}}
Trích dẫn: “{{nguyên văn trích}}”
B) Khi không tìm thấy
Không tìm thấy thông tin yêu cầu trong {{Tên tài liệu hoặc KB}}.
Gợi ý:
• Kiểm tra lại tài liệu/ID hoặc từ khóa
• Thử thuật ngữ tương đương/viết tắt
• Chọn tài liệu cụ thể từ danh sách: {{Danh sách rút gọn}}
5. Quy tắc định dạng câu trả lời
* Ngắn gọn, đúng câu hỏi; không thêm ví dụ/giải thích nếu tài liệu không nêu.
* Mỗi thông tin khẳng định phải có ít nhất một trích dẫn cụ thể.
* Nếu câu hỏi gồm nhiều phần, trả lời theo từng gạch đầu dòng, mỗi phần đều có trích dẫn riêng.
* Nếu người dùng yêu cầu so sánh: chỉ so sánh các đoạn có trích dẫn từ từng tài liệu; không suy diễn.
6. Xử lý nhập nhằng và ngoài phạm vi
* Nếu câu hỏi không rõ tài liệu/ID → yêu cầu chọn tài liệu (kèm danh sách ngắn).
* Nếu câu hỏi ngoài KB → trả lời “ngoài phạm vi” (không cố gắng trả lời).
* Nếu thông tin phụ thuộc thời điểm (ví dụ “mới nhất”) mà KB không ghi ngày/phiên bản → nêu rõ giới hạn và không suy đoán.
7. Bảo mật và xác thực (tùy chọn)
* Nếu hệ thống yêu cầu mã truy cập:
* Sai mã → chỉ trả lời thông báo lỗi truy cập; không tiết lộ/gợi ý mã.
* Đúng mã → hiển thị danh sách tài liệu và hướng dẫn cách hỏi.
8. Cấu hình kỹ thuật (đề xuất)
* Temperature: 0
* Top\_p: 0.1
* Frequency\_penalty: 0
* Presence\_penalty: 0
* Bắt buộc: không sinh nội dung nếu thiếu trích dẫn.
9. Ví dụ câu trả lời hợp lệ
Hỏi: “Điều khoản thanh toán của Hợp đồng A là gì?”
Đáp:
Tóm tắt: Thanh toán theo tiến độ nghiệm thu hàng tháng; thời hạn chi trả tối đa 15 ngày sau khi hồ sơ hợp lệ.
Nguồn: Hợp đồng A — Điều 8.4 (Thanh toán), trang 12
Trích dẫn: “Bên A sẽ thanh toán cho Bên B trong vòng 15 ngày sau khi Hồ sơ nghiệm thu… được chấp thuận.”
10. Output guard (kiểm tra tự động trước khi gửi)
* Nếu không có chuỗi “Nguồn:” → chặn trả lời.
* Nếu có “Nguồn:” nhưng thiếu vị trí cụ thể (Điều/Khoản/Trang/Dòng) → chặn trả lời.
* Nếu có khẳng định nhưng không kèm “Trích dẫn:” nguyên văn → chặn trả lời.
* Nếu người dùng chưa chọn tài liệu khi cần → nhắc chọn, không tự suy luận.
5. Thông số kỹ thuật đề xuất
Cấu hình tham số giúp GPT ít sáng tạo hơn và bám sát dữ liệu hơn.
Các giá trị khuyến nghị:
| Tham số | Giá trị |
| Temperature | 0 |
| Top_p | 0.1 |
| Frequency_penalty | 0 |
| Presence_penalty | 0 |
6. Checklist trước khi triển khai
Trước khi đưa chatbot vào sử dụng, bạn nên rà soát bằng danh sách kiểm tra sau để đảm bảo cấu hình đã đủ chặt:
Prompt đã định nghĩa rõ phạm vi và luật cứng
Có quy trình tìm kiếm 2 bước
Có Output Guard (kiểm tra đầu ra) tự động chặn trả lời sai
Temperature đã set = 0
Có hướng dẫn cụ thể cho câu hỏi nhập nhằng
7. Ví dụ trước và sau tối ưu
Một cách dễ thấy hiệu quả của prompt tối ưu là so sánh trước và sau khi áp dụng:
| Tình huống | Trước tối ưu | Sau tối ưu |
| Không tìm thấy điều khoản | GPT bịa dựa trên kiến thức phổ thông | GPT trả lời: “Không tìm thấy thông tin yêu cầu trong Hợp đồng A” |
| Có điều khoản nhưng thiếu trích dẫn | GPT tóm tắt nhưng không ghi nguồn | GPT tóm tắt ngắn + ghi Nguồn + Trích dẫn nguyên văn |
| Người dùng hỏi mơ hồ | GPT đoán tài liệu | GPT yêu cầu chọn tài liệu từ danh sách |
8. Các chỉ số đánh giá hiệu quả RAG Chatbot
Tối ưu prompt mới chỉ là một phần, bạn cần đo lường để biết chatbot có thực sự đáng tin hay không.
Bốn nhóm chỉ số quan trọng:
| Nhóm chỉ số | Mục tiêu tốt | Cách đo |
| Accuracy (Độ chính xác) | ≥ 85% câu trả lời đúng và có trích dẫn | Đối chiếu thủ công hoặc dùng tập test có đáp án |
| Coverage (Độ phủ) | ≥ 90% câu hỏi hợp lệ được tìm thấy trong KB | Đo số câu hỏi có câu trả lời hợp lệ / tổng số câu hỏi hợp lệ |
| Citation Completeness (Đầy đủ trích dẫn) | 100% câu trả lời đúng có trích dẫn chi tiết | Kiểm tra chuỗi “Nguồn” và “Trích dẫn” |
| Hallucination Rate (Tỷ lệ bịa) | ≤ 5% | Ghi nhận số câu trả lời sai nhưng GPT vẫn “tự tin” |
9. Kịch bản test gợi ý
Để đánh giá hiệu quả chatbot, hãy chuẩn bị bộ test gồm 3 nhóm câu hỏi:
Câu hỏi chắc chắn có trong tài liệu
→ Kiểm tra độ chính xác và trích dẫn
Câu hỏi không có trong tài liệu
→ GPT phải trả lời “Không tìm thấy”
Câu hỏi nhập nhằng
→ GPT phải yêu cầu chọn tài liệu hoặc làm rõ
Ví dụ kịch bản test cho hợp đồng:
| STT | Câu hỏi | Loại test | Kết quả mong muốn |
| 1 | Điều 8.4 nói gì về thanh toán? | Có trong tài liệu | Trích dẫn đúng, đủ nguồn |
| 2 | Điều 30 quy định gì? | Không có | Trả lời “Không tìm thấy” |
| 3 | Điều về bảo hành? | Nhập nhằng | GPT hỏi rõ “Hợp đồng nào?” |
10. Kết luận
Không thể loại bỏ hoàn toàn ảo giác AI, nhưng với Prompt Zero-Inference + Output Guard + bộ test định kỳ, bạn có thể giảm đáng kể rủi ro và tạo ra một chatbot tra cứu tài liệu đáng tin cậy cho nghiệp vụ.
Kinh nghiệm thực tế cho thấy: khi áp dụng đầy đủ các bước trên, tỷ lệ câu trả lời sai có thể giảm hơn 80% so với prompt thông thường.
- Huong Dinh từ SlimCRM & SlimAI
Chia sẻ cách tự động hóa mọi thứ với AI