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.
Pada halaman Vector Buckets, klik Create a Vector Bucket.
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)".
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 Vector Dimension: Tetapkan dimensi vektor, misalnya 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 |
Langkah 3: Unggah data vektor
Setelah indeks siap, Anda dapat mengunggah data vektor ke dalamnya.
Pada daftar indeks, temukan indeks yang baru saja Anda buat dan klik View Data di sebelah kanan.
Pada halaman indeks, klik Vector Data Insertion.
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.
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: