引言
在当今数据驱动的世界中,向量搜索已成为信息检索中的关键技术。MongoDB Atlas是一种流行的云数据库解决方案,提供了强大的向量搜索功能。本文将介绍如何在LangChain框架中使用langchain-mongodb
包与MongoDB Atlas进行向量搜索。
主要内容
1. MongoDB Atlas简介
MongoDB Atlas是一个全托管的云数据库,支持在AWS、Azure和GCP上运行。它提供了本地向量搜索功能,可以将嵌入存储在文档中,并使用近似最近邻算法进行搜索。
2. 环境配置
2.1 安装依赖
首先,确保你已安装以下Python包:
pip install -qU langchain-mongodb pymongo langchain-openai langchain-huggingface langchain-core
2.2 设置凭证
获取你的MongoDB Atlas集群URI:
import getpass
MONGODB_ATLAS_CLUSTER_URI = getpass.getpass("MongoDB Atlas Cluster URI:")
若需使用LangSmith API进行自动化跟踪:
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"
3. 初始化
3.1 嵌入模型
选择OpenAI或HuggingFace的模型:
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
from langchain_huggingface import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")
3.2 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",
)
代码示例
以下代码展示了如何在向量存储中添加文档,并执行相似性搜索。
from langchain_core.documents import Document
from uuid import uuid4
# 创建文档
documents = [
Document(page_content="I had chocolate chip pancakes for breakfast.", metadata={"source": "tweet"}),
Document(page_content="The weather forecast is sunny.", metadata={"source": "news"})
]
# 添加文档
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
# 执行相似性搜索
results = vector_store.similarity_search(
"What is the weather like?", k=1
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
-
访问问题:由于网络限制,可能需要使用API代理服务以提高访问的可靠性。
-
版本不兼容:确保MongoDB Atlas版本为6.0.11或7.0.2及更高,否则可能需要固定LangChain版本至<=0.0.304。
总结和进一步学习资源
MongoDB Atlas中的向量搜索为开发者提供了强大的工具来处理复杂的检索需求。在LangChain的支持下,这种集成变得更加简便和强大。建议查看以下资源以深入学习:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—