You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何本地持久化LlamaIndex的VectorStoreIndex?加载遇OpenAI密钥错误

问题解决:加载本地持久化索引时的OpenAI密钥错误

错误原因

加载索引时未指定自定义的ServiceContext,LlamaIndex默认尝试初始化OpenAI模型,但你未配置其API密钥,因此触发报错。你的索引是基于本地LlamaCPP模型构建的,加载时必须关联对应的LLM和嵌入模型配置。

修正方案

加载索引前,需重新初始化你的LLM和嵌入模型,创建ServiceContext后传入load_index_from_storage方法中。

完整修正代码

1. 构建并持久化索引(原代码保留,确保持久化步骤正确)

import logging
import sys
from llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext
from llama_index.llms import LlamaCPP
from llama_index.llms.llama_utils import messages_to_prompt, completion_to_prompt
from langchain.embeddings import HuggingFaceEmbeddings
from llama_index.embeddings import LangchainEmbedding
from llama_index import StorageContext

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

# 初始化本地LLM
llm = LlamaCPP(
    model_url='https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/resolve/main/mistral-7b-instruct-v0.1.Q4_K_M.gguf',
    model_path=None,
    temperature=0.1,
    max_new_tokens=256,
    context_window=3900,
    generate_kwargs={},
    model_kwargs={"n_gpu_layers": -1},
    messages_to_prompt=messages_to_prompt,
    completion_to_prompt=completion_to_prompt,
    verbose=True,
)

# 初始化嵌入模型
embed_model = LangchainEmbedding(
  HuggingFaceEmbeddings(model_name="thenlper/gte-large")
)

# 创建ServiceContext
service_context = ServiceContext.from_defaults(
    chunk_size=256,
    llm=llm,
    embed_model=embed_model
)

# 加载文档并构建索引
documents = SimpleDirectoryReader("/content/Data/").load_data()
index = VectorStoreIndex.from_documents(documents, service_context=service_context)

# 持久化索引
index.storage_context.persist("/content/pers")

2. 加载已持久化的索引(关键:传入自定义ServiceContext)

from llama_index import StorageContext, load_index_from_storage
from llama_index.llms import LlamaCPP
from llama_index.llms.llama_utils import messages_to_prompt, completion_to_prompt
from langchain.embeddings import HuggingFaceEmbeddings
from llama_index.embeddings import LangchainEmbedding
from llama_index import ServiceContext

# 重新初始化LLM和嵌入模型(必须和构建索引时一致)
llm = LlamaCPP(
    model_url='https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/resolve/main/mistral-7b-instruct-v0.1.Q4_K_M.gguf',
    model_path=None,
    temperature=0.1,
    max_new_tokens=256,
    context_window=3900,
    generate_kwargs={},
    model_kwargs={"n_gpu_layers": -1},
    messages_to_prompt=messages_to_prompt,
    completion_to_prompt=completion_to_prompt,
    verbose=True,
)

embed_model = LangchainEmbedding(
  HuggingFaceEmbeddings(model_name="thenlper/gte-large")
)

# 创建和构建索引时一致的ServiceContext
service_context = ServiceContext.from_defaults(
    chunk_size=256,
    llm=llm,
    embed_model=embed_model
)

# 加载存储上下文并传入ServiceContext加载索引
storage_context = StorageContext.from_defaults(persist_dir="/content/pers")
new_index = load_index_from_storage(storage_context, service_context=service_context)

# 创建查询引擎
new_query_engine = new_index.as_query_engine()

关键注意点

  • 加载索引时的LLM和嵌入模型配置必须和构建索引时完全一致,否则会出现不兼容问题。
  • 如果是在同一个Python会话中加载,可直接复用之前创建的service_context,无需重新初始化。

内容的提问来源于stack exchange,提问作者6core

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 12:58:55