AI_SENTIMENT
概述
AI_SENTIMENT
AI_SENTIMENT
是云器 Lakehouse 提供的 AI 情感分析函数,可对输入文本进行情感倾向判断,返回
positive
positive
(正面)、
negative
negative
(负面)、
neutral
neutral
(中性)或
mixed
mixed
(混合)标签。支持中文、英文、日文等多语言,一行 SQL 即可完成情感分析。
云器将 AI 计算下沉至存储层与执行引擎,数据在平台内部即可完成智能处理,无需流转至外部环境,在保障数据安全的同时大幅降低任务延迟。
语法
-- model 可选(使用 Workspace 默认模型)
AI_SENTIMENT( <text> [, <options>] )
-- model 手动指定
AI_SENTIMENT( <model>, <text> [, <options>] )
参数说明
model(可选)
指定要调用的语言模型。从 2026 年 9 月起,该参数可以省略——模型通过工作区默认模型自动路由,无需在每次调用时显式传入。
省略 model 参数时调用方式最简洁:
SELECT AI_SENTIMENT('产品很好');
工作区默认模型可通过以下方式配置:
方式一:创建新工作区时开启开关(推荐)
2026 年 9 月起新建的工作区,在创建时打开 "启用 AI Function" 开关,系统将自动配置默认模型,调用时无需传入 model 参数。对于此之前创建的工作区,需通过下方方式手动配置。
方式二:工作区级别 ALTER WORKSPACE 配置
通过
ALTER WORKSPACE
ALTER WORKSPACE
设置工作区默认模型,对所有使用该工作区的 session 生效:
ALTER WORKSPACE <workspace_name> SET PROPERTIES (
'cz.sql.ai.sentiment.default.model' = '<connection>:<model>'
);
SELECT AI_SENTIMENT('产品很好');
方式三:会话级 SET 覆盖
在当前会话中临时指定默认模型,优先级高于工作区属性,仅当前 session 生效:
SET cz.sql.ai.sentiment.default.model=conn_bailian:qwen3.5-plus;
SELECT AI_SENTIMENT('产品很好');
方式四: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_SENTIMENT('conn_bailian:qwen3.5-plus', '这个产品非常好用!');
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 | 调用服务所需的认证密钥 |
text
text
包含待检测情感的输入文本,类型为 STRING。支持中文、英文、日文、法文、德文、西班牙文等多种语言,无需手动指定语言,模型自动识别。
可选参数
options
options
一个 JSON STRING,用于控制函数行为。当前支持的选项如下:
| 参数键 | 类型 | 默认值 | 说明 |
|---|
output.behavior
output.behavior | STRING | formatted_json
formatted_json | 输出格式,见下方对比表 |
model.params.temperature
model.params.temperature | FLOAT | — | 输出随机性,范围 [0, 2],越低越确定 |
model.params.max_tokens
model.params.max_tokens | INT | — | 最大输出 token 数 |
model.params.enable_thinking
model.params.enable_thinking | BOOL | — | 是否开启 thinking 模式,批量处理建议设为 false
false |
task.concurrency
task.concurrency | STRING | "1"
"1" | 批量处理并发度,上限 128(建议不超过 8) |
response.timeout
response.timeout | STRING | — | 单次请求超时时间(秒),如 "60"
"60" |
output.behavior 取值说明
| 模式 | 成功输出 | 错误输出 | 适用场景 |
|---|
formatted_json
formatted_json | {"value":"positive"}
{"value":"positive"} | {"value":"","error_message":"..."}
{"value":"","error_message":"..."} | 生产环境默认,结构化输出便于下游解析 |
raw_string
raw_string | 原始字符串(如 positive
positive ) | NULL | 兼容旧行为,应急使用 |
fail_on_error
fail_on_error | 原始字符串(如 positive
positive ) | 抛异常,整个 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 |
返回值
STRING 类型,为以下值之一:
| 值 | 含义 |
|---|
positive
positive | 文本表达了正面评价或积极情感 |
negative
negative | 文本表达了负面评价或消极情感 |
neutral
neutral | 文本不含明显情感倾向(如陈述性事实、通知类文本) |
mixed
mixed | 文本中同时包含正面和负面情感 |
错误行为
默认情况下,若函数无法处理输入,返回
NULL
NULL
,不报错。在多行查询中,出错的行返回
NULL
NULL
,不影响其他行的正常执行。
使用说明
- NULL 和空字符串均返回 NULL:
text
text
为 NULL
NULL
或空字符串 ''
''
时,函数返回 NULL
NULL
,不报错。纯空白字符(如 ' '
' '
)会被发送给模型处理,通常返回 neutral
neutral
。
- 结果具有非确定性:基于 LLM 的情感分析结果可能因模型版本或调用时机略有差异,同一输入多次执行结果可能不同。
- 注意 mixed 与 neutral 的区别:
mixed
mixed
表示文本中同时存在正面和负面评价(如"食物好但服务差");neutral
neutral
表示文本不含情感倾向(如"下午三点开会")。
- 多语言无需额外配置:模型自动识别输入语言,中英日法德西等语言均可直接分析。
示例
省略 model 参数(推荐)
当工作区已配置默认模型时,调用方式最简洁:
SELECT AI_SENTIMENT('产品很好') AS sentiment;
-- 返回:positive
使用默认模型
当已配置默认模型(通过 Workspace 属性或 Session SET),可省略 model 参数:
SELECT AI_SENTIMENT('产品很好');
-- 返回:positive
基础用法
-- 正面情感
SELECT AI_SENTIMENT(
'conn_bailian:qwen3.5-plus',
'这个产品非常好用,强烈推荐!'
) AS sentiment;
-- 返回:positive
-- 负面情感
SELECT AI_SENTIMENT(
'conn_bailian:qwen3.5-plus',
'质量太差了,完全是浪费钱,非常失望。'
) AS sentiment;
-- 返回:negative
-- 中性文本
SELECT AI_SENTIMENT(
'conn_bailian:qwen3.5-plus',
'今天下午三点有一个会议,讨论下季度的预算安排。'
) AS sentiment;
-- 返回:neutral
-- 混合情感
SELECT AI_SENTIMENT(
'conn_bailian:qwen3.5-plus',
'食物非常美味,但服务态度很差,等了一个小时才上菜。'
) AS sentiment;
-- 返回:mixed
多语言
-- 英文
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'This is the best purchase I have ever made!') AS sentiment;
-- 返回:positive
-- 日文
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'この製品は素晴らしいです。品質が非常に高いです。') AS sentiment;
-- 返回:positive
-- 法语
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'Ce restaurant est absolument terrible.') AS sentiment;
-- 返回:negative
-- 中英混合
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'这个product的quality真的很nice,性价比超高!') AS sentiment;
-- 返回:positive
语义理解能力
模型具备以下语义理解能力,无需额外配置:
-- 讽刺/反语识别
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'哦,真是太好了,又加班到凌晨,我真是太开心了。') AS sentiment;
-- 返回:negative(正确识别讽刺语气,而非字面正面含义)
-- 双重否定
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'这个产品并不差。') AS sentiment;
-- 返回:positive(正确理解"并不差"= 正面评价)
-- 否定句
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'我不觉得这个产品好。') AS sentiment;
-- 返回:negative
-- Emoji 情感
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus', '今天的晚餐 🤮🤮🤮') AS sentiment;
-- 返回:negative
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus', '收到礼物了 🎉❤️😍') AS sentiment;
-- 返回:positive
-- 古诗词情感
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'春风得意马蹄疾,一日看尽长安花。') AS sentiment;
-- 返回:positive
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus',
'问君能有几多愁,恰似一江春水向东流。') AS sentiment;
-- 返回:negative
批量分析表数据
SELECT
id,
review_content,
AI_SENTIMENT('conn_bailian:qwen3.5-plus', review_content) AS sentiment
FROM product_reviews
WHERE review_content IS NOT NULL;
情感分布统计
SELECT
sentiment,
COUNT(*) AS cnt,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 1) AS pct
FROM (
SELECT AI_SENTIMENT('conn_bailian:qwen3.5-plus', content) AS sentiment
FROM customer_feedback
WHERE content IS NOT NULL
)
GROUP BY sentiment
ORDER BY cnt DESC;
负面工单优先处理
SELECT ticket_id, description, created_at
FROM support_tickets
WHERE AI_SENTIMENT('conn_bailian:qwen3.5-plus', description) = 'negative'
ORDER BY created_at DESC
LIMIT 50;
限制说明