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 | INT | 1024 | Embedding 向量维度(可设为 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
,不报错。具体边界行为见下表:
| 输入情况 | 返回值 |
|---|
| 任一参数为 NULL | 0 |
两个都是空字符串 ''
'' | 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 名称是否正确。