引言
在现代应用中,数据管理和检索是关键所在。Azure Cosmos DB NoSQL作为OpenAI的ChatGPT的核心数据库,基于向量的检索能力,提供了快速而准确的数据查询。本指南将讲解如何利用Azure Cosmos DB NoSQL的向量索引功能,通过向量搜索(例如余弦距离、欧几里得距离和内积)提高查询效率。
主要内容
向量数据库简介
Azure Cosmos DB NoSQL新的向量索引和检索功能能够处理高维向量,支持在同一文档中存储数据和向量。这种数据和向量的共存简化了数据管理和AI应用架构。
向量检索的应用
高效的向量检索可以帮助在庞大的数据库中快速查找到与查询向量最相似的文档,这对于需要处理复杂数据的AI应用尤为重要。
代码示例
结合Langchain和Azure OpenAI embeddings,以下示例展示如何使用Azure Cosmos DB NoSQL进行向量检索。
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 = "AZURE_COSMOS_DB_ENDPOINT" # 替换为你的终端
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设置
openai_embeddings = AzureOpenAIEmbeddings(
azure_deployment="text-embedding-ada-002",
api_version="2023-05-15",
azure_endpoint="YOUR_ENDPOINT",
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"/?'}]
},
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)
常见问题和解决方案
- 性能问题:向量少量超高维时搜索性能下降,可以通过减少维度或使用近似最近邻搜索算法优化。
- 网络访问问题:由于某些地区的网络限制,访问OpenAI API时建议使用API代理服务。
总结和进一步学习资源
Azure Cosmos DB NoSQL的向量索引功能为数据检索提供了强大支持,建议学习以下资源以深入理解:
参考资料
- Azure Cosmos DB 产品页
- Langchain 开发者指南
- OpenAI 接口参考
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---