VECTOR_DISTANCE (Transact-SQL) (预览版)

适用于: Azure SQL 数据库 Azure SQL 托管实例

注意

该数据类型为预览版,可能会发生变化。 请务必阅读联机服务的服务级别协议 (SLA) 文档中的预览版使用条款。

使用指定的距离指标计算两个向量之间的距离。

语法

Transact-SQL 语法约定

VECTOR_DISTANCE ( distance_metric, vector1, vector2 )

参数

distance_metric

一个字符串,其中包含用于计算两个给定向量之间的距离的距离指标的名称。 支持以下距离指标:

  • cosine - 余弦距离
  • euclidean - Euclidean 距离
  • dot - (负数) 点积

vector1

一个以二进制格式计算为 矢量 的表达式。

vector2

一个以二进制格式计算为矢量的表达式。

距离指标

跃点数 说明 范围 示例
cosine 余弦(角)距离 [0, 2] 0:相同的向量
2:对立向量
euclidean 欧几里得距离 [-∞, +∞] 0:相同的向量
dot 基于点产品的距离指示,
通过计算 点积获取
[-∞, +∞] 较小的数字表示更相似的向量

返回值

该函数返回一个标量浮点值,该值表示使用指定距离指标的两个向量之间的距离。

如果 distance_metric 不是有效的指标,并且提供的二进制值不表示有效向量,则返回错误。

示例

查看Azure SQL 数据库矢量搜索示例 GitHub 存储库以获取端到端工作示例。

示例假定存在一个表,该表具有wikipedia_articles存储标题的维基百科文章嵌入的类型vectortitle_vectortitle_vector 假定是使用嵌入模型(如 text-embedding-ada-002text-embedding-3-small )生成的嵌入,该模型返回具有 1,536 个维度的矢量。

示例 1

以下示例使用 JSON 数组从字符串创建具有三个维度的向量。

DECLARE @v1 VECTOR(2) = '[1,1]';
DECLARE @v2 VECTOR(2) = '[-1,-1]';

SELECT 
    VECTOR_DISTANCE('euclidean', @v1, @v2) AS euclidean,
    VECTOR_DISTANCE('cosine', @v1, @v2) AS cosine,
    VECTOR_DISTANCE('dot', @v1, @v2) AS negative_dot_product;

示例 2

下面的示例根据标题向量之间的余弦距离返回与给定文章最相似的前 10 篇文章。 有关示例中使用的数据库的详细信息,可在此处找到: 下载并导入包含 Vector Embedding 的维基百科文章

DECLARE @v AS VECTOR(1536);
SELECT @v = title_vector FROM [dbo].[wikipedia_articles] WHERE title = 'Alan Turing';

SELECT TOP(10) 
  id, 
  title, 
  VECTOR_DISTANCE('cosine', @v, title_vector) AS distance 
FROM 
  [dbo].[wikipedia_articles] 
ORDER BY
  distance

示例 3

下面的示例根据标题向量之间的余弦距离返回给定项目的所有类似文章,仅选择距离小于 0.3 的余弦距离。

DECLARE @v AS VECTOR(1536);
SELECT @v = title_vector FROM [dbo].[wikipedia_articles] WHERE title = 'Alan Turing';

SELECT  
  id, 
  title,
  VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM 
  [dbo].[wikipedia_articles] 
WHERE
  VECTOR_DISTANCE('cosine', @v, title_vector) < 0.3
ORDER BY
  distance