本文以 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
三个关键环节:
PUT
PUT
将图片上传到 User Volume(内部存储,用户隔离)
GET_PRESIGNED_URL
GET_PRESIGNED_URL
生成带时效的 OSS 签名 URL,让 LLM 能访问
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';
User Volume 是用户私有的,其他用户无法访问。如需团队共享图片,使用 External Volume 挂载 OSS/COS/S3。
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 秒):
The image is completely black, showing nothing visible.
语法详解
参数
格式
说明
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';