引言
随着人工智能和自然语言处理的快速发展,向量搜索已成为信息检索领域的重要技术之一。本文将探讨如何利用Azure Cosmos DB for MongoDB vCore,实现高效的向量搜索。我们将详细介绍如何创建文档集合、建立索引,并使用近似最近邻算法(如余弦距离、欧几里得距离和内积)进行向量查询。
主要内容
Azure Cosmos DB概述
Azure Cosmos DB是一个全球分布式、多模型的数据库服务,提供单位毫秒级响应时间和即时的自动扩展能力。它的MongoDB vCore API允许开发者使用熟悉的MongoDB工具和驱动来构建现代应用。
设置环境
首先,确保你已经安装了必要的Python库:
%pip install --upgrade --quiet pymongo langchain-openai langchain-community
环境变量配置
为了使用OpenAI的嵌入,我们需要设置Azure OpenAI的API密钥:
import os
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"
文档加载与索引创建
使用Langchain库加载文档并创建向量索引:
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores.azure_cosmos_db import AzureCosmosDBVectorSearch
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
SOURCE_FILE_NAME = "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
)
from pymongo import MongoClient
CONNECTION_STRING = "YOUR_CONNECTION_STRING"
INDEX_NAME = "example-index"
NAMESPACE = "example_db.example_collection"
DB_NAME, COLLECTION_NAME = NAMESPACE.split(".")
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="COS")
代码示例
进行向量查询以检索匹配的文档:
query = "What did the president say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)
print(docs[0].page_content)
常见问题和解决方案
- API访问问题:由于网络限制,可能需要使用API代理服务来提高访问的稳定性。
- 索引创建慢:确保设置合理的索引参数,如
num_lists
和m
,可以优化索引创建速度。
总结和进一步学习资源
Azure Cosmos DB for MongoDB vCore为开发者提供了强大的工具来进行高效的向量搜索。通过合理的索引设计和查询优化,可以显著提升应用的性能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—