首页 > 后端开发 > Python教程 > 开始在Azure Cosmos DB中的矢量搜索

开始在Azure Cosmos DB中的矢量搜索

Susan Sarandon
发布: 2025-01-26 20:15:09
原创
339 人浏览过

本教程演示如何使用简单的电影数据集在 Azure Cosmos DB for NoSQL 中快速实现矢量搜索。 该应用程序支持 Python、TypeScript、.NET 和 Java,提供设置、数据加载和相似性搜索查询的分步说明。

向量数据库擅长存储和管理向量嵌入——数据的高维数学表示。每个维度都反映一个数据特征,数量可能有数万个。向量在该空间中的位置表示其特征。 该技术可对各种数据类型进行矢量化,包括单词、短语、文档、图像和音频,从而支持相似性搜索、多模式搜索、推荐引擎和大型语言模型 (LLM) 等应用。

先决条件:

  • Azure 订阅(或免费的 Azure 帐户,或适用于 NoSQL 的 Azure Cosmos DB 免费套餐)。
  • 适用于 NoSQL 的 Azure Cosmos DB 帐户。​​
  • 部署了 text-embedding-ada-002 嵌入模型的 Azure OpenAI 服务资源(可通过 Azure AI Foundry 门户访问)。 该模型提供文本嵌入。
  • 必要的编程语言环境(Maven for Java)。

在 Azure Cosmos DB 中为 NoSQL 配置矢量数据库:

  1. 启用该功能:这是一次性步骤。在 Azure Cosmos DB 中显式启用矢量索引和搜索。

    Get started with Vector Search in Azure Cosmos DB

  2. 创建数据库和容器: 创建分区键为 movies_db 的数据库(例如 movies)和容器(例如 /id)。

  3. 创建策略:为容器配置向量嵌入策略和索引策略。 对于本示例,请使用如下所示的设置(此处使用通过 Azure 门户进行手动配置,但也可以使用编程方法)。

    Get started with Vector Search in Azure Cosmos DB

    索引类型 注意: 该示例使用维度为 1536 的 diskANN 索引类型,与 text-embedding-ada-002 模型匹配。 虽然适应性强,但更改索引类型需要调整嵌入模型以匹配新维度。

将数据加载到 Azure Cosmos DB:

示例movies.json文件提供电影数据。该过程涉及:

  1. 从 JSON 文件中读取电影信息。
  2. 使用 Azure OpenAI 服务生成电影描述的矢量嵌入。
  3. 将完整数据(标题、描述和嵌入)插入 Azure Cosmos DB 容器。

在继续之前设置以下环境变量:

export COSMOS_DB_CONNECTION_STRING=""
export DATABASE_NAME=""
export CONTAINER_NAME=""
export AZURE_OPENAI_ENDPOINT=""
export AZURE_OPENAI_KEY=""
export AZURE_OPENAI_VERSION="2024-10-21"
export EMBEDDINGS_MODEL="text-embedding-ada-002"
登录后复制

克隆存储库:

git clone https://github.com/abhirockzz/cosmosdb-vector-search-python-typescript-java-dotnet
cd cosmosdb-vector-search-python-typescript-java-dotnet
登录后复制

下面提供了数据加载的特定语言说明。 每种方法都使用上面定义的环境变量。 成功执行将输出指示数据插入 Cosmos DB 的消息。

数据加载说明(略):

  • Python: cd python; python3 -m venv .venv; source .venv/bin/activate; pip install -r requirements.txt; python load.py
  • 打字稿: cd typescript; npm install; npm run build; npm run load
  • Java: cd java; mvn clean install; java -jar target/cosmosdb-java-vector-search-1.0-SNAPSHOT.jar load
  • .NET: cd dotnet; dotnet restore; dotnet run load

验证 Azure Cosmos DB 中的数据:

使用 Azure 门户或 Visual Studio Code 扩展确认数据插入。

Get started with Vector Search in Azure Cosmos DB

矢量/相似性搜索:

搜索组件使用 VectorDistance 函数根据搜索条件(例如“喜剧”)查找类似的电影。流程是:

  1. 为搜索条件生成向量嵌入。
  2. 使用 VectorDistance 将其与现有嵌入进行比较。

查询:

SELECT TOP @num_results c.id, c.description, VectorDistance(c.embeddings, @embedding) AS similarityScore FROM c ORDER BY VectorDistance(c.embeddings, @embedding)
登录后复制

特定于语言的指令(假设已设置环境变量并加载数据):

搜索说明(略):

  • Python: python search.py "inspiring" 3
  • 打字稿: npm run search "inspiring" 3
  • Java: java -jar target/cosmosdb-java-vector-search-1.0-SNAPSHOT.jar search "inspiring" 3
  • .NET: dotnet run search "inspiring" 3

结束语:

尝试不同的向量索引类型(flatquantizedFlat)、距离度量(余弦、欧几里德、点积)和嵌入模型(text-embedding-3-largetext-embedding-3-small)。 Azure Cosmos DB for MongoDB vCore 还支持矢量搜索。

以上是开始在Azure Cosmos DB中的矢量搜索的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板