RAG系统文档切块究竟是先切还是后切,影响性能关键。
• 𝗽𝗿𝗲-𝗰𝗵𝘂𝗻𝗸𝗶𝗻𝗴(预切块):先将文档拆分成小块,再做embedding并存入向量库。优点是查询时速度快,因所有切块已预计算和索引,但需提前确定切块大小和边界。
• 𝗽𝗼𝘀𝘁-𝗰𝗵𝘂𝗻𝗸𝗶𝗻𝗴(后切块):先embedding整篇文档,查询时仅对检索到的文档再切块,且支持缓存切块结果,访问频繁时速度提升。优点是避免无用文档切块,切块更灵活且上下文感知,但首次访问有延迟,且需要更复杂的基础设施。
切块策略同样至关重要,从简单到高级,常见包括:
• 固定大小切块:按固定token或字符数切分,简单快速但可能破坏语义。
• 递归切块:先按段落,再按句子逐层拆分,保留文档结构。
• 基于文档结构切块:依据Markdown标题、HTML标签等格式元素切分,保持逻辑单元完整。
• 语义切块:基于语义相似度和话题边界拆分,适合密集复杂文本。
• 智能体切块(Agentic):由AI智能体综合文档结构和内容动态决策切块方案。
• 延迟切块(Late Chunking):先对全文做embedding,后利用上下文丰富的embedding生成切块,适合需要跨段关联的技术或法律文档。
• 分层切块:为超长复杂文档构建多级切块,支持从宏观到微观的多层次查询。
• 自适应切块:根据文本密度和结构动态调整切块大小和重叠,兼顾细节和上下文。
心得:
1. 选择预切还是后切,需权衡查询速度、系统复杂度和文档访问频率,后切块适合大规模稀疏访问场景。
2. 合适的切块大小和边界设计,是提升检索准确率和生成质量的基础,切块过大或过小都会降低性能。
3. 高级切块技术(如Agentic和Late Chunking)虽成本高,但对关键领域和复杂文档意义重大。
详见博客🔗weaviate.io/blog/chunking-strategies-for-rag
RAG 文档切块 向量数据库 大语言模型 检索增强生成