[Miễn phí] Học RAG cùng NotebookLM: Làm sao LLM trả lời dựa trên tài liệu của bạn?
Giới thiệu về khóa học
Hệ thống RAG (Retrieval Augmented Generation) Hệ thống RAG được thiết kế để cho phép các mô hình ngôn ngữ lớn (LLM) truy cập và sử dụng kiến thức từ các nguồn dữ liệu bên ngoài để tạo ra câu trả lời. Thay vì chỉ dựa vào thông tin mà chúng được huấn luyện, các mô hình RAG có thể truy xuất thông tin liên quan từ một cơ sở kiến thức riêng, giúp câu trả lời chính xác và cập nhật hơn.
Kiến trúc tiêu chuẩn của một hệ thống RAG Theo sơ đồ kiến trúc tiêu chuẩn được minh họa trong tài liệu, hệ thống RAG bao gồm các giai đoạn chính sau:
1. Tiền xử lý Cơ sở Kiến thức (Knowledge DB Preprocessing):
◦ Tải tài liệu (Document Loading): Quá trình này bắt đầu bằng việc tải dữ liệu từ các nguồn khác nhau. LangChain cung cấp hàng trăm tích hợp với nhiều nguồn dữ liệu như Slack, Notion, Google Drive, v.v. để tải các đối tượng tài liệu (document objects). Các Document Loader triển khai giao diện BaseLoader và có thể được gọi bằng phương thức .load() hoặc .lazy_load() để làm việc với các tập dữ liệu lớn.
◦ Chia văn bản (Text Splitters): Tài liệu lớn thường cần được chia nhỏ thành các đoạn (chunks) nhỏ hơn, dễ quản lý hơn. Việc chia văn bản giúp xử lý độ dài tài liệu không đồng nhất, vượt qua giới hạn kích thước đầu vào của mô hình, cải thiện chất lượng biểu diễn văn bản và tăng độ chính xác khi truy xuất.
Có nhiều chiến lược chia văn bản khác nhau:
Dựa trên độ dài (Length-based): Chia dựa trên số lượng ký tự hoặc token.
Dựa trên cấu trúc văn bản (Text-structured based): Chia dựa trên cấu trúc tự nhiên của văn bản như đoạn văn, câu, sử dụng các công cụ như RecursiveCharacterTextSplitter.
Dựa trên cấu trúc tài liệu (Document-structured based): Chia dựa trên định dạng tài liệu như HTML, Markdown, JSON, hoặc mã nguồn.
Dựa trên ý nghĩa ngữ nghĩa (Semantic meaning based): Chia văn bản tại các điểm có sự thay đổi đáng kể về ý nghĩa, thường sử dụng kỹ thuật cửa sổ trượt (sliding window) và so sánh embedding.
◦ Embedding (Embedding Model): Các đoạn văn bản đã được chia nhỏ sau đó được chuyển đổi thành các biểu diễn vector số (vector representation) bằng cách sử dụng Embedding model. LangChain tích hợp với nhiều nhà cung cấp mô hình embedding khác nhau. Quá trình embedding này tạo ra “dữ liệu được lưu trữ” (Stored Data) dưới dạng vector trong cơ sở dữ liệu vector (Vector DB).
2. Lưu trữ Vector (Vector DB):
◦ Các vector embeddings của các đoạn văn bản được lưu trữ trong một Vector Store (cơ sở dữ liệu vector). Vector Store được thiết kế để lưu trữ dữ liệu nhúng và thực hiện tìm kiếm tương đồng (similarity search) một cách hiệu quả. LangChain hỗ trợ rất nhiều Vector Store khác nhau.
3. Quá trình Truy xuất (Retrieval) khi có truy vấn của người dùng:
◦ Người dùng đặt câu hỏi (Ask): Quá trình bắt đầu khi người dùng đưa ra một truy vấn (query) dưới dạng văn bản.
◦ Tìm kiếm Vector (Vector Search): Truy vấn của người dùng được nhúng (embedded) thành vector bằng cách sử dụng cùng Embedding Model đã dùng để nhúng dữ liệu trong Vector DB. Vector truy vấn này sau đó được sử dụng để tìm kiếm tương đồng trong Vector DB.
◦ Truy xuất Tài liệu liên quan (Retrievers): Kết quả của quá trình tìm kiếm vector là các đoạn văn bản từ cơ sở kiến thức có vector tương đồng nhất với vector truy vấn của người dùng.
4. Tạo câu trả lời (Generate Answer) bằng Mô hình Chat:
◦ “Relevant Context” được truy xuất cùng với truy vấn ban đầu của người dùng (“Prompt + Context Retrieved”) được đưa làm đầu vào cho mô hình ngôn ngữ lớn (Large Language Model – LLM), cụ thể là một Chat model.
◦ Chat models là các mô hình ngôn ngữ được thiết kế để làm việc với chuỗi tin nhắn làm đầu vào và trả về tin nhắn làm đầu ra. LangChain tích hợp với nhiều nhà cung cấp Chat model nổi bật như OpenAI, Anthropic, Google Gemini, Cohere, v.v..
◦ Chat model sử dụng ngữ cảnh được cung cấp và truy vấn của người dùng để tạo ra câu trả lời phù hợp.
◦ Cuối cùng, hệ thống trả về “User Response” (phản hồi cho người dùng).
Link tài liệu mình đã sử dụng để import vào NotebookLM: https://python.langchain.com/docs/concepts/document_loaders/ https://python.langchain.com/docs/concepts/text_splitters/ https://python.langchain.com/docs/integrations/text_embedding/ https://python.langchain.com/docs/integrations/vectorstores/ https://python.langchain.com/docs/concepts/retrievers/ https://python.langchain.com/docs/integrations/chat/ https://docs.smith.langchain.com/
✅ Đừng quên để lại comment nếu bạn có bất kỳ thắc mắc nào về nội dung bài học này nhé, mình chắc chắn sẽ đọc và trả lời bạn, hoặc nếu mình không biết trả lời như thế nào thì mình cũng sẽ tìm kiếm trên Google, ChatGPT hoặc các tài liệu khác để trả lời cho bạn.
Chúc bạn học tập vui vẻ nhé.