# Azure Cosmos DB Mongo vCore 实战指南:创建和查询向量搜索索引
老铁们,今天我来给大家介绍如何利用 Azure Cosmos DB 的 Mongo vCore 实现向量数据库功能。具体来说,我们要在集合中存储文档,创建索引,并使用近似最近邻算法(如余弦距离、欧几里得距离和内积)进行向量搜索查询。这不仅让我们能以最快的速度找到与查询向量相近的文档,还能全面释放 Azure Cosmos DB 的潜力。
## 技术背景介绍
首先,了解下 Azure Cosmos DB。这是一个全局分布的数据库,支持多模型存储,包括文档、键值、图形等。它以微秒级响应时间和自动即时扩展著称,并有保证的速度和稳定性,无论是查询还是写入操作。
Azure Cosmos DB for MongoDB vCore 提供了一个完全托管的 MongoDB 兼容数据库服务,方便现代应用架构的开发者使用。通过 MongoDB 驱动程序和 SDK,开发者可以迅速上手。
## 原理深度解析
说白了就是,我们利用 Azure Cosmos DB 的向量存储功能来对文档执行相似搜索。其核心原理在于计算文档和查询之间的向量距离,通过不同的算法如余弦相似度、内积等,找出最相似的文档。这样的操作在大规模数据处理和机器学习场景中尤为重要。
## 实战代码演示
下面是如何配置和使用这些工具的代码示例:
```python
# 安装所需的包
%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
# 设置环境变量
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-05-15"
os.environ["OPENAI_API_BASE"] = "YOUR_OPEN_AI_ENDPOINT" # 替换为你的 OpenAI 端点
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
# 加载和分割文档
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 嵌入器实例
openai_embeddings = OpenAIEmbeddings(
deployment=os.getenv("OPENAI_EMBEDDINGS_DEPLOYMENT", "smart-agent-embedding-ada"),
model=os.getenv("OPENAI_EMBEDDINGS_MODEL_NAME", "text-embedding-ada-002"),
chunk_size=1,
)
# 连接 MongoDB 并设置向量存储
client = MongoClient("YOUR_CONNECTION_STRING") # 替换为实际的连接字符串
collection = client["izzy_test_db"]["izzy_test_collection"]
vectorstore = AzureCosmosDBVectorSearch.from_documents(
docs,
openai_embeddings,
collection=collection,
index_name="izzy-test-index",
)
# 创建索引
vectorstore.create_index(
num_lists=100,
dimensions=1536,
similarity_algorithm=CosmosDBSimilarityType.COS,
kind=CosmosDBVectorSearchType.VECTOR_IVF,
m=16,
ef_construction=64
)
# 执行相似性搜索
query = "What did the president say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)
print(docs[0].page_content)
优化建议分享
使用 Azure Cosmos DB 时,要充分利用其内置的高扩展性和低延迟特性,建议对频繁查询的字段创建适当的索引。如果遇到性能瓶颈,可以考虑使用代理服务来提升稳定性。
补充说明和总结
Azure Cosmos DB 的强大之处在于其一站式大规模数据管理功能,同时支持多种高级查询操作。如果老铁们还没试过,强烈建议体验一下这种流畅又高效的数据库处理方式。
今天的技术分享就到这里,希望对大家有帮助。开发过程中遇到问题也可以在评论区交流~
---END---
标签:vCore,Mongo,DB,OPENAI,Azure,Cosmos,os,向量
From: https://blog.csdn.net/qw454qw3/article/details/144827699