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.
Memulai dengan 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 versi mesin VVR 11.7 atau yang 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 yang lebih baru.
-
Beberapa parameter hanya didukung saat menggunakan Flink AI Service (model bawaan) dan memerlukan VVR 11.8.preview.2 atau yang lebih baru.
-
Throughput operator ML_PREDICT tunduk pada pembatasan laju oleh Model Studio. Saat ambang batas laju tercapai, tekanan balik terjadi pada operator ML_PREDICT, yang dapat menyebabkan error timeout dan restart pekerjaan. Untuk informasi selengkapnya, lihat Pembatasan 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 yang 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 yang 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 mengambil prioritas tetapi tidak disimpan ke definisi MODEL.
|
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. |
|
|
|
Ukuran bundel. |
|
|
|
Latensi bundel yang diizinkan. |
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 dan pemetaannya ke tipe kolom Flink SQL tercantum di bawah ini:
|
Nilai content-types |
Tipe Flink SQL |
Deskripsi |
|
|
|
|
|
|
|
|
|
|
|
Didukung di VVR 11.9.preview.1 dan yang lebih baru. |
|
|
|
Didukung di VVR 11.9.preview.1 dan yang lebih baru. |
|
|
|
Didukung di VVR 11.8 dan yang lebih baru. |
|
|
|
Didukung di VVR 11.9.preview.1 dan yang lebih baru. |
|
|
|
Didukung di VVR 11.9.preview.1 dan yang lebih baru. |
-
Kami menyarankan Anda menentukan
content-typesdalam parameter. Jika Anda menetapkan keduanyacontent-typedancontent-types, framework akan melaporkan error. Catatan: pengaturancontent-typedancontent-typesdalam parameter model dan pengaturan per-pemanggilan saling memengaruhi:
|
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 x jumlah frame total). Jika video melebihi batas ini, frame akan diskalakan turun sambil menjaga setiap frame dalam rentang |
|
|
|
|
Mengaktifkan caching eksplisit. |
|
|
|
|
Menetapkan laju pengambilan sampel frame untuk pemahaman video. |
Nilai valid: [0.1, 10]. Nilai default: 2.0. |
|
Pemrosesan bundel
-
Pemrosesan: Pemrosesan bundel pertama-tama menggabungkan beberapa catatan masukan menjadi satu batch, lalu memanggil model AI untuk batch tersebut. Hal ini mengurangi jumlah pemanggilan model tetapi meningkatkan waktu inferensi model untuk setiap permintaan. Saat catatan dapat digabungkan secara efektif, pemrosesan bundel dapat meningkatkan throughput operator secara signifikan.
-
Deskripsi parameter:
bundle-sizemenentukan jumlah maksimum catatan yang dikumpulkan dalam satu batch.bundle-allow-latencymenentukan waktu tunggu maksimum saat batch belum mencapai nilaibundle-size. Pemrosesan dimulai ketika salah satu kondisi ukuran batch atau waktu tunggu terpenuhi. -
Tipe data: Hanya
textyang didukung. -
Fungsi yang didukung:
ML_PREDICT, klasifikasi teks (AI_CLASSIFY), analisis sentimen (AI_SENTIMENT), ekstraksi informasi (AI_EXTRACT), Ringkasan teks (AI_SUMMARIZE), translation teks (AI_TRANSLATE), penyamaran data (AI_MASK), dan text embedding (AI_EMBED). -
Konfigurasi global: Konfigurasi ini berlaku untuk setiap pemanggilan
ML_PREDICTdan setiap pemanggilan fungsi AI spesifik domain yang tercantum dalam pekerjaan. Gunakan parameter global berikut untuk mengaktifkan pemrosesan bundel:SET 'table.exec.ml-predict.bundle-size' = '10'; SET 'table.exec.ml-predict.bundle-allow-latency' = '5s'; -
Konfigurasi per-pemanggilan: Parameter ini hanya berlaku untuk pemanggilan fungsi tempat mereka ditentukan.
ML_PREDICTdan fungsi AI spesifik domain yang tercantum menggunakan metode konfigurasi yang sama. Untuk parameter dan contoh, lihat Konfigurasi per-pemanggilan.
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: Menggunakan 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: Menentukan 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 |
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 |
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));
Video
Contoh berikut mendaftarkan model multimodal untuk memahami video masukan.
CREATE TEMPORARY MODEL sentiment_model
INPUT (video_url STRING)
OUTPUT (response STRING)
WITH (
'provider' = 'openai-compat',
'task' = 'chat/completions',
'model' = 'qwen3.6-plus',
'content-types' = 'video_url',
'system-prompt' = 'Briefly describe the video content'
);
CREATE TEMPORARY VIEW input_table(content)
AS VALUES ('https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251111/ckgcxt/%E5%8D%95%E4%BA%BA%E8%AF%B4%E8%AF%9D-1.mp4');
SELECT
content,
response AS sentiment
FROM ML_PREDICT(
TABLE input_table,
MODEL sentiment_model,
DESCRIPTOR(content));
Teks + gambar tunggal
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)
Teruskan 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)
Teruskan 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)
));
Teks + video
CREATE TEMPORARY MODEL sentiment_model
INPUT (video_url STRING, question STRING)
OUTPUT (response STRING)
WITH (
'provider' = 'openai-compat',
'task' = 'chat/completions',
'model' = 'qwen3.6-plus',
'content-types' = 'video_url;text'
);
CREATE TEMPORARY VIEW input_table(content, question)
AS VALUES ('https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251111/ckgcxt/%E5%8D%95%E4%BA%BA%E8%AF%B4%E8%AF%9D-1.mp4', 'How many people are there?');
SELECT
content,
response AS sentiment
FROM ML_PREDICT(
TABLE input_table,
MODEL sentiment_model,
DESCRIPTOR(content, question));
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: Menggunakan parameter MODEL, tipe konten adalah text
SELECT content FROM TABLE(ML_PREDICT(
TABLE source_text,
MODEL model_single,
DESCRIPTOR(input)
));
-- Pemanggilan 2: Mengganti 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
-- Menetapkan 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: Menggunakan konfigurasi default
SELECT content FROM TABLE(ML_PREDICT(
TABLE source_a, MODEL vl_model, DESCRIPTOR(text_input, image_input)
));
-- Pemanggilan 2: Mengganti 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: Mengganti 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: Mengganti 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']
));