Hãy tưởng tượng phòng Nhân sự nhận cùng một câu hỏi mỗi tuần: "Công ty cho nghỉ phép năm bao nhiêu ngày?", "Quy trình xin công tác phí thế nào?". Câu trả lời nằm trong sổ tay nhân viên 80 trang, vài file Google Docs và một kênh Slack cũ. Một Agent Q&A nội bộ là trợ lý trả lời những câu này ngay lập tức, dựa trên đúng tài liệu công ty — không bịa.
Vì sao không dùng thẳng ChatGPT?
Mô hình ngôn ngữ (LLM) chỉ biết dữ liệu công khai lúc huấn luyện. Nó không biết chính sách riêng của công ty bạn, và khi bị hỏi sẽ bịa (hallucinate) một câu nghe rất thuyết phục nhưng sai. Với câu hỏi nội bộ, sai một con số (ví dụ "12 ngày phép" thay vì "14") là rủi ro thật.
RAG (Retrieval-Augmented Generation) giải quyết đúng vấn đề này: trước khi trả lời, hệ thống tìm (retrieve) những đoạn tài liệu liên quan rồi đưa vào prompt cho LLM đọc và trả lời dựa trên đó. LLM không cần "nhớ", nó chỉ cần đọc và tổng hợp từ nguồn bạn cung cấp.
Khung tư duy: 4 bước của một truy vấn RAG
- Ingest (nạp) — một lần: cắt tài liệu thành đoạn nhỏ (chunk), tạo embedding, lưu vào vector store.
- Retrieve (truy hồi) — mỗi câu hỏi: chuyển câu hỏi thành embedding, tìm các chunk gần nghĩa nhất.
- Augment (bổ sung ngữ cảnh) — nhét các chunk tìm được vào prompt kèm câu hỏi.
- Generate (sinh) — LLM trả lời chỉ dựa trên ngữ cảnh, kèm trích dẫn nguồn.
Ví dụ cụ thể
Câu hỏi: "Nhân viên thử việc có được thưởng Tết không?"
- Retrieve tìm ra chunk từ file
chinh-sach-luong-thuong.pdf, trang 5: "Nhân viên thử việc được hưởng thưởng Tết theo tỷ lệ ngày làm việc thực tế." - Generate trả lời: "Có. Nhân viên thử việc được thưởng Tết theo tỷ lệ ngày công thực tế (Nguồn: Chính sách lương thưởng, tr.5)."
Pseudocode luồng cơ bản
def answer(question):
q_vec = embed(question) # bước 2
chunks = vector_store.search(q_vec, k=5) # top-5 đoạn gần nghĩa
context = format_with_sources(chunks) # bước 3
prompt = f"""Chỉ trả lời dựa trên ngữ cảnh dưới đây.
Nếu không có thông tin, nói 'Tôi không tìm thấy'.
Ngữ cảnh:
{context}
Câu hỏi: {question}"""
return llm.generate(prompt) # bước 4
Khi nào RAG là lựa chọn đúng?
- Tài liệu thay đổi thường xuyên (chính sách, giá, tồn kho) — RAG cập nhật bằng cách nạp lại dữ liệu, không cần huấn luyện lại.
- Cần trích dẫn nguồn để người dùng tin và kiểm chứng.
- Dữ liệu nhạy cảm/nội bộ, không thể gửi để fine-tune mô hình bên ngoài.
Checklist trước khi bắt đầu dự án
- [ ] Đã xác định nhóm câu hỏi thực tế người dùng hay hỏi (thu 20-30 câu mẫu).
- [ ] Đã liệt kê nguồn tài liệu và ai là chủ sở hữu (owner) từng nguồn.
- [ ] Đã thống nhất tiêu chí đúng: trả lời phải có trích dẫn, được phép nói "không biết".
- [ ] Đã cân nhắc quyền truy cập — ai được thấy tài liệu nào.
Sai lầm thường gặp
- Kỳ vọng RAG tự sửa tài liệu sai. RAG chỉ giỏi bằng tài liệu bạn đưa vào; "rác vào, rác ra".
- Bỏ qua bước trích dẫn. Không có nguồn thì người dùng không thể tin, và bạn không debug được câu trả lời sai.
- Nhầm RAG với fine-tune. Nhồi tài liệu để fine-tune vừa tốn kém vừa khó cập nhật; đa số bài toán Q&A nội bộ chỉ cần RAG.
- Không cho phép agent nói 'không biết'. Ép trả lời mọi câu là công thức tạo ra bịa đặt.