All Products
Search
Document Center

Vector Retrieval Service for Milvus:Ekstraksi kata kunci

Last Updated:Sep 14, 2026

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

ParameterDeskripsi
model_nameWajib diisi. Nama model. Untuk gambar atau video, gunakan model multi-modal yang telah dikonfigurasi (misalnya, qwen3.7-plus).
textsWajib diisi untuk REST API. Konten teks yang akan diproses, atau URL yang mengarah ke gambar atau video.
max_keywordsOpsional. Jumlah maksimum kata kunci yang akan diekstraksi. Nilai default: 10. Rentang valid: 1–50.
target_languageOpsional. Bahasa untuk kata kunci output. Default mengikuti bahasa input. Nilai yang didukung: zh, en, es, fr, de, ja, ko, ru, ar, dan pt.
promptOpsional. Aturan ekstraksi tambahan, hingga 5.000 karakter. Tidak mendukung interpolasi variabel templat ${...}.
media_typeOpsional. Nilai valid: image atau video.
temperature/max_concurrency/timeout_secOpsional. Pengaturan stabilitas model, konkurensi, dan timeout.
provider/taskWajib 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"
fi

Python (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"
fi

Python (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"
fi

Python (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.