AI_SIMILARITY

概述

AI_SIMILARITY
AI_SIMILARITY
是云器 Lakehouse 提供的语义相似度计算函数,基于 Embedding 模型将两段文本转换为向量,并计算其余弦相似度,返回一个 FLOAT 值。可用于语义搜索、商品推荐、文本去重、内容匹配等场景。

与

AI_COMPLETE
AI_COMPLETE
等 LLM 函数不同,
AI_SIMILARITY
AI_SIMILARITY
基于 Embedding 模型,结果具有确定性——相同输入永远返回相同结果,且速度更快。

云器将 AI 计算下沉至存储层与执行引擎,数据在平台内部即可完成智能处理,无需流转至外部环境,在保障数据安全的同时大幅降低任务延迟。

语法

AI_SIMILARITY
AI_SIMILARITY
支持两种调用形式:

-- 使用工作区默认模型(推荐) AI_SIMILARITY(<text1>, <text2> [, json '{}']) -- 或手动指定连接 AI_SIMILARITY('<connection>:<model>', <text1>, <text2> [, json '{}'])

参数说明

model(可选)

指定要调用的 Embedding 模型。从 2026 年 9 月起,该参数可以省略——模型通过工作区默认模型自动路由,无需在每次调用时显式传入。

省略 model 参数时调用方式最简洁:

SELECT AI_SIMILARITY('白色上衣', '白色衬衫');

工作区默认模型可通过以下方式配置:

方式一:创建新工作区时开启开关(推荐)

2026 年 9 月起新建的工作区,在创建时打开 "启用 AI Function" 开关,系统将自动配置默认模型,调用时无需传入 model 参数。对于此之前创建的工作区,需通过下方方式手动配置。

方式二:工作区级别 ALTER WORKSPACE 配置

通过

ALTER WORKSPACE
ALTER WORKSPACE
设置工作区默认模型,对所有使用该工作区的 session 生效:

ALTER WORKSPACE <workspace_name> SET PROPERTIES ( 'cz.sql.ai.similarity.default.model' = '<connection>:<model>' ); SELECT AI_SIMILARITY('白色上衣', '白色衬衫');

方式三:会话级 SET 覆盖

在当前会话中临时指定默认模型,优先级高于工作区属性,仅当前 session 生效:

SET cz.sql.ai.similarity.default.model=conn_bailian:text-embedding-v4; SELECT AI_SIMILARITY('白色上衣', '白色衬衫');

方式四:API Connection 连接对象

通过

CREATE API CONNECTION
CREATE API CONNECTION
创建连接对象后,在调用时显式传入:

CREATE API CONNECTION conn_bailian TYPE ai_function PROVIDER = 'bailian' BASE_URL = 'https://dashscope.aliyuncs.com/api/v1' API_KEY = 'sk-xxxxxxxxxxxxxxxxxxxxxxxx'; SELECT AI_SIMILARITY('conn_bailian:text-embedding-v4', '白色上衣', '白色衬衫');

CREATE API CONNECTION
CREATE API CONNECTION
各字段说明:

字段说明
TYPE
TYPE
固定为
ai_function
ai_function
PROVIDER
PROVIDER
模型供应商标识,如
'bailian'
'bailian'
、
'openai'
'openai'
、
'anthropic'
'anthropic'
等
BASE_URL
BASE_URL
模型服务的 API 基础地址
API_KEY
API_KEY
调用服务所需的认证密钥

text1(必需)

第一段输入文本,类型为 STRING。支持中文、英文等多语言。

text2(必需)

第二段输入文本,类型为 STRING。支持中文、英文等多语言。

options(可选)

JSON 字面量,用于控制输出格式、模型参数、超时和并发度:

JSON '{"output.behavior":"formatted_json","model.params": {"dimensions": 2048}, "response.timeout": "300", "task.concurrency": "12"}'

输出格式控制

参数键类型默认值说明
output.behavior
output.behavior
STRING
formatted_json
formatted_json
输出格式:
formatted_json
formatted_json
/
raw_string
raw_string
/
fail_on_error
fail_on_error

三种输出模式对比:

模式成功输出错误输出适用场景
formatted_json
formatted_json
{"value":0.8097}
{"value":0.8097}
{"value":0,"error_message":"..."}
{"value":0,"error_message":"..."}
生产环境默认,结构化输出便于下游解析
raw_string
raw_string
原始相似度数值(FLOAT)NULL兼容旧行为,应急使用
fail_on_error
fail_on_error
原始相似度数值(FLOAT)抛异常,整个 job 失败严格模式,不容忍单行错误

output.behavior
output.behavior
输入兼容性(大小写不敏感,
_
_
、
.
.
、
-
-
等价):

输入值解析结果
formatted_json
formatted_json
/
formatted.json
formatted.json
/
json
json
FORMATTED_JSON
raw_string
raw_string
/
raw.string
raw.string
/
raw
raw
RAW_STRING
fail_on_error
fail_on_error
/
fail.on.error
fail.on.error
/
fail-on-error
fail-on-error
/
fail
fail
FAIL_ON_ERROR

模型参数

参数键类型默认值说明
model.params.dimensions
model.params.dimensions
INT1024Embedding 向量维度(可设为 2048 等,取决于模型支持)

运行时参数

参数键类型默认值说明
embeddings.batch_size
embeddings.batch_size
INT-批量 Embedding 时的每批文本数量,适用于大批量处理场景
task.concurrency
task.concurrency
STRING
"1"
"1"
批量处理并发度,上限 128(建议不超过 8)
response.timeout
response.timeout
STRING-单次请求超时时间(秒),如
"300"
"300"

