Retrieval Augmented Generation (RAG)
RAG truy xuất các đoạn văn liên quan từ cơ sở tri thức bên ngoài rồi thêm chúng vào prompt của LLM, nhờ đó câu trả lời dựa trên các nguồn hiện hành, riêng tư và có thể trích dẫn.
Sinh tăng cường truy xuất (RAG) là kỹ thuật trong đó một model ngôn ngữ lớn (LLM) trả lời câu hỏi bằng các đoạn văn được truy xuất từ nguồn tri thức bên ngoài tại thời điểm truy vấn và chèn vào prompt bên cạnh câu hỏi. Dữ liệu huấn luyện của LLM dừng ở một mốc thời gian nhất định và không bao giờ bao gồm tài liệu nội bộ của công ty; vì vậy, nếu không có truy xuất, model hoặc thiếu dữ kiện hoặc bịa ra thông tin có vẻ hợp lý—một lỗi được gọi là ảo giác. Thuật ngữ này bắt nguồn từ bài báo năm 2020 Sinh tăng cường truy xuất cho các tác vụ NLP đòi hỏi nhiều tri thức của Patrick Lewis và cộng sự tại Facebook AI Research. Bài báo kết hợp bộ sinh BART tiền huấn luyện với retriever nơ-ron trên chỉ mục vector dày đặc của Wikipedia và đạt kết quả tiên tiến nhất trên ba tác vụ trả lời câu hỏi miền mở. Ngày nay, thuật ngữ này bao hàm mọi hệ thống truy xuất trước rồi mới tạo sinh.
Cách pipeline RAG hoạt động#
RAG hoạt động qua hai giai đoạn. Việc lập chỉ mục diễn ra trước: tài liệu được chia thành các đoạn, chẳng hạn bằng chia đoạn ngữ nghĩa, mỗi đoạn được chuyển thành một embedding, rồi các vector được lưu trong cơ sở dữ liệu vector. Khi có truy vấn, câu hỏi được embedding bằng cùng model, tìm kiếm vector trả về các đoạn gần nhất, rồi hệ thống tạo prompt từ hướng dẫn, các đoạn đó và câu hỏi. Sau đó, LLM viết câu trả lời dựa trên văn bản được cung cấp và có thể trích dẫn đoạn làm căn cứ cho từng khẳng định.
Các hệ thống production bổ sung những bước xoay quanh quy trình cốt lõi này. Tìm kiếm kết hợp phối hợp độ tương đồng vector với so khớp từ khóa để không bỏ sót các thuật ngữ chính xác như mã linh kiện; reranker sắp xếp lại các ứng viên hàng đầu bằng model chính xác hơn; còn truy xuất theo ngữ cảnh yêu cầu LLM thêm một ghi chú ngắn vào đầu mỗi đoạn, đặt đoạn đó vào đúng vị trí trong tài liệu trước khi lập chỉ mục. Các framework như LangChain và LlamaIndex đóng gói những thành phần này.
Các bước truy xuất và tăng cường có thể được viết gọn trong vài dòng Python với thư viện Sentence Transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# Knowledge base: passages the LLM never saw during training
passages = [
"Badge access to Building C requires a safety briefing completed within the last 12 months.",
"The cafeteria in Building A serves breakfast from 7:00 to 9:30 on weekdays.",
"Forklift operators must renew their certification every three years.",
]
passage_embeddings = model.encode(passages)
# Retrieve: embed the question and keep the most similar passage
question = "How often do I need to redo forklift training?"
scores = model.similarity(model.encode(question), passage_embeddings)[0]
context = passages[int(scores.argmax())]
# Augment: put the retrieved passage in the prompt the LLM will answer from
prompt = f"Answer using only this context.\nContext: {context}\nQuestion: {question}"
print(prompt)Lệnh này in ra một prompt chứa đoạn văn về chứng nhận lái xe nâng, được câu hỏi khớp về mặt ý nghĩa: câu hỏi hỏi về việc học lại, còn đoạn văn nói về gia hạn chứng nhận. Bất kỳ LLM nào cũng có thể trả lời dựa trên prompt đó, và các đoạn văn có thể thay đổi hằng ngày mà không cần huấn luyện lại model.
RAG so với tinh chỉnh và ngữ cảnh dài#
- Tinh chỉnh: Cập nhật trọng số của model bằng các ví dụ mới. Phương pháp này thay đổi tốt hành vi, phong cách và định dạng đầu ra, nhưng là cách chậm để bổ sung các dữ kiện thường xuyên thay đổi và không để lại nguồn để trích dẫn; vì vậy, nhiều hệ thống tinh chỉnh model về định dạng và dùng RAG cho tri thức.
- Cửa sổ ngữ cảnh dài: Các model nhận được một triệu token có thể đọc trực tiếp một tập tài liệu lớn, nhưng mỗi truy vấn phải trả phí cho mọi token và độ chính xác giảm khi đầu vào dài hơn, hiện tượng được gọi là suy thoái ngữ cảnh. RAG chỉ gửi những đoạn văn bản cần thiết.
Một số biến thể mở rộng mô hình cơ bản này: GraphRAG truy xuất từ đồ thị tri thức, RAG dạng agent cho phép agent quyết định thời điểm và nơi cần tìm kiếm, còn RAG đa phương thức truy xuất hình ảnh, video và âm thanh bên cạnh văn bản.
Các ứng dụng của RAG#
- Chatbot doanh nghiệp: Trợ lý nội bộ trả lời dựa trên chính sách, wiki và phiếu hỗ trợ trước đây, đồng thời liên kết đến đoạn văn làm căn cứ cho từng câu trả lời.
- Hỗ trợ khách hàng: Trước khi phản hồi, trợ lý truy xuất hướng dẫn sử dụng của đúng model sản phẩm mà khách hàng sở hữu và lịch sử đơn hàng của khách hàng đó.
- Y tế: Trợ lý lâm sàng truy xuất hướng dẫn hiện hành và tài liệu tham khảo về thuốc, nhờ đó câu trả lời dẫn đến nguồn có thể kiểm chứng thay vì dựa vào bộ nhớ của model.
RAG cũng trả lời được câu hỏi về video. LLM không thể xem hàng giờ cảnh quay cho mỗi câu hỏi, vì vậy kết hợp RAG với thị giác máy tính trước tiên sẽ chuyển cảnh quay thành các bản ghi có thể truy xuất. Ultralytics YOLO26 ở chế độ tracking báo cáo class, bounding box và track ID ổn định của từng đối tượng trong mỗi frame; pipeline lưu các thông tin này thành hàng dữ liệu, nhờ đó câu hỏi như "Sáng nay có bao nhiêu xe tải đi vào dock 3?" sẽ truy xuất các hàng đó thay vì video.
Vì sao RAG trả lời sai#
RAG có thể thất bại ở hai khâu. Lỗi truy xuất xảy ra khi đoạn chứa câu trả lời không được đưa vào prompt, do quá trình chia đoạn tách rời nội dung, model embedding không nhận ra từ đồng nghĩa hoặc đoạn đó xếp ngay dưới ngưỡng top-k; lỗi này được đo bằng recall tại k trên một tập câu hỏi kiểm thử. Lỗi tạo sinh xảy ra khi đoạn đúng đã được truy xuất nhưng model bỏ qua, đọc sai hoặc đưa ra thông tin mâu thuẫn với đoạn đó. Các thư viện đánh giá như Ragas chấm điểm cả hai khâu: context recall cho retriever và độ trung thực cho bộ sinh, được định nghĩa là tỷ lệ các khẳng định trong câu trả lời được ngữ cảnh truy xuất hỗ trợ.










