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

更新llama_index后,Pinecone+OpenAI的Query Engine报错求助

解决llama_index升级后OpenAI补全请求缺少engine/deployment_id的问题

问题场景

长期使用旧版llama_index,升级后基于Pinecone构建向量索引、OpenAI负责嵌入与补全功能,执行查询代码时触发错误:

openai.error.InvalidRequestError: Must provide an 'engine' or 'deployment_id' parameter to create a <class 'openai.api_resources.completion.Completion'>

原有核心代码如下:

with open(file_path, 'r', encoding='utf-8') as file:
    content = file.read()

chunk_size = 1000
texts = [content[i:i+chunk_size] for i in range(0, len(content), chunk_size)]

embeddings = LangchainEmbedding(OpenAIEmbeddings(model="text-embedding-ada-002", chunk_size=1))

pinecone_index = pinecone.Index(index_name)

vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
docs = [Document(t) for t in texts]

storage_context = StorageContext.from_defaults(vector_store=vector_store)
service_context = ServiceContext.from_defaults(embed_model=embeddings)

index = GPTVectorStoreIndex.from_documents(docs, storage_context=storage_context, service_context=service_context)
query_engine = index.as_query_engine()

response = query_engine.query(query)

问题原因

新版llama_index移除了旧版默认的LLM(大语言模型)配置,仅配置嵌入模型无法满足补全请求的要求——OpenAI的补全接口必须指定engine(即模型标识),未显式配置LLM时,代码无法传递该参数,从而触发错误。

修复方案

在ServiceContext中显式指定LLM模型,让代码能向OpenAI传递合法的engine参数。具体步骤:

  1. 导入llama_index的OpenAI LLM类
  2. 实例化LLM时指定对应模型(如gpt-3.5-turbo-instruct或text-davinci-003等兼容补全接口的模型)
  3. 将LLM实例传入ServiceContext.from_defaults()

修改后的完整代码:

from llama_index.llms import OpenAI  # 新增导入
from llama_index.embeddings.langchain import LangchainEmbedding
from langchain.embeddings.openai import OpenAIEmbeddings
from llama_index.vector_stores import PineconeVectorStore
from llama_index import StorageContext, ServiceContext, GPTVectorStoreIndex, Document
import pinecone

# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as file:
    content = file.read()

# 文本分块
chunk_size = 1000
texts = [content[i:i+chunk_size] for i in range(0, len(content), chunk_size)]

# 初始化嵌入模型
embeddings = LangchainEmbedding(OpenAIEmbeddings(model="text-embedding-ada-002", chunk_size=1))

# 初始化Pinecone索引
pinecone_index = pinecone.Index(index_name)
vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
docs = [Document(t) for t in texts]

# 显式初始化LLM
llm = OpenAI(model="gpt-3.5-turbo-instruct")  # 指定兼容补全的模型

# 构建上下文
storage_context = StorageContext.from_defaults(vector_store=vector_store)
service_context = ServiceContext.from_defaults(
    embed_model=embeddings,
    llm=llm  # 传入LLM实例
)

# 创建索引与查询引擎
index = GPTVectorStoreIndex.from_documents(docs, storage_context=storage_context, service_context=service_context)
query_engine = index.as_query_engine()

response = query_engine.query(query)

补充说明

  • 若使用Azure OpenAI,需替换为AzureOpenAI类并指定deployment_id参数,示例:
    from llama_index.llms import AzureOpenAI
    llm = AzureOpenAI(deployment_id="你的部署ID", model="gpt-3.5-turbo-instruct")
    
  • 若使用gpt-3.5-turbo或gpt-4等聊天模型(对应OpenAI的/chat/completions端点),需使用ChatOpenAI类,示例:
    from llama_index.llms import ChatOpenAI
    llm = ChatOpenAI(model="gpt-3.5-turbo")
    

内容的提问来源于stack exchange,提问作者Thomas LIZEE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:05:14