RAG (Retrieval-Augmented Generation – sinh nội dung tăng cường bằng truy xuất) là kỹ thuật cho phép mô hình ngôn ngữ lớn (LLM) tìm kiếm thông tin liên quan từ nguồn dữ liệu bên ngoài trước khi trả lời. Nhờ đó, chatbot có thể trả lời dựa trên tài liệu nội bộ, dữ liệu mới nhất của doanh nghiệp và giảm đáng kể tình trạng "bịa" thông tin, mà không cần huấn luyện lại mô hình.
Bài viết giải thích RAG là gì, cách RAG hoạt động từng bước, so sánh RAG với fine-tuning, các thành phần cần có, ví dụ ứng dụng và cách tự xây một hệ thống RAG đơn giản.
RAG là gì?
Thuật ngữ RAG được phổ biến từ bài báo năm 2020 của nhóm nghiên cứu Facebook AI (nay là Meta AI). Ý tưởng rất đơn giản: thay vì bắt LLM nhớ mọi thứ, ta cho nó "mở sách" khi làm bài.
Hãy hình dung hai sinh viên đi thi. Người thứ nhất chỉ dựa vào trí nhớ (LLM thông thường), có thể nhớ sai hoặc không biết kiến thức mới. Người thứ hai được mang tài liệu vào phòng thi (LLM + RAG): tìm đúng trang liên quan rồi mới viết câu trả lời. Người thứ hai thường trả lời chính xác hơn và có thể chỉ ra nguồn.
Vì sao cần RAG?
LLM có ba hạn chế lớn khi dùng trong doanh nghiệp:
- Kiến thức có mốc thời gian: mô hình không biết sự kiện xảy ra sau khi huấn luyện.
- Không biết dữ liệu riêng: chính sách công ty, tài liệu sản phẩm, hợp đồng, dữ liệu khách hàng.
- Ảo giác: khi thiếu thông tin, mô hình vẫn có thể tạo câu trả lời nghe hợp lý nhưng sai.
RAG giải quyết cả ba bằng cách đưa thông tin đúng và mới vào ngữ cảnh mỗi lần trả lời.
RAG hoạt động như thế nào?
Giai đoạn 1: Chuẩn bị dữ liệu (indexing)
- Thu thập tài liệu: PDF, Word, trang web, Notion, Google Drive, database.
- Chia nhỏ (chunking): cắt tài liệu thành các đoạn vài trăm token, có thể chồng lấn một phần để không mất ngữ cảnh.
- Tạo embedding: dùng mô hình embedding chuyển mỗi đoạn thành vector số biểu diễn ý nghĩa.
- Lưu trữ: đưa vector và nội dung gốc vào vector database.
Giai đoạn 2: Truy xuất và trả lời
- Người dùng đặt câu hỏi, ví dụ: "Nhân viên thử việc được nghỉ phép mấy ngày?"
- Câu hỏi được chuyển thành embedding.
- Hệ thống tìm các đoạn tài liệu có vector gần nhất (tương đồng ngữ nghĩa).
- Các đoạn này được ghép vào prompt cùng câu hỏi.
- LLM tạo câu trả lời dựa trên tài liệu, có thể kèm trích dẫn nguồn.
Ví dụ prompt trong hệ thống RAG
Bạn là trợ lý nhân sự. Chỉ trả lời dựa trên tài liệu dưới đây.
Nếu tài liệu không có thông tin, hãy nói "Tôi chưa tìm thấy thông tin này".
<tai_lieu>
[đoạn 1: Quy định nghỉ phép...]
[đoạn 2: Chế độ thử việc...]
</tai_lieu>
Câu hỏi: Nhân viên thử việc được nghỉ phép mấy ngày?
RAG khác gì fine-tuning?
| Tiêu chí | RAG | Fine-tuning |
|---|---|---|
| Cách hoạt động | Tra cứu tài liệu khi trả lời | Huấn luyện thêm để thay đổi mô hình |
| Cập nhật kiến thức | Chỉ cần cập nhật tài liệu | Phải huấn luyện lại |
| Chi phí ban đầu | Thấp hơn | Cao hơn (dữ liệu, tính toán) |
| Trích dẫn nguồn | Dễ | Khó |
| Phù hợp khi | Cần kiến thức chính xác, thay đổi thường xuyên | Cần đổi phong cách, định dạng, hành vi chuyên biệt |
Hai kỹ thuật không loại trừ nhau. Nhiều hệ thống kết hợp: fine-tune để mô hình nói đúng giọng thương hiệu, RAG để cung cấp kiến thức. Xem thêm Fine-tuning LLM là gì.
Các thành phần của một hệ thống RAG
- Bộ nạp dữ liệu (loader): đọc PDF, HTML, Docx, database.
- Bộ chia văn bản (text splitter).
- Mô hình embedding: của OpenAI, Google, Cohere hoặc mô hình mở trên Hugging Face hỗ trợ đa ngôn ngữ.
- Vector database: Pinecone, Qdrant, Weaviate, Chroma, Milvus hoặc pgvector trên PostgreSQL.
- LLM: GPT, Claude, Gemini hoặc mô hình tự host.
- Framework điều phối: LangChain, LlamaIndex, hoặc công cụ no-code như n8n.
Kỹ thuật nâng cao chất lượng RAG
- Chunking thông minh: chia theo tiêu đề, đoạn văn thay vì cắt cứng theo số ký tự.
- Hybrid search: kết hợp tìm kiếm theo từ khóa (BM25) và tìm kiếm vector, rất hữu ích với mã sản phẩm, tên riêng.
- Reranking: dùng mô hình xếp hạng lại để chọn đoạn liên quan nhất.
- Metadata filtering: lọc theo phòng ban, ngày, loại tài liệu trước khi tìm kiếm.
- Viết lại câu hỏi (query rewriting): làm rõ câu hỏi mơ hồ trước khi truy xuất.
- Đánh giá định kỳ: chuẩn bị bộ câu hỏi mẫu có đáp án để đo độ chính xác sau mỗi thay đổi.
Ứng dụng thực tế của RAG
- Chatbot chăm sóc khách hàng trả lời theo chính sách đổi trả, bảo hành mới nhất.
- Trợ lý nội bộ tra cứu quy trình, quy định nhân sự, tài liệu kỹ thuật.
- Hỗ trợ pháp lý tìm điều khoản trong hợp đồng, văn bản pháp luật.
- Trợ lý lập trình đọc tài liệu API và codebase của dự án.
- Học tập: hỏi đáp trên giáo trình, bài giảng.
Hướng dẫn xây hệ thống RAG đơn giản bằng Python
Dưới đây là khung tối giản để bạn hình dung luồng xử lý. Ví dụ dùng Chroma làm vector database chạy cục bộ; tên mô hình là chỗ trống để bạn thay bằng mô hình mình chọn.
import chromadb
from openai import OpenAI
client = OpenAI()
db = chromadb.Client()
col = db.create_collection("tai_lieu")
# 1. Nạp và chia nhỏ tài liệu (ở đây giả sử đã có danh sách đoạn văn)
chunks = ["Nhân viên chính thức có 12 ngày phép/năm...", "Thời gian thử việc..."]
col.add(documents=chunks, ids=[f"c{i}" for i in range(len(chunks))])
# 2. Truy xuất đoạn liên quan
question = "Nhân viên thử việc được nghỉ phép mấy ngày?"
hits = col.query(query_texts=[question], n_results=3)
context = "\n".join(hits["documents"][0])
# 3. Gửi ngữ cảnh + câu hỏi cho LLM
answer = client.chat.completions.create(
model="<tên-mô-hình>",
messages=[
{"role": "system", "content": "Chỉ trả lời dựa trên tài liệu được cung cấp."},
{"role": "user", "content": f"Tài liệu:\n{context}\n\nCâu hỏi: {question}"},
],
)
print(answer.choices[0].message.content)
Chroma mặc định dùng một mô hình embedding có sẵn; khi làm thật với tiếng Việt, bạn nên chọn mô hình embedding hỗ trợ đa ngôn ngữ và thử nghiệm chất lượng truy xuất trên chính dữ liệu của mình.
Xây RAG không cần code với n8n
Trong n8n, bạn có thể ghép các node: đọc file từ Google Drive → chia đoạn → tạo embedding → lưu vào vector store (như Qdrant, Pinecone hoặc Supabase) → node AI Agent nhận câu hỏi từ Telegram, Zalo hay website và truy xuất trước khi trả lời. Cách này phù hợp với người làm vận hành, marketing muốn có chatbot nội bộ nhanh.
Đo chất lượng RAG thế nào?
- Độ chính xác truy xuất: đoạn tài liệu đúng có nằm trong top kết quả không?
- Độ trung thực: câu trả lời có bám sát tài liệu, không thêm thông tin ngoài?
- Độ hữu ích: câu trả lời có giải quyết đúng câu hỏi của người dùng?
Những lỗi thường gặp khi triển khai RAG
- Tài liệu nguồn lỗi thời, trùng lặp hoặc mâu thuẫn, nên AI trả lời sai dù kỹ thuật đúng.
- Chunk quá nhỏ làm mất ngữ cảnh, quá lớn làm loãng thông tin.
- Không phân quyền: nhân viên hỏi được tài liệu mình không được phép xem.
- Không cho phép AI trả lời "không biết", khiến nó đoán khi không tìm thấy dữ liệu.
Câu hỏi thường gặp
RAG là viết tắt của gì?
RAG là viết tắt của Retrieval-Augmented Generation, tạm dịch là sinh nội dung tăng cường bằng truy xuất thông tin.
Có cần biết lập trình để làm RAG không?
Không bắt buộc. Bạn có thể dựng chatbot RAG cơ bản bằng công cụ no-code như n8n. Để tối ưu và mở rộng, kiến thức Python hoặc JavaScript sẽ rất hữu ích.
RAG có loại bỏ hoàn toàn ảo giác không?
Không hoàn toàn, nhưng giảm đáng kể nếu tài liệu tốt, truy xuất chính xác và prompt yêu cầu chỉ trả lời dựa trên nguồn.
Vector database có bắt buộc cho RAG không?
Với dữ liệu nhỏ, bạn có thể lưu vector trong bộ nhớ hoặc database thông thường. Khi dữ liệu lớn, vector database giúp tìm kiếm nhanh và dễ mở rộng.
RAG và AI Agent liên quan thế nào?
RAG thường là một "công cụ" của AI Agent: agent quyết định khi nào cần tra cứu tài liệu để hoàn thành nhiệm vụ.
Tự xây chatbot RAG cùng MelyDemy
Muốn biến tài liệu của bạn thành trợ lý AI trả lời chính xác? Khoá học build một AI Agent từ đầu hướng dẫn bạn kết hợp LLM với công cụ và dữ liệu. Nếu thích hướng no-code, hãy thử Khoá học AI Workflow với n8n & Cursor.