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 versi mesin VVR 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 atau lebih baru.
-
Tingkat throughput operator ML_PREDICT tunduk pada pembatasan laju oleh Model Studio. Saat 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 didaftarkan. Untuk informasi selengkapnya, lihat Pengaturan model. |
|
DESCRIPTOR() |
— |
Kolom masukan untuk inferensi model. Catatan
VVR 11.8 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 dalam CREATE MODEL. |
|
CONFIG => MAP[...] |
MAP |
Opsional. Untuk informasi selengkapnya, lihat Konfigurasi per-pemanggilan. Catatan
Hanya didukung di VVR 11.8 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 sudah ditetapkan dalam CREATE MODEL, nilai per-pemanggilan akan mengambil prioritas 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. |
|
|
|
Ukuran bundel. |
Catatan
Pemrosesan bundel hanya didukung di VVR 11.9 dan versi lebih baru. |
|
|
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 dan versi lebih baru. |
|
|
|
Didukung di VVR 11.9 dan versi lebih baru. |
|
|
|
Didukung di VVR 11.8 dan versi lebih baru. |
|
|
|
Didukung di VVR 11.9 dan versi lebih baru. |
|
|
|
Didukung di VVR 11.9 dan versi 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 semua frame yang diekstraksi dari video (piksel per frame x jumlah frame total). Jika video melebihi batas ini, frame akan diskalakan sambil tetap 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. Ketika 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 ketika batch belum mencapai nilaibundle-size. Pemrosesan dimulai ketika salah satu kondisi ukuran batch atau waktu tunggu terpenuhi. -
Persyaratan: Pemrosesan bundel berlaku berdasarkan skema masukan dan keluaran model.
-
Generasi teks: Untuk model yang memiliki
taskchat/completions, masukan berisi tepat satu kolomSTRINGberupa teks, dan keluaran berisi tepat satu kolomSTRINGatauVARIANT. Masukan multi-kolom dan masukan multimodal seperti gambar, video, dan audio tidak didukung. -
Text embedding: Untuk model yang memiliki
taskembeddings, masukan berisi tepat satu kolomSTRING, dan keluaran berisi tepat satu kolomARRAY<FLOAT>.
-
-
Fungsi yang didukung:
ML_PREDICT, klasifikasi teks (AI_CLASSIFY), analisis sentimen (AI_SENTIMENT), ekstraksi informasi (AI_EXTRACT), Ringkasan teks (AI_SUMMARIZE), translation (AI_TRANSLATE), penyamaran data (AI_MASK), dan text embedding (AI_EMBED). Di antaranya,ML_PREDICTmendukung pemrosesan bundel hanya jika model yang terdaftar memenuhi persyaratan di atas. -
Konfigurasi global: Konfigurasi ini berlaku untuk pemanggilan
ML_PREDICTdan pemanggilan fungsi AI spesifik domain yang tercantum dalam pekerjaan yang memenuhi persyaratan di atas. Gunakan parameter global berikut untuk mengaktifkan pemrosesan bundel:-- Pemrosesan bundel hanya didukung di VVR 11.9 dan versi lebih baru. 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 parameter tersebut ditentukan.
ML_PREDICTdan fungsi AI spesifik domain yang tercantum menggunakan metode konfigurasi yang sama. Untuk parameter dan contoh, lihat Konfigurasi per-pemanggilan.
Penanganan error
Batasan
-
Hanya didukung di VVR 11.9 dan versi lebih baru.
-
Anda tidak dapat mengaktifkan penanganan error saat pemanggilan model berjalan dalam mode sinkron.
-
Penanganan error tidak dapat digunakan bersamaan dengan Vectorization result cache (
CACHE_TABLE) saat ini.
Aktifkan penanganan error
Tambahkan parameter FAIL_ON_ERROR => FALSE saat Anda memanggil fungsi AI.
Prasyarat: Pertahankan pengaturan retry default model: error-handling-strategy='retry' dan retry-fallback-strategy='failover'. Untuk informasi selengkapnya tentang parameter model, lihat Pengaturan model.
|
Parameter |
Deskripsi |
Wajib |
Nilai default |
|
FAIL_ON_ERROR |
Menentukan apakah pekerjaan gagal saat pemanggilan akhirnya gagal. Jika Anda menetapkan parameter ini ke |
Tidak |
|
FAIL_ON_ERROR secara default bernilai TRUE, sehingga pekerjaan gagal setelah semua upaya retry habis. Menetapkan parameter ini ke FALSE hanya mengubah cara penanganan catatan yang gagal, bukan perilaku retry.
Perubahan output
Setelah Anda mengaktifkan penanganan error, sistem menambahkan kolom error err_msg bertipe VARIANT nullable di akhir bidang output asli. Kolom ini dihasilkan oleh sistem. Anda tidak perlu mendeklarasikannya di tabel masukan atau dalam klausa OUTPUT CREATE MODEL.
-
Pemanggilan berhasil:
err_msgbernilaiNULL. -
Pemanggilan akhirnya gagal: semua bidang hasil model bernilai
NULL, danerr_msgberisi informasi error.
Jika Anda menggunakan SELECT *, hasilnya mencakup kolom error baru. Jika Anda memilih bidang secara eksplisit, Anda harus menentukan kolom tersebut secara manual. Nama kolom default adalah err_msg. Jika nama tersebut bentrok dengan kolom output yang sudah ada, sistem akan menambahkan sufiks numerik, seperti err_msg0. Gunakan nama kolom aktual untuk mereferensinya.
Gunakan kolom error untuk menentukan apakah pemanggilan gagal: nilai yang tidak NULL menunjukkan kegagalan. Bidang hasil model yang bernilai NULL tidak selalu menunjukkan pemanggilan yang gagal.
|
Bidang dalam objek |
Konten |
Pola pembacaan SQL |
|
message |
Penyebab error. Periksa bidang ini terlebih dahulu saat melakukan troubleshooting. |
CAST(err_msg['message'] AS STRING) |
|
stack_trace |
Informasi diagnostik yang lebih rinci. Periksa bidang ini saat Anda perlu menemukan akar penyebabnya. |
CAST(err_msg['stack_trace'] AS STRING) |
|
details (bidang opsional) |
Hanya muncul jika error dasar membawa informasi tambahan. |
err_msg['details'] mengembalikan NULL jika bidang tidak ada, atau nilai VARIANT jika bidang tersebut ada. |
Contoh
AI_SENTIMENT menyimpan catatan yang gagal
Siapkan model analisis sentimen bernama ai_sentiment_model, yang telah didaftarkan dan mendukung panggilan asinkron.
CREATE TEMPORARY VIEW input_data AS
SELECT *
FROM (VALUES
(1, CAST('xxxx (a description of violent conflict that violates humanity)' AS STRING), 'negative'),
(2, CAST('The customer service of this store has always been among the best' AS STRING), 'positive')
) AS t(id, input_text, expected_label);
CREATE TEMPORARY VIEW ai_results AS
SELECT i.id, i.input_text, i.expected_label,
r.score, r.label, r.confidence, r.err_msg
FROM input_data AS i,
LATERAL TABLE(AI_SENTIMENT(
MODEL => MODEL ai_sentiment_model,
INPUT => i.input_text,
FAIL_ON_ERROR => FALSE,
CONFIG => MAP['async', 'true']
)) AS r(score, label, confidence, err_msg);
SELECT * FROM ai_results;
Kueri mengembalikan kolom-kolom berikut secara berurutan.
|
Kolom output |
Tipe data |
Sumber dan deskripsi |
|
id |
INT |
ID catatan masukan. |
|
input_text |
STRING |
Teks asli yang akan diproses. |
|
score / label / confidence |
STRING |
Dikembalikan oleh AI_SENTIMENT. |
|
err_msg |
VARIANT, bisa |
Ditambahkan setelah penanganan error diaktifkan. |
Kueri mengembalikan hasil berikut. Ringkasan dan pesan error hanyalah contoh. Hasil aktual dapat berbeda.
|
id |
input_text |
score / label / confidence |
err_msg |
|
1 |
xxxx (a description of violent conflict that violates humanity) |
|
{"message":"com.openai.errors.BadRequestException: 400: <400> InternalError.Algo.DataInspectionFailed: Input text data may contain inappropriate content..... "stack_trace":"org.apache.flink.table.api.TableException: Failed to execute asynchronously prediction with input row xxx} |
|
2 |
The customer service of this store has always been among the best |
1.0 / positive / 0.99 |
|
Contoh error lainnya
Contoh berikut menunjukkan error timeout dalam pemanggilan umum.
message:
java.util.concurrent.TimeoutException: AsyncPredictFunction did not complete within the configured timeout. Increase the ML_PREDICT timeout or check external service connectivity.
stack_trace:
java.util.concurrent.TimeoutException: AsyncPredictFunction did not complete within the configured timeout. Increase the ML_PREDICT timeout or check external service connectivity.
at org.apache.flink.table.runtime.operators.predict.AsyncMLPredictRunner.timeout(AsyncMLPredictRunner.java:153)
at org.apache.flink.table.runtime.operators.predict.AsyncMLPredictRunner.timeout(AsyncMLPredictRunner.java:51)
at org.apache.flink.table.runtime.operators.TableKeyedAsyncWaitOperator$KeyedResultHandler.timerTriggered(TableKeyedAsyncWaitOperator.java:462)
at org.apache.flink.table.runtime.operators.TableKeyedAsyncWaitOperator$KeyedResultHandler.lambda$registerTimeout$1(TableKeyedAsyncWaitOperator.java:457)
at org.apache.flink.table.runtime.operators.TableKeyedAsyncWaitOperator.lambda$registerTimer$4(TableKeyedAsyncWaitOperator.java:486)
at org.apache.flink.streaming.runtime.tasks.StreamTask.invokeProcessingTimeCallback(StreamTask.java:2285)
at org.apache.flink.streaming.runtime.tasks.StreamTask.lambda$deferCallbackToMailbox$28(StreamTask.java:2276)
at org.apache.flink.streaming.runtime.tasks.StreamTaskActionExecutor$1.runThrowing(StreamTaskActionExecutor.java:50)
at org.apache.flink.streaming.runtime.tasks.mailbox.Mail.run(Mail.java:115)
at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMail(MailboxProcessor.java:415)
at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.processMailsWhenDefaultActionUnavailable(MailboxProcessor.java:384)
at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.processMail(MailboxProcessor.java:369)
at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:229)
at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:1273)
at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:1217)
at org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:1133)
at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:1110)
at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:914)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:716)
at java.base/java.lang.Thread.run(Thread.java:991)
Cara penanganan setiap jenis error
Perilaku berikut berlaku saat penanganan error diaktifkan dan pengaturan retry default dipertahankan. Baris error adalah baris yang menyimpan masukan, mengembalikan hasil model kosong, dan mencatat alasan kegagalan dalam err_msg.
|
Jenis error atau penyebab |
Perilaku sistem |
Output akhir |
|
Kegagalan koneksi jaringan, pembatasan kecepatan, atau error layanan sementara (429, 500, 502, 503) |
Menunggu periode yang dikonfigurasi lalu mencoba ulang. |
Output normal jika retry berhasil. Baris error jika pemanggilan akhirnya gagal. |
|
Parameter tidak valid, masukan terlalu panjang, kunci tidak valid, izin ditolak, atau model tidak ditemukan (400, 401, 403, 404, 422) |
Umumnya langsung mengembalikan kegagalan tanpa mencoba ulang. |
Baris error yang mencatat alasan yang dikembalikan oleh layanan. |
|
Penolakan moderasi konten, atau saldo atau kuota tidak mencukupi |
Memutuskan apakah akan mencoba ulang berdasarkan error yang dikembalikan oleh layanan. |
Output normal jika error pulih. Baris error jika pemanggilan akhirnya gagal. |
|
Hasil JSON diperlukan, tetapi respons model tidak dapat diurai |
Mengirim permintaan lagi. |
Output normal jika permintaan berhasil. Baris error jika pemanggilan akhirnya gagal. |
|
Periode tunggu yang dikonfigurasi terlampaui |
Mengakhiri waktu tunggu saat ini. |
Baris error yang menunjukkan timeout. |
|
Pemanggilan akhirnya gagal atau timeout selama pemrosesan bundel |
Mencatat kegagalan untuk setiap masukan dalam batch. |
Satu baris error per masukan, masing-masing mencatat alasan kegagalan yang sama. |
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.
Kolom masukan gambar (saat content-type adalah image_url) bertipe STRING dan mendukung format berikut:
|
Format masukan |
Penggunaan |
Batasan |
|
URL publik |
Gunakan string URL HTTP atau HTTPS yang dapat diakses oleh layanan model melalui Internet. Layanan model akan mengambil gambarnya. |
URL harus dapat diakses melalui Internet dari lingkungan tempat layanan model berjalan. Jika URL memiliki batas waktu, periode validitasnya harus mencakup durasi pemanggilan model. Format dan ukuran gambar dibatasi oleh layanan model. |
|
URL data Base64 |
Gunakan string yang diawali dengan |
Byte gambar dikirimkan oleh pekerjaan Flink, yang meningkatkan overhead jaringan pekerjaan. Pengkodean Base64 juga meningkatkan ukuran data. Volume data dibatasi oleh batas masukan layanan model. |
Jika gambar disimpan dalam kolom Blob dari Paimon Catalog, Anda dapat menggunakan fitur Paimon Blob presigned URL untuk menghasilkan URL publik sebagai masukan. Untuk informasi selengkapnya, lihat Apache Paimon.
-- 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 ke 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']
));