# 引言
在现代应用中,向量搜索已成为处理非结构化数据的关键工具之一。MongoDB Atlas作为一个完全托管的云数据库平台,不仅支持本地向量搜索,还提供了强大的全文搜索功能。在这篇文章中,我们将深入探讨如何在LangChain环境中使用`langchain-mongodb`包来进行向量搜索。
# 主要内容
## 什么是MongoDB Atlas向量搜索?
MongoDB Atlas向量搜索允许将嵌入存储到MongoDB文档中,创建向量搜索索引,并使用近邻算法(如Hierarchical Navigable Small Worlds)进行KNN搜索。操作通过`$vectorSearch MQL Stage`完成。
## 设置MongoDB Atlas
### 部署集群
首先,你需要部署一个MongoDB Atlas集群。MongoDB提供了一个“永久免费的”集群层级,非常适合入门。请参考[快速入门](https://www.mongodb.com/cloud/atlas/lp/general/try)来部署你的集群。
### 安装所需包
确保安装`langchain-mongodb`和`pymongo`:
```bash
pip install -qU langchain-mongodb pymongo
配置凭证
从你的Atlas账户中获取集群URI,并使用以下代码进行设置:
import getpass
MONGODB_ATLAS_CLUSTER_URI = getpass.getpass("MongoDB Atlas Cluster URI:")
初始化向量存储
在LangChain中,我们可以使用多种嵌入生成器。这里只展示如何利用langchain-openai生成嵌入:
pip install -qU langchain-openai
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
接下来,初始化MongoDB Atlas向量存储:
from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
from pymongo import MongoClient
client = MongoClient(MONGODB_ATLAS_CLUSTER_URI) # 使用API代理服务提高访问稳定性
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",
)
管理向量存储
添加文档
通过add_documents方法将文档添加到向量存储中:
from uuid import uuid4
from langchain_core.documents import Document
document_1 = Document(
page_content="I had chocolate chip pancakes for breakfast.",
metadata={"source": "tweet"},
)
documents = [document_1]
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}]")
常见问题和解决方案
-
问题1:网络访问不稳定
解决方案:由于网络限制,建议使用API代理服务。
-
问题2:版本不匹配
解决方案:确保MongoDB Atlas版本为6.0.11或7.0.2,LangChain版本为0.0.305。
总结和进一步学习资源
MongoDB Atlas提供了一种强大、灵活的方式进行向量搜索,特别是在结合LangChain时。详细的API使用文档请参考API参考。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---