本文最佳实践演示如何使用 MaxCompute 的 AI_GENERATE 函数,通过 SQL AI Function直接调用部署在 PAI EAS 上的多模态模型,读取 MaxCompute BLOB 列中的非结构化数据,进行图片数据处理,从而实现用SQL处理非结构化数据。基本流程是SQL引擎基于Object Table,读取OSS上图片数据,写入MaxCompute表 BLOB 列,以便重复计算时获得更大的数据读写带宽,然后继续使用SQL引擎和 AI Function调用多模态模型进行非结构化数据处理。
前提条件
开通MaxCompute并创建MaxCompute项目。如已完成可忽略。
已开通人工智能平台PAI模型在线服务(EAS)。如已完成可忽略。
已开通OSS服务。如已完成可忽略。
步骤一:创建OSS Bucket并上传数据
登录对象存储OSS控制台。
在 OSS 上创建名称为
ot-demo的Bucket,操作详情可参考OSS控制台快速入门。在新建的Bucket下新建目录
/object_table/image_demo/并上传图片数据image_demo.zip。
步骤二:创建并部署PAI EAS模型服务
登录PAI 控制台,左上角选择地域,创建工作空间。
进入工作空间详情页,点击左侧Model Gallery,选择
Qwen2.5-Omni-3B,点击部署。选择机型,选择一台L20 48G显存的机器,点击部署。可在任务管理中查看部署状态,部署完成后会显示运行中。
在左侧导航栏,单击模型部署模块,进入EAS查看已经部署的服务,点击查看调用信息,获取endpoint和token信息。
-- 后续步骤三创建远程模型时会用到如下信息。 模型名称(以实际EAS服务显示为主):quickstart_deploy_*****_apdf endpoint(VPC调用地址):http://*****.cn-beijing.pai-eas.aliyuncs.com(只取aliyuncs.com之前地址即可) apikey(Token):****************************************==
步骤三:创建Object Table
创建Object Table并查看元数据。
SET odps.namespace.schema=true; -- 开启租户级Schema语法开关
CREATE OBJECT TABLE IF NOT EXISTS image_demo
WITH SERDEPROPERTIES ('odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole')
LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/object_table/image_demo/';
-- 刷新元数据
ALTER TABLE image_demo REFRESH METADATA;
-- 读取图片数
SET odps.namespace.schema=true;
SELECT COUNT(*) AS ROW_COUNT FROM image_demo;
-- 返回结果如下:
+------------+
| row_count |
+------------+
| 10 |
+------------+步骤四:创建包含Blob列的表并写入数据
-- 创建包含Blob列的表
CREATE TABLE IF NOT EXISTS speech_segments_table (
image_name STRING COMMENT '图片唯一标识',
image_desc blob COMMENT '图片信息'
)
COMMENT ' SQL图片信息表'
TBLPROPERTIES (
"table.format.version"="2"
);
-- 写入数据
SET odps.namespace.schema=true;
INSERT INTO speech_segments_table
SELECT
t.key AS image_name,
to_blob(image_binary) AS image_desc
FROM (
SELECT key, GET_DATA_FROM_OSS('<project_name>.<schema>.image_demo', key) AS image_binary
FROM <project_name>.<schema>.image_demo
) t;
SELECT * FROM speech_segments_table;
-- 返回结果如下(示例):
+------------+------------+
| image_name | image_desc |
+------------+------------+
| test01.png | CAEQ**Mg== |
| test02.png | CAEQ**Mg== |
| test03.png | CAEQ**Mg== |
| test04.png | CAEQ**Mg== |
| test05.png | CAEQ**Mg== |
| test06.png | CAEQ**Mg== |
| test07.png | CAEQ**Mg== |
| test08.png | CAEQ**Mg== |
| test09.png | CAEQ**Mg== |
| test10.png | CAEQ**Mg== |
+------------+------------+步骤五:创建VPC网络连接
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
创建MaxCompute与目标VPC网络间的网络连接。VPC ID可以是任意VPC,交换机可以是任意可用区。
步骤六:注册Omni多模态远程模型
SET odps.namespace.schema=true;
SET odps.session.networklink=<your vpc name>;
CREATE MODEL PAI_EAS_Qwen25_Omni_3B_blob_image WITH VERSION v1
INPUT(data BINARY, promt STRING)
OPTIONS(
MODEL_SOURCE_TYPE = 'REMOTE',
MODEL_TYPE = 'MLLM',
TASKS = 'text-generation',
PAI_EAS_MODEL_NAME = 'Qwen2.5-Omni-3B',
PAI_EAS_SERVICE_NAME = 'quickstart_deploy_*****',
ENDPOINT = 'http://*****.vpc.cn-<region>.pai-eas.aliyuncs.com',
APIKEY = '*****',
PAI_EAS_SYNC_MODE = 'true'
)
COMMENT "PAI EAS remote model";步骤七:使用AI_GENERATE函数进行图片数据处理
SET odps.namespace.schema=true;
SET odps.mcqa.disable=true; -- 关闭查询加速模式,AI Function 暂不支持在查询加速模式下运行
SET odps.session.networklink=<your vpc name>;
SELECT
image_name,
AI_GENERATE(
PAI_EAS_Qwen25_Omni_3B_blob_image, DEFAULT_VERSION, speech_data,
"提取图片中的所有文字。严格只输出文字内容,不要包含任何开场白、解释、Markdown 格式或额外评论。"
) AS sql_dml
FROM (
SELECT image_name, read_blob(image_desc) AS speech_data
FROM <project name>.<schema>.speech_segments_table
) ;