如何无需重新加载数据与向量,查询现有Pinecone索引并生成docsearch对象
解决方案:直接连接已存在的Pinecone索引
要复用已有的Pinecone索引进行查询,不需要重复加载文档、分割文本或上传向量,只需用Pinecone.from_existing_index()方法生成docsearch对象即可,具体实现如下:
简化后的查询代码
import pinecone from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import Pinecone import os from langchain.llms import OpenAI from langchain.chains.question_answering import load_qa_chain # 初始化Pinecone(配置需和创建索引时一致) pinecone.init( api_key=PINECONE_API_KEY, environment=PINECONE_API_ENV ) index_name = "mlqai" # 初始化嵌入模型(查询时需将提问转为向量,必须保留) embeddings = OpenAIEmbeddings(openai_api_key=os.environ['OPENAI_API_KEY']) # 直接连接已有索引生成docsearch对象 docsearch = Pinecone.from_existing_index(index_name, embeddings) # 后续查询逻辑与之前完全一致 llm = OpenAI(temperature=0, openai_api_key=os.environ['OPENAI_API_KEY']) chain = load_qa_chain(llm, chain_type="stuff") query = "que sabes de los patinetes?" docs = docsearch.similarity_search(query) answer = chain.run(input_documents=docs, question=query) print(answer)
关键说明
from_existing_index是LangChain专为Pinecone设计的方法,用于直接连接已创建并填充过向量的索引,省去了文档处理、向量上传的重复步骤。- 嵌入模型必须初始化,因为查询时需要将问题转换为与索引中向量同维度的嵌入向量,才能完成相似度匹配。
- Pinecone的初始化配置(API密钥、环境)必须和创建索引时完全一致,否则无法成功连接目标索引。
内容的提问来源于stack exchange,提问作者Francisco Ghelfi
相关产品推荐
相关产品推荐

