探索MongoDB Atlas在LangChain中的向量搜索:全面教程

97 阅读2分钟
# 引言

在现代应用中,向量搜索已成为处理非结构化数据的关键工具之一。MongoDB Atlas作为一个完全托管的云数据库平台,不仅支持本地向量搜索,还提供了强大的全文搜索功能。在这篇文章中,我们将深入探讨如何在LangChain环境中使用`langchain-mongodb`包来进行向量搜索。

# 主要内容

## 什么是MongoDB Atlas向量搜索?

MongoDB Atlas向量搜索允许将嵌入存储到MongoDB文档中,创建向量搜索索引,并使用近邻算法(如Hierarchical Navigable Small Worlds)进行KNN搜索。操作通过`$vectorSearch MQL Stage`完成。

## 设置MongoDB Atlas

### 部署集群

首先,你需要部署一个MongoDB Atlas集群。MongoDB提供了一个“永久免费的”集群层级,非常适合入门。请参考[快速入门](https://www.mongodb.com/cloud/atlas/lp/general/try)来部署你的集群。

### 安装所需包

确保安装`langchain-mongodb``pymongo````bash
pip install -qU langchain-mongodb pymongo

配置凭证

从你的Atlas账户中获取集群URI,并使用以下代码进行设置:

import getpass

MONGODB_ATLAS_CLUSTER_URI = getpass.getpass("MongoDB Atlas Cluster URI:")

初始化向量存储

在LangChain中,我们可以使用多种嵌入生成器。这里只展示如何利用langchain-openai生成嵌入:

pip install -qU langchain-openai
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")

接下来,初始化MongoDB Atlas向量存储:

from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
from pymongo import MongoClient

client = MongoClient(MONGODB_ATLAS_CLUSTER_URI)  # 使用API代理服务提高访问稳定性

DB_NAME = "langchain_test_db"
COLLECTION_NAME = "langchain_test_vectorstores"
ATLAS_VECTOR_SEARCH_INDEX_NAME = "langchain-test-index-vectorstores"

MONGODB_COLLECTION = client[DB_NAME][COLLECTION_NAME]

vector_store = MongoDBAtlasVectorSearch(
    collection=MONGODB_COLLECTION,
    embedding=embeddings,
    index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME,
    relevance_score_fn="cosine",
)

管理向量存储

添加文档

通过add_documents方法将文档添加到向量存储中:

from uuid import uuid4
from langchain_core.documents import Document

document_1 = Document(
    page_content="I had chocolate chip pancakes for breakfast.",
    metadata={"source": "tweet"},
)

documents = [document_1]
uuids = [str(uuid4()) for _ in range(len(documents))]

vector_store.add_documents(documents=documents, ids=uuids)

查询向量存储

进行简单的相似度搜索:

results = vector_store.similarity_search(
    "LangChain provides abstractions to make working with LLMs easy", k=2
)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

  • 问题1:网络访问不稳定

    解决方案:由于网络限制,建议使用API代理服务。

  • 问题2:版本不匹配

    解决方案:确保MongoDB Atlas版本为6.0.11或7.0.2,LangChain版本为0.0.305。

总结和进一步学习资源

MongoDB Atlas提供了一种强大、灵活的方式进行向量搜索,特别是在结合LangChain时。详细的API使用文档请参考API参考

参考资料


如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---