All Products
Search
Document Center

Realtime Compute for Apache Flink:Pemanggilan umum

Last Updated:Jul 10, 2026

Topik ini menjelaskan cara menggunakan fungsi ML_PREDICT untuk memanggil model AI di Flink, mencakup sintaks dan parameter, konfigurasi per-pemanggilan, konfigurasi tipe konten, parameter tingkat kolom, serta contoh inferensi teks, gambar, dan multimodal.

Mulai cepat

Prasyarat

Contoh berikut menunjukkan cara menggunakan ML_PREDICT untuk memanggil model bawaan Flink. Buka Data Development > ETL, buat pekerjaan, tempel kode, lalu klik Debug.

CREATE TEMPORARY TABLE text_source (
  user_input STRING
) WITH ('connector' = 'datagen');

CREATE TEMPORARY TABLE result_sink (
  user_input STRING,
  ai_analysis STRING
) WITH ('connector' = 'print');

CREATE TEMPORARY MODEL text_model
INPUT (user_input STRING)
OUTPUT (content STRING)
WITH (
  'provider' = 'openai-compat',
  'model' = 'qwen3.6-flash',
  'task' = 'chat/completions',
  'system-prompt' = 'Rate the gibberish level of the input on a scale of 0 to 100'
);

INSERT INTO result_sink
SELECT user_input, content as ai_analysis FROM
    ML_PREDICT(
        TABLE text_source,
        MODEL text_model,
        DESCRIPTOR(user_input)
);

Batasan

  • Diperlukan mesin Realtime Compute VVR 11.1 atau lebih baru.

  • Beberapa parameter hanya didukung saat menggunakan Flink AI Service (model bawaan) dan memerlukan VVR 11.8.preview.2 atau lebih baru.

  • Throughput operator ML_PREDICT tunduk pada pembatasan laju oleh Model Studio. Ketika batas laju tercapai, tekanan balik terjadi pada operator ML_PREDICT, yang dapat menyebabkan error timeout dan restart pekerjaan. Untuk informasi selengkapnya, lihat Batas Laju di Model Studio.

  • Jumlah tipe dalam content-types dan jumlah kolom dalam DESCRIPTOR harus sesuai dengan jumlah kolom INPUT yang didefinisikan dalam CREATE MODEL.

  • Kolom bertipe image_url harus bertipe STRING. Kolom bertipe multi_image_urls harus bertipe ARRAY<STRING>.

  • Gambar base64 harus menyertakan awalan data:image/<format>;base64,. String base64 mentah dan path file lokal tidak didukung.

Sintaks

ML_PREDICT(TABLE <table_name>, MODEL <model_name>, DESCRIPTOR(<input_columns>) [, CONFIG => MAP[...]])        

Parameter

Parameter

Tipe data

Deskripsi

TABLE

TABLE

Aliran data masukan untuk inferensi model. Anda dapat menentukan tabel fisik atau tampilan.

MODEL

MODEL

Nama model yang telah terdaftar. Untuk informasi selengkapnya, lihat Pengaturan model.

DESCRIPTOR()

Kolom masukan untuk inferensi model.

Catatan

VVR 11.8.preview.2 dan versi lebih baru mendukung beberapa kolom masukan. Fitur ini hanya tersedia saat menggunakan Flink AI Service (model bawaan). Jumlah kolom DESCRIPTOR harus sesuai dengan jumlah kolom INPUT CREATE MODEL.

CONFIG => MAP[...]

MAP

Opsional. Untuk informasi selengkapnya, lihat Konfigurasi per-pemanggilan.

Catatan

Hanya didukung di VVR 11.8.preview.2 dan versi lebih baru dengan Flink AI Service (model bawaan).

Konfigurasi per-pemanggilan

