Một agent giáo dục phải trả lời đúng theo giáo trình của bạn, không phải theo kiến thức chung chung mơ hồ của LLM. Giải pháp là RAG (Retrieval-Augmented Generation): trước khi trả lời, agent tìm các đoạn tài liệu liên quan rồi dựa vào đó để trả lời. Đây là cách chống bịa (hallucination) hiệu quả nhất trong giáo dục.
RAG hoạt động thế nào (đơn giản hóa)
- Chuẩn bị: cắt giáo trình thành các đoạn nhỏ (chunk), tạo embedding (vector số) cho mỗi đoạn, lưu vào vector database.
- Khi có câu hỏi: tạo embedding của câu hỏi, tìm các đoạn có vector gần nhất.
- Trả lời: đưa các đoạn tìm được vào prompt kèm câu hỏi, yêu cầu agent trả lời chỉ dựa trên các đoạn đó.
Ví dụ cụ thể
Học viên hỏi: "Định lý Pytago áp dụng cho tam giác nào?" Agent tìm trong giáo trình đoạn định nghĩa định lý Pytago (chỉ áp dụng cho tam giác vuông), rồi trả lời kèm trích dẫn "theo Bài 5, mục 2". Nếu học viên hỏi điều không có trong giáo trình, agent nói rõ "phần này chưa có trong tài liệu khóa học" thay vì bịa. Trong giáo dục, một câu trả lời sai nhưng nghe rất tự tin còn nguy hiểm hơn một câu "tôi chưa biết", vì học viên tin tưởng và ghi nhớ sai. Đây chính là lý do RAG trở thành xương sống của mọi agent giáo dục nghiêm túc: nó neo câu trả lời vào nguồn đã được giáo viên duyệt, và cho phép truy vết mọi khẳng định về đúng một trang tài liệu cụ thể.
Các bước xây RAG cho khóa học
- Thu thập tài liệu: bài giảng, slide, sách, đáp án mẫu — chỉ nguồn đã được duyệt.
- Chunk hợp lý: mỗi đoạn 200–500 từ, cắt theo ý (mục, đoạn văn), không cắt giữa câu.
- Gắn metadata: mỗi chunk kèm bài số, chương, môn — để trích dẫn nguồn.
- Tạo embedding & lưu vào vector DB.
- Truy hồi top-k (thường k=3–5) đoạn liên quan nhất cho mỗi câu hỏi.
- Chèn vào prompt kèm lệnh "chỉ dựa trên tài liệu này".
def answer_with_rag(question, vector_db, k=4):
chunks = vector_db.search(question, top_k=k) # trả về đoạn + metadata
context = "\n\n".join(
f"[Nguồn: {c['bai']}] {c['text']}" for c in chunks
)
prompt = f"""Dựa CHỈ vào tài liệu sau, trả lời câu hỏi.
Nếu tài liệu không đủ thông tin, nói "Chưa có trong tài liệu khóa học".
Luôn ghi rõ nguồn (số bài) đã dùng.
[TÀI LIỆU]
{context}
[CÂU HỎI] {question}"""
return call_llm(prompt, temperature=0.1)
Khung tư duy: khi nào cần RAG?
- Nội dung đặc thù khóa học (giáo trình riêng, quy định lớp) → cần RAG.
- Kiến thức phổ thông ổn định (bảng cửu chương) → có thể không cần.
- Nội dung thay đổi theo kỳ (lịch thi, đề cương mới) → cần RAG để cập nhật mà không huấn luyện lại.
Checklist chất lượng RAG
- [ ] Chunk cắt theo ý, có metadata nguồn.
- [ ] Câu hỏi ngoài phạm vi được trả lời "chưa có trong tài liệu".
- [ ] Mỗi câu trả lời trích dẫn được nguồn (bài/chương).
- [ ] Kiểm tra 20 câu hỏi mẫu: tỷ lệ trích đúng nguồn cao.
- [ ] Tài liệu nhạy cảm (đáp án đề thi) được tách kho riêng, agent trợ giảng không truy cập.
Sai lầm thường gặp
- Chunk quá to: nhét cả chương vào một đoạn, tìm kiếm không chính xác.
- Chunk quá nhỏ: mất ngữ cảnh, câu trả lời rời rạc.
- Không gắn metadata: agent không trích dẫn được nguồn, giáo viên khó kiểm chứng.
- Để lẫn đáp án đề thi vào kho trợ giảng: agent vô tình lộ đáp án cho học viên.
- Tin tưởng mù quáng vào top-k: đôi khi đoạn liên quan không nằm trong top-k; cần đánh giá và tăng k hoặc cải thiện chunk.