LlamaIndex: 构建动态知识体系,应对文档变更挑战
在现代企业数据环境中,文档管理面临着持续变化的挑战——每天都有新的报告生成、旧文档更新或过时资料被删除。这种动态环境对于基于向量数据库的知识检索系统提出了严峻考验:如何确保您的AI应用始终基于最新、最准确的信息运行?
LlamaIndex作为连接大语言模型与企业数据的桥梁,提供了一套优雅的解决方案来处理文档的动态变化。下面,我们将探索一种实用且高效的方法,确保您的索引始终与源文档保持同步,无需重新构建整个知识库。
文档变更管理方案
当原始文件发生变化(更新、删除、新增)时,LlamaIndex提供了几种方法来维护和更新索引。以下是一个实用的实现方案:
1. 使用 StorageContext
和持久化
首先,我们需要确保索引可以被持久化保存到磁盘,这样才能在后续进行增量更新:
from llama_index import VectorStoreIndex, SimpleDirectoryReader, StorageContext
from llama_index.storage.docstore import SimpleDocumentStore
from llama_index.storage.index_store import SimpleIndexStore
from llama_index.vector_stores import SimpleVectorStore
import os
# 创建存储上下文
storage_context = StorageContext.from_defaults(
docstore=SimpleDocumentStore(),
index_store=SimpleIndexStore(),
vector_store=SimpleVectorStore()
)
# 从目录加载文档
documents = SimpleDirectoryReader("./data").load_data()
# 构建索引并持久化
index = VectorStoreIndex.from_documents(
documents,
storage_context=storage_context
)
# 将索引保存到磁盘
index.storage_context.persist(persist_dir="./storage")
2. 实现增量更新机制
为了处理文件变化,我们可以实现一个跟踪文件变化的系统:
from llama_index import load_index_from_storage
import hashlib
import json
import os
from datetime import datetime
class IndexManager:
def __init__(self, data_dir, storage_dir):
self.data_dir = data_dir
self.storage_dir = storage_dir
self.file_metadata_path = os.path.join(storage_dir, "file_metadata.json")
self.file_metadata = self._load_file_metadata()
def _load_file_metadata(self):