Skip to content

从 ServiceContext 迁移到 Settings#

在 v0.10.0 版本中,引入了一个新的全局 Settings 对象,旨在取代旧的 ServiceContext 配置。

新的 Settings 对象是一个全局设置,其参数是延迟实例化的。像 LLM 或嵌入模型这样的属性只有在底层模块实际需要时才会被加载。

以前使用服务上下文时,各种模块经常不使用它,而且它还会强制在运行时将每个组件加载到内存中(即使这些组件没有被使用)。

配置全局设置意味着您正在更改 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(model="llama2", request_timeout=120.0)
Settings.embed_model = HuggingFaceEmbedding(
    model_name="BAAI/bge-small-en-v1.5"
)

现在有了这些设置,您可以确保在框架中永远不会使用 OpenAI。

Settings 对象支持几乎与旧的 ServiceContext 相同的所有属性。完整列表可以在文档页面中找到。

完全迁移#

以下是从 ServiceContext 完全迁移到 Settings 的示例:

之前

from 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(
    llm=OpenAI(model="gpt-3.5-turbo"),
    embed_model=OpenAIEmbedding(model="text-embedding-3-small"),
    node_parser=SentenceSplitter(chunk_size=512, chunk_overlap=20),
    num_output=512,
    context_window=3900,
)
set_global_service_context(service_context)

之后

from 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(model="gpt-3.5-turbo")
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
Settings.node_parser = SentenceSplitter(chunk_size=512, chunk_overlap=20)
Settings.num_output = 512
Settings.context_window = 3900

本地配置#

上述内容涵盖了全局配置。要为每个模块配置设置,所有模块接口都应更新以接受正在使用的对象的 kwargs。

如果您正在使用 IDE,kwargs 应该会自动填充智能感知,但以下是一些示例:

# 一个向量存储索引只需要一个嵌入模型
index = VectorStoreIndex.from_documents(
    documents, embed_model=embed_model, transformations=transformations
)

# ... 直到创建查询引擎
query_engine = index.as_query_engine(llm=llm)
# 文档摘要索引需要 llm 和嵌入模型两者
# 用于构造函数
index = DocumentSummaryIndex.from_documents(
    documents, embed_model=embed_model, llm=llm
)