All Products
Search
Document Center

Object Storage Service:Memulai Cepat OSS Vectors

Last Updated:Sep 23, 2026

Topik ini menjelaskan cara mengimplementasikan alur kerja aplikasi lengkap secara cepat, mulai dari persiapan data hingga pengambilan vektor. Proses ini mencakup empat langkah inti: membuat bucket vektor, membuat indeks vektor, mengunggah data vektor, dan melakukan pengambilan vektor.

Sebelum memulai, pastikan bahwa:

  • Anda telah mengaktifkan Object Storage Service (OSS).

  • Standard-mode saat ini tersedia di wilayah berikut: China (Shenzhen), China (Qingdao), China (Beijing), China (Hangzhou), China (Shanghai), China (Ulanqab), Singapura, China (Hong Kong), Indonesia (Jakarta), Jerman (Frankfurt), AS (Silicon Valley), dan AS (Virginia).

  • Fusion-mode saat ini dalam pratinjau undangan dan hanya tersedia di wilayah Indonesia (Jakarta).

Langkah 1: Buat bucket vektor

Buat bucket vektor untuk menyimpan semua data dan indeks vektor Anda.

  1. Pada halaman Vector Buckets, klik Create a Vector Bucket.

  2. Konfigurasikan informasi bucket:

    • Vector Bucket Name: Masukkan nama bucket yang unik dalam Akun Alibaba Cloud Anda di suatu wilayah. Nama harus terdiri dari 3 hingga 32 karakter dan hanya boleh berisi huruf kecil, angka, dan tanda hubung (-). Nama tidak boleh dimulai atau diakhiri dengan tanda hubung.

    • Region: Pilih wilayah untuk bisnis Anda, misalnya "China (Shenzhen)".

  3. Klik OK untuk membuat bucket.

Langkah 2: Buat indeks vektor

Setelah membuat bucket, buat indeks vektor di dalamnya. Indeks mendefinisikan struktur vektor Anda, seperti dimensinya, serta metode pengambilannya, seperti metrik jarak. Indeks ini menjadi fondasi untuk menyimpan dan mengkueri data vektor. Indeks vektor tersedia dalam dua mode: Standard-mode dan Fusion-mode. Anda dapat membuat indeks menggunakan Konsol, OSS SDK, ossutil, atau API.

Saat mengonfigurasi parameter indeks, terlepas dari modenya, Anda harus terlebih dahulu menentukan index table name, lalu memilih index mode. Setelah itu, konfigurasikan parameter utama sesuai mode yang dipilih:

  • Index Table Name: Masukkan nama indeks yang unik dalam bucket tersebut. Nama harus terdiri dari 1 hingga 63 karakter, hanya berisi huruf dan angka, serta dimulai dengan huruf.

  • Index Mode: Pilih Standard-mode atau Fusion-mode sesuai kasus penggunaan Anda.

Tabel berikut membandingkan parameter utama dan metode pembuatan kedua mode tersebut:

Item

Standard-mode

Fusion-mode

Parameter utama

Vector Data Type: Nilai default adalah float32 (floating-point 32-bit).

Vector Dimension: Tetapkan dimensi vektor, misalnya 128. Nilainya harus berupa bilangan bulat antara 1 hingga 4.096. Semua vektor yang Anda unggah ke indeks ini harus memiliki dimensi yang sama.

Distance Metric Function: Pilih metode perhitungan jarak sesuai kasus penggunaan Anda. Jarak Euclidean ideal untuk mengukur perbedaan numerik, sedangkan jarak kosinus cocok untuk menghitung kemiripan semantik pada data berdimensi tinggi seperti teks dan gambar.

Field schema: Fusion-mode menggunakan skema eksplisit, sehingga Anda harus mendefinisikan struktur field. Satu tabel indeks mendukung maksimal 3 field vektor, dan jumlah total field vektor dan skalar tidak boleh melebihi 100. Setidaknya satu field bertipe vektor wajib disertakan.

Vector fields: Tentukan dimensi vektor dan fungsi metrik jarak. Jarak Euclidean, jarak kosinus, dan inner product maksimum didukung.

Scalar fields: Definisikan field dengan tipe seperti string, long, double, bool, ip, dan geoPoint sesuai kebutuhan untuk fitur seperti pencarian teks penuh dan penyaringan skalar.

Metode pembuatan

Anda dapat membuat indeks langsung di Konsol: pada halaman Vector Buckets, klik nama bucket vektor yang telah Anda buat, buka halaman Vector Indexes, klik Create Index Table, konfigurasikan parameter utama, lalu klik OK. Anda juga dapat menggunakan OSS SDK, ossutil, atau API.

Mode ini belum dapat dibuat melalui Konsol. Untuk membuat indeks, panggil operasi PutVectorIndexFusion, atau gunakan ossutil atau OSS SDK.

Langkah 3: Unggah data vektor