Anda dapat menentukan konfigurasi per-pemanggilan saat memanggil ML_PREDICT. Jika suatu parameter telah ditetapkan dalam CREATE MODEL, nilai per-pemanggilan akan menggantikan nilai tersebut tetapi tidak mengubah definisi MODEL secara permanen.

Parameter

Deskripsi

Contoh

user-prompt

Menentukan prompt pengguna. Berikan string kosong untuk melewati nilai tingkat MODEL.

MAP['user-prompt', 'Answer in English']

content-type

Menentukan tipe konten untuk masukan satu kolom.

MAP['content-type', 'text']

content-types

Menentukan tipe konten untuk masukan multi-kolom.
Jumlah tipe dalam content-types harus sesuai dengan jumlah kolom INPUT dalam CREATE MODEL.

MAP['content-types', 'text;image_url']

{column}.{param}

Menentukan parameter tingkat kolom.

MAP['image_input.min_pixels', '100']

extra-body

Menentukan parameter tambahan sebagai string JSON.

MAP['extra-body', '{"enable_search": true}']

Parameter tipe konten

  • Untuk masukan satu kolom, gunakan content-type untuk menentukan tipe konten. Nilai yang didukung: text, image_url.

  • Untuk masukan multi-kolom, gunakan content-types untuk menentukan tipe konten setiap kolom. Nilai yang didukung: text, image_url, multi_image_urls.

  • Hanya salah satu dari content-type dan content-types yang dapat ditentukan. Opsi yang tersedia bergantung pada pengaturan dalam CREATE MODEL:

Pengaturan CREATE MODEL

Opsi per-pemanggilan yang diizinkan

Opsi per-pemanggilan yang tidak diizinkan

Deskripsi

content-type (satu kolom)

content-type

content-types

Anda dapat beralih antara text dan image_url

content-types (beberapa kolom)

content-types

content-type

Anda dapat mengubah kombinasi tipe, misalnya dari text;image_url menjadi text;text

Tidak ada content-type maupun content-types yang ditentukan

content-type
content-types

Sama seperti di atas

Parameter tingkat kolom

Parameter

Deskripsi

Nilai

Contoh

{column}.min_pixels

Menetapkan ambang batas piksel minimum untuk gambar atau frame video masukan. Gambar dengan jumlah piksel kurang dari min_pixels akan diperbesar hingga melebihi ambang batas tersebut.

Qwen3.7, Qwen3.6, Qwen3.5: nilai default dan minimum keduanya adalah 65536.

MAP['image_input.min_pixels', '100']

{column}.max_pixels

Menetapkan ambang batas piksel maksimum untuk gambar atau frame video masukan. Gambar dalam rentang [min_pixels, max_pixels] diproses pada resolusi aslinya. Gambar yang melebihi max_pixels akan diperkecil.

Qwen3.7, Qwen3.6, Qwen3.5: nilai default adalah 2621440, maksimum adalah 16777216.

MAP['image_input.max_pixels', '10000']

{column}.total_pixels

Membatasi total piksel di seluruh frame yang diekstraksi dari video (piksel per frame × jumlah frame total). Jika video melebihi batas ini, frame akan diperkecil sambil tetap menjaga setiap frame dalam rentang [min_pixels, max_pixels].
Untuk video panjang dengan banyak frame yang diekstraksi, Anda dapat menurunkan nilai ini untuk mengurangi konsumsi token dan waktu pemrosesan, tetapi hal ini dapat menyebabkan hilangnya detail gambar.

Seri Qwen3.7, Seri Qwen3.6, Seri Qwen3.5: nilai default dan maksimum keduanya adalah 819200000. Nilai ini setara dengan 800000 token gambar (setiap blok piksel 32x32 setara dengan 1 token gambar).

MAP['image_input.total_pixels', '1000000']

{column}.cache_control

Mengaktifkan caching eksplisit.

{"type": "ephemeral"}

MAP['content.cache_control', '{"type": "ephemeral"}']

Contoh

Teks

