OSS 数据索引会用 AI 为图片、视频自动生成内容描述(Insights),但默认生成的描述语言可能与您的业务语言不一致,跨语言检索和展示不方便。本功能让您为 Dataset 指定 Insights 的输出语言(如英语、日语),使 AI 生成的内容描述与业务语言保持一致,便于跨语言检索与展示。
本功能基于新版 MetaQuery,当前处于邀测阶段,仅支持华东1(杭州)、新加坡地域。使用前请确保目标 Bucket 位于上述地域,并联系技术支持申请开通新版 MetaQuery 邀测能力。
应用场景
出海业务:为图片、视频生成英语、日语等目标语言的内容描述,直接用于多语言站点的展示与检索。
多语言素材库:在同一素材库中按业务需要分别生成不同语言的 Insights,统一检索口径。
工作原理
开启内容感知并指定语言:在目标 Dataset 的
DatasetConfig中开启图片或视频的 Insights(Caption),并设置Insights.Language为目标语言。入库生成描述:文件上传并路由到该 Dataset 后,OSS 异步生成内容描述,并按指定语言输出。
写入元数据:生成的内容描述写入该文件在 Dataset 中的元数据(
Insights)。查询读取:通过
SimpleQuery配合WithFields返回并读取Insights字段。
内容描述为异步生成,上传后需要等待一段时间 Insights 才会就绪;在此之前可能读取不到。
使用限制
调用方需具备
oss:MetaQuery、oss:PutObject等权限。如需接收文件索引完成通知,请提前创建 MNS 队列,并确保
OpenMetaQuery使用的 RAM 角色拥有向该队列发送消息的权限。如需将不同对象路由到不同 Dataset,需要在开启 MetaQuery 时配置
RouteRule。
1. 开启 MetaQuery
以 semantic 模式为 Bucket 开启元数据管理功能。以下示例基于 OSS Java SDK V2(com.aliyun:alibabacloud-oss-v2)与 OSS Go SDK V2(github.com/aliyun/alibabacloud-oss-go-sdk-v2),并从环境变量 OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET 读取访问凭证。
Java SDK
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.dataprocess.OSSDataProcessClient;
import com.aliyun.sdk.service.oss2.dataprocess.models.*;
import java.util.Arrays;
import java.util.Collections;
public class OpenMetaQuerySample {
public static void main(String[] args) throws Exception {
try (OSSDataProcessClient client = OSSDataProcessClient.newBuilder()
.region("cn-hangzhou")
.credentialsProvider(new EnvironmentVariableCredentialsProvider())
.build()) {
MetaQueryOpenBody body = MetaQueryOpenBody.newBuilder()
.routeRule(RouteRule.newBuilder()
.type("OSSTag")
.autoCreateDataset("True")
.ossTagKey("routing-dataset")
.build())
.notificationAttributes(NotificationAttributes.newBuilder()
.notifications(MetaQueryNotifications.newBuilder()
.notifications(Collections.singletonList(
MetaQueryNotification.newBuilder()
.mns("metaquery-index-notification")
.build()))
.build())
.withFields(Arrays.asList("Insights"))
.build())
.build();
client.openMetaQuery(OpenMetaQueryRequest.newBuilder()
.bucket("examplebucket")
.mode("semantic")
.role("AliyunMetaQueryDefaultRole")
.metaQueryBody(body)
.build());
System.out.println("open meta query success");
}
}
}多 Dataset 路由(RouteRule)、索引完成 MNS 通知(NotificationAttributes)以及 Bucket 级默认 DatasetConfig,需在 OpenMetaQuery 请求体中一并配置,字段说明请参见 OpenMetaQuery;如需在通知消息中返回内容描述,请在 WithFields 中加入 Insights。
2. 创建 Dataset 并配置 Insights 语言
调用 CreateDataset 创建 Dataset,并通过 DatasetConfig 配置 Insights。
仅配置 Insights.Language 不会自动开启 Insights 生成能力,还需要在 Insights.Image.Caption.Enable 或 Insights.Video.Caption.Enable 中开启对应媒体类型的内容感知。
以下示例创建一个输出英文 Insights 的 Dataset,并同时开启图片和视频的 caption。
Java SDK
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.dataprocess.OSSDataProcessClient;
import com.aliyun.sdk.service.oss2.dataprocess.models.*;
public class CreateDatasetSample {
public static void main(String[] args) throws Exception {
try (OSSDataProcessClient client = OSSDataProcessClient.newBuilder()
.region("cn-hangzhou")
.credentialsProvider(new EnvironmentVariableCredentialsProvider())
.build()) {
DatasetConfig config = DatasetConfig.newBuilder()
.insights(InsightsConfig.newBuilder()
.language("en")
.image(InsightsImageConfig.newBuilder()
.caption(InsightsCaptionConfig.newBuilder()
.enable("true")
.build())
.build())
.video(InsightsVideoConfig.newBuilder()
.caption(InsightsVideoCaptionConfig.newBuilder()
.enable("true")
.build())
.build())
.build())
.build();
client.createDataset(CreateDatasetRequest.newBuilder()
.bucket("examplebucket")
.datasetName("photos-en")
.datasetConfig(config)
.build());
System.out.println("create dataset success");
}
}
}支持的语言取值如下:
语言代码 | 对应语言 |
zh-Hans | 简体中文(默认) |
zh-Hant | 繁体中文 |
en | 英语 |
ja | 日语 |
ko | 韩语 |
ar | 阿拉伯语 |
cs | 捷克语 |
da | 丹麦语 |
nl | 荷兰语 |
fr | 法语 |
de | 德语 |
id | 印尼语 |
it | 意大利语 |
ms | 马来语 |
no | 挪威语 |
pl | 波兰语 |
pt | 葡萄牙语 |
ro | 罗马尼亚语 |
ru | 俄语 |
es | 西班牙语 |
sv | 瑞典语 |
th | 泰语 |
tr | 土耳其语 |
3. 上传文件并路由到 Dataset
上传文件时,通过 OSS Object Tag 设置 routing-dataset=photos-en,将文件路由到目标 Dataset。文件索引完成后,会按照 Dataset 中的 Insights.Language 生成 Insights。如需对单个文件覆盖 Dataset 的默认语言,可在同一次上传中增加 x-oss-metaquery-insights-language Tag。优先级为:文件级 Tag > DatasetConfig > 系统默认语言。
Java SDK
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.PutObjectRequest;
import com.aliyun.sdk.service.oss2.transport.BinaryData;
import java.nio.file.Files;
import java.nio.file.Paths;
public class PutObjectSample {
public static void main(String[] args) throws Exception {
try (OSSClient client = OSSClient.newBuilder()
.region("cn-hangzhou")
.credentialsProvider(new EnvironmentVariableCredentialsProvider())
.build()) {
client.putObject(PutObjectRequest.newBuilder()
.bucket("examplebucket")
.key("photos/snow.jpg")
.tagging("routing-dataset=photos-en&x-oss-metaquery-insights-language=zh-Hans")
.body(BinaryData.fromStream(Files.newInputStream(Paths.get("/local/path/snow.jpg"))))
.build());
System.out.println("put object success");
}
}
}4. 查询文件并读取 Insights
文件索引完成后,调用 SimpleQuery 在指定 Dataset 内查询文件,并通过 WithFields 返回 Insights 字段。如果在开启 MetaQuery 时配置了 MNS 通知,您也可以通过消费 MNS 消息判断文件是否索引完成,并从通知消息中读取 Insights。
Java SDK
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.dataprocess.OSSDataProcessClient;
import com.aliyun.sdk.service.oss2.dataprocess.models.File;
import com.aliyun.sdk.service.oss2.dataprocess.models.SimpleQuery;
import com.aliyun.sdk.service.oss2.dataprocess.models.SimpleQueryRequest;
import com.aliyun.sdk.service.oss2.dataprocess.models.SimpleQueryResult;
import java.util.Arrays;
public class SimpleQueryInsightsSample {
public static void main(String[] args) throws Exception {
try (OSSDataProcessClient client = OSSDataProcessClient.newBuilder()
.region("cn-hangzhou")
.credentialsProvider(new EnvironmentVariableCredentialsProvider())
.build()) {
SimpleQueryResult result = client.simpleQuery(SimpleQueryRequest.newBuilder()
.bucket("examplebucket")
.datasetName("photos-en")
.query(SimpleQuery.newBuilder()
.field("Filename")
.value("snow")
.operation("match")
.build())
.withFields(Arrays.asList("Filename", "URI", "Insights"))
.maxResults(10)
.build());
for (File file : result.files()) {
System.out.println(file.filename() + " => " + file.insights());
}
}
}
}响应中的 Insights 字段即为按配置语言生成的内容描述。例如:
<File>
<Filename>photos/snow.jpg</Filename>
<Insights>
<Image>
<Caption>Snow-covered mountains with sunlight breaking through clouds.</Caption>
</Image>
</Insights>
</File>相关 API
开启元数据管理功能:OpenMetaQuery
创建 Dataset 并配置 Insights 语言:CreateDataset
查询文件并读取 Insights:SimpleQuery
Insights 配置的数据结构:DatasetConfig