全部產品
Search
文件中心

Realtime Compute for Apache Flink:通用調用

更新時間:Jul 04, 2026

本文介紹如何在 Flink 中使用 ML_PREDICT 函數調用 AI 模型,涵蓋文法與入參說明、調用級參數、內容類型配置、列級參數設定,以及文本、圖片、多模態等多種調用樣本。

快速開始

前提條件

以下樣本示範如何使用 ML_PREDICT 調用 Flink 內建模型。請在資料開發 > ETL頁面,新增作業、複製代碼後點擊調試。。

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' = '分析內容亂碼程度,給0-100的評分'
);

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

使用限制

  • 僅Realtime Compute引擎 VVR 11.1 及以上版本支援。

  • 部分參數僅在使用 Flink AI 服務(內建模型)時支援,僅支援 VVR 11.8.preview.2 及以上版本。

  • ML_PREDICT 運算元的輸送量受百鍊平台限流限制。觸及資料傳輸量上限時,作業會出現以 ML_PREDICT 運算元為瓶頸的反壓現象,嚴重時可能觸發逾時報錯及作業重啟。詳情參見百鍊平台限流

  • content-types 中的類型數量及 Descriptor 中的列數,必須與 CREATE MODEL 中 INPUT 的列數一致。

  • image_url 類型的列必須為 STRING,multi_image_urls 類型的列必須為 ARRAY<STRING>

  • base64 圖片必須包含 data:image/<格式>;base64, 首碼,不支援純 base64 字串和本地檔案路徑。

文法

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

入參

參數

資料類型

說明

TABLE

TABLE

模型推斷的輸入資料流,可以是物理表名或視圖名。

MODEL

MODEL

登入的模型服務名稱。詳情參見模型設定

DESCRIPTOR()

用於模型推斷的輸入列。

說明

VVR 11.8.preview.2 及以上版本支援輸入多列,且僅在使用 Flink AI 服務(內建模型)時支援。強制要求 DESCRIPTOR 列數 = CREATE MODEL INPUT 列數

CONFIG => MAP[...]

MAP

可選。詳情參見調用級參數

說明

僅VVR 11.8.preview.2 及以上版本支援,且使用 Flink AI 服務(內建模型)。

調用級參數

使用者可以在使用 ML_PREDICT 時指定調用級參數。若 CREATE MODEL 中已設定參數值,則調用 ML_PREDICT 時以新指定的參數為準,但不會持久化改寫 MODEL 中的參數值。

參數

說明

樣本

user-prompt

指定使用者提示詞。傳Null 字元串時則不使用MODEL 級參數值。

MAP['user-prompt', '請用英文回答']

content-type

僅輸入單列時,指定內容類型。

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

content-types

輸入多列時,指定內容類型。
content-types 中的類型數量必須與 CREATE MODEL 中 INPUT 的列數一致。

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

{列名}.{參數名}

指定列級參數。

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

extra-body

指定附加參數(JSON 字串)。

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

內容類型參數

  • 僅輸入單列時,可通過 content-type 指定內容類型,支援的值:textimage_url

  • 輸入多列時,可通過 content-types 指定每列內容類型,支援的值:textimage_urlmulti_image_urls

  • content-type 和 content-types 僅可指定其中一個,且受 CREATE MODEL 時設定的參數影響:

建立模型時指定參數

調用級參數可使用

調用級參數不可使用

說明

content-type(單列)

content-type

content-types

可在 text 和 image_url 間切換

content-types(多列)

content-types

content-type

可改變類型組合,如 text;image_url → text;text

未指定 content-type 或 content-types

content-type
content-types

同上

列級參數

參數

說明

參數值

樣本

{列名}.min_pixels

設定輸入映像或視訊框架的最小像素閾值。當輸入映像或視訊框架的像素小於 min_pixels 時,會將其進行放大,直到總像素高於 min_pixels

Qwen3.7Qwen3.6Qwen3.5:預設值和最小值均為 65536

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

{列名}.max_pixels

設定輸入映像或視訊框架的最大像素閾值。當輸入映像或視頻的像素在 [min_pixels, max_pixels] 區間內時,模型會按原圖進行識別。當輸入映像像素大於 max_pixels 時,會將映像進行縮小,直到總像素低於 max_pixels

Qwen3.7Qwen3.6Qwen3.5:預設值為 2621440,最大值為 16777216

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

{列名}.total_pixels

限制從視頻中抽取的所有幀的總像素(單幀映像像素 × 總幀數)。如果視頻總像素超過此限制,系統將對視訊框架進行縮放,但仍會確保單幀映像的像素值在 [min_pixels, max_pixels] 範圍內。
對於抽幀數量較多的長視頻,可適當降低此值以減少 Token 消耗和處理時間,但這可能會導致映像細節丟失。

Qwen3.7系列Qwen3.6系列Qwen3.5系列:預設值和最大值均為 819200000,該值對應 800000 個映像 Token(每 32×32 像素對應 1 個映像 Token)。

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

{列名}.cache_control

用於開啟顯式緩衝。

{"type": "ephemeral"}

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

樣本

文本

以下樣本註冊並引用 Flink AI 服務提供的內建模型,對輸入文本進行情感分類。調用樣本 1 複用 MODEL 級參數,調用樣本 2 在調用時指定參數 user-prompt

