跳到主要内容
版本:1.3

函数参考

本页介绍用于匹配、分类和评分的三个 AI 函数。 实验功能的可用范围、配置、NULL 处理和请求限制见 AI 函数概述。

ai_match​

ai_match 使用 Jev 后端的 Noul 模式,估计某个自然语言陈述对文本成立的概率。

函数签名​

ai_match(text, prompt)
参数类型含义
textSTRING待评估的文本。
promptSTRING关于该文本的陈述句或是非问题。

返回类型: 可空 DOUBLE(Float64),取值范围为 [0, 1]。

概率越高表示匹配程度越高。返回值不是相似度分数,也不是 Choice 和 Score 模式中的独立 confidence 字段。 响应中的概率缺失、不是数值、为非有限值或越界时,查询会失败。 任一参数为 NULL 时,返回 NULL,不调用 API。

函数不接受阈值参数,请对结果使用普通 SQL 比较: ai_match(text, prompt) >= 0.8 会包含概率恰好为 0.8 的结果。 与 NULL 比较会得到 NULL,WHERE 会排除这些行。

过滤文本​

使用示例数据,找出重试后仍然失败的支付事件:

SELECT occurred_at, service, message
FROM ai_events
WHERE occurred_at >= '2026-09-19T00:00:00Z'
AND occurred_at < '2026-09-20T00:00:00Z'
AND service = 'payments'
AND ai_match(
message,
'The event reports that a payment still failed after retries.'
) >= 0.8
ORDER BY occurred_at;

预期命中第一条事件。第二条描述支付已恢复成功,NULL 事件不会调用 API。 模型在不同评估中不保证返回完全相同的结果。

返回概率并排序​

SELECT occurred_at, message,
ai_match(message, 'The event reports that a payment still failed after retries.') AS probability
FROM ai_events
WHERE occurred_at >= '2026-09-19T00:00:00Z'
AND occurred_at < '2026-09-20T00:00:00Z'
AND service = 'payments'
ORDER BY probability DESC NULLS LAST;

若还需要按该概率过滤,请复用子查询别名, 而不是在 WHERE 中再次调用 AI 函数。

ai_choose​

ai_choose 使用 Jev 后端的 Choice 模式,将文本归入给定选项之一。

函数签名​

ai_choose(text, prompt, criteria)
参数类型含义
textSTRING待分类的文本。
promptSTRING选择选项的指令。
criteriaSTRING定义 1–255 个命名选项的 JSON 对象字符串。

返回类型: 可空 STRING,内容是所选选项的 key,而不是描述。 函数不返回服务提供方的 confidence 字段。如果响应中的 key 不在给定 criteria 中,查询会失败。

任一参数为 SQL NULL 时,返回 NULL,不校验 criteria,也不调用 API。

Criteria 格式​

每个 key 是选项名称。对应的 value 必须是 JSON 字符串、对象或数组形式的描述; 如果仅凭名称就足以表达含义,也可以使用 JSON null:

{
"billing": "Payments, invoices, and refunds",
"technical": {"description": "Bugs and outages", "examples": ["crash", "timeout"]},
"other": null
}

空对象、超过 255 个选项、非法 JSON,或使用数字或布尔值作为选项描述,都会被判为无效。 选项描述中的 JSON null 不等同于 SQL 参数为 NULL:'{"other":null}' 是合法 criteria, 而字符串 'null' 不是 criteria 对象。

示例​

创建示例数据后,将事件分配给相应团队:

SELECT occurred_at, message,
ai_choose(message, 'Which team should handle this event?',
'{"billing":"Payments and refunds","technical":"Bugs and outages","other":null}') AS team
FROM ai_events
WHERE occurred_at >= '2026-09-19T00:00:00Z'
AND occurred_at < '2026-09-20T00:00:00Z';

每个非 NULL 行的结果是 billing、technical 或 other 之一。 可以将结果用于字符串比较或分组。如果既要返回标签又要按标签过滤, 请复用子查询别名,不要重复编写 AI 调用。

ai_score​

ai_score 使用 Jev 后端的 Score 模式,根据有序等级对文本评分。 它返回一次模型评估的结构化结果,而不只是一个数值。

函数签名​

ai_score(text, prompt, criteria)
参数类型含义
textSTRING待评分的文本。
promptSTRING对文本评分的指令。
criteriaSTRING定义 2–10 个从低到高排列的等级的 JSON 数组字符串。

返回类型: 可空 JSONB 对象,内部表示为 BinaryView。 使用 JSON 函数显示结果或提取字段。

任一参数为 SQL NULL 时,返回 NULL,不校验 criteria,也不调用 API。

Criteria 格式​

每个数组元素通过 JSON 字符串、对象或数组描述一个等级。 等级按照输入顺序从零开始编号,例如:

["No impact", {"description": "Degraded service with a workaround"}, ["Blocking issue", "No workaround"]]

对于这三个等级,评分范围是 0 到 2,而不是 0 到 1。 等级少于 2 个或多于 10 个的数组无效。与 ai_choose 不同, 等级描述不能为 JSON null,数字和布尔值也不能作为描述。

返回结果​

以下为三个等级的示意结果:

{
"score": 1.05,
"confidence": 0.92,
"probabilities": [0.0, 0.95, 0.05]
}
字段含义
score服务提供方返回的等级编号概率加权均值。N 个等级对应 [0, N - 1] 范围,结果可以是小数。
confidence服务提供方返回的 [0, 1] 范围内的置信度,反映分布的集中程度,不保证答案正确。
probabilities恰好包含 N 个概率的数组,顺序与 criteria 一致。第 i 项对应 criteria[i],是各等级对应的概率,而不是累积概率。

相同均值可能对应不同判断:[0, 1, 0] 和 [0.5, 0, 0.5] 的 score 都是 1, 但前者集中在中间等级,后者则分布在两个极端。 不要仅凭均值认定一个明确等级,还应查看置信度和概率分布。

响应必须包含这三个字段。score 和 confidence 必须是各自范围内的有限数值, 每个等级的概率必须是 [0, 1] 范围内的数值,且概率总和与 1 的差值不能超过 1e-6。 等级缺失或数值无效会使查询失败。GreptimeDB 保留服务提供方的数值,不会重新归一化概率分布或重新计算 score。

提取字段并过滤​

使用示例数据,每个事件只评估一次,随后提取字段并按置信度过滤:

SELECT occurred_at, message,
json_get_float(rating, 'score') AS severity,
json_get_float(rating, 'confidence') AS confidence,
json_get_float(rating, 'probabilities[2]') AS blocking_probability
FROM (
SELECT occurred_at, message,
ai_score(message, 'How severe is this event?',
'["No impact","Degraded service with a workaround","Blocking issue with no workaround"]') AS rating
FROM ai_events
WHERE occurred_at >= '2026-09-19T00:00:00Z'
AND occurred_at < '2026-09-20T00:00:00Z'
) AS rated
WHERE json_get_float(rating, 'confidence') >= 0.8
ORDER BY severity DESC NULLS LAST;

若需显示完整对象,可在外层查询中使用 json_to_string(rating)。 复用 rating 能保证提取的各字段来自同一次评估; 为每个字段重复调用 ai_score(...) 会产生额外 API 请求。 详见复用一次评估结果。