Setelah indeks siap, Anda dapat mengunggah data vektor ke dalamnya.

  1. Pada daftar indeks, temukan indeks yang baru saja Anda buat dan klik View Data di sebelah kanan.

  2. Pada halaman indeks, klik Vector Data Insertion.

  3. Konfigurasikan data vektor. Anda dapat menambahkan beberapa entri vektor sekaligus:

    • Primary Key Value: Tetapkan pengenal unik untuk vektor tersebut.

    • Vector Data: Masukkan nilai vektor sebagai daftar angka yang dipisahkan koma. Dimensi vektor (jumlah nilai) harus tepat sesuai dengan Vector Dimension yang ditetapkan pada Langkah 2.

    • Metadata: Anda dapat menambahkan metadata opsional, seperti kategori, judul, atau stempel waktu. Metadata memungkinkan penyaringan yang lebih tepat selama pengambilan.

  4. Klik OK untuk memasukkan data.

Langkah 4: Lakukan pengambilan vektor

Setelah data siap, Anda dapat melakukan pengambilan vektor, yang merupakan bagian inti dari alur kerja ini. Biasanya, Anda memanggil API dari aplikasi Anda menggunakan SDK untuk melakukan pengambilan vektor dan dengan cepat menemukan data target.

Contoh SDK Python berikut menunjukkan cara mengambil 10 entri data teratas yang paling mirip dengan vektor target dan bidang type-nya bukan "comedy" atau "documentary".

import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

parser = argparse.ArgumentParser(description="vector query vectors sample")
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--index_name', help='Nama indeks vektor.', required=True)
parser.add_argument('--account_id', help='ID akun.', required=True)

def main():
    args = parser.parse_args()

    # Memuat nilai kredensial dari variabel lingkungan
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Menggunakan konfigurasi default SDK
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    cfg.account_id = args.account_id
    cfg.use_internal_endpoint = True  # Untuk mengakses layanan melalui jaringan publik, atur ke False atau hapus baris ini.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    vector_client = oss_vectors.Client(cfg)

    query_filter = {
        "$and": [{
            "type": {
                "$nin": ["comedy", "documentary"]
            }
        }]
    }

    query_vector = {"float32": [0.1] * 128}

    result = vector_client.query_vectors(oss_vectors.models.QueryVectorsRequest(
        bucket=args.bucket,
        index_name=args.index_name,
        filter=query_filter,
        query_vector=query_vector,
        return_distance=True,
        return_metadata=True,
        top_k=10
    ))

    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          )

    if result.vectors:
        for vector in result.vectors:
            print(f'vektor: {vector}')


if __name__ == "__main__":
    main()

Jika Anda menggunakan tabel indeks Fusion-mode, panggil operasi QueryVectorsFusion untuk melakukan pengambilan hibrida. Contoh SDK Python berikut menggabungkan pencarian tetangga terdekat vektor (knn) dengan pencarian teks penuh pada field judul, menerapkan filter skalar pada field tahun (lebih besar atau sama dengan 2020), dan mengembalikan 10 hasil paling relevan.

import argparse
import base64
import hashlib
import json

from requests.structures import CaseInsensitiveDict

import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors
from alibabacloud_oss_v2 import OperationInput


parser = argparse.ArgumentParser(description="query vectors fusion sample")
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket vektor.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--index_name', help='Nama indeks vektor fusion.', required=True)
parser.add_argument('--account_id', help='ID akun.', required=True)


def main():
    args = parser.parse_args()

    # Memuat nilai kredensial dari variabel lingkungan
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Menggunakan konfigurasi default SDK
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    cfg.account_id = args.account_id
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss_vectors.Client(cfg)

    # Query vectors fusion
    json_data = json.dumps({
        'indexName': args.index_name,
        'knn': {
            'field': 'text_vector',
            'queryVector': [0.1, 0.2, 0.3, 0.4],
            'topK': 10,
            'numCandidates': 100,
            'filter': {
                'year': {
                    '$gte': 2020,
                },
            },
        },
        'query': {
            'title': {
                '$textMatch': {
                    'value': 'vector search',
                    'boost': 2.0,
                },
            },
        },
        'returnMetadata': True,
        'returnMetadataFields': ['title', 'category', 'year'],
        'limit': 10,
        'sort': [
            {
                '_score': {
                    'order': 'desc',
                },
            },
        ],
    })
    body = json_data.encode()
    content_md5 = base64.b64encode(hashlib.md5(body).digest()).decode()
    op_input = OperationInput(
        op_name='QueryVectorsFusion',
        method='POST',
        headers=CaseInsensitiveDict({
            'Content-Type': 'application/json',
            'Content-MD5': content_md5,
        }),
        parameters={
            'queryVectorsFusion': '',
        },
        bucket=args.bucket,
        body=body,
    )
    op_output = client.invoke_operation(op_input)
    print(f'Kode status QueryVectorsFusion: {op_output.status_code},'
          f' ID permintaan: {op_output.headers.get("x-oss-request-id", "")},'
          f' konten: {op_output.http_response.content},')


if __name__ == "__main__":
    main()

Langkah selanjutnya

Anda dapat melakukan semua operasi pada bucket vektor menggunakan Konsol, OSS SDK, ossutil, atau pemanggilan API langsung. Panduan memulai cepat ini menunjukkan cara tercepat untuk memulai. Untuk detail tentang konfigurasi lanjutan dan penggunaan, lihat topik-topik berikut: