使用Azure Cosmos DB MongoDB vCore进行向量搜索

在这篇文章中,我们将探讨如何使用Azure Cosmos DB MongoDB vCore作为向量数据库来存储文档,并在集合中创建索引,通过近似最近邻算法(如余弦距离、欧氏距离和内积)执行向量搜索查询以定位与查询向量接近的文档。

技术背景介绍

Azure Cosmos DB是一个全球分布的多模型数据库服务,支持单位数毫秒响应时间,自动和即时可扩展性,以及在任何规模下的速度保证。它支持多种API,包括MongoDB vCore API,这是一个完全托管的MongoDB兼容数据库服务,允许开发者使用熟悉的MongoDB架构来构建现代应用程序。

核心原理解析

向量数据库是一种专门处理向量数据的数据库,用于执行例如向量相似性搜索的任务。这对于需要找到与某个查询向量最相似的文档这一类应用非常有用,常见算法包括余弦相似度、欧氏距离等。

代码实现演示

以下代码展示了如何将文档加载到Azure Cosmos DB的集合中,创建索引并进行向量搜索查询。

# 安装必要的库
%pip install --upgrade --quiet pymongo langchain-openai langchain-community

import os
from pymongo import MongoClient
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores.azure_cosmos_db import AzureCosmosDBVectorSearch, CosmosDBSimilarityType, CosmosDBVectorSearchType
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

# 设置MongoDB连接字符串和其他配置
CONNECTION_STRING = "YOUR_CONNECTION_STRING"
INDEX_NAME = "izzy-test-index"
NAMESPACE = "izzy_test_db.izzy_test_collection"
DB_NAME, COLLECTION_NAME = NAMESPACE.split(".")

# 配置OpenAI环境变量
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-05-15"
os.environ["OPENAI_API_BASE"] = "YOUR_OPEN_AI_ENDPOINT"
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
os.environ["OPENAI_EMBEDDINGS_DEPLOYMENT"] = "smart-agent-embedding-ada"
os.environ["OPENAI_EMBEDDINGS_MODEL_NAME"] = "text-embedding-ada-002"

# 加载文档
SOURCE_FILE_NAME = "../../how_to/state_of_the_union.txt"
loader = TextLoader(SOURCE_FILE_NAME)
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# 初始化OpenAI Embeddings
openai_embeddings = OpenAIEmbeddings(
    deployment=os.getenv("OPENAI_EMBEDDINGS_DEPLOYMENT"),
    model=os.getenv("OPENAI_EMBEDDINGS_MODEL_NAME"),
    chunk_size=1
)

# 初始化MongoDB客户端
client = MongoClient(CONNECTION_STRING)
collection = client[DB_NAME][COLLECTION_NAME]

# 创建Azure Cosmos DB向量搜索索引
vectorstore = AzureCosmosDBVectorSearch.from_documents(
    docs,
    openai_embeddings,
    collection=collection,
    index_name=INDEX_NAME,
)

# 设置索引创建参数
num_lists = 100
dimensions = 1536
similarity_algorithm = CosmosDBSimilarityType.COS
kind = CosmosDBVectorSearchType.VECTOR_IVF
m = 16
ef_construction = 64
ef_search = 40

# 创建索引
vectorstore.create_index(num_lists, dimensions, similarity_algorithm, kind, m, ef_construction)

# 执行相似性搜索
query = "What did the president say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)

# 输出结果
print(docs[0].page_content)

应用场景分析

向量搜索广泛应用于需要高效查询相似数据的领域,如推荐系统、图像和文本相似性搜索、语音识别等。使用Azure Cosmos DB的MongoDB vCore来处理这些查询,可以确保在全球任何地方以快速和可靠的方式获取结果。

实践建议

  • 在使用Azure Cosmos DB时,确保对性能和成本进行仔细的权衡,以优化查询速度和存储成本。
  • 定期更新和优化索引,以适应数据集的变化。
  • 利用Azure的监控工具来跟踪性能和使用情况。

如果遇到问题欢迎在评论区交流。
—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值