引言
在当今的数据驱动世界中,能够快速有效地从海量数据中找到相关信息是至关重要的。MongoDB Atlas作为一种完全托管的云数据库,支持本地向量搜索和全文本搜索,为开发者提供了强大的数据处理功能。本篇文章将深入讲解如何利用LangChain与MongoDB Atlas的结合,来实现高效的向量搜索。
主要内容
1. MongoDB Atlas介绍
MongoDB Atlas是一个运行在AWS、Azure和GCP上的完全托管的云数据库服务。它通过提供本地向量搜索功能,使开发者可以轻松管理和搜索数据。
2. 向量搜索原理
MongoDB Atlas的向量搜索功能允许我们在MongoDB文档中存储嵌入(embedding),创建向量搜索索引,并通过近似最近邻算法(Hierarchical Navigable Small Worlds,HNSW)进行KNN搜索。
3. 环境设置
要使用MongoDB Atlas进行向量搜索,您需要一个运行MongoDB版本6.0.11或7.0.2及以上版本的Atlas集群。同时,您需要安装langchain-mongodb和pymongo包。
pip install -qU langchain-mongodb pymongo
代码示例
import getpass
from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
from pymongo import MongoClient
from uuid import uuid4
from langchain_core.documents import Document
# 使用API代理服务提高访问稳定性
MONGODB_ATLAS_CLUSTER_URI = getpass.getpass("MongoDB Atlas Cluster URI:")
# 初始化MongoDB客户端
client = MongoClient(MONGODB_ATLAS_CLUSTER_URI)
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",
)
# 添加文档到向量存储
documents = [
Document(page_content="I had chocolate chip pancakes for breakfast.", metadata={"source": "tweet"}),
Document(page_content="The weather forecast is cloudy.", metadata={"source": "news"}),
]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
常见问题和解决方案
- 网络问题: 由于某些地区的网络限制,可能需要使用API代理服务来提高对MongoDB Atlas的访问稳定性。
- 版本兼容性: 请确保使用版本>=6.0.11的MongoDB Atlas,否则需要固定LangChain的版本为<=0.0.304。
总结和进一步学习资源
本文简要介绍了如何使用LangChain和MongoDB Atlas实现向量搜索。对于想要进一步深入学习的读者,可以访问以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---