Detecta e mascara entidades nomeadas em texto usando um modelo de linguagem grande (LLM). Forneça uma coluna de texto e uma lista de tipos de entidade para que a função retorne o texto mascarado e a lista de entidades detectadas.
Limitações
Requer Ververica Runtime (VVR) 11.4 ou posterior.
O uso do service Flink AI (modelos integrados) exige VVR 11.7 ou posterior e a ativação do service Flink AI. Para obter mais detalhes, consulte Flink AI service (built-in models).
A política de limitação de taxa da plataforma de service de modelos restringe o throughput. Se o tráfego atingir o limite de acesso da plataforma, ocorrerá backpressure no job do Flink e o AI_MASK se tornará o gargalo. Em casos graves, os operadores podem expirar e reiniciar o job do Flink.
Sintaxe
AI_MASK(
MODEL => MODEL <model_name>,
INPUT => <input_column>,
MASK_ENTITIES => <mask_entities>
)
Esta função aceita argumentos nomeados (mostrados acima) e posicionais. Consulte Exemplos.
Parâmetros
|
Parâmetro |
Tipo de dados |
Descrição |
|
|
MODEL |
Nome do service de modelo registrado. Para obter mais informações, consulte Model settings. O modelo deve retornar saída do tipo VARIANT. |
|
|
STRING |
Coluna de texto para análise. |
|
|
ARRAY\ |
Tipos de entidade para detecção e mascaramento. Este parâmetro deve ser uma constante. |
Saídas
O AI_MASK retorna uma linha por entrada com as seguintes colunas:
|
Coluna |
Tipo de dados |
Descrição |
|
|
STRING |
Texto de entrada com as entidades detectadas substituídas por placeholders entre colchetes, como |
|
|
ARRAY\ |
Entidades detectadas no texto de entrada. Cada elemento é uma string JSON com dois campos: |
Exemplos
O exemplo abaixo referencia um modelo integrado do Flink, carrega dados de amostra e mascara nomes de pessoas com sintaxe de argumentos posicionais e nomeados.
Dados de teste
|
id |
content |
|
1 |
Timmo really loves studying. He reads study materials whenever he has free time. |
Instrução SQL
CREATE TEMPORARY MODEL general_model
INPUT (`input` STRING)
OUTPUT (`content` VARIANT)
WITH (
'provider' = 'openai-compat',
'task' = 'chat/completions',
'model' = 'qwen3.6-flash'
);
CREATE TEMPORARY VIEW infos(id, content)
AS VALUES (1, 'Timmo really loves studying. He reads study materials whenever he has free time.');
-- Positional argument syntax
SELECT id, masked_text, detected_entities
FROM infos,
LATERAL TABLE(
AI_MASK(
MODEL general_model,
content,
ARRAY['name']
));
-- Named argument syntax
SELECT id, masked_text, detected_entities
FROM infos,
LATERAL TABLE(
AI_MASK(
MODEL => MODEL general_model,
INPUT => content,
MASK_ENTITIES => ARRAY['name']
));
Saída
|
id |
masked_text |
detected_entities |
|
1 |
[NAME] really loves studying. He reads study materials whenever he has free time. |
[{"entity":"Timmo","type":"name"}] |