概述
AI_EXTRACT
AI_EXTRACT
是云器 Lakehouse 提供的 AI 信息抽取函数,可从文本或图像中按指定字段提取结构化 JSON 数据。无需编写 prompt,只需通过
schema
schema
定义要提取的字段,即可在 SQL 中一行完成信息抽取。
云器将 AI 计算下沉至存储层与执行引擎,
AI_EXTRACT
AI_EXTRACT
可直接在 SQL 查询中对表中每一行调用大模型,无需将数据导出到外部系统,兼顾数据安全与处理效率。
语法
AI_EXTRACT(model, content, schema [, options])
参数说明
必需参数
| 参数 | 类型 | 说明 |
|---|
model
model | STRING | 模型标识,指定调用的 AI 模型。支持两种来源,见下方说明。 |
content
content | STRING 或图像引用 | 待抽取的文本内容,或通过 GET_PRESIGNED_URL()
GET_PRESIGNED_URL() 引用的图像。 |
schema
schema | JSON 字面量 | 定义要提取的字段,格式为 JSON'{"key":"字段描述", ...}'
JSON'{"key":"字段描述", ...}' 。每个 key 是返回 JSON 中的字段名,value 是对该字段的自然语言描述。 |
可选参数
| 参数 | 类型 | 说明 |
|---|
options
options | JSON 字面量 | 控制超时、并发、模型参数等,格式见下方 options 说明。 |
model 参数说明
model
model
参数支持两种来源:
来源一:API Gateway Endpoint(推荐)
通过 AI Gateway 中已配置的 Endpoint 名称指定模型:
'endpoint:qwen3.5-plus'
来源二:API Connection 连接对象
通过预先创建的 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_EXTRACT('conn_bailian:qwen3.5-plus', ...);
options 参数说明
| 选项 | 类型 | 默认值 | 说明 |
|---|
response.timeout
response.timeout | STRING(秒) | 系统默认 | HTTP 请求超时时间 |
task.concurrency
task.concurrency | STRING | 系统默认 | 批量处理时的并发度 |
model.params
model.params | JSON 对象 | — | 透传给底层模型的参数,如 {"enable_thinking":false}
{"enable_thinking":false} |
示例:
JSON'{"response.timeout":"300", "task.concurrency":"12", "model.params":{"enable_thinking":false}}'
返回值
返回 STRING 类型,内容为 JSON 格式字符串,包含
schema
schema
中定义的所有 key 及其抽取结果。所有字段值均为字符串类型。
示例:
{"age": "28", "name": "张三", "phone": "13800138000"}
错误行为
| 输入情况 | 返回值 |
|---|
content
content 为 NULL | NULL |
content
content 为空字符串 ''
'' | NULL |
content
content 为纯空白字符(如 ' '
' ' ) | 发送给模型,各字段返回空字符串,如 {"name": ""}
{"name": ""} |
| 文本中找不到对应字段的信息 | 该字段值为空字符串 ""
"" ,如 {"name": "", "phone": ""}
{"name": "", "phone": ""} |
| Endpoint 不存在 | 报错:No available endpoints found
No available endpoints found |
| Endpoint 格式错误 | 报错:Invalid model coordinates: 'xxx'
Invalid model coordinates: 'xxx' |
| 请求超时 | 报错:Read timed out
Read timed out |
| 图片文件不存在 | 报错:Failed to fetch image from URL...HTTP status: 404
Failed to fetch image from URL...HTTP status: 404 |
使用说明
schema 定义
schema 的 value 支持简单标签和问句描述两种写法,效果等价,问句描述在字段含义模糊时可提升准确率:
-- 简单标签
JSON'{"name":"姓名", "age":"年龄", "phone":"电话"}'
-- 问句描述
JSON'{"name":"员工姓名是什么?", "age":"员工年龄是多大?", "phone":"员工的电话号码是多少?"}'
schema 的 key 和 value 均支持中文、英文、日文等多语言。value 必须是字符串,不支持嵌套对象(如
{"type":"number"}
{"type":"number"}
)。建议字段数控制在 10 个以内,最多支持约 20 个字段。
超时设置建议
| 场景 | 推荐 timeout |
|---|
| 纯文本抽取 | ≥ 30 秒 |
| 单张图像抽取 | ≥ 60 秒 |
| 批量图像抽取 | ≥ 300 秒 |
批量处理
处理大量数据时,通过
task.concurrency
task.concurrency
控制并发度(建议 5~12),平衡速度与稳定性。对大表建议先用
WHERE
WHERE
过滤出需要处理的行,避免不必要的模型调用。
图像处理
图像场景建议设置
"model.params":{"enable_thinking":false}
"model.params":{"enable_thinking":false}
以减少响应时间。批量图像处理前,先用
SHOW USER VOLUME DIRECTORY
SHOW USER VOLUME DIRECTORY
确认文件列表,避免因文件不存在导致查询失败。
结合 JSON 函数解析结果
返回值为 JSON 字符串,可配合
json_extract_string
json_extract_string
等函数进一步解析:
WITH extracted AS (
SELECT
id,
AI_EXTRACT(
'endpoint:qwen3.5-plus',
content,
JSON'{"name":"姓名", "phone":"电话"}'
) AS result
FROM my_table
)
SELECT
id,
json_extract_string(result, '$.name') AS name,
json_extract_string(result, '$.phone') AS phone
FROM extracted;
示例
示例一:从文本中抽取联系人信息
SELECT AI_EXTRACT(
'endpoint:qwen3.5-plus',
'张三,28岁,电话13800138000',
JSON'{"name":"姓名", "age":"年龄", "phone":"电话"}'
) AS result;
返回:
{"age": "28", "name": "张三", "phone": "13800138000"}
示例二:批量抽取客户记录
SELECT
id,
AI_EXTRACT(
'endpoint:qwen3.5-plus',
content,
JSON'{"name":"客户姓名", "phone":"联系电话", "email":"邮箱地址", "company":"公司名称"}'
) AS extracted
FROM customer_records
WHERE content IS NOT NULL;
示例三:抽取订单信息
SELECT AI_EXTRACT(
'endpoint:qwen3.5-plus',
'订单信息:客户张三于2024年3月15日下单,购买了iPhone 15 Pro Max 256GB,单价8999元,数量2台,总计17998元',
JSON'{"customer":"客户姓名", "order_date":"下单日期", "product":"产品名称", "unit_price":"单价", "quantity":"数量", "total":"总金额"}'
) AS result;
返回:
{
"customer": "张三",
"order_date": "2024年3月15日",
"product": "iPhone 15 Pro Max 256GB",
"quantity": "2台",
"total": "17998元",
"unit_price": "8999元"
}
示例四:批量图像商品信息抽取
SELECT AI_EXTRACT(
'endpoint:qwen3.5-plus',
(GET_PRESIGNED_URL(USER VOLUME, relative_path) AS image),
JSON'{"product_name":"产品名称", "brand":"品牌", "category":"类别", "price":"价格", "spec":"规格"}',
JSON'{"model.params":{"enable_thinking":false}, "response.timeout":"300", "task.concurrency":"12"}'
) AS info
FROM (SHOW USER VOLUME DIRECTORY SUBDIRECTORY 'images/products');
示例五:使用 API Connection
SELECT AI_EXTRACT(
'conn_bailian:qwen3.5-plus',
'李四,35岁,邮箱 lisi@example.com',
JSON'{"name":"姓名", "age":"年龄", "email":"邮箱"}'
) AS result;
限制说明
| 限制项 | 说明 |
|---|
| schema value 类型 | 仅支持字符串描述,不支持 JSON Schema 类型定义(如 {"type":"number"}
{"type":"number"} ) |
| 返回值类型 | 所有字段值均为字符串类型,不会自动转换为数字或布尔值 |
| 字段数量 | 建议不超过 10 个字段,最多支持约 20 个字段 |
| 错误隔离 | 批量处理中如有单行失败(如图片 404),整个查询会失败 |
| 模型依赖 | 需要 AI Gateway 中已配置可用的 Endpoint,或预先创建的 API Connection |
| 结果确定性 | LLM 输出具有非确定性,同一输入多次执行结果可能略有差异 |