VectorstoreIndexCreator 默认使用 Chroma 作为向量存储后端,而不是 FAISS。Chroma 和 FAISS 都是用于相似性搜索的向量数据库,但它们各自有一些特点和优点。我们一块来了解一下
pip install faiss-cpu
pip install faiss-gpu
如果你需要将 VectorstoreIndexCreator 切换为使用 FAISS,可以如下操作:
from langchain.indexes import VectorstoreIndexCreator
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import faiss
# 读取文件内容
with open("document.txt", "r", encoding="utf-8") as file:
document_text = file.read()
# 定义文本切割器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=50)
# 创建嵌入模型(假设使用 OpenAI 的嵌入模型)
embedding_model = OpenAIEmbeddings()
# 使用 VectorstoreIndexCreator,并指定文本切割器、嵌入模型和 FAISS 向量存储
index_creator = VectorstoreIndexCreator(
text_splitter=text_splitter,
embeddings=embedding_model,
vectorstore_cls=faiss.FAISS
)
# 创建索引
vector_index = index_creator.from_text(document_text)
# 执行查询
query_text = "这是查询文本。"
results = vector_index.query(query_text)
# 输出结果
for result in results:
print(result)
通过这种方式,你可以根据具体需求选择适合的向量存储后端,充分利用各自的优点。
以下是如何安装 Chroma 并使用它与 LangChain 集成的步骤:
你可以通过 pip 安装 Chroma:
pip install chromadb
下面是一个完整的示例,展示如何使用 VectorstoreIndexCreator 和 Chroma 创建和查询向量索引。
示例代码
假设你有一个文本文件 document.txt,你可以使用 VectorstoreIndexCreator 和 Chroma 来处理整个流程:
from langchain.indexes import VectorstoreIndexCreator
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import chroma
# 读取文件内容
with open("document.txt", "r", encoding="utf-8") as file:
document_text = file.read()
# 定义文本切割器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=50)
# 创建嵌入模型(假设使用 OpenAI 的嵌入模型)
embedding_model = OpenAIEmbeddings()
# 使用 VectorstoreIndexCreator,并指定文本切割器、嵌入模型和 Chroma 向量存储
index_creator = VectorstoreIndexCreator(
text_splitter=text_splitter,
embeddings=embedding_model,
vectorstore_cls=chroma.Chroma
)
# 创建索引(这里假设 `document_text` 是需要处理的文本)
vector_index = index_creator.from_text(document_text)
# 执行查询
query_text = "这是查询文本。"
results = vector_index.query(query_text)
# 输出结果
for result in results:
print(result)