如何加载LangChain中VectorstoreIndexCreator创建的索引及相关疑问
LangChain 相关问题解答
1. Embeddings 与 Indexing 的协作机制
- Embeddings(嵌入):将文本转化为高维向量,语义相近的文本向量距离更近,让机器能理解文本的语义信息。
- Indexing(索引):把生成的向量存入向量数据库(LangChain 默认用 Chroma),同时构建索引结构,实现后续快速的语义检索。
协作流程:
- 加载文档后,通过嵌入模型(默认是 OpenAI 的 text-embedding-ada-002)将所有文档片段转为向量。
- 向量存入数据库并生成索引,用于快速匹配查询与文档的语义相似度。
- 提问时,问题先转为同规格向量,通过索引找到最相似的文档向量,把对应文档内容传给 LLM 生成回答。
2. 加载已保存的索引(复用本地.pkl等文件)
你当前代码是直接创建并使用索引,若要复用已持久化的索引,无需重新生成嵌入,直接加载向量库即可:
from langchain.vectorstores import Chroma from langchain.embeddings.openai import OpenAIEmbeddings from langchain.chains import RetrievalQA from langchain.llms import OpenAI import os os.environ["OPENAI_API_KEY"] = "sk-xxx" # 从本地加载已保存的向量库 embedding = OpenAIEmbeddings() vectorstore = Chroma( persist_directory="./custom_save_dir_path", embedding_function=embedding ) # 构建问答链 chain = RetrievalQA.from_chain_type( llm=OpenAI(), chain_type="stuff", retriever=vectorstore.as_retriever(), input_key="question" ) # 提问交互 while True: query = input("query: ") response = chain({"question": query}) print(response['result'])
- 无需再调用
VectorstoreIndexCreator.from_loaders(),直接用Chroma读取本地保存的目录即可。 - 目录中的
.pkl等文件是 Chroma 的数据存储文件,无需手动处理,Chroma 会自动读取。
3. OpenAI 计费规则与嵌入复用说明
- 计费规则:
- 嵌入模型(如 text-embedding-ada-002)按输入 Token 数量计费,价格为 $0.0001/1k Token。
- 大语言模型(如 gpt-3.5-turbo)按输入+输出 Token 总量计费,不同模型价格不同。
- 嵌入复用问题:
- 若每次运行都调用
VectorstoreIndexCreator.from_loaders(),会重新加载文档并生成嵌入,每次都会消耗 OpenAI 嵌入 Token,产生费用。 - 只要加载本地已保存的向量库,就不会重新生成嵌入,仅在提问时消耗 LLM 的 Token(处理问题和生成回答)。
- 若每次运行都调用
内容的提问来源于stack exchange,提问作者AqashaT
相关产品推荐
相关产品推荐

