首页 > 其他分享 >使用 Azure Cosmos DB Mongo vCore 进行向量搜索的实战指南

使用 Azure Cosmos DB Mongo vCore 进行向量搜索的实战指南

时间:2024-12-30 18:28:51浏览次数:8  
标签:vCore Mongo DB OPENAI Azure Cosmos os 向量

# Azure Cosmos DB Mongo vCore 实战指南:创建和查询向量搜索索引

老铁们,今天我来给大家介绍如何利用 Azure Cosmos DB 的 Mongo vCore 实现向量数据库功能。具体来说,我们要在集合中存储文档,创建索引,并使用近似最近邻算法(如余弦距离、欧几里得距离和内积)进行向量搜索查询。这不仅让我们能以最快的速度找到与查询向量相近的文档,还能全面释放 Azure Cosmos DB 的潜力。

## 技术背景介绍

首先,了解下 Azure Cosmos DB。这是一个全局分布的数据库,支持多模型存储,包括文档、键值、图形等。它以微秒级响应时间和自动即时扩展著称,并有保证的速度和稳定性,无论是查询还是写入操作。

Azure Cosmos DB for MongoDB vCore 提供了一个完全托管的 MongoDB 兼容数据库服务,方便现代应用架构的开发者使用。通过 MongoDB 驱动程序和 SDK,开发者可以迅速上手。

## 原理深度解析

说白了就是,我们利用 Azure Cosmos DB 的向量存储功能来对文档执行相似搜索。其核心原理在于计算文档和查询之间的向量距离,通过不同的算法如余弦相似度、内积等,找出最相似的文档。这样的操作在大规模数据处理和机器学习场景中尤为重要。

## 实战代码演示

下面是如何配置和使用这些工具的代码示例:

```python
# 安装所需的包
%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

# 设置环境变量
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-05-15"
os.environ["OPENAI_API_BASE"] = "YOUR_OPEN_AI_ENDPOINT"  # 替换为你的 OpenAI 端点
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# 加载和分割文档
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 嵌入器实例
openai_embeddings = OpenAIEmbeddings(
    deployment=os.getenv("OPENAI_EMBEDDINGS_DEPLOYMENT", "smart-agent-embedding-ada"),
    model=os.getenv("OPENAI_EMBEDDINGS_MODEL_NAME", "text-embedding-ada-002"),
    chunk_size=1,
)

# 连接 MongoDB 并设置向量存储
client = MongoClient("YOUR_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)

优化建议分享

使用 Azure Cosmos DB 时,要充分利用其内置的高扩展性和低延迟特性,建议对频繁查询的字段创建适当的索引。如果遇到性能瓶颈,可以考虑使用代理服务来提升稳定性。

补充说明和总结

Azure Cosmos DB 的强大之处在于其一站式大规模数据管理功能,同时支持多种高级查询操作。如果老铁们还没试过,强烈建议体验一下这种流畅又高效的数据库处理方式。

今天的技术分享就到这里,希望对大家有帮助。开发过程中遇到问题也可以在评论区交流~

---END---

标签:vCore,Mongo,DB,OPENAI,Azure,Cosmos,os,向量
From: https://blog.csdn.net/qw454qw3/article/details/144827699

相关文章

  • 数据库_tinyDB-Python项目开发
    实现说明storage数据存储实现database&&table数据库和表的实现query查询规则的实现cache优化和提高数据库的查询和存储效率文件结构tinydb/database.pyclassTinyDB(TableBase):from.importJSONStoragefrom.storagesimportStoragef......
  • hhdb客户端介绍(65)
    功能模块实现数据库对象管理功能模块技术实现细节前端技术:在数据库对象管理窗口中,使用QTreeView组件来展示数据库对象的树形结构。通过自定义数据模型(继承自QAbstractItemModel)来加载和管理数据库对象的数据,包括数据库、表、视图、存储过程等。根据不同的数据库对象类型,设......
  • hhdb客户端介绍(64)
    功能模块实现连接管理功能模块技术实现细节前端技术:采用基于Qt的界面开发框架,利用其丰富的UI组件库构建连接管理窗口。例如,使用QLineEdit组件来实现服务器地址、端口号、用户名和密码等信息的输入框,通过QPushButton组件创建连接按钮、测试按钮以及各种辅助功能按钮(如......
  • 【YashanDB知识库】druid连接池查询空间数据报错read time out
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7849007.html?templateId=1718516【标题】druid连接池查询空间数据报错readtimeout【问题分类】驱动使用【关键字】druid,gis,readtimeout,sockettimeout【问题描述】sql查询空间数据,用HikariCP不......
  • 【YashanDB知识库】hive初始化崖山报错YAS-04209
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7849008.html?templateId=1718516【问题分类】功能使用【关键字】hadoop,hive,YAS-02058【问题描述】hive初始化崖山报错:0:jdbc:yasdb://192.168.xxx.xxx:1688/hive>CREATETABLEIFNOTEXISTSMAST......
  • 【YashanDB知识库】如何使用jdbc向YashanDB批量插入gis数据
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7817897.html?templateId=1718516以gis表为例:droptablegis;createtablegis(idnumbernotnull,posst_geometrynotnull);使用如下的java代码片断,可以向gis表中插入POINT类型的gis数据:conn.s......
  • Mongodb安装步骤 (.msi安装方式)
    我之前发的Mongodb安装步骤,被人建议使用.msi安装方式所以重新发一版Mongodb安装步骤(.msi安装方式)一、首先下载安装程序下载链接  TryMongoDBCommunityEdition|MongoDB 选择.msi   二、安装1、双击.msi 2、next: 3、勾选接受,next: 4、complete......
  • springboot-data-jdbc优劣
    经过一段时间对springboot-data-jdbc的使用,总结了一下几点:优点:通过配置外键关联,在保存一个实体类的情况下,会自动保存对应的外键信息(比如上图实体类如果设置了legItems和orderDetails的值,则会保存对应的数据)通过配置外键关联,在查询一个实体类的情况下,会自动查询出外键关联的信......
  • libmodbus源码中重要的两个结构体讲解
    文章目录一、libmodbus重要数据结构讲解**1.结构体`_modbus`**定义成员解析小结**2.结构体`_modbus_backend`**定义成员解析小结**3.两者关系和工作流程****关系****工作流程**一、libmodbus重要数据结构讲解这两个结构体是libmodbus的核心,定义了Modbu......
  • parquet & DuckDB
    Ingestandsplitdatainaflowhttps://docs.outerbounds.com/recsys-tutorial-L2/Givenourdatasetisinaparquetfile,inthislessonyouwilllearnhowtoleverageanopen-source,ahyper-performantdatabaseforanalyticsworkloadscalledDuckDB.You......