全部產品
Search
文件中心

Object Storage Service:AI內容感知

更新時間:Feb 26, 2026

當儲存在Object Storage Service中積累了海量的圖片、視頻等非結構化資料後,傳統的基於檔案名稱或手動標籤的檢索方式變得效率低下,且無法理解檔案內容的深層語義。OSS 利用多模態 AI 模型,自動為儲存在 Bucket 中的檔案提取語義描述與精簡摘要,並構建為可檢索的索引。可通過自然語言直接搜尋檔案內容,實現“以文搜圖”、“以文搜視頻”等進階檢索功能,從而顯著提升資料檢索的準確性與效率,並為構建智能問答(RAG)等上層應用提供堅實基礎。

應用情境

  • IP Camera (IPC) 情境的智能搜尋:面向智能安防情境,支援回放視頻的語義檢索、監控事件推送、App 熱詞推薦等。例如終端使用者查看回放時,自動產生“今日熱詞推薦”。

  • RAG 檢索增強知識庫:基於 OSS 海量資料和內容感知能力構建 RAG 外掛知識庫,當使用者提問時,可以利用OSS的內容感知能力進行RAG檢索增強,為大模型提供更精準、更相關的上下文資訊,從而產生更高品質的回答。

  • 知識儲存與管理平台:基於 OSS 資料索引和內容感知的知識內容,構建知識管理平台、媒資管理平台、企業智能辦公平台等。OSS 資料索引和內容感知可以擷取多媒體檔案的近 70 項中繼資料,客戶可以基於這些中繼資料進行雲端知識管理平台的構建。

工作原理

AI 內容感知功能的核心是語義檢索,通過理解使用者的自然語言,將查詢與檔案的多媒體內容匹配,而非依賴傳統的關鍵詞匹配。整體流程如下:

  1. 開啟功能與首次索引:當為 Bucket 開啟該功能後,系統會觸發一次性存量掃描,對 Bucket 內所有受支援的檔案進行非同步處理。

  2. 特徵提取與描述產生:系統使用大模型為每個檔案提取核心語義特徵,並產生兩類內容感知描述文本:內容詳細描述(約 100 字)與精簡摘要(20 字內)。

  3. 向量化與索引構建:將檔案的語義特徵與感知描述向量化,構建向量索引庫,支撐大規模高效能檢索。

  4. 語義檢索與精排:使用者發起查詢時,系統將查詢語句向量化,在向量索引中召回最相似的檔案;隨後結合向量表示與內容感知描述進行聯合精排,提升準確率與召回率,精準識別海量資料中的關鍵資訊,實現增強型語義檢索。

  5. 結果返回與應用:檢索結果會返回通過內容感知能力產生的內容詳細描述和精簡摘要,使用者可直接擷取要點資訊,並據此構建上層應用,如“檢索熱詞”、“每日總結”等功能。

首次索引是非同步執行的,根據 Bucket 內檔案數量和大小,可能需要數分鐘到數小時不等。在此期間,存量檔案無法被搜到。對於新上傳或更新的檔案,系統會自動觸發增量式的索引更新。

使用限制

在開始之前,請確保您的Bucket位於以下支援AI內容感知的地區:華北2(北京)、華北3(張家口)、華東1(杭州)、華東2(上海)、華南1(深圳)、西南1(成都)、新加坡、美國(維吉尼亞)

說明

使用新加坡和美國(維吉尼亞)地區的AI內容感知功能前,需先提交工單申請開通。

1. 建立Bucket並上傳檔案

  1. 登入OSS管理主控台

  2. 進入Bucket列表頁面,並點擊建立Bucket

  3. 建立Bucket頁面,填寫Bucket名稱(建議使用業務相關的名稱,如videos-oss-metaquery),其餘參數可保持預設配置。

  4. 單擊完成建立,在建立成功的頁面,點擊進入Bucket

  5. 檔案清單頁面,點擊上傳檔案 > 掃描檔案擇待上傳的視頻檔案(如視頻A.mp4視頻B.mp4視頻C.mp4),其餘參數保留預設配置,點擊上傳檔案

2. 開啟 AI 內容感知

您需要為Bucket在 OSS 資料索引-向量檢索功能中開啟 OSS AI 內容感知,開啟後,使用資料索引的查詢介面進行語義檢索和查詢即可。

  1. 在左側導覽列, 選擇檔案管理 > 資料索引

  2. 資料索引頁面,首次使用資料索引功能時,需要按指引完成對 AliyunMetaQueryDefaultRole 角色的授權,以便 OSS 服務能管理 Bucket 中的資料。授權後,單擊開啟資料索引

  3. 選擇向量檢索AI內容感知 選項中,可根據需要勾選 圖片內容感知 視頻內容感知

  4. (可選)檔案過濾規則:配置此項僅對符合特定規則的檔案進行 AI 分析。最多可設定 5 條檔案過濾規則。支援根據首碼、檔案大小、LastModifiedTime、ObjectTag過濾。樣本:添加一條首碼規則,值為 videos/,表示僅處理 videos 目錄下的檔案。

    說明

    如果開啟檔案過濾,那麼只根據過濾後的檔案數量收取資料索引-向量檢索費用和內容感知費用。

  5. 單擊確認開啟

    說明

    構建中繼資料索引需要等待一定的時間,具體等待時間長度取決於Bucket中Object的數量。若開啟時間過久可通過重新整理來查看開啟狀態。

