本文以电商场景中的图片标签提取和摘要生成为例,介绍如何通过Lance外部表访问存储在OSS上的非结构化数据,并结合AI Function调用远程模型完成非结构化数据处理。上游业务系统将非结构化数据存储至OSS上Lance格式的Binary字段中,MaxCompute 通过创建Lance外部表映射OSS中的图片数据,无需将数据从OSS迁移至MaxCompute,同时借助Lance格式统一管理和维护元信息,确保与多种计算引擎的兼容性。在此基础上,通过SQL引擎结合AI Function调用多模态模型,读取Lance外部表中的数据,完成非结构化数据的处理与分析。
前提条件
开通MaxCompute并创建MaxCompute项目。如已完成可忽略。
已开通人工智能平台PAI模型在线服务(EAS)。如已完成可忽略。
已开通OSS服务。如已完成可忽略。
步骤一:创建OSS Bucket
登录对象存储OSS控制台。
在 OSS 上创建名称为
lancetable-demo的Bucket,操作详情可参考OSS控制台快速入门。在新建的Bucket下新建目录
/lance_table/image/。
步骤二:准备 Lance 数据
准备本地图片文件image_demo.zip解压到本地路径,如
D:\Downloads\image_demo。执行前根据本地文件位置修改脚本相关配置项,然后执行如下 python 脚本upload_images_to_oss_lance_demo.py,完成在 OSS 目录中创建 Lance table,并把图片上传名为image的binary字段。
在 OSS 目录查看新建的
image.lance目录。
步骤三:创建并部署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):****************************************==
步骤四:创建Lance外部表并查询元信息
创建 Lance 外部表语法可参考Lance外部表(beta)。
CREATE EXTERNAL TABLE oss_lance_table (
image_id BIGINT ,
image_name STRING,
image BINARY
)
STORED BY 'com.aliyun.odps.common.table.lance.LanceStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/lancetable-demo/lance_table/image/image.lance/'
;
SELECT * FROM oss_lance_table limit 1;
-- 返回结果如下:
+------------+------------+-------+
| image_id | image_name | image |
+------------+------------+-------+
| 1 | test-1.jpg | =FF=D******步骤五:创建VPC网络连接
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
创建MaxCompute与目标VPC网络间的网络连接。VPC ID可以是任意VPC,交换机可以是任意可用区。
步骤六:注册Omni多模态远程模型
若输入binary定义模型时,需要提供输入参数声明 INPUT(data BINARY, promt STRING)。
若输入string的url,可以使用默认值,不用声明输入参数。
语法参数详情可参考创建模型。
SET odps.namespace.schema=true;
SET odps.session.networklink=<your vpc name>;
CREATE MODEL PAI_EAS_Qwen25_Omni_3B_binary 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_*****_apdf', -- 需替换为EAS服务名称
ENDPOINT = 'http://*****.vpc.cn-beijing.pai-eas.aliyuncs.com', -- 需替换为PAI EAS 服务的访问地址
APIKEY = '****************************************==', -- 需替换为PAI EAS 服务Token
PAI_EAS_SYNC_MODE = 'true'
)
COMMENT "PAI EAS remote model";步骤七:使用AI_GENERATE函数处理图片数据
使用MaxCompute AI_GENERATE函数进行图片数据的分类并生成描述摘要。
SET odps.namespace.schema=true;
SET odps.mcqa.disable=true;
SET odps.session.networklink=<your vpc name>;
SELECT
key,
image_name,
AI_GENERATE(
PAI_EAS_Qwen25_Omni_3B_binary, v1, `image`,
"从电商商品销售海报中识别并提取商品所属的类目。返回结果仅限于如下六个选项之一:美妆、服装、日用、食品、其他、电子产品,不包含其他文字或信息"
) AS item_catagory,
AI_GENERATE(
PAI_EAS_Qwen25_Omni_3B_binary, v1,`image`,
"用20字描述图片内容,包括颜色、名称!"
) AS item_description
FROM (
SELECT image, image_name, image_id AS key
FROM <project name>.<schema>.oss_lance_table
) Limit 10;
-- 返回结果如下:
+------------+------------+---------------+------------------+
| key | image_name | item_catagory | item_description |
+------------+------------+---------------+------------------+
| 1 | test-1.jpg | 服装 | 图片展示黑色高跟鞋,鞋面上有银色装饰,鞋跟细高,整体设计简约时尚。 |
| 2 | test-10.jpg | 服装 | 黑色丝绒裙襟,红色V领开扣上衣, amidst einen stilvollen Hintergrund with Nebel und kronleuchtern. |
| 3 | test-11.jpg | 美妆 | 图片展示了一排不同色号的Dior口红,背景为柔和粉红色,品牌标志明显。 |
| 4 | test-12.jpg | 美妆 | 透明圆形瓶装的白色乳霜,黑色盖子,红色几何图形装饰,底部有字幕。 |
| 5 | test-13.jpg | 其他 | 粉色和紫色的花朵精心编成的花束,搭配粉色背景和心形装饰,浪漫而不失优雅。 |
| 6 | test-14.jpg | 美妆 | La Mer海蓝之谜护肤品,绿色和淡紫色调,品牌标志。 |
| 7 | test-15.jpg | 美妆 | 图中黄色背景下的护肤套装,包含碧丽肤生物复合精华和纯净清洁产品。 |
| 8 | test-16.jpg | 日用 | 棕色圆形浴缸、黑色台面、窗户、 plants、红色红色,黄色按钮。 |
| 9 | test-17.jpg | 其他 | 图中金色的观音菩萨像,金色头冠,莲花台底座,身上有紫色、黄色、金色花纹。 |
| 10 | test-18.jpg | 照片显示的是化妆品。 | 洁白的透明纸包装,印有蓝色图案和文字,背景为蓝色渐变。 |
+------------+------------+---------------+------------------+