MongoDB Atlas向量搜索在LangChain中的应用
MongoDB Atlas是一个完全托管的云数据库,支持向量搜索和全文搜索,这使得它在处理文档数据时非常有用。向量搜索允许将嵌入存储于MongoDB文档中,并使用近似最近邻算法进行搜索。在本文中,我们将探讨如何在LangChain中使用MongoDB Atlas进行向量搜索。
技术背景介绍
MongoDB Atlas支持原生向量搜索,使得在文档数据中执行相似度搜索成为可能。这项功能依赖于Hierarchical Navigable Small Worlds (HNSW)算法,能够高效地处理大规模数据集中的近似最近邻搜索。向量搜索是通过$vectorSearch
MQL阶段实现的。
核心原理解析
向量搜索的核心在于通过嵌入和索引来实现高效的相似度计算。MongoDB Atlas允许用户创建一个向量搜索索引,通过这种索引,可以快速定位最相似的数据项。这是机器学习中常用的技术,尤其是在处理文本嵌入时。
代码实现演示
下面我们将展示如何在LangChain中设置和使用MongoDB Atlas向量搜索。
环境设置
首先,确保你的Atlas集群运行MongoDB版本6.0.11, 7.0.2或更高版本。安装必要的Python包:
pip install -qU langchain-mongodb pymongo
初始化连接和配置
from pymongo import MongoClient
import getpass
# 获取MongoDB Atlas集群URI
MONGODB_ATLAS_CLUSTER_URI = getpass.getpass("MongoDB Atlas Cluster URI:")
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]
嵌入初始化
使用LangChain提供的各种嵌入服务:
from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
from langchain_core.embeddings import FakeEmbeddings
# 使用伪嵌入进行演示
embeddings = FakeEmbeddings(size=4096)
vector_store = MongoDBAtlasVectorSearch(
collection=MONGODB_COLLECTION,
embedding=embeddings,
index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME,
relevance_score_fn="cosine",
)
文档添加到向量存储
from langchain_core.documents import Document
documents = [
Document(page_content="LangChain is a powerful tool!", metadata={"source": "tweet"}),
# 更多文档...
]
vector_store.add_documents(documents=documents, ids=[str(uuid4()) for _ in documents])
查询向量存储
使用相似度搜索:
results = vector_store.similarity_search("LangChain provides abstractions", k=2)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
应用场景分析
这种向量搜索功能可以用于许多场景,例如自然语言处理中的文档检索、问答系统中的信息提取等。它为处理大量非结构化数据提供了高效的解决方案。
实践建议
在使用向量搜索时,确保你选择合适的嵌入模型以提高搜索准确性。合理配置索引维度和使用预过滤功能可以进一步优化性能。
如果遇到问题欢迎在评论区交流。
—END—