3. 執行查詢

索引構建完成後,您可以通過控制台、SDK或命令列工具執行語義檢索。只需輸入一段描述性文字,例如停著車的院子,系統便會返回與描述相符的關鍵檔案及其內容摘要。且直接基於該介面或 SDK 進行開發即可,無需關心底層資源的彈性、無需關心向量化過程、無需關心索引構建和索引儲存,完全 serverless 化使用。

控制台

  1. Bucket 列表頁面,點擊您的 Bucket名稱。

  2. 檔案清單頁面,確認視頻已上傳。

  3. 在左側導覽列, 選擇檔案管理 > 資料索引

  4. 資料索引頁面,檢索內容中輸入停著車的院子,在多媒體類型中勾選視頻,點擊立即查詢,檢索到符合描述的視頻且返回內容摘要。

SDK

Java

僅Java SDK 3.18.2及以上版本支援使用向量檢索功能,更多用法見向量檢索(Java SDK V1)

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.ArrayList;
import java.util.List;

public class DoMetaQuery {
    public static void main(String[] args) throws Exception {
        // Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 填寫Bucket名稱,例如examplebucket。
        String bucketName = "examplebucket";
        // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
        String region = "cn-hangzhou";

        // 建立OSSClient執行個體。
        // 當OSSClient執行個體不再使用時,調用shutdown方法以釋放資源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            int maxResults = 20;
            List<String> mediaTypes = new ArrayList<String>();
            mediaTypes.add("image");
            String query = "Snow";
            String simpleQuery = "{\"Operation\":\"gt\", \"Field\": \"Size\", \"Value\": \"30\"}";
            String sort = "Size";
            DoMetaQueryRequest doMetaQueryRequest = new DoMetaQueryRequest(bucketName, maxResults, query, sort, MetaQueryMode.SEMANTIC, mediaTypes, simpleQuery);
            DoMetaQueryResult doMetaQueryResult = ossClient.doMetaQuery(doMetaQueryRequest);
        } catch (OSSException oe) {
            System.out.println("Error Message: " + oe.getErrorMessage());
            System.out.println("Error Code:       " + oe.getErrorCode());
            System.out.println("Request ID:      " + oe.getRequestId());
            System.out.println("Host ID:           " + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            if(ossClient != null){
                ossClient.shutdown();
            }
        }
    }
}

Python

更多用法見向量檢索

import argparse
import alibabacloud_oss_v2 as oss

# 建立命令列參數解析器,用於處理命令列輸入
parser = argparse.ArgumentParser(description="do meta query semantic sample")
# 添加必要的命令列參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)  # 儲存空間所在地區
parser.add_argument('--bucket', help='The name of the bucket.', required=True)  # 儲存空間名稱
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')  # OSS訪問網域名稱,可選

def main():
    # 解析命令列參數
    args = parser.parse_args()

    # 從環境變數中載入訪問憑證
    # 運行前需要設定環境變數:OSS_ACCESS_KEY_ID 和 OSS_ACCESS_KEY_SECRET
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK預設配置
    cfg = oss.config.load_default()
    # 設定憑證提供者
    cfg.credentials_provider = credentials_provider
    # 設定地區
    cfg.region = args.region
    # 如果提供了endpoint,則更新配置中的endpoint
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 建立OSS用戶端執行個體
    client = oss.Client(cfg)

    # 發起中繼資料查詢請求 - 向量檢索模式
    result = client.do_meta_query(oss.DoMetaQueryRequest(
            bucket=args.bucket,
            mode='semantic',
            meta_query=oss.MetaQuery(
                max_results=1000,
                query='俯瞰白雪覆蓋的森林',
                order='desc',
                media_types=oss.MetaQueryMediaTypes(
                    media_type=['image']
                ),
                simple_query='{"Operation":"gt", "Field": "Size", "Value": "30"}',
            ),
    ))

    # 列印檢索結果
    print(vars(result))

if __name__ == "__main__":
    main()

Go

