AI Gateway 实战:在 SQL 中分析图片实现多模态 AI 管道

AI_COMPLETE
AI_COMPLETE
的图像模式让 SQL 不仅能处理文本,还能直接分析图片内容——商品图分类、文档 OCR 识别、监控截图异常检测,全部在同一个 SQL 查询中完成。结合 Volume 存储 + 预签名 URL,形成从图片上传到 AI 分析的全托管管道。

本文以 Kimi K2.6 多模态模型为例,演示如何在云器 Lakehouse 中构建端到端的多模态 AI 管道。


管道架构

Local Images ──── PUT ────→ User Volume ── PRESIGNED_URL ──→ Signed URL PNG/JPG Int. Storage force.external Ext. Access │ │ AI_COMPLETE (image) │ ▼ Analysis Result

三个关键环节:

  1. PUT
    PUT
    将图片上传到 User Volume(内部存储,用户隔离)
  2. GET_PRESIGNED_URL
    GET_PRESIGNED_URL
    生成带时效的 OSS 签名 URL,让 LLM 能访问
  3. AI_COMPLETE
    AI_COMPLETE
    图像模式
    发送图片 URL + Prompt,获取分析结果

第一步:上传图片到 Volume

-- 上传单张图片到 User Volume PUT '/path/to/product.jpg' TO USER VOLUME FILE 'images/product.jpg'; -- 上传到子目录 PUT '/path/to/screenshot.png' TO USER VOLUME FILE 'screenshots/error_001.png';


第二步:生成预签名 URL

GET_PRESIGNED_URL
GET_PRESIGNED_URL
为 Volume 中的文件生成带时效的 OSS 签名 URL,LLM 通过此 URL 下载图片。

-- ⚠️ 必须先开启外网模式,否则生成内网 URL(LLM 无法访问) SET cz.sql.function.get.presigned.url.force.external = true; -- 生成 1 小时有效的预签名 URL SELECT GET_PRESIGNED_URL(USER VOLUME, 'images/product.jpg', 3600) AS url;

返回示例:

http://cz-lh-sh-system-prod.oss-cn-shanghai.aliyuncs.com/.../product.jpg ?Expires=1780392774&OSSAccessKeyId=...&Signature=...

参数说明:

  • 第一个参数:Volume 类型和名称(
    USER VOLUME
    USER VOLUME
    /
    VOLUME my_vol
    VOLUME my_vol
  • 第二个参数:文件在 Volume 中的路径
  • 第三个参数:有效期(秒),建议 3600(1 小时),最大 7 天

第三步:AI_COMPLETE 图像模式

图像模式使用行值语法

(prompt AS prompt, image_url AS image)
(prompt AS prompt, image_url AS image)
将 Prompt 和图片 URL 一起传入:

SET cz.sql.function.get.presigned.url.force.external = true; SELECT AI_COMPLETE('ai_gateway_conn:moonshotai/kimi-k2.6', ('请用一句话描述这张图片' AS prompt, GET_PRESIGNED_URL(USER VOLUME, 'ai_test/test_icon.png', 3600) AS image) );

实测结果(1.3 秒):

语法详解

参数格式说明
model
'ai_gateway_conn:moonshotai/kimi-k2.6'
'ai_gateway_conn:moonshotai/kimi-k2.6'
必须使用支持多模态的模型
prompt
'描述这张图片' AS prompt
'描述这张图片' AS prompt
文本提示词,
AS prompt
AS prompt
不可省略
image
GET_PRESIGNED_URL(...) AS image
GET_PRESIGNED_URL(...) AS image
图片 URL,
AS image
AS image
不可省略

支持模型

图像模式需使用支持多模态(视觉)的模型,如

moonshotai/kimi-k2.6
moonshotai/kimi-k2.6
(实测通过,1.3s 响应)。纯文本模型传入图片不会报错但无法识别图像内容。


实战:批量图片分析

场景:商品图片自动分类

假设电商系统每天上传数千张商品图到 OSS,需要自动识别图片中的商品类型。

-- 1. 建表存放分析结果 CREATE TABLE product_image_analysis ( image_path STRING COMMENT '图片路径', category STRING COMMENT 'AI 识别品类', description STRING COMMENT 'AI 描述', analyzed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP() ); -- 2. 从 External Volume 读取图片列表,批量分析 SET cz.sql.function.get.presigned.url.force.external = true; INSERT INTO product_image_analysis (image_path, category, description) SELECT relative_path AS image_path, -- 分类 AI_COMPLETE('ai_gateway_conn:moonshotai/kimi-k2.6', ('将商品分为以下类别之一:electronics/clothing/food/furniture。只回复类别名。' AS prompt, GET_PRESIGNED_URL(VOLUME product_images_vol, relative_path, 3600) AS image) ) AS category, -- 描述 AI_COMPLETE('ai_gateway_conn:moonshotai/kimi-k2.6', ('用一句话中文描述这个商品' AS prompt, GET_PRESIGNED_URL(VOLUME product_images_vol, relative_path, 3600) AS image) ) AS description FROM DIRECTORY(VOLUME product_images_vol) WHERE relative_path LIKE '%.jpg' AND last_modified_time > CURRENT_TIMESTAMP() - INTERVAL 1 DAY;

查询结果

SELECT category, COUNT(*) AS cnt FROM product_image_analysis GROUP BY category ORDER BY cnt DESC;

Dynamic Table 自动增量分析

将上述逻辑封装为 Dynamic Table,新图片上传后自动分析:

SET cz.sql.function.get.presigned.url.force.external = true; CREATE OR REPLACE DYNAMIC TABLE gold.product_image_tags REFRESH INTERVAL 1 HOUR vcluster DEFAULT COMMENT '商品图片 AI 标签——自动增量更新' AS SELECT relative_path AS image_path, AI_COMPLETE('ai_gateway_conn:moonshotai/kimi-k2.6', ('将商品分类为 electronics/clothing/food/furniture,只回复类别名。' AS prompt, GET_PRESIGNED_URL(VOLUME product_images_vol, relative_path, 3600) AS image) ) AS category, last_modified_time FROM DIRECTORY(VOLUME product_images_vol) WHERE relative_path LIKE '%.jpg';


适用场景

场景实现方式
商品图自动分类AI_COMPLETE 图像模式 + 分类 Prompt
文档 OCR 提取"提取图片中的所有文字"
监控截图异常检测"判断图片中是否有异常,只回复 normal/abnormal"
社交媒体图片审核"判断图片内容是否违规,只回复 safe/unsafe"
发票/证件信息提取"提取图片中的金额、日期、公司名称"
医学影像初步筛查"判断图片中是否有异常区域,只回复 yes/no"

注意事项

注意点说明
预签名 URL 必须 force.external
SET cz.sql.function.get.presigned.url.force.external = true
SET cz.sql.function.get.presigned.url.force.external = true
,否则生成内网 URL
图片格式支持 PNG、JPG、JPEG。SVG 的 MIME type 为 null,会导致
Invalid image MIME type
Invalid image MIME type
错误
模型选择必须使用多模态(视觉)模型。纯文本模型传入图片不会报错但无法识别图像内容
URL 有效期预签名 URL 默认建议 3600 秒(1 小时),最长 7 天
DT 成本DT 中的 AI_COMPLETE 每次 REFRESH 全量重算,建议用普通表 + 手动 INSERT 替代
并发限制大量图片同时分析时注意 AI Gateway 的 TPM/RPM 配额限制
文件大小建议图片 < 10MB,过大图片可能超时或 Token 消耗过高
User Volume 隔离User Volume 是用户私有的,其他用户看不到你上传的图片

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询