AI_KEYWORDS adalah fungsi AI di Alibaba Cloud Milvus yang mengekstraksi kata kunci representatif dari teks, gambar, atau video. Fungsi ini dapat digunakan untuk pengindeksan pencarian, penandaan artikel, dan pengambilan aset lintas bahasa.
Sintaks perintah
AI_KEYWORDS mendukung dua mode pemanggilan:
REST API — Panggil titik akhir secara langsung untuk ekstraksi kata kunci sesuai permintaan dari teks, gambar, atau video.
Collection Function — Tanamkan ekstraksi kata kunci dalam skema koleksi sehingga kata kunci diekstraksi secara otomatis saat data dimasukkan.
REST API
REST API
Kirim permintaan POST ke titik akhir AI keywords:
POST /v2/vectordb/ai/keywords
Content-Type: application/json
{
"model_name": "<model_name>",
"texts": ["<text_or_media_url>"],
"params": {"max_keywords": 10, "target_language": "zh"}
}Collection Function (Python SDK)
Collection Function (Python SDK)
Tentukan ekstraksi kata kunci sebagai Collection Function dalam skema. Fungsi ini dipicu secara otomatis saat penyisipan data dan menulis hasil ke bidang output yang ditentukan:
schema = MilvusClient.create_schema(auto_id=True, enable_dynamic_field=False)
schema.add_field("id", DataType.INT64, is_primary=True)
schema.add_field("content", DataType.VARCHAR, max_length=8192)
schema.add_field("keywords", DataType.JSON)
schema.add_field("dummy_vector", DataType.FLOAT_VECTOR, dim=2)
schema.add_function(
Function(
name="extract_keywords",
function_type=texttransform_function_type(),
input_field_names=["content"],
output_field_names=["keywords"],
params={
"provider": "aliyun_milvus",
"model_name": "<model_name>",
"task": "ai_keywords",
"max_keywords": "5",
"target_language": "en",
"temperature": "0",
},
)
)Parameter
| Parameter | Deskripsi |
model_name | Wajib diisi. Nama model. Untuk gambar atau video, gunakan model multi-modal yang telah dikonfigurasi (misalnya, qwen3.7-plus). |
texts | Wajib diisi untuk REST API. Konten teks yang akan diproses, atau URL yang mengarah ke gambar atau video. |
max_keywords | Opsional. Jumlah maksimum kata kunci yang akan diekstraksi. Nilai default: 10. Rentang valid: 1–50. |
target_language | Opsional. Bahasa untuk kata kunci output. Default mengikuti bahasa input. Nilai yang didukung: zh, en, es, fr, de, ja, ko, ru, ar, dan pt. |
prompt | Opsional. Aturan ekstraksi tambahan, hingga 5.000 karakter. Tidak mendukung interpolasi variabel templat ${...}. |
media_type | Opsional. Nilai valid: image atau video. |
temperature/max_concurrency/timeout_sec | Opsional. Pengaturan stabilitas model, konkurensi, dan timeout. |
provider/task | Wajib diisi hanya untuk Collection Function. Tetap pada nilai aliyun_milvus dan ai_keywords masing-masing. |
Nilai kembalian
Setiap item output berupa string JSON dalam format {"keywords":["keyword 1","keyword 2"]}. Saat AI_KEYWORDS digunakan sebagai Collection Function, skema secara otomatis mengurai hasil ini dan menuliskannya ke bidang output JSON.
Contoh 1: Penandaan otomatis artikel teknis dengan kata kunci (teks)
Basis pengetahuan perlu menulis kata kunci artikel ke bidang indeks untuk mendukung penyaringan dan agregasi.
REST API
REST API
#!/usr/bin/env bash
set -euo pipefail
MILVUS_REST_BASE_URL="http://c-xxxx.milvus.aliyuncs.com:19530"
MILVUS_AUTH_TOKEN="<yourUsername>:<yourPassword>"
post_json() {
local path="$1"
local body="$2"
curl -X POST \
"$MILVUS_REST_BASE_URL$path" \
-H "Authorization: Bearer $MILVUS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d "$body"
}
BODY=$(cat <<JSON
{
"model_name": "qwen3.7-max",
"texts": ["Milvus is an open-source vector database for high-performance approximate nearest neighbor search in RAG, recommendation, and image search."],
"params": {"max_keywords": 5, "target_language": "en", "temperature": 0}
}
JSON
)
RESPONSE_BODY="$(post_json "/v2/vectordb/ai/keywords" "$BODY")"
if command -v jq >/dev/null 2>&1; then
echo "$RESPONSE_BODY" | jq .
[ "$(echo "$RESPONSE_BODY" | jq -r '.code // -1')" = "0" ] || exit 1
else
echo "$RESPONSE_BODY"
fiPython (Collection Function)
Python (Collection Function)
Contoh berikut menggunakan fungsi utilitas bersama (texttransform_function_type dan run_texttransform_example) yang menangani pembuatan skema, pendaftaran fungsi, penyisipan data, dan kueri hasil. Contoh 2 dan 3 menggunakan utilitas yang sama.
from __future__ import annotations
from typing import Any
from pymilvus import DataType, Function, FunctionType, MilvusClient
MILVUS_URI = "http://c-xxxx.milvus.aliyuncs.com:19530"
MILVUS_TOKEN = "<yourUsername>:<yourPassword>"
DUMMY_VECTOR_DIM = 2
TEXTTRANSFORM_FUNCTION_TYPE = 9
def texttransform_function_type() -> Any:
for type_name in ("TEXTTRANSFORM", "TEXT_TRANSFORM", "TextTransform"):
function_type = getattr(FunctionType, type_name, None)
if function_type is not None:
return function_type
# Alibaba Cloud Milvus provides TEXTTRANSFORM as a managed extension (function type value 9);
# some pymilvus versions do not have this enum member built in, while Function(...) validates through FunctionType(...).
existing = getattr(FunctionType, "_value2member_map_", {}).get(TEXTTRANSFORM_FUNCTION_TYPE)
if existing is not None:
return existing
extension = int.__new__(FunctionType, TEXTTRANSFORM_FUNCTION_TYPE)
extension._name_ = "TEXTTRANSFORM"
extension._value_ = TEXTTRANSFORM_FUNCTION_TYPE
FunctionType._value2member_map_[TEXTTRANSFORM_FUNCTION_TYPE] = extension
FunctionType._member_map_["TEXTTRANSFORM"] = extension
return extension
def add_id(schema: Any) -> None:
schema.add_field("id", DataType.INT64, is_primary=True)
def add_dummy_vector(schema: Any) -> None:
schema.add_field("dummy_vector", DataType.FLOAT_VECTOR, dim=DUMMY_VECTOR_DIM)
def run_texttransform_example(*, client, collection_name, input_fields, output_field, function_name, function_params, rows) -> None:
if client.has_collection(collection_name):
client.drop_collection(collection_name)
schema = MilvusClient.create_schema(auto_id=True, enable_dynamic_field=False)
add_id(schema)
for name, data_type, max_length in input_fields:
field_params = {"max_length": max_length} if max_length is not None else {}
schema.add_field(name, data_type, **field_params)
output_name, output_data_type, output_max_length = output_field
output_params = {"max_length": output_max_length} if output_max_length is not None else {}
schema.add_field(output_name, output_data_type, **output_params)
add_dummy_vector(schema)
schema.add_function(
Function(
name=function_name,
function_type=texttransform_function_type(),
input_field_names=[name for name, _, _ in input_fields],
output_field_names=[output_name],
params=function_params,
)
)
index_params = client.prepare_index_params()
index_params.add_index(field_name="dummy_vector", index_type="AUTOINDEX", metric_type="COSINE")
client.create_collection(collection_name=collection_name, schema=schema, index_params=index_params)
client.insert(collection_name, rows)
client.flush(collection_name)
fields = [name for name, _, _ in input_fields] + [output_name]
for row in client.query(collection_name, filter="", output_fields=fields, limit=len(rows)):
print(row)
client = MilvusClient(uri=MILVUS_URI, token=MILVUS_TOKEN)
run_texttransform_example(
client=client,
collection_name="simple_ai_keywords_text",
input_fields=[("content", DataType.VARCHAR, 8192)],
output_field=("keywords", DataType.JSON, None),
function_name="extract_keywords",
function_params={"provider": "aliyun_milvus", "model_name": "qwen3.7-max", "task": "ai_keywords", "max_keywords": "5", "target_language": "en", "temperature": "0"},
rows=[{"content": "Milvus is an open-source vector database for high-performance approximate nearest neighbor search in RAG, recommendation, and image search.", "dummy_vector": [0.1, 0.2]}],
)Hasil yang diharapkan: Bidang keywords mengembalikan {"keywords":["Milvus","vector database","approximate nearest neighbor search","RAG","open-source"]} (kata kunci dalam bahasa Inggris ketika target_language=en).
Contoh 2: Ekstraksi kata kunci dari gambar produk (gambar)
Tim media perlu menghasilkan kata kunci bahasa Inggris dari gambar untuk mendukung pencarian aset lintas bahasa.
REST API
REST API
#!/usr/bin/env bash
set -euo pipefail
MILVUS_REST_BASE_URL="http://c-xxxx.milvus.aliyuncs.com:19530"
MILVUS_AUTH_TOKEN="<yourUsername>:<yourPassword>"
post_json() {
local path="$1"
local body="$2"
curl -X POST \
"$MILVUS_REST_BASE_URL$path" \
-H "Authorization: Bearer $MILVUS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d "$body"
}
BODY=$(cat <<JSON
{"model_name":"qwen3.7-plus","texts":["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260415/hynnff/wan-video-edit-clothes.webp"],"params":{"media_type":"image","max_keywords":5,"target_language":"en","temperature":0,"timeout_sec":120,"enable_thinking":false}}
JSON
)
RESPONSE_BODY="$(post_json "/v2/vectordb/ai/keywords" "$BODY")"
if command -v jq >/dev/null 2>&1; then
echo "$RESPONSE_BODY" | jq .
[ "$(echo "$RESPONSE_BODY" | jq -r '.code // -1')" = "0" ] || exit 1
else
echo "$RESPONSE_BODY"
fiPython (Collection Function)
Python (Collection Function)
Contoh ini menggunakan fungsi utilitas yang sama seperti pada Contoh 1. Hanya bagian pemanggilan unik yang ditampilkan di bawah.
client = MilvusClient(uri=MILVUS_URI, token=MILVUS_TOKEN)
run_texttransform_example(
client=client,
collection_name="simple_ai_keywords_image",
input_fields=[("image_url", DataType.VARCHAR, 4096)],
output_field=("keywords", DataType.JSON, None),
function_name="extract_image_keywords",
function_params={"provider": "aliyun_milvus", "model_name": "qwen3.7-plus", "task": "ai_keywords", "media_type": "image", "max_keywords": "5", "target_language": "en", "temperature": "0"},
rows=[{"image_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260415/hynnff/wan-video-edit-clothes.webp", "dummy_vector": [0.1, 0.2]}],
)Hasil yang diharapkan: Bidang keywords mengembalikan hingga 5 kata kunci bahasa Inggris yang diekstraksi dari gambar dalam format {"keywords":[...]}.
Contoh 3: Ekstraksi kata kunci dari aset video (video)
Pustaka video perlu menandai video secara otomatis untuk memungkinkan pengambilan berdasarkan topik dan adegan.
REST API
REST API
#!/usr/bin/env bash
set -euo pipefail
MILVUS_REST_BASE_URL="http://c-xxxx.milvus.aliyuncs.com:19530"
MILVUS_AUTH_TOKEN="<yourUsername>:<yourPassword>"
post_json() {
local path="$1"
local body="$2"
curl -X POST \
"$MILVUS_REST_BASE_URL$path" \
-H "Authorization: Bearer $MILVUS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d "$body"
}
BODY=$(cat <<JSON
{"model_name":"qwen3.7-plus","texts":["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260409/dozxak/Wan_Video_Edit_33_1.mp4"],"params":{"media_type":"video","max_keywords":5,"target_language":"en","temperature":0}}
JSON
)
RESPONSE_BODY="$(post_json "/v2/vectordb/ai/keywords" "$BODY")"
if command -v jq >/dev/null 2>&1; then
echo "$RESPONSE_BODY" | jq .
[ "$(echo "$RESPONSE_BODY" | jq -r '.code // -1')" = "0" ] || exit 1
else
echo "$RESPONSE_BODY"
fiPython (Collection Function)
Python (Collection Function)
Contoh ini menggunakan fungsi utilitas yang sama seperti pada Contoh 1. Hanya bagian pemanggilan unik yang ditampilkan di bawah.
client = MilvusClient(uri=MILVUS_URI, token=MILVUS_TOKEN)
run_texttransform_example(
client=client,
collection_name="simple_ai_keywords_video",
input_fields=[("video_url", DataType.VARCHAR, 4096)],
output_field=("keywords", DataType.JSON, None),
function_name="extract_video_keywords",
function_params={"provider": "aliyun_milvus", "model_name": "qwen3.7-plus", "task": "ai_keywords", "media_type": "video", "max_keywords": "5", "target_language": "en", "temperature": "0"},
rows=[{"video_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260409/dozxak/Wan_Video_Edit_33_1.mp4", "dummy_vector": [0.1, 0.2]}],
)Hasil yang diharapkan: Bidang keywords mengembalikan hingga 5 kata kunci bahasa Inggris yang terkait dengan topik video, yang dapat ditulis ke bidang pengambilan video.