1. 增量索引构建
对于大规模数据集,LlamaIndex 支持增量构建索引,避免一次性处理所有文档导致的内存问题。通过 IngestionPipeline 和文档校验和机制,系统能够检测已索引的文档,只处理新增或变更的文档。
2. 文档更新策略
LlamaIndex 提供三种文档更新操作:
- insert:插入新文档,只处理新增内容,不重建整个索引。
- delete_ref_doc:按 ID 删除指定文档及其相关节点。
- update_ref_doc:原地替换文档内容,适用于内容变更的场景。
3. 增量同步机制
LlamaCloud 托管服务提供自动化的增量同步功能,追踪文件变更并只处理修改过的文件。例如,一个包含 1000 个文档的文件夹新增 50 个文件时,下次同步只处理这 50 个文件,解析成本和延迟与实际文档活动量成正比,而非文件夹大小。
4. 大规模处理最佳实践
- 批处理:将文档分批处理,每批处理完成后持久化,避免数据丢失。
- 索引分区:按文档类型、日期范围或访问范围对索引进行分区,查询时只搜索相关分区。
- 层次化索引:顶层使用摘要索引,下层使用详细索引,先查询摘要层,需要时再深入。
- 时间分片:将数据按时间分片存储,每个分片维护独立索引,更新时只重建当前分片。
5. 注意事项
增量更新并非万能,实践中需要注意:
- 向量空间漂移:随着增量更新累积,索引的向量空间分布可能发生偏移,导致检索一致性下降。
- 删除操作残留:删除文档时,如果该文档的节点已被合并到聚合结构中(如 TreeIndex 的摘要节点),可能无法完全清理所有关联数据。
- 元数据误触发:需注意 Node 哈希计算是否包含易变的文件系统元数据,避免未变更文档被误判为"已变更"。