LlamaIndex 支持模块(Supporting Modules)配置指南:Settings 全局配置与 StorageContext 存储定制
LlamaIndex 支持模块Supporting Modules配置指南Settings 全局配置与 StorageContext 存储定制【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index本文围绕 LlamaIndex 中的两个核心配置模块——全局Settings对象与StorageContext存储上下文——展开讲解。它们可以单独配置后传给各个索引也可以作为全局默认值统一生效。读完本文你将掌握如何配置 LLM、嵌入模型、节点解析器、回调、分词器等全局资源如何将旧的ServiceContext迁移到Settings以及如何通过StorageContext定制文档、向量与索引的存储位置。什么是 Supporting Modules在 LlamaIndex 的模块体系中Supporting Modules支持模块是两大可独立配置、并可作为全局默认值使用的配置模块Settings包含你正在使用的 LLM、嵌入模型、节点解析器Node Parser、回调管理器Callback Manager等常用资源。StorageContext用于指定文档Node对象、向量嵌入和索引元数据的存储位置与存储方式详见官方文档 customizing storage。它们的特点是“可以分别配置后传给单个索引也可以全局设置”。你可以在 module_guides/index.md 中查看整个模块指南的目录结构Supporting Modules 位于 supporting_modules 目录下包含三个文档settings.mdx配置 Settings、service_context_migration.md迁移指南、supporting_modules.md本页概览。Settings应用全局的配置单例Settings是索引与查询阶段常用资源的集合可以在整个 LlamaIndex 工作流/应用中设置全局配置。它是一个贯穿应用生命周期的简单单例对象当某个组件没有被显式提供时Settings对象会作为全局默认值来提供它。在源码层面Settings实现在 llama-index-core/llama_index/core/settings.py 中核心是一个带懒加载特性的_Settingsdataclass。从源码结构可以看到各属性_llm、_embed_model、_callback_manager、_tokenizer、_node_parser、_prompt_helper、_transformations等默认均为None只有在你首次访问对应属性时才通过resolve_llm(default)或resolve_embed_model(default)等函数解析出默认实现。这也解释了“参数懒加载”的行为LLM 或嵌入模型只有在底层模块真正需要时才会被加载。局部配置transformations、LLM、嵌入模型则可以直接传入使用它们的接口实现覆盖全局默认值。配置 LLMLLM 用于响应提示与查询负责生成自然语言回复。通过Settings.llm设置from llama_index.llms.openai import OpenAI from llama_index.core import Settings Settings.llm OpenAI(modelgpt-3.5-turbo, temperature0.1)设置后所有未显式传入llm的索引、查询引擎、Agent 等组件都会使用该 LLM。从 settings.py 可以看到llm属性在 setter 中会经过resolve_llm解析支持直接传 LLM 实例或字符串形式的模型名而在 getter 中会为 LLM 自动挂接全局callback_manager。配置嵌入模型嵌入模型用于将文本转换为数值表示用于计算相似度与 top-k 检索。通过Settings.embed_model设置from llama_index.embeddings.openai import OpenAIEmbedding from llama_index.core import Settings Settings.embed_model OpenAIEmbedding( modeltext-embedding-3-small, embed_batch_size100 )与 LLM 一样embed_model的 getter/setter 在 settings.py 中实现了懒加载与回调管理器挂接。配置节点解析器 / 文本分割器节点解析器/文本分割器用于将文档解析为更小的块称为节点Node。通过Settings.text_splitter设置from llama_index.core.node_parser import SentenceSplitter from llama_index.core import Settings Settings.text_splitter SentenceSplitter(chunk_size1024)如果只想改变 chunk_size 或 chunk_overlap而不更换默认分割器也可以直接设置这两个属性Settings.chunk_size 512 Settings.chunk_overlap 20在源码中Settings还暴露了node_parser属性settings.py中的_node_parser用于在查询路径中解析/分割节点二者配合可以灵活控制分块行为。配置 Transformations摄取期变换Transformations 在摄取ingestion阶段作用于Document。默认使用node_parser/text_splitter但可以覆盖并进一步自定义from llama_index.core.node_parser import SentenceSplitter from llama_index.core import Settings Settings.transformations [SentenceSplitter(chunk_size1024)]从源码看_transformations是List[TransformComponent]类型的字段TransformComponent是 LlamaIndex 中变换组件的基类因此你可以传入自定义的变换组件列表而不仅是分割器。配置 TokenizerTokenizer 用于统计 token 数量应设置为与你使用的 LLM 匹配的实现from llama_index.core import Settings # openai import tiktoken Settings.tokenizer tiktoken.encoding_for_model(gpt-3.5-turbo).encode # open-source from transformers import AutoTokenizer Settings.tokenizer AutoTokenizer.from_pretrained( mistralai/Mixtral-8x7B-Instruct-v0.1 )注原文档中开源示例的变量名存在笔误Settings.tokenzier实际属性名为Settings.tokenizer上面已修正。tokenizer 用于 token 计数、上下文窗口计算与成本估算选错会导致长度估算偏差。配置 Callbacks可以设置全局回调管理器CallbackManager用于观察和消费整个 llama-index 代码中产生的事件from llama_index.core.callbacks import TokenCountingHandler, CallbackManager from llama_index.core import Settings token_counter TokenCountingHandler() Settings.callback_manager CallbackManager([token_counter])设置后Settings在解析 LLM 与嵌入模型时会把该callback_manager自动挂接到模型实例上见 settings.py从而实现全局事件追踪例如统计 token 使用量。配置 Prompt Helper 参数查询期间会用到几个特定参数以确保发送给 LLM 的提示词为生成指定数量的 token 留出足够空间。通常这些参数会根据 LLM 的属性自动配置但在特殊情况下可以覆盖from llama_index.core import Settings # maximum input size to the LLM Settings.context_window 4096 # number of tokens reserved for text generation. Settings.num_output 256context_windowLLM 的最大输入大小num_output为文本生成预留的 token 数量。从 settings.py 可以看到Settings同时持有prompt_helper与chat_prompt_helper字段这些参数会直接影响 PromptHelper 对提示词长度的规划。局部配置Local Configurations使用 Settings 特定部分的接口也可以接受局部覆盖覆盖值优先于全局默认index VectorStoreIndex.from_documents( documents, embed_modelembed_model, transformationstransformations ) query_engine index.as_query_engine(llmllm)这种“全局默认 局部覆盖”的设计使得同一应用中不同索引可以使用不同的 LLM 或嵌入模型而不必反复修改全局状态。从 ServiceContext 迁移到 Settings自 v0.10.0 起LlamaIndex 引入了新的全局Settings对象用于取代旧的ServiceContext配置。为什么要迁移新的Settings是全局配置对象参数采用懒加载方式实例化——LLM、嵌入模型等属性只在底层模块真正需要时才加载。而旧的 ServiceContext 时代各个模块往往没有使用它并且它会在运行时强制把每个组件都加载进内存即使这些组件并未被使用。可见Settings在内存占用与启动开销上更优。全局配置的威力配置全局 Settings 意味着改变 LlamaIndex 中每个模块的默认值。例如如果你不使用 OpenAI一个典型的配置如下from llama_index.llms.ollama import Ollama from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.core import Settings Settings.llm Ollama(modelllama2, request_timeout120.0) Settings.embed_model HuggingFaceEmbedding( model_nameBAAI/bge-small-en-v1.5 )有了这组 Settings可以确保框架内永远不会使用 OpenAI。Settings对象支持几乎与旧ServiceContext相同的全部属性完整列表见 settings.mdx。完整迁移示例下面是从ServiceContext迁移到Settings的完整对照迁移前Beforefrom llama_index.embeddings.openai import OpenAIEmbedding from llama_index.core.node_parser import SentenceSplitter from llama_index.llms.openai import OpenAI from llama_index.core import ServiceContext, set_global_service_context service_context ServiceContext.from_defaults( llmOpenAI(modelgpt-3.5-turbo), embed_modelOpenAIEmbedding(modeltext-embedding-3-small), node_parserSentenceSplitter(chunk_size512, chunk_overlap20), num_output512, context_window3900, ) set_global_service_context(service_context)迁移后Afterfrom llama_index.embeddings.openai import OpenAIEmbedding from llama_index.core.node_parser import SentenceSplitter from llama_index.llms.openai import OpenAI from llama_index.core import Settings Settings.llm OpenAI(modelgpt-3.5-turbo) Settings.embed_model OpenAIEmbedding(modeltext-embedding-3-small) Settings.node_parser SentenceSplitter(chunk_size512, chunk_overlap20) Settings.num_output 512 Settings.context_window 3900迁移要点删除ServiceContext.from_defaults(...)与set_global_service_context(...)调用改为直接对Settings的各属性赋值原来通过node_parser传入的SentenceSplitter对应到Settings.node_parsernum_output、context_window等参数名保持不变。按模块配置Local Config以上介绍的是全局配置。若要按模块配置所有模块接口都应支持接收所用对象的 kwargs在 IDE 中可通过智能提示自动补全示例如下# a vector store index only needs an embed model index VectorStoreIndex.from_documents( documents, embed_modelembed_model, transformationstransformations ) # ... until you create a query engine query_engine index.as_query_engine(llmllm)# a document summary index needs both an llm and embed model # for the constructor index DocumentSummaryIndex.from_documents( documents, embed_modelembed_model, llmllm )值得注意的是向量存储索引在构建时通常只需要嵌入模型用于生成向量而文档摘要索引DocumentSummaryIndex在构造时同时需要 LLM 与嵌入模型LLM 用于生成摘要。这种差异体现了按需注入局部配置的灵活性。StorageContext定制存储层除了Settings之外Supporting Modules 概览中提到的另一个配置模块是StorageContext。默认情况下LlamaIndex 用 5 行以内的代码就能让你查询数据from llama_index.core import VectorStoreIndex, SimpleDirectoryReader documents SimpleDirectoryReader(data).load_data() index VectorStoreIndex.from_documents(documents) query_engine index.as_query_engine() response query_engine.query(Summarize the documents.)但底层LlamaIndex 支持可替换的存储层storage layer允许你定制摄取后的文档即Node对象、嵌入向量和索引元数据的存储位置详见 customizing storage。低层 API 示例使用低层 API 可以获得更细粒度的控制。以默认的简单存储实现为例from llama_index.core.storage.docstore import SimpleDocumentStore from llama_index.core.storage.index_store import SimpleIndexStore from llama_index.core.vector_stores import SimpleVectorStore from llama_index.core.node_parser import SentenceSplitter # create parser and parse document into nodes parser SentenceSplitter() nodes parser.get_nodes_from_documents(documents) # create storage context using default stores storage_context StorageContext.from_defaults( docstoreSimpleDocumentStore(), vector_storeSimpleVectorStore(), index_storeSimpleIndexStore(), ) # create (or load) docstore and add nodes storage_context.docstore.add_documents(nodes) # build index index VectorStoreIndex(nodes, storage_contextstorage_context) # save index index.storage_context.persist(persist_dirpersist_dir) # can also set index_id to save multiple indexes to the same folder index.set_index_id(index_id) index.storage_context.persist(persist_dirpersist_dir) # to load index later, make sure you setup the storage context # this will load the persisted stores from persist_dir storage_context StorageContext.from_defaults(persist_dirpersist_dir) # then load the index object from llama_index.core import load_index_from_storage loaded_index load_index_from_storage(storage_context) # if loading an index from a persist_dir containing multiple indexes loaded_index load_index_from_storage(storage_context, index_idindex_id) # if loading multiple indexes from a persist dir loaded_indices load_index_from_storage( storage_context, index_ids[index_id, ...] )要点说明StorageContext由三类存储组成docstore文档/节点存储、vector_store向量存储、index_store索引元数据存储通过StorageContext.from_defaults(...)可以用一行改动替换任意一种底层存储实现例如换成 Redis、Pinecone、Chroma 等向量存储persist_dir用于持久化目录index_id/index_ids用于在同一目录下保存或加载多个索引。向量存储集成与持久化大多数向量存储集成会把整个索引向量 文本直接存在向量存储本身中。这样做的一大好处是无需像上面那样显式持久化索引——因为向量存储本身已经是托管服务数据在索引中自动持久化。支持该做法的向量存储包括AzureAISearchVectorStore、ChatGPTRetrievalPluginClient、CassandraVectorStore、ChromaVectorStore、EpsillaVectorStore、DocArrayHnswVectorStore、DocArrayInMemoryVectorStore、JaguarVectorStore、LanceDBVectorStore、MetalVectorStore、MilvusVectorStore、MyScaleVectorStore、OpensearchVectorStore、PineconeVectorStore、QdrantVectorStore、TablestoreVectorStore、RedisVectorStore、UpstashVectorStore、WeaviateVectorStore。以 Pinecone 为例import pinecone from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from llama_index.vector_stores.pinecone import PineconeVectorStore # Creating a Pinecone index api_key api_key pinecone.init(api_keyapi_key, environmentus-west1-gcp) pinecone.create_index( quickstart, dimension1536, metriceuclidean, pod_typep1 ) index pinecone.Index(quickstart) # construct vector store vector_store PineconeVectorStore(pinecone_indexindex) # create storage context storage_context StorageContext.from_defaults(vector_storevector_store) # load documents documents SimpleDirectoryReader(./data).load_data() # create index, which will insert documents/vectors to pinecone index VectorStoreIndex.from_documents( documents, storage_contextstorage_context )如果你已有加载好数据的向量存储可以直接连接它并创建VectorStoreIndexindex pinecone.Index(quickstart) vector_store PineconeVectorStore(pinecone_indexindex) loaded_index VectorStoreIndex.from_vector_store(vector_storevector_store)小结与最佳实践默认优先用SettingsSettings是 v0.10.0 之后推荐的全局配置方式取代了ServiceContext它采用懒加载内存开销更小。全局默认 局部覆盖将通用的 LLM、嵌入模型、分割器、回调管理器配置到Settings把特例通过接口 kwargs 传入单个索引/查询引擎。存储按需定制需要精细控制时用低层 API 组合 docstore、vector_store、index_store追求省事时直接选择支持全量持久化的向量存储集成。迁移时注意Settings支持几乎全部旧ServiceContext属性迁移主要是把ServiceContext.from_defaults(...)改为逐个属性赋值。如需深入了解可继续阅读仓库内相关文档settings.mdx、service_context_migration.md、customization.md以及核心实现 settings.py。【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

深入理解Go调度器:GMP模型、调度循环与性能排查

深入理解Go调度器:GMP模型、调度循环与性能排查

我第一次在 Go 里看到几十万个 goroutine 同时在跑,系统负载居然还能接受时,说实话是有点震动。几十万这个量级放在纯线程模型里,早就被线程栈内存和内核上下文切换拖垮了。Go 能扛住这个量级,核心靠的是 runtime 自带的那套 Goro…

2026/10/26 10:14:49 阅读更多 →
UGUI Button 完全指南:从组件原理到事件绑定与性能优化

UGUI Button 完全指南:从组件原理到事件绑定与性能优化

做了这么多年 Unity,UI 这块我前前后后换过好几套方案,最早用 NGUI,后来 UGUI 出来以后直接切了过去,再到现在不管是做虚拟仿真、数字孪生,还是独立游戏、微信小游戏,UGUI 里的 Button 都是我几乎绕不开的组…

2026/10/26 10:14:57 阅读更多 →
如何用 Bevy 的 Picking 事件实现 3D 模型的点击拾取与拖拽交互?

如何用 Bevy 的 Picking 事件实现 3D 模型的点击拾取与拖拽交互?

如何用 Bevy 的 Picking 事件实现 3D 模型的点击拾取与拖拽交互? 【免费下载链接】bevy A refreshingly simple data-driven game engine built in Rust 项目地址: https://gitcode.com/GitHub_Trending/be/bevy 要在 Bevy 的 3D 场景中让模型可被指针点击、…

2026/10/26 10:14:57 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →