使用LangChain和MongoDB Atlas实现高效的向量搜索

162 阅读2分钟

引言

在当今的数据驱动世界中,能够快速有效地从海量数据中找到相关信息是至关重要的。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-mongodbpymongo包。

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实现向量搜索。对于想要进一步深入学习的读者,可以访问以下资源:

参考资料

  1. LangChain-MongoDB Integration Guide
  2. MongoDB Atlas Official Site

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