AI_EXTRACT mengekstraksi informasi terstruktur dari teks mentah menggunakan large language model (LLM).
Prasyarat
Sebelum menggunakan AI_EXTRACT, daftarkan layanan model terlebih dahulu. Untuk detailnya, lihat Model Settings.
Tipe output model harus berupa VARIANT.
Sintaksis
AI_EXTRACT(
MODEL => MODEL <MODEL NAME>,
INPUT => <INPUT COLUMN NAME>,
EXTRACT_SCHEMA => <EXTRACT SCHEMA>
)
AI_EXTRACT mendukung argumen bernama (seperti di atas) maupun argumen posisional. Lihat Contoh untuk kedua gaya pemanggilan tersebut.
Parameter
| Parameter | Data type | Description |
|---|---|---|
MODEL <MODEL NAME> |
MODEL | Nama layanan model yang telah didaftarkan. |
<INPUT COLUMN NAME> |
STRING | Kolom yang berisi teks mentah tempat informasi akan diekstraksi. |
<EXTRACT_SCHEMA> |
STRING | String JSON yang mendefinisikan bidang-bidang yang akan diekstraksi beserta tipe datanya. Harus berupa konstanta. |
Format EXTRACT_SCHEMA
EXTRACT_SCHEMA menerima objek JSON di mana setiap kunci adalah nama bidang yang akan diekstraksi dan setiap nilai adalah tipe data target:
{"<field_name>": "<data_type>", ...}
Contoh skema:
{"name": "string", "age": "int", "address": "string", "phone": "string"}
Output
| Column | Data type | Description |
|---|---|---|
extracted_json |
STRING | Bidang-bidang yang diekstraksi dalam bentuk string JSON. |
Contoh
Contoh ini mengekstraksi informasi pribadi (nama, usia, alamat, dan nomor telepon) dari kolom teks menggunakan model Qwen.
Langkah 1: Daftarkan model
CREATE TEMPORARY MODEL general_model
INPUT (`input` STRING)
OUTPUT (`content` VARIANT)
WITH (
'provider' = 'openai-compat',
'task' = 'chat/completions',
'model' = 'qwen-plus'
);
Ganti placeholder berikut:
| Placeholder | Description |
|---|
Langkah 2: Panggil AI_EXTRACT
CREATE TEMPORARY VIEW infos(id, description)
AS VALUES (1, 'Xiao Ming is 18 years old and lives in Hangzhou. His phone number is ******.');
-- Named argument style
SELECT id, extracted_json
FROM infos,
LATERAL TABLE(
AI_EXTRACT(
MODEL => MODEL general_model,
INPUT => description,
EXTRACT_SCHEMA => '{"name":"string","phone":"string","address":"string","age":"int"}'));
-- Positional argument style
SELECT id, extracted_json
FROM infos,
LATERAL TABLE(
AI_EXTRACT(
MODEL general_model,
description,
'{"name":"string","phone":"string","address":"string","age":"int"}'));
Output:
| id | extracted_json |
|---|---|
| 1 | {"address":"Hangzhou","age":18,"name":"Xiao Ming","phone":"******"} |
Batasan
-
Hanya didukung oleh mesin komputasi waktu nyata Ververica Runtime (VVR) 11.4 atau yang lebih baru.
-
Trafik dibatasi oleh platform layanan model. Ketika trafik mencapai batas akses platform, tekanan balik (backpressure) terjadi pada operator Flink yang digunakan dalam pernyataan
AI_EXTRACT. Pembatasan laju yang parah dapat memicu timeout dan menyebabkan Flink job melakukan restart.