1. 概述
TCHouse AI Function 是 TCHouse-X 内置的 AI 函数集合。函数在数仓内核中执行,可与标准 SQL 任意组合,用于对表内文本、语义数据进行批量智能化处理。本文列出当前支持的全部内置函数及其语法、参数与示例。
2. 通用调用约定
2.1 调用形式
AI Function 作为普通标量 / 聚合 / 表函数使用,可出现在 SELECT、WHERE、GROUP BY、CTE 等任意 SQL 位置,可与 JOIN、UNION、窗口函数自由组合。
2.2 指定 Endpoint
除特别说明外,函数第一个参数为
endpoint,用于指定本次调用绑定的模型接入点。Endpoint 名称在“模型管理 > 模型连接”页查看,实例内唯一。为避免每次调用都显式指定 Endpoint,支持在 Session 级设置默认 Endpoint:
SET DEFAULT_LLM_ENDPOINT = 'endpoint-minimax-m3';SET DEFAULT_EMBEDDING_ENDPOINT = 'endpoint-kinfra-emb-0.6b';SET DEFAULT_TIME_FORECAST_ENDPOINT = 'endpoint-chronos-2';
优先级:函数内显式指定的 endpoint 参数 > Session 级默认 Endpoint。未指定且未设置 Session 变量时,调用将失败。
说明:
向量化函数
AI_EMBED 必须绑定 Embedding 类 Endpoint;时序预测函数 AI.FORECAST 必须绑定时序预测类 Endpoint。类型不匹配会导致调用失败。2.3 通过 OPTIONS 传入模型参数
函数支持通过
OPTIONS 传入一段 JSON 字符串,用于控制推理行为。最常用的是 kwargs,其中的字段会追加进模型请求体(OpenAI Chat Completions 兼容)。SELECT AI_GENERATE(endpoint 'endpoint-minimax-m3',options '{"kwargs":{"temperature": 0.2, "top_p": 0.9, "max_tokens": 512}}','为 AI 产品发布会写一段开场白');
除
kwargs 外,OPTIONS 还支持 max_qps、max_concurrency、max_retries、hint 以及推理优化相关参数,完整说明请参见 AI Function 高级能力说明。3. 函数总览
函数名 | 分类 | 用途 | 返回类型 |
AI_GENERATE | 文本生成 | 指令驱动的内容生成:逻辑续写、创意润色及多风格文案创作 | STRING |
AI_FIXGRAMMAR | 文本生成 | 文本语法与规范修正 | STRING |
AI_SUMMARIZE | 文本生成 | 单条长文本的语义聚焦性摘要 | STRING |
AI_SUMMARIZE_AGG | 文本生成 | 多行文本的语义聚合摘要(聚合函数) | STRING |
AI_TRANSLATE | 文本生成 | 跨语言语义映射与翻译 | STRING |
AI_SENTIMENT | 文本理解 | 情感极性识别 | STRING |
AI_CLASSIFY | 文本理解 | 零样本语义分类(支持多标签) | STRING / ARRAY<STRING> |
AI_SIMILARITY | 文本理解 | 两文本的语义相似度度量 | DOUBLE |
AI_FILTER | 文本理解 | 按自定义策略做合规性风险审计 | BOOLEAN |
AI_EXTRACT | 信息提取 | 结构化字段抽取 | JSON / STRUCT |
AI_MASK | 信息提取 | 敏感信息脱敏 | STRING |
AI_EMBED | 向量化 | 文本向量化编码 | ARRAY<FLOAT> |
AI.FORECAST | 时序预测 | 基于历史时间序列预测未来值 | TABLE |
4. 组合使用示例:构建舆情处理中心
本章用一个端到端示例演示 AI Function 的组合用法。场景是舆情处理:输入一张社交媒体原始评论表,先用 AI_FILTER 剔除谩骂等违规内容,再用 AI_SENTIMENT 只保留负面评论,最后对筛出的每一行用 AI_GENERATE 逐条生成客服回复。三步全部在一条 SQL 内完成,数据不出数仓,也不需要任何外部程序或调度。
示例分三步:4.1 准备数据集,4.2 编写并执行核心 SQL,4.3 查看执行结果。
4.1 数据集准备
-- 步骤 1:创建演示库与原始评论表-- 结构与业务系统落地的原始舆情数据一致:只保留平台、作者、正文等非结构化字段CREATE DATABASE IF NOT EXISTS d_llm_function_demo;DROP TABLE IF EXISTS d_llm_function_demo.t_social_media_raw;CREATE TABLE d_llm_function_demo.t_social_media_raw (id INT COMMENT '唯一标识',source_platform STRING COMMENT '来源平台:微博、小红书、贴吧等',author_name STRING COMMENT '发布者昵称',content STRING NOT NULL COMMENT '原始非结构化评论内容') COMMENT '舆情处理中心-原始数据表';-- 步骤 2:灌入 5 条样本,刻意覆盖四类典型情况-- id=1 物流异常 :负面、不违规 → 期望保留-- id=2 谩骂辱骂 :负面、违规 → 期望被 AI_FILTER 过滤-- id=3 好评推荐 :正面、不违规 → 期望被 AI_SENTIMENT 过滤-- id=4 兼职广告 :负面、不违规 → 期望保留-- id=5 功能报障 :负面、不违规 → 期望保留INSERT INTO d_llm_function_demo.t_social_media_raw VALUES(1, '微博', '快乐的小羊', '刚才在静安区世纪大道发生了快递车起火,我的包裹号是 SF142335……'),(2, '小红书', '避雷达人', '这种垃圾产品也敢卖 2999 元?退钱!张三你这个经理是怎么当的?'),(3, '朋友圈', '科技狂热者', '收到新款手机了,质感无敌!上海发货速度就是快,推荐大家购买。'),(4, '贴吧', '兼职助手', '诚招兼职,加微信:wx_12345,月入过万不是梦,详询 18900001111。'),(5, '官方App','用户9527', '登录一直提示系统错误,重启也没用。我身份证号是 310115199001011234。');
4.2 核心 SQL
逻辑:过滤违规 → 情感分析 → 生成回复。
-- 一条 SQL 完成“违规过滤 → 情感筛选 → 回复生成”SELECTid,-- 对通过筛选的每一行拼一段指令交给大模型生成客服回复,每行一次调用AI_GENERATE(endpoint 'system-minimax-m3',CONCAT('针对该问题生成技术回复:', content)) AS 预制回复FROM d_llm_function_demo.t_social_media_rawWHERE-- 语义合规审计:返回 TRUE 表示命中策略(本例为谩骂),取 FALSE 即保留未违规内容AI_FILTER(endpoint 'system-minimax-m3', '{} 是谩骂的', content) = FALSE-- 情感极性:只保留 negative,正面与中性评论不进入回复队列AND AI_SENTIMENT(endpoint 'system-minimax-m3', content) = 'negative';
4.3 执行结果
逐行筛选过程
把 4.2 的 WHERE 条件直接放到 SELECT 里执行,可以看到每一步的判定结果:
id | 原文摘要 | 命中谩骂 | 情感极性 | 是否生成回复 |
1 | 快递车起火,包裹号 SF142335 | false | negative | 是 |
2 | 这种垃圾产品也敢卖 2999 元?退钱! | true | negative | 否,违规内容被拦截 |
3 | 收到新款手机了,质感无敌! | false | positive | 否,非负面不处理 |
4 | 诚招兼职,加微信,月入过万 | false | neutral | 否,情感判定未落在 negative |
5 | 登录一直提示系统错误 | false | negative | 是 |
最终输出(以下为一次执行的真实输出,仅供示意,生成式模型的输出每次不完全一致):
id | 预制回复 |
1 | 尊敬的用户,您好!关于您反映的快递车起火事故及包裹(单号:SF142335)情况,现回复如下 一、事故核实.… |
5 | 重要提醒:请立即修改/隐藏您的身份证号!身份证号属于高度敏感个人信息,在公开渠道(论坛、客服工单、聊天记录等)泄露可能导致身份盗用。请立即:… |
5. 文本生成类函数
5.1 AI_GENERATE
指令驱动的内容生成。基于提示词工程实现逻辑续写、创意润色及多风格文案创作。
参数 | 说明 |
endpoint | 模型接入点名称 |
prompt | 指令文本 |
返回类型:STRING。
SELECT AI_GENERATE(endpoint 'endpoint-minimax-m3','为 AI 产品发布会写一段开场白');
预期输出:
"未来已来。今天,我们共同见证 AI 重塑世界的起点……"
结合表数据的批量调用示例:
SELECTproduct_id,product_name,AI_GENERATE(endpoint 'endpoint-minimax-m3','为以下商品撰写一段 50 字以内的电商详情页文案:' || product_name) AS marketing_copyFROM product_catalogWHERE category = '数码';
5.2 AI_FIXGRAMMAR
文本语法与规范修正。智能识别并修复句法结构、拼写错误及表达偏差。
参数 | 说明 |
endpoint | 模型接入点名称 |
text | 待修正文本 |
返回类型:STRING。
SELECT AI_FIXGRAMMAR(endpoint 'endpoint-minimax-m3','The data are incorrect.');
预期输出:
"The data is incorrect."
5.3 AI_SUMMARIZE
语义聚焦性摘要。通过语义聚类提取核心观点,在限定长度内实现长篇幅信息的高度浓缩。
参数 | 说明 |
endpoint | 模型接入点名称 |
text | 待处理的长文本内容 |
max_len | 目标输出长度,按词数(words)计算。默认值 50,建议最大值 2000 |
返回类型:STRING。
SELECT AI_SUMMARIZE(endpoint 'endpoint-minimax-m3','我家的后面有一个很大的园,相传叫作百草园。……',50);
预期输出:
"我家后园曾叫百草园,现已卖给朱家多年,虽只剩野草,却是儿时乐园。"
说明:
max_len 为引导性建议值。英文按空格分隔的单词计数;中文无天然分词边界,1 个汉字可近似视为 1 个词。模型会尽量控制输出长度,不做强制截断。5.4 AI_SUMMARIZE_AGG
多行文本信息聚合摘要。将多行文本按行进行语义聚合,输出一个汇总语义后的统一摘要文本。调用方式与其他聚合函数(如 SUM、AVG)一致,支持 GROUP BY。
参数 | 说明 |
endpoint | 模型接入点名称 |
text | 待处理的多行长文本内容 |
返回类型:STRING。
WITH reviews AS (SELECT '这家餐厅太棒了,食物美味,服务周到。' AS reviewUNION ALL SELECT '太棒了!我超爱他们的披萨!'UNION ALL SELECT '食物不错,但服务一般般。'UNION ALL SELECT '普通的食物和普通的服务')SELECT AI_SUMMARIZE_AGG(endpoint 'endpoint-minimax-m3', review)FROM reviews;
预期输出:
"用户主要需求包括:增加深色模式、优化搜索、数据导出功能、通知设置个性化以及简化界面设计。"
5.5 AI_TRANSLATE
跨语言语义映射。在保留原文语义权重的基础上,实现多语种间的流畅对齐与文化适配。
参数 | 说明 |
endpoint | 模型接入点名称 |
text | 源文本 |
t_lang | 目标语言 |
s_lang | 源语言,可选 |
返回类型:STRING。
SELECT AI_TRANSLATE(endpoint 'endpoint-minimax-m3','Hello world!','zh-CN');
预期输出:
"你好,世界!"
说明:
t_lang、s_lang 无强制格式约束,支持“中文”/“zh”/“zh-CN”等多种写法。建议参考 ISO 639-1 或 BCP 47 标准传入。6. 文本理解类函数
6.1 AI_SENTIMENT
情感极性识别。深度分析主观文本,输出情感正负倾向。
参数 | 说明 |
endpoint | 模型接入点名称 |
text | 目标文本 |
返回类型:STRING,取值为
positive / negative / neutral / mixed。SELECT AI_SENTIMENT(endpoint 'endpoint-minimax-m3','这物流慢得离谱');
预期输出:
"negative"
6.2 AI_CLASSIFY
零样本语义分类。基于语义锚点将文本映射至预定义标签体系,无需额外训练。支持多标签模式。
参数 | 说明 |
endpoint | 模型接入点名称 |
text | 目标文本 |
labels | 预设分类数组 |
multi_label | 可选,是否多标签(BOOL,默认 false) |
返回类型:单标签为 STRING,多标签为 ARRAY<STRING>。
单标签示例:
SELECT AI_CLASSIFY(endpoint 'endpoint-minimax-m3','无法登录账号',array('投诉', '咨询'));
预期输出:
"投诉"
多标签示例:
SELECT ai_classify(endpoint 'endpoint-minimax-m3','快递送得快,但商品有瑕疵,客服态度还不错',array['物流速度', '包装质量', '商品质量', '客服服务', '性价比'],true);
预期输出:
['物流速度', '客服服务']
6.3 AI_SIMILARITY
语义相似度度量。由生成式模型判定两个文本的相似度,返回 0 至 1 之间的关联度数值,数值越高表示关联度越大。
参数 | 说明 |
endpoint | 模型接入点名称 |
text1 | 文本 A |
text2 | 文本 B |
返回类型:DOUBLE。
SELECT AI_SIMILARITY(endpoint 'endpoint-minimax-m3','我想退钱','申请退款');
预期输出:
0.9
6.4 AI_FILTER
合规性风险审计。根据自定义安全策略判定内容是否触碰违规红线,输出布尔值。
参数 | 说明 |
endpoint | 模型接入点名称 |
policy | 过滤策略,使用 {} 作为待审文本的占位符 |
text1 … textN | 待审文本,个数需与 policy 中的占位符一致 |
返回类型:BOOLEAN。
单文本示例:
SELECT AI_FILTER(endpoint 'endpoint-minimax-m3','{} 是色情暴力的','怎么才能像大神一样优秀呢');
预期输出:
false
双文本(JOIN 语义)示例:
SELECT AI_FILTER(endpoint 'endpoint-minimax-m3','{} 是色情的,{} 是暴力的','怎么才能像大神一样优秀呢','今天雨下的很大');
说明:
7. 信息提取类函数
7.1 AI_EXTRACT
结构化字段抽取。从非结构化文本中识别并捕获特定维度的关键信息,支持多种输入 / 输出形式。
参数 | 说明 |
endpoint | 模型接入点名称 |
text | 目标文本 |
entities | 抽取规则,支持四种形式(见下表) |
entities 支持的四种形式:形式 | 说明 | 返回 |
array(string) | 仅标签名字 | json string |
array(string, schema) | 标签名字 + 指定返回 schema | struct |
string | JSON Schema 字符串描述 | json string |
struct schema | struct 结构类型描述,如 struct<name:string, age:int> | 对应结构的 struct |
返回类型:JSON / STRUCT。
形式一:标签数组
SELECT AI_EXTRACT(endpoint 'endpoint-minimax-m3','我是一名来自清华大学计算机专业的研究生',array('学校', '专业'));
预期输出:
{"学校": "清华大学", "专业": "计算机"}
形式二:struct schema
SELECT ai_extract(endpoint 'endpoint-minimax-m3','我的名字是张三,年龄为25岁',struct<姓名:string, 年龄:int>);
预期输出:
{姓名: "张三", 年龄: 25}
形式三:JSON Schema 字符串
SELECT ai_extract(endpoint 'endpoint-minimax-m3','李四居住在上海,是一名软件工程师','{"type": "object", "properties": {"姓名": {"type": "string", "description": "人员的全名"},"地点": {"type": "string", "description": "城市或国家"},"年龄": {"type": ["integer", "null"], "description": "人员的年龄"},"职业": {"type": ["string", "null"], "description": "人员的职业"}}}');
预期输出:
{"姓名": "李四", "地点": "上海", "年龄": null, "职业": "软件工程师"}
说明:
JSON Schema 形式可更细粒度地约束字段类型与描述,建议参考 JSON Schema 2020-12 标准编写。
7.2 AI_MASK
隐私数据脱敏。基于预设标签自动定位敏感数据,采用
[MASKED] 掩码进行置换遮蔽。参数 | 说明 |
endpoint | 模型接入点名称 |
text | 原始文本 |
tags | 脱敏标签数组 |
返回类型:STRING。
SELECT AI_MASK(endpoint 'endpoint-minimax-m3','我叫张三,手机 13800000000,邮箱 zhangsan@example.com',array('name', 'phone', 'email'));
预期输出:
"我叫 [MASKED],手机 [MASKED],邮箱 [MASKED]"
8. 向量化函数
8.1 AI_EMBED
将文本编码为定长向量(embedding),用于语义检索、聚类、相似度对比等下游任务。
参数 | 说明 |
endpoint | 模型接入点名称,须为 Embedding 类 Endpoint |
text | 待编码的文本 |
返回类型:ARRAY<FLOAT>。
SELECT AI_EMBED(endpoint 'endpoint-kinfra-emb-0.6b','申请退款');
预期输出:
[0.0123, -0.0451, ..., 0.0087]
说明:
向量维度由 Endpoint 所绑定的模型决定(例如 1024 维)。同一批数据请使用同一个 Embedding Endpoint 编码,避免不同模型产出的向量混用导致相似度不可比。
9. 时序预测函数
9.1 AI.FORECAST
基于历史时间序列预测未来时间点的值,输出预测值及置信区间。支持按
id_cols 分组进行多序列并发预测,支持通过 feature_cols 引入外生特征。参数 | 必填 | 说明 |
endpoint | 否 | 模型接入点名称,须为时序预测类 Endpoint。未指定且未设置 DEFAULT_TIME_FORECAST_ENDPOINT 时,将触发本地推理 |
options | 否 | JSON 字符串,支持 prediction_length / confidence_level / freq / limit_prediction_length / context_length / output_historical_time_series |
输入数据 | 是 | 二选一:传数据表 TABLE <表名>,或传子查询 (<子查询>) |
data_col | 是 | 目标序列列名(字符串字面量) |
timestamp_col | 是 | 时间戳列名 |
id_cols | 否 | ARRAY<STRING>,多序列分组键 |
feature_cols | 否 | ARRAY<STRING>,外生特征列 |
返回类型:TABLE。
SELECT *FROM AI.FORECAST(ENDPOINT 'endpoint-chronos-2',OPTIONS '{"prediction_length": 7, "confidence_level": 0.9}',TABLE sales,data_col => 'gmv',timestamp_col => 'ds',id_cols => ARRAY['store_id'],feature_cols => ARRAY['is_promo']);
预期输出:
forecast_timestamp | forecast_value | prediction_interval_lower_bound | prediction_interval_upper_bound | confidence_level |
2026-07-24 00:00:00 | 13100.5 | 11800.2 | 14400.8 | 0.9 |
… | … | … | … | … |
2026-07-30 00:00:00 | 14020.3 | 11020.4 | 17020.1 | 0.9 |
说明:
若指定
id_cols,结果列前会追加对应分组列;若 OPTIONS 中 output_historical_time_series=true,结果末尾会追加 time_series_type 列。