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
-
Ruang kerja Flink telah dibuat. Untuk informasi selengkapnya, lihat Aktifkan Realtime Compute for Apache Flink.
-
Flink AI Service telah diaktifkan. Untuk informasi selengkapnya, lihat Flink AI Service (model bawaan).
-
Flink AI Service (model bawaan) memerlukan mesin VVR versi 11.7 atau lebih baru.
Contoh berikut menunjukkan cara menggunakan ML_PREDICT untuk memanggil model bawaan Flink. Buka , 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-typesdan jumlah kolom dalam DESCRIPTOR harus sesuai dengan jumlah kolom INPUT yang didefinisikan dalam CREATE MODEL. -
Kolom bertipe
image_urlharus bertipe STRING. Kolom bertipemulti_image_urlsharus bertipeARRAY<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 |
|
|
Menentukan prompt pengguna. Berikan string kosong untuk melewati nilai tingkat MODEL. |
|
|
|
Menentukan tipe konten untuk masukan satu kolom. |
|
|
|
Menentukan tipe konten untuk masukan multi-kolom. |
|
|
|
Menentukan parameter tingkat kolom. |
|
|
|
Menentukan parameter tambahan sebagai string JSON. |
|
Parameter tipe konten
-
Untuk masukan satu kolom, gunakan
content-typeuntuk menentukan tipe konten. Nilai yang didukung:text,image_url. -
Untuk masukan multi-kolom, gunakan
content-typesuntuk menentukan tipe konten setiap kolom. Nilai yang didukung:text,image_url,multi_image_urls. -
Hanya salah satu dari
content-typedancontent-typesyang 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 |
|
|
|
|
Anda dapat beralih antara |
|
|
|
|
Anda dapat mengubah kombinasi tipe, misalnya dari |
|
Tidak ada |
|
— |
Sama seperti di atas |
Parameter tingkat kolom
|
Parameter |
Deskripsi |
Nilai |
Contoh |
|
|
Menetapkan ambang batas piksel minimum untuk gambar atau frame video masukan. Gambar dengan jumlah piksel kurang dari |
|
|
|
|
Menetapkan ambang batas piksel maksimum untuk gambar atau frame video masukan. Gambar dalam rentang |
|
|
|
|
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 |
|
|
|
|
Mengaktifkan caching eksplisit. |
|
|
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']
));