更多用法見向量檢索(Go SDK V2)

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	// 設定命令列參數來指定region,預設為空白字串
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// 設定命令列參數來指定bucket名稱,預設為空白字串
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse() // 解析命令列參數

	// 檢查是否提供了儲存空間名稱,如果沒有提供,則輸出預設參數並退出程式
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查是否提供了地區資訊,如果沒有提供,則輸出預設參數並退出程式
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 建立用戶端配置,並使用環境變數作為憑證提供者和指定的地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 使用配置建立一個新的OSS用戶端執行個體

	// 執行向量檢索操作
	request := &oss.DoMetaQueryRequest{
		Bucket: oss.Ptr(bucketName),
		Mode:   oss.Ptr("semantic"),
		MetaQuery: &oss.MetaQuery{
			MaxResults:  oss.Ptr(int64(99)),
			Query:       oss.Ptr("Overlook the snow-covered forest"), // 輸入語義內容檢索,此處為樣本文本
			MediaType:   oss.Ptr("image"),                            // 指定檢索的媒體類型,此處為映像類型
			SimpleQuery: oss.Ptr(`{"Operation":"gt", "Field": "Size", "Value": "30"}`),
		},
	}
	result, err := client.DoMetaQuery(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to do meta query %v", err)
	}

	log.Printf("do meta query result:%#v\n", result)
}

PHP

更多用法見向量檢索(PHP SDK V2)

<?php

// 引入自動負載檔案,確保依賴庫能夠正確載入
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// 定義命令列參數的描述資訊
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // Bucket所在的地區(必填)
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 訪問網域名稱(可選)
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // Bucket名稱(必填)
];

// 將參數描述轉換為getopt所需的長選項格式
// 每個參數後面加上":"表示該參數需要值
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// 解析命令列參數
$options = getopt("", $longopts);

// 驗證必填參數是否存在
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // 擷取參數的協助資訊
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 如果必填參數缺失,則退出程式
    }
}

// 從解析的參數中提取值
$region = $options["region"]; // Bucket所在的地區
$bucket = $options["bucket"]; // Bucket名稱

// 載入環境變數中的憑證資訊
// 使用EnvironmentVariableCredentialsProvider從環境變數中讀取Access Key ID和Access Key Secret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 設定憑證提供者
$cfg->setRegion($region); // 設定Bucket所在的地區
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // 如果提供了訪問網域名稱,則設定endpoint
}

// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);

// 執行向量檢索查詢滿足指定條件的對象
$request = new Oss\Models\DoMetaQueryRequest($bucket, new Oss\Models\MetaQuery(
    maxResults: 99,
    query: "Overlook the snow-covered forest",
    mediaTypes: new Oss\Models\MetaQueryMediaTypes('image'),
    simpleQuery: '{"Operation":"gt", "Field": "Size", "Value": "30"}',
), 'semantic');

$result = $client->doMetaQuery($request);
printf(
    'status code:' . $result->statusCode . PHP_EOL .
    'request id:' . $result->requestId . PHP_EOL .
    'result:' . var_export($result, true)
);

ossutil

以下樣本展示了如何查詢儲存空間examplebucket中滿足指定條件的檔案。

ossutil api do-meta-query --bucket examplebucket --meta-query "{\"Query\":\"Overlooking the snow covered forest\",\"MediaTypes\":{\"MediaType\":\"video\"},\"SimpleQuery\":\"{\\\"Operation\\\":\\\"gt\\\", \\\"Field\\\": \\\"Size\\\", \\\"Value\\\": \\\"1\\\"}\"}" --meta-query-mode semantic

關於該命令的更多資訊,請參見do-meta-query

計費說明

使用 AI 內容感知功能會產生以下費用:

  • 資料索引費用:需要在資料索引-向量檢索模式中開啟 AI 內容感知,因此會產生資料索引-向量檢索相關的費用。

  • AI內容感知費用:包括圖片內容感知和視頻內容感知費用,根據處理的檔案類型和用量計費。開啟 AI 內容感知後,OSS 會自動掃描該 Bucket 中的存量圖片/視頻檔案。同時,一旦有新的圖片/視頻檔案上傳,OSS 會自動觸發 AI 內容感知,新上傳的圖片/視頻檔案也會產生 AI 內容感知費用,請您及時關注賬單變化。

  • API請求費用:在存量檔案索引構建期間和增量檔案索引更新期間會產生API請求費用,按API調用次數收費。涉及的API請求如下:

    操作

    API

    掃描Bucket中的檔案

    ListObjects

    為Bucket中的檔案構建索引

    HeadObjectGetObject

    Bucket中檔案存在Tag

    GetObjectTag

    Bucket中檔案攜帶自訂Meta

    GetObjectMeta

    Bucket中存在軟連結檔案

    GetSymlink

如需停止相關計費,請及時關閉向量檢索

相關API

AI內容感知功能基於以下RESTful API實現。如果您的應用有較高的定製化需求,可以直接調用這些API進行開發(需要手動實現簽名計算)。

  • 關於開啟中繼資料管理功能的更多資訊,請參見OpenMetaQuery

  • 關於查詢當前中繼資料管理的更多資訊,請參見GetMetaQueryStatus

  • 關於查詢滿足指定條件的檔案,請參見DoMetaQuery

  • 關於關閉中繼資料管理功能的更多資訊,請參見CloseMetaQuery