-- 註冊引用內建模型,不指定 content-type 時預設為 text
CREATE MODEL sentiment_model
INPUT (prompt STRING)
OUTPUT (response STRING)
WITH (
  'provider' = 'openai-compat',
  'task' = 'chat/completions',
  'model' = 'qwen3.6-flash',
  'system-prompt' = '你是一個情感分類模型,輸出標籤:負面、正面、中性'
);

-- 建立源表:類比商品評價資料
CREATE TEMPORARY VIEW input_table(id, content)
AS VALUES 
  (1, '品質很好,面料柔軟親膚,尺碼也很標準,好評'),
  (2, '收到就有線頭,洗了一次嚴重褪色,不值這個價'),
  (3, '衣服已收到,和圖片一致'),
  (4, '穿了兩周起球嚴重,客服還不給退貨,差評'),
  (5, '版型顯瘦,顏色比圖片還好看,已經回購第三件了');

-- 建立結果表
CREATE TEMPORARY TABLE output_table (
  id INT,
  content STRING,
  sentiment STRING
) WITH (
  'connector' = 'print'
);

-- 使用 ML_PREDICT 進行即時推理
-- 調用樣本 1:複用 MODEL 級參數
INSERT INTO output_table
SELECT
  id,
  content,
  response AS sentiment
FROM ML_PREDICT(
  TABLE input_table, 
  MODEL sentiment_model, 
  DESCRIPTOR(content));

-- 調用樣本 2:指定調用級參數
INSERT INTO output_table
SELECT
  id,
  content,
  response AS sentiment
FROM ML_PREDICT(
  TABLE input_table, 
  MODEL sentiment_model, 
  DESCRIPTOR(content),
  MAP['user-prompt', '請用英文回複']);

調用樣本 1 輸出結果:

id

content

sentiment

1

品質很好,面料柔軟親膚,尺碼也很標準,好評

正面

2

收到就有線頭,洗了一次嚴重褪色,不值這個價

負面

3

衣服已收到,和圖片一致

正面

4

穿了兩周起球嚴重,客服還不給退貨,差評

負面

5

版型顯瘦,顏色比圖片還好看,已經回購第三件了

正面

調用樣本 2 輸出結果:

id

content

sentiment

1

品質很好,面料柔軟親膚,尺碼也很標準,好評

Positive

2

收到就有線頭,洗了一次嚴重褪色,不值這個價

Negative

3

衣服已收到,和圖片一致

Positive

4

穿了兩周起球嚴重,客服還不給退貨,差評

Negative

5

版型顯瘦,顏色比圖片還好看,已經回購第三件了

Positive

圖片

以下樣本註冊一個多模態模型,對輸入圖片進行分類。

-- 註冊引用內建模型,指定 content-type 為 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'
);

-- 使用 ML_PREDICT 進行即時推理
INSERT INTO output_table
SELECT
  id,
  content,
  response AS sentiment
FROM ML_PREDICT(
  TABLE input_table, 
  MODEL sentiment_model, 
  DESCRIPTOR(content));

文本 + 單張圖片

以下樣本註冊一個多模態模型,對輸入的文本和圖片進行對話推理。

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)
));         

文本 + 多張圖片(多列)

通過多個 INPUT 列分別傳入每張圖片,content-types 中為每列指定 image_url

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)
));          

文本 + 多張圖片(數組)

通過 ARRAY<STRING> 類型列傳入多張圖片,content-types 中使用 multi_image_urls

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)
)); 

調用時指定參數

樣本 1:指定內容類型參數

-- CREATE MODEL 時未指定 content-type / content-types,預設 content-type = text
CREATE MODEL model_single
INPUT (input STRING)
OUTPUT (content STRING)
WITH (
  'provider' = 'openai-compat',
  'model' = 'qwen3.5-plus',
  'task' = 'chat/completions'
);

-- 調用 1:沿用 MODEL 參數,內容類型為 text
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_text, 
  MODEL model_single, 
  DESCRIPTOR(input)
));

-- 調用 2:調用時指定內容類型為圖片
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_img, 
  MODEL model_single, 
  DESCRIPTOR(input),
  MAP['content-type', 'image_url']
));

樣本 2:指定 user-prompt 及列級參數

-- CREATE MODEL 時設定預設配置(多列模型)
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' = '請描述圖片內容'
);

-- 調用 1:使用預設配置
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_a, MODEL vl_model, DESCRIPTOR(text_input, image_input)
));

-- 調用 2:覆蓋 user-prompt 和列級參數
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_b, MODEL vl_model, DESCRIPTOR(text_input, image_input),
  MAP[
    'user-prompt', '請用英文回答',
    'image_input.min_pixels', '100',
    'image_input.max_pixels', '5000'
  ]
));

-- 調用 3:覆蓋 content-types,改變類型組合(兩列都當文本處理)
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_c, MODEL vl_model, DESCRIPTOR(text_input, image_input),
  MAP['content-types', 'text;text']
));

-- 調用 4:覆蓋 content-types,改變類型組合(翻轉順序)
SELECT content FROM TABLE(ML_PREDICT(
  TABLE source_c, MODEL vl_model, DESCRIPTOR(text_input, image_input),
  MAP['content-types', 'image_url;text']
));