Contoh berikut mendaftarkan dan menggunakan model bawaan Flink AI Service untuk mengklasifikasikan teks masukan berdasarkan sentimen. Contoh 1 menggunakan parameter tingkat MODEL. Contoh 2 mengganti user-prompt saat pemanggilan.

-- Mendaftarkan model bawaan. Saat content-type tidak ditentukan, nilai default-nya adalah text
CREATE MODEL sentiment_model
INPUT (prompt STRING)
OUTPUT (response STRING)
WITH (
  'provider' = 'openai-compat',
  'task' = 'chat/completions',
  'model' = 'qwen3.6-flash',
  'system-prompt' = 'You are a sentiment classifier. Output one label: negative, positive, or neutral'
);

-- Membuat tabel sumber: data ulasan produk simulasi
CREATE TEMPORARY VIEW input_table(id, content)
AS VALUES
  (1, 'Great quality, soft fabric, fits perfectly'),
  (2, 'Had loose threads on arrival, faded badly after one wash'),
  (3, 'Received the item, looks as pictured'),
  (4, 'Started pilling after two weeks, customer service refused returns'),
  (5, 'Flattering fit, color is even better than the photo, already ordered a third one');

-- Membuat tabel hasil
CREATE TEMPORARY TABLE output_table (
  id INT,
  content STRING,
  sentiment STRING
) WITH (
  'connector' = 'print'
);

-- Menggunakan ML_PREDICT untuk inferensi real-time
-- Contoh 1: Gunakan parameter tingkat MODEL
INSERT INTO output_table
SELECT
  id,
  content,
  response AS sentiment
FROM ML_PREDICT(
  TABLE input_table,
  MODEL sentiment_model,
  DESCRIPTOR(content));

-- Contoh 2: Tentukan parameter per-pemanggilan
INSERT INTO output_table
SELECT
  id,
  content,
  response AS sentiment
FROM ML_PREDICT(
  TABLE input_table,
  MODEL sentiment_model,
  DESCRIPTOR(content),
  MAP['user-prompt', 'Reply in Chinese']);

Output Contoh 1:

id

content

sentiment

1

Great quality, soft fabric, fits perfectly

positive

2

Had loose threads on arrival, faded badly after one wash

negative

3

Received the item, looks as pictured

positive

4

Started pilling after two weeks, customer service refused returns

negative

5

Flattering fit, color is even better than the photo, already ordered a third one

positive

Output Contoh 2:

id

content

sentiment

1

Great quality, soft fabric, fits perfectly

正面

2

Had loose threads on arrival, faded badly after one wash

负面

3

Received the item, looks as pictured

正面

4

Started pilling after two weeks, customer service refused returns

负面

5

Flattering fit, color is even better than the photo, already ordered a third one

正面

Gambar

Contoh berikut mendaftarkan model multimodal dan mengklasifikasikan gambar masukan.

-- Mendaftarkan model bawaan dengan content-type diatur ke image_url
CREATE TEMPORARY MODEL sentiment_model
INPUT (prompt STRING)
OUTPUT (response STRING)
WITH (
  'provider' = 'openai-compat',
  'task' = 'chat/completions',
  'model' = 'qwen3.6-flash',
  'content-type' = 'image_url'
);

-- Menggunakan ML_PREDICT untuk inferensi real-time
INSERT INTO output_table
SELECT
  id,
  content,
  response AS sentiment
FROM ML_PREDICT(
  TABLE input_table,
  MODEL sentiment_model,
  DESCRIPTOR(content));

Teks + satu gambar

Contoh berikut mendaftarkan model multimodal untuk inferensi berbasis chat pada masukan teks dan gambar.

CREATE MODEL vl_model
INPUT (text_input STRING, image_input STRING)
OUTPUT (content STRING)
WITH (
  'provider' = 'openai-compat',
  'model' = 'qwen3.5-plus',
  'task' = 'chat/completions',
  'content-types' = 'text;image_url'
);

