Xây dựng Agentic RAG với LangGraph, ghi nhớ và làm rõ truy vấn
TL;DR
Hướng dẫn build Agentic RAG (Retrieval-Augmented Generation) với LangGraph — hệ thống tìm kiếm tài liệu thông minh, có conversation memory, tự query lại khi kết quả chưa đủ, và hỏi lại người dùng khi câu hỏi chưa rõ ràng.
Nói đơn giản: AI tìm kiếm tài liệu giờ có thể nhớ cuộc trò chuyện trước đó, tự phân tích câu hỏi phức tạp thành nhiều sub-query chạy song song, và tự kiểm tra xem kết quả đã đủ chưa.
Bài này dành cho ai?
1. Người muốn AI làm việc thay mình
Vấn đề: AI tìm kiếm tài liệu hiện tại chỉ trả lời một lần, không nhớ context, không chịu hỏi lại khi không hiểu câu hỏi.
Khi nào cần: Cần hỏi AI về tài liệu PDF dài, cần nó nhớ được các câu hỏi trước đó.
Được gì: Hệ thống tìm kiếm thông minh, nhớ conversation, tự query lại khi cần.
2. Người muốn build sản phẩm
Vấn đề: Muốn build chatbot tìm kiếm tài liệu nhưng không biết bắt đầu từ đâu, code lộn xộn không modular.
Khi nào cần: Cần reference architecture để phát triển sản phẩm RAG thực tế.
Được gì: Full codebase có sẵn, modular — đổi LLM provider chỉ 1 dòng code.
3. Người muốn học LangGraph
Vấn đề: LangGraph khó hiểu, không có example thực tế, toàn lý thuyết.
Khi nào cần: Muốn hiểu cách build workflow có nhiều bước, nhiều agent, có memory.
Được gì: Tutorial step-by-step và code chạy được, giải thích từng thành phần.
Các điểm chính
1. Hierarchical Indexing — Parent/Child chunks Tài liệu được chia 2 lần: Parent chunks lớn theo header (H1, H2, H3), Child chunks nhỏ 500 ký tự. Search bằng child để chính xác, retrieve parent để lấy context đầy đủ. → Làm gì: Dùng MarkdownHeaderTextSplitter + RecursiveCharacterTextSplitter cho documents.
2. Conversation Memory AI tóm tắt conversation trước đó thành 1-2 câu, dùng context đó để hiểu câu hỏi tiếp theo. Ví dụ: hỏi “cập nhật nó như nào?” → AI biết “nó” là gì nhờ context. → Làm gì: Thêm bước conversation_summary vào đầu workflow.
3. Query Clarification AI tự phân tích câu hỏi: sửa lỗi chính tả, tách câu hỏi phức tạp thành nhiều sub-query, phát hiện câu hỏi mơ hồ và dừng lại hỏi người dùng. → Làm gì: Viết prompt rewrite_query để AI tự làm rõ trước khi search.
4. Multi-Agent Map-Reduce Câu hỏi “JavaScript là gì? Python là gì?” → spawn 2 agent song song, mỗi agent search riêng. Sau đó aggregate kết quả thành 1 câu trả lời. → Làm gì: Dùng LangGraph Send() để parallelize sub-queries.
5. Self-Correction Agent tự kiểm tra kết quả tìm được. Nếu thấy không đủ, tự search lại với từ khóa khác. Có giới hạn 8 tool calls và 10 iterations để tránh infinite loop. → Làm gì: Thêm logic kiểm tra relevance_score, nếu dưới 0.7 thì query lại.
6. Context Compression Mỗi lần retrieval, context được nén lại còn ~400-600 words. Tránh quá tải LLM với context quá dài. → Làm gì: Dùng tiktoken đếm token, nếu > 2000 thì compress.
7. Modular Architecture Đổi từ Ollama sang OpenAI/Claude chỉ cần sửa 1 dòng. Tương tự cho embedding model, vector DB (Qdrant), PDF converter. → Làm gì: Tách config ra file riêng, dùng LangChain abstraction.
Quick Start
-
Chạy thử Colab ngay tuần này: Mở link Google Colab trong README, chạy notebook từ đầu đến cuối. Xem workflow chạy như nào trước.
-
Thay đổi LLM provider: Trong code, đổi
ChatOllamathànhChatOpenAIhoặcChatAnthropic. Xem nó hoạt động với model khác.
Đang tải nội dung...