Vấn Đề Cốt Lõi
Khi xây dựng hệ thống RAG, một trong những quyết định quan trọng nhất là làm thế nào để chia nhỏ documents thành chunks. Chunking không đơn giản chỉ là split by character count - nó ảnh hưởng trực tiếp đến chất lượng retrieval và cuối cùng là chất lượng câu trả lời của LLM.
Tại Sao Chunking Quan Trọng?
1. Context Window Limitation: LLMs có giới hạn context (128K tokens cho GPT-4o). Nếu chunk quá lớn, bạn không thể đưa nhiều chunks vào context.
2. Semantic Coherence: Chunk quá nhỏ sẽ mất ngữ cảnh. Chunk quá lớn sẽ chứa nhiều topics không liên quan, gây noise cho retrieval.
3. Embedding Quality: Embedding models hoạt động tốt nhất với text có độ dài vừa phải (256-512 tokens). Text quá dài sẽ bị compress thông tin.
Các Chiến Lược Chunking
1. Fixed-Size Chunking
Chia theo số ký tự/tokens cố định. Đơn giản nhưng có thể cắt ngang câu.
2. Semantic Chunking
Sử dụng sentence boundaries hoặc paragraph breaks. Giữ được ngữ nghĩa tốt hơn.
3. Recursive Chunking
LangChain approach: Thử split theo paragraph -> sentence -> character nếu chunk vẫn quá lớn.
4. Document-Aware Chunking
Respect document structure: headers, sections, code blocks được giữ nguyên.
Code Ví Dụ
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200, # Overlap để giữ context
separators=["\n\n", "\n", ". ", " "]
)
chunks = splitter.split_documents(docs)
Pro Tips
- Overlap 10-20%: Giúp giữ context giữa các chunks liền kề
- Metadata enrichment: Thêm title, section header vào mỗi chunk
- Chunk size tuning: Test với query patterns thực tế của bạn
🔥 Rule of Thumb: Bắt đầu với 500-1000 tokens per chunk, overlap 10-20%. Tune dựa trên retrieval quality metrics.
