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

如何用MongoDB中保存的Embeddings在LangChain创建Vector Store并构建对话链?

利用MongoDB中已保存的Embedding构建Vector Store与对话链

直接用MongoDBAtlasVectorStore的构造方法从已有集合初始化即可,不用再调用from_texts重新生成Embedding,完全不需要更换对话链类型,原有的ConversationalRetrievalChain可以继续使用。

具体实现步骤

  1. 从已有MongoDB集合初始化Vector Store
    直接传入你的数据库集合、嵌入模型、向量索引名即可,如果集合里的字段名不是LangChain默认的(比如文本字段不是text,Embedding字段不是embedding),需要手动指定字段映射。

    代码示例:

    def get_existing_vector_store():
        embeddings = OpenAIEmbeddings()
        vector_store = MongoDBAtlasVectorSearch(
            collection=embeddings_collection,
            embedding=embeddings,
            index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME,
            # 根据你的集合字段名调整,比如:
            # text_key="pdf_text",  # 存储PDF文本块的字段名
            # embedding_key="embeddings"  # 存储Embedding数组的字段名
        )
        return vector_store
    
  2. 复用原对话链逻辑
    拿到初始化好的vector_store后,直接传入原有的get_conversation_chain函数就行,不需要修改对话链的代码。

    调用示例:

    # 打开PDF聊天窗口时,直接获取已有的Vector Store
    vector_store = get_existing_vector_store()
    # 构建对话链
    conversation_chain = get_conversation_chain(vector_store)
    

注意事项

  • 确保MongoDB Atlas中已经创建了对应的向量搜索索引(即ATLAS_VECTOR_SEARCH_INDEX_NAME对应的索引),索引要关联到你存储Embedding的字段。
  • 集合中的每条文档需要包含文本块内容和对应的Embedding数组,文件名、消息列表等元数据不影响Vector Store的检索,可以保留。
  • 如果之前是把整个PDF的Embedding存在一条文档里,建议改成按文本块拆分存储,这样检索的精度会更高,符合对话链的上下文检索需求。

内容的提问来源于stack exchange,提问作者Erick Galván

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:15:15