LlamaIndex开发注意事项:Settings 全局默认 / 快速开发模式、Low‑level 自定义 / 组合式 模式

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,你只改「组装那一小段」
  • ✅ 桌面应用长期维护首选
  • ❌ 代码稍多,需要自己管理组件依赖

选择建议

  1. 有 Settings 模式:全局配置、快速开发、适合 Demo;
  2. 有自己组装模式:显式传参、完全可控、适合生产/桌面应用;
  3. 想最大化兼容:坚决不用 Settings,全部自己组装;
  4. 向量模型/LLM/向量库:优先用原生库,只把实例传给 LlamaIndex。

原文出处:/show_1GW3LlDL8Tg2.html