INSERT INTO result_sink
SELECT content FROM TABLE(ML_PREDICT(
  TABLE image_source,
  MODEL vl_model,
  DESCRIPTOR(text_input, image_input)
));         

Teks + beberapa gambar (beberapa kolom)

Kirimkan setiap gambar melalui kolom INPUT terpisah. Tentukan image_url untuk setiap kolom gambar dalam content-types.

CREATE MODEL vl_model_multi
INPUT (prompt STRING, img1 STRING, img2 STRING)
OUTPUT (content STRING)
WITH (
  'provider' = 'openai-compat',
  'model' = 'qwen3.5-plus',
  'task' = 'chat/completions',
  'content-types' = 'text;image_url;image_url'
);

SELECT content FROM TABLE(ML_PREDICT(
  TABLE my_source,
  MODEL vl_model_multi,
  DESCRIPTOR(prompt, img1, img2)
));          

Teks + beberapa gambar (array)

Kirimkan beberapa gambar dalam kolom ARRAY<STRING>. Gunakan multi_image_urls dalam content-types.

CREATE MODEL vl_model_array
INPUT (prompt STRING, images ARRAY<STRING>)
OUTPUT (content STRING)
WITH (
  'provider' = 'openai-compat',
  'model' = 'qwen3.5-plus',
  'task' = 'chat/completions',
  'content-types' = 'text;multi_image_urls'
);

SELECT content FROM TABLE(ML_PREDICT(
  TABLE my_source,
  MODEL vl_model_array,
  DESCRIPTOR(prompt, images)
)); 

Contoh parameter per-pemanggilan

Contoh 1: Menentukan Parameter Tipe Konten

-- Saat content-type / content-types tidak ditentukan dalam CREATE MODEL, nilai default-nya adalah content-type = text
CREATE MODEL model_single
INPUT (input STRING)
OUTPUT (content STRING)
WITH (
  'provider' = 'openai-compat',
  'model' = 'qwen3.5-plus',
  'task' = 'chat/completions'
);

-- Pemanggilan 1: Gunakan parameter MODEL, tipe konten adalah text
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_text,
  MODEL model_single,
  DESCRIPTOR(input)
));

-- Pemanggilan 2: Ganti tipe konten menjadi image saat pemanggilan
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_img,
  MODEL model_single,
  DESCRIPTOR(input),
  MAP['content-type', 'image_url']
));

Contoh 2: Menentukan user-prompt dan Parameter Tingkat Kolom

-- Tetapkan konfigurasi default dalam CREATE MODEL (model multi-kolom)
CREATE MODEL vl_model
INPUT (text_input STRING, image_input STRING)
OUTPUT (content STRING)
WITH (
  'provider' = 'openai-compat',
  'model' = 'qwen3.5-plus',
  'task' = 'chat/completions',
  'content-types' = 'text;image_url',
  'user-prompt' = 'Describe the image'
);

-- Pemanggilan 1: Gunakan konfigurasi default
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_a, MODEL vl_model, DESCRIPTOR(text_input, image_input)
));

-- Pemanggilan 2: Ganti user-prompt dan parameter tingkat kolom
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_b, MODEL vl_model, DESCRIPTOR(text_input, image_input),
  MAP[
    'user-prompt', 'Answer in English',
    'image_input.min_pixels', '100',
    'image_input.max_pixels', '5000'
  ]
));

-- Pemanggilan 3: Ganti content-types untuk mengubah kombinasi tipe (perlakukan kedua kolom sebagai text)
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_c, MODEL vl_model, DESCRIPTOR(text_input, image_input),
  MAP['content-types', 'text;text']
));

-- Pemanggilan 4: Ganti content-types untuk mengubah kombinasi tipe (urutan terbalik)
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_c, MODEL vl_model, DESCRIPTOR(text_input, image_input),
  MAP['content-types', 'image_url;text']
));