当前位置: 首页 > news >正文

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

执行的结果:

相关文章:

  • ES类的索引轮换
  • 轻量化定时工具!Pt 极简界面 :定时备份 + 循环灵活关机
  • 深度优先搜索(DFS)与广度优先搜索(BFS):图与树遍历的两大利器
  • 分布式系统中的 ActiveMQ:异步解耦与流量削峰(二)
  • vue-chat 开源即时聊天系统web本地运行方法
  • 《CUDA:解构GPU计算的暴力美学与工程哲学》
  • 文章记单词 | 第62篇(六级)
  • 25考频高的前端面试题
  • 从图文到声纹:DeepSeek 多模态技术的深度解析与实战应用
  • Leetcode 3538. Merge Operations for Minimum Travel Time
  • 当SONiC遇到CPO,SONiC对共封装光接口的管理
  • ubuntu-PyQt5安装+PyCharm配置QtDesigner + QtUIC
  • 码蹄集——偶数位、四边形坐标
  • 电动调节V型球阀的作用:专为颗粒状含碱浆液介质打造的高效解决方案-耀圣
  • Easy云盘总结篇-文件上传02
  • 2025年PMP 学习三
  • 爬虫管理平台-最新版本发布
  • 学习spring boot-拦截器Interceptor,过滤器Filter
  • ResNet改进(36):ResNeXt与ResNet的混合模型实现
  • 解决:前后端跨域请求
  • 17家城商行去年年报盘点:西安银行营收增速领跑,青岛银行净利增速领跑
  • 印度扩大对巴措施:封锁巴基斯坦名人账号、热门影像平台社媒
  • 香港金紫荆广场举行五四升旗礼
  • 上音校园春日花艺引路人打卡,阳台音乐会吹响《玫瑰人生》
  • 见证历史与未来共舞:上海西岸“蝶变共生”对话讲坛圆满举行
  • 韩国经济副总理崔相穆宣布辞职