Settings 全局默认 / 快速开发模式
一句话:统一全局配置,少传参数、少写代码、快速跑通 Demo。
1. 核心入口
from llama_index.core import Settings
Settings 是全局单例,一旦设置,后面所有索引/查询默认都用它。
2. 能全局设置什么
# 模型类
Settings.llm = 你的LLM实例
Settings.embed_model = 你的Embedding实例
# 分块参数
Settings.chunk_size = 512
Settings.chunk_overlap = 20
# 节点解析器、回调、日志等
Settings.transformations = [SentenceSplitter(chunk_size=512)]
3. 用法(极简,几乎不用传参数)
documents = SimpleDirectoryReader("./docs").load_data()
index = VectorStoreIndex.from_documents(documents) # 自动用 Settings 的 LLM/Embedding
query_engine = index.as_query_engine()
4. 特点
- ✅ 写得少、跑得快、原型最快
- ✅ 所有组件共享一套默认配置
- ❌ 耦合重、升级易崩、不好混用外部原生模型
- ❌ 不适合长期维护的桌面应用(API一变全挂)
Low‑level 自定义 / 组合式 模式
一句话:不用全局 Settings,每个组件手动实例化、手动传入,完全自己控制。
1. 核心思想:不依赖 Settings,所有组件「显式组装」
# 1. 自己建 LLM、Embedding(可以是原生库,不一定用 LlamaIndex 的)
from langchain.llms import OpenAI
from sentence_transformers import SentenceTransformer
llm = OpenAI(...)
embed_model = SentenceTransformer("all-MiniLM-L6-v2")
# 2. 自己建节点解析器、向量库、存储上下文
from llama_index.core.node_parser import SentenceSplitter
from llama_index.vector_stores.chroma import ChromaVectorStore
import chromadb
node_parser = SentenceSplitter(chunk_size=512)
vector_store = ChromaVectorStore(chroma_collection=...)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# 3. 手动传参,不依赖 Settings
index = VectorStoreIndex(
nodes=nodes,
llm=llm,
embed_model=embed_model,
storage_context=storage_context,
transformations=[node_parser]
)
# 4. 检索器、查询引擎也手动组装
retriever = VectorIndexRetriever(index=index, similarity_top_k=3)
query_engine = RetrieverQueryEngine(retriever=retriever)
2. 特点
- ✅ 完全解耦、可控、兼容最强
- ✅ 可以混用:LlamaIndex 只做文档加载/索引,LLM/Embedding/向量库用原生
- ✅ 升级不怕崩:LlamaIndex 改 API,你只改「组装那一小段」
- ✅ 桌面应用长期维护首选
- ❌ 代码稍多,需要自己管理组件依赖
选择建议
- 有 Settings 模式:全局配置、快速开发、适合 Demo;
- 有自己组装模式:显式传参、完全可控、适合生产/桌面应用;
- 想最大化兼容:坚决不用 Settings,全部自己组装;
- 向量模型/LLM/向量库:优先用原生库,只把实例传给 LlamaIndex。