LlamaIndex统一管理存储组件的容器--StorageContext
StorageContext
定义和构成
在 LlamaIndex 中,StorageContext
是一个用于统一管理和协调各种存储组件的容器。
StorageContext 是 LlamaIndex 的存储上下文容器,结构上包含
- docstore(文档存储)
- index_store(索引存储)
- vector_stores(向量存储,支持多命名空间)
- graph_store(知识图谱存储)
- property_graph_store(属性图存储,可选)。
可通过 StorageContext.from_defaults() 快速创建默认存储,也可以自定义各个存储后端(如 Redis、MongoDB、Chroma、S3 等)。
用法上
- 支持 persist(persist_dir=...) 方法将所有存储组件持久化到指定目录,
- 后续可通过 StorageContext.from_defaults(persist_dir=...) 恢复。
- 还支持 add_vector_store、from_dict、to_dict 等方法,便于扩展和序列化。常见用法是配合索引的创建、保存和加载,实现高效的数据管理。
示例代码
使用 LlamaIndex 构建一个基于中文法律条文的向量索引系统,结合 HuggingFace 的本地嵌入模型和 Chroma 向量数据库,实现数据的持久化存储。
import chromadbfrom llama_index.core import StorageContext, Settings,VectorStoreIndex
from llama_index.core.schema import TextNode
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.embeddings.huggingface import HuggingFaceEmbedding# Embedding模型
embed_model = HuggingFaceEmbedding(model_name=r"D:\Test\LLMTrain\testllm\llm\BAAI\bge-m3",# encode_kwargs = {# 'normalize_embeddings': True,# 'device': 'cuda' if hasattr(Settings, 'device') else 'cpu'# })Settings.embed_model = embed_modelchroma_client = chromadb.PersistentClient(path=r"D:\Test\LLMTrain\day22_rag_data\chroma_db")
chroma_collection = chroma_client.get_or_create_collection(name="chinese_labor_laws",metadata={"hnsw:space": "cosine"})# 确保存储上下文正确初始化
storage_context = StorageContext.from_defaults(vector_store=ChromaVectorStore(chroma_collection=chroma_collection)
)# 制造一些测试数据
nodes = []
node = TextNode(text="为了保护劳动者的合法权益,调整劳动关系,建立和维护适应社会主义市场经济的劳动制度,促进经济发展和社会进步,根据宪法,制定本法。",id_="劳动法 第一条",metadata={"law_name": "劳动法","article": "动法","full_title": "劳动法 第一条","source_file": "官网","content_type": "legal_article"})
nodes.append(node)# 显式将节点添加到存储上下文
storage_context.docstore.add_documents(nodes)
index = VectorStoreIndex(nodes,storage_context=storage_context,show_progress=True
)
# 双重持久化保障
storage_context.persist(persist_dir=r"D:\Test\LLMTrain\day22_rag_data\storage")
index.storage_context.persist(persist_dir=r"D:\Test\LLMTrain\day22_rag_data\storage") # <-- 新增
执行的结果: