本教程演示如何使用简单的电影数据集在 Azure Cosmos DB for NoSQL 中快速实现矢量搜索。 该应用程序支持 Python、TypeScript、.NET 和 Java,提供设置、数据加载和相似性搜索查询的分步说明。
向量数据库擅长存储和管理向量嵌入——数据的高维数学表示。每个维度都反映一个数据特征,数量可能有数万个。向量在该空间中的位置表示其特征。 该技术可对各种数据类型进行矢量化,包括单词、短语、文档、图像和音频,从而支持相似性搜索、多模式搜索、推荐引擎和大型语言模型 (LLM) 等应用。
先决条件:
text-embedding-ada-002
嵌入模型的 Azure OpenAI 服务资源(可通过 Azure AI Foundry 门户访问)。 该模型提供文本嵌入。在 Azure Cosmos DB 中为 NoSQL 配置矢量数据库:
启用该功能:这是一次性步骤。在 Azure Cosmos DB 中显式启用矢量索引和搜索。
创建数据库和容器: 创建分区键为 movies_db
的数据库(例如 movies
)和容器(例如 /id
)。
创建策略:为容器配置向量嵌入策略和索引策略。 对于本示例,请使用如下所示的设置(此处使用通过 Azure 门户进行手动配置,但也可以使用编程方法)。
索引类型 注意: 该示例使用维度为 1536 的 diskANN
索引类型,与 text-embedding-ada-002
模型匹配。 虽然适应性强,但更改索引类型需要调整嵌入模型以匹配新维度。
将数据加载到 Azure Cosmos DB:
示例movies.json
文件提供电影数据。该过程涉及:
在继续之前设置以下环境变量:
<code class="language-bash">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"</code>
克隆存储库:
<code class="language-bash">git clone https://github.com/abhirockzz/cosmosdb-vector-search-python-typescript-java-dotnet cd cosmosdb-vector-search-python-typescript-java-dotnet</code>
下面提供了数据加载的特定语言说明。 每种方法都使用上面定义的环境变量。 成功执行将输出指示数据插入 Cosmos DB 的消息。
数据加载说明(略):
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
cd java; mvn clean install; java -jar target/cosmosdb-java-vector-search-1.0-SNAPSHOT.jar load
cd dotnet; dotnet restore; dotnet run load
验证 Azure Cosmos DB 中的数据:
使用 Azure 门户或 Visual Studio Code 扩展确认数据插入。
矢量/相似性搜索:
搜索组件使用 VectorDistance
函数根据搜索条件(例如“喜剧”)查找类似的电影。流程是:
VectorDistance
将其与现有嵌入进行比较。查询:
<code class="language-sql">SELECT TOP @num_results c.id, c.description, VectorDistance(c.embeddings, @embedding) AS similarityScore FROM c ORDER BY VectorDistance(c.embeddings, @embedding)</code>
特定于语言的指令(假设已设置环境变量并加载数据):
搜索说明(略):
python search.py "inspiring" 3
npm run search "inspiring" 3
java -jar target/cosmosdb-java-vector-search-1.0-SNAPSHOT.jar search "inspiring" 3
dotnet run search "inspiring" 3
结束语:
尝试不同的向量索引类型(flat
、quantizedFlat
)、距离度量(余弦、欧几里德、点积)和嵌入模型(text-embedding-3-large
、text-embedding-3-small
)。 Azure Cosmos DB for MongoDB vCore 还支持矢量搜索。
以上是开始在Azure Cosmos DB中的矢量搜索的详细内容。更多信息请关注PHP中文网其他相关文章!