LlamaIndex统一管理存储组件的容器--StorageContext

StorageContext 定义和构成

在 LlamaIndex 中,StorageContext 是一个用于统一管理和协调各种存储组件的容器。

StorageContext 是 LlamaIndex 的存储上下文容器,结构上包含

  • docstore(文档存储)
  • index_store(索引存储)
  • vector_stores(向量存储,支持多命名空间)
  • graph_store(知识图谱存储)
  • property_graph_store(属性图存储,可选)

可通过 StorageContext.from_defaults() 快速创建默认存储,也可以自定义各个存储后端(如 Redis、MongoDB、Chroma、S3 等)。

用法上

  1. 支持 persist(persist_dir=...) 方法将所有存储组件持久化到指定目录,
  2. 后续可通过 StorageContext.from_defaults(persist_dir=...) 恢复。
  3. 还支持 add_vector_store、from_dict、to_dict 等方法,便于扩展和序列化。常见用法是配合索引的创建、保存和加载,实现高效的数据管理。

示例代码

使用 LlamaIndex 构建一个基于中文法律条文的向量索引系统,结合 HuggingFace 的本地嵌入模型和 Chroma 向量数据库,实现数据的持久化存储。

import  chromadb

from 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_model

chroma_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")  # <-- 新增

执行的结果:

LlamaIndex统一管理存储组件的容器--StorageContext_第1张图片

你可能感兴趣的:(AI检索增强生成RAG,人工智能,LlamaIndex)