返回值

FLOAT 类型。基于余弦相似度计算,理论范围为 [-1, 1],实际使用中通常落在 [0, 1] 区间。

值域含义
1.0两段文本完全相同(或语义完全一致)
> 0.7高度相似
0.3 ~ 0.7有一定关联
< 0.3基本无关
0任一输入为 NULL,或一个为空字符串而另一个非空

错误行为

默认情况下,若函数无法处理输入,返回

0
0
,不报错。具体边界行为见下表:

输入情况返回值
任一参数为 NULL0
两个都是空字符串
''
''
1
一个空字符串,一个非空0
两个相同的非空文本1.0

使用说明

  • 结果具有确定性:相同输入永远返回相同结果,适合用于需要稳定排序的业务场景(如搜索结果排序)。
  • 函数具有对称性:
    AI_SIMILARITY(model, a, b)
    AI_SIMILARITY(model, a, b)
    与
    AI_SIMILARITY(model, b, a)
    AI_SIMILARITY(model, b, a)
    结果完全相同。
  • 支持多语言及跨语言:支持中文、英文等多语言文本,也支持跨语言相似度计算(如中文与英文语义对比)。
  • 仅支持文本输入:
    AI_SIMILARITY
    AI_SIMILARITY
    不支持图像输入,图像处理请使用
    AI_EXTRACT
    AI_EXTRACT
    。
  • 合理设置阈值:根据业务场景调整过滤阈值,精确匹配建议 > 0.9,高度相关建议 > 0.7,有一定关联建议 > 0.5。
  • 注意配额消耗:每次调用消耗 text1 + text2 的 token 数。批量 CROSS JOIN 场景 token 消耗 = 行数² × 平均 token 数,请提前评估。
  • 先过滤再计算:对大表使用时,建议先用
    WHERE
    WHERE
    缩小范围,再计算相似度,避免不必要的 API 调用。

示例

使用默认模型

省略

model
model
参数时,使用工作区或会话级默认模型:

-- 使用工作区默认模型计算相似度 SELECT AI_SIMILARITY('你好', '世界');

基础用法

-- 语义相近的文本 SELECT AI_SIMILARITY('conn_bailian:text-embedding-v4', '白色上衣', '白色衬衫'); -- 返回:约 0.8097 -- 语义无关的文本 SELECT AI_SIMILARITY('conn_bailian:text-embedding-v4', '白色上衣', '蓝牙耳机'); -- 返回:约 0.2640 -- 完全相同的文本 SELECT AI_SIMILARITY('conn_bailian:text-embedding-v4', '白色上衣', '白色上衣'); -- 返回:1.0

跨语言相似度

-- 中英文语义匹配 SELECT AI_SIMILARITY('conn_bailian:text-embedding-v4', '我喜欢这道菜', 'I like this dish'); -- 返回:约 0.7513

语义搜索(按相似度排序)

SELECT product_name, AI_SIMILARITY('conn_bailian:text-embedding-v4', product_name, '白色上衣') AS score FROM products ORDER BY score DESC LIMIT 5;

相似度阈值过滤

-- 只返回与查询词高度相关的商品 SELECT product_name FROM products WHERE AI_SIMILARITY('conn_bailian:text-embedding-v4', product_name, '白色上衣') > 0.7;

文本去重(找近似重复)

SELECT a.title, b.title, AI_SIMILARITY('conn_bailian:text-embedding-v4', a.title, b.title) AS sim FROM articles a JOIN articles b ON a.id < b.id WHERE AI_SIMILARITY('conn_bailian:text-embedding-v4', a.title, b.title) > 0.95;

使用 CTE 避免重复调用

WITH scored AS ( SELECT product_id, product_name, AI_SIMILARITY('conn_bailian:text-embedding-v4', product_name, '运动鞋') AS score FROM products ) SELECT * FROM scored WHERE score > 0.6 ORDER BY score DESC;

使用 output.behavior 控制输出格式

-- formatted_json(默认) SELECT AI_SIMILARITY('conn_bailian:text-embedding-v4', '白色上衣', '白色衬衫'); -- 返回:{"value":0.8097} -- raw_string SELECT AI_SIMILARITY( 'conn_bailian:text-embedding-v4', '白色上衣', '白色衬衫', json '{"output.behavior":"raw_string"}' ); -- 返回:0.8097

限制说明

  • model 参数可选:省略 model 参数时将使用工作区默认模型;若未配置默认模型且未指定 model,会报错
    AI function must have at least two arguments
    AI function must have at least two arguments
    。
  • model 格式错误会报错:model 必须使用
    '<连接名称>:<模型名称>'
    '<连接名称>:<模型名称>'
    格式,格式不符时报错
    Invalid model coordinates
    Invalid model coordinates
    。
  • 仅支持文本输入:不支持图像输入,图像处理请使用
    AI_EXTRACT
    AI_EXTRACT
    。
  • 输入长度受模型限制:输入文本长度受底层 Embedding 模型 context window 限制。
  • 配额限制:受 AI Gateway 租户月度 token 配额限制,配额超限时整个查询失败,错误信息为
    Tenant quota exceeded: Monthly quota limit...
    Tenant quota exceeded: Monthly quota limit...
    。
  • ** API Connection 不存在时报错**:错误信息为
    模型未指定且租户未配置默认模型
    模型未指定且租户未配置默认模型
    ,请检查 API Connection 名称是否正确。
联系我们
预约咨询
微信咨询
电话咨询
邮件咨询