Mendeteksi dan menyamarkan entitas bernama dalam teks menggunakan large language model (LLM). Cukup berikan kolom teks dan daftar jenis entitas—fungsi ini akan mengembalikan teks yang telah disamarkan beserta daftar entitas yang terdeteksi.
Batasan
-
Memerlukan Ververica Runtime (VVR) 11.4 atau lebih baru.
-
Throughput dibatasi oleh kebijakan rate limiting platform layanan model. Ketika lalu lintas mencapai batas akses platform, backpressure terjadi pada Pekerjaan Flink dan AI_MASK menjadi bottleneck. Dalam kasus parah, operator dapat mengalami timeout dan menyebabkan Pekerjaan Flink restart.
Sintaksis
AI_MASK(
MODEL => MODEL <model_name>,
INPUT => <input_column>,
MASK_ENTITIES => <mask_entities>
)
Argumen bernama (seperti di atas) maupun argumen posisional didukung. Lihat Contoh.
Parameter
| Parameter | Tipe Data | Deskripsi |
|---|---|---|
MODEL <model_name> |
MODEL | Nama layanan model yang telah didaftarkan. Untuk informasi selengkapnya, lihat Pengaturan model. Model harus mengembalikan output bertipe VARIANT. |
<input_column> |
STRING | Kolom teks yang akan dianalisis. |
<mask_entities> |
ARRAY\<STRING\> | Jenis entitas yang akan dideteksi dan disamarkan. Parameter ini harus berupa konstanta. |
Output
AI_MASK mengembalikan satu baris per baris input dengan kolom-kolom berikut:
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
masked_text |
STRING | Teks input dengan entitas yang terdeteksi diganti oleh placeholder dalam tanda kurung siku, misalnya [NAME]. |
detected_entities |
ARRAY\<STRING\> | Entitas yang terdeteksi dalam teks input. Setiap elemen merupakan string JSON dengan dua bidang: entity (fragmen teks asli) dan type (label jenis entitas), misalnya {"entity":"Timmo","type":"name"}. |
Contoh
Contoh berikut membuat model Qwen-Plus, memuat data sampel, dan menyamarkan nama orang menggunakan sintaksis argumen posisional maupun bernama.
Data uji
| id | content |
|---|---|
| 1 | Timmo really loves studying. He reads study materials whenever he has free time. |
Pernyataan SQL
CREATE TEMPORARY MODEL general_model
INPUT (`input` STRING)
OUTPUT (`content` VARIANT)
WITH (
'provider' = 'openai-compat',
'task' = 'chat/completions',
'model' = 'qwen-plus'
);
CREATE TEMPORARY VIEW infos(id, content)
AS VALUES (1, 'Timmo really loves studying. He reads study materials whenever he has free time.');
-- Sintaksis argumen posisional
SELECT id, masked_text, detected_entities
FROM infos,
LATERAL TABLE(
AI_MASK(
MODEL general_model,
content,
ARRAY['name']
));
-- Sintaksis argumen bernama
SELECT id, masked_text, detected_entities
FROM infos,
LATERAL TABLE(
AI_MASK(
MODEL => MODEL general_model,
INPUT => content,
MASK_ENTITIES => ARRAY['name']
));
Ganti placeholder berikut dengan nilai aktual:
| Placeholder | Deskripsi |
|---|
Output
| id | masked_text | detected_entities |
|---|---|---|
| 1 | [NAME] really loves studying. He reads study materials whenever he has free time. | [{"entity":"Timmo","type":"name"}] |