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

如何将LangChain生成的FAISS向量存储至MongoDB并实现相似性检索?

可行方案:将FAISS向量存储迁移至MongoDB并实现相似性检索

核心思路

LangChain原生支持MongoDB作为向量存储介质,可通过以下步骤完成FAISS向量的迁移,并基于MongoDB实现相似性检索:


步骤1:确认MongoDB环境要求

  • 使用MongoDB 6.0及以上版本(本地部署或MongoDB Atlas均可),该版本支持向量索引功能
  • 创建目标数据库与集合,例如db_name="langchain_db"、collection_name="pdf_vectors"

步骤2:从FAISS导出向量与文档

从已构建的FAISS vectorstore中提取所有嵌入向量及对应文档元数据:

# 假设已构建好faiss_vectorstore实例
docs_and_vectors = faiss_vectorstore.get_documents_with_embeddings()
documents = [doc for doc, _ in docs_and_vectors]
embeddings = [vec for _, vec in docs_and_vectors]

步骤3:将数据写入MongoDB

使用LangChain的MongoDBAtlasVectorStore类(本地MongoDB同样适用)完成批量写入:

from langchain.vectorstores import MongoDBAtlasVectorStore
from langchain.embeddings.openai import OpenAIEmbeddings
from pymongo import MongoClient

# 初始化MongoDB客户端
client = MongoClient("mongodb://localhost:27017/")  # 替换为你的MongoDB连接字符串
db = client["langchain_db"]
collection = db["pdf_vectors"]

# 初始化嵌入模型(需与生成FAISS向量的模型一致)
embeddings_model = OpenAIEmbeddings()

# 写入向量与文档到MongoDB
vectorstore_mongo = MongoDBAtlasVectorStore.from_documents(
    documents=documents,
    embedding=embeddings_model,
    collection=collection,
    index_name="vector_index"  # 后续要创建的向量索引名称
)

步骤4:创建MongoDB向量索引

通过代码或MongoDB控制台创建向量索引,保障检索效率:

# 代码方式创建向量索引
collection.create_index(
    {"embedding": "vector"},
    name="vector_index",
    vectorSearchOptions={
        "type": "vectorSearch",
        "numDimensions": 1536,  # 与OpenAIEmbeddings的维度匹配(text-embedding-ada-002为1536)
        "similarity": "cosine"
    }
)

步骤5:基于MongoDB执行相似性检索

完成上述操作后,直接调用MongoDB向量存储的similarity_search方法即可:

# 初始化MongoDB向量存储实例
vectorstore_mongo = MongoDBAtlasVectorStore(
    collection=collection,
    embedding=embeddings_model,
    index_name="vector_index"
)

# 执行检索
query = "你的检索prompt内容"
similar_docs = vectorstore_mongo.similarity_search(query, k=3)

# 输出检索结果
for doc in similar_docs:
    print(doc.page_content)
    print("---")

注意事项

  • 嵌入模型的维度必须与MongoDB向量索引的numDimensions完全一致,否则会导致检索失败
  • 若使用MongoDB Atlas,可直接在控制台可视化创建向量索引,无需编写代码
  • 批量写入大量数据时建议分批次处理,避免连接超时

内容的提问来源于stack exchange,提问作者Shuhul Handoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:32:42