Cette rubrique explique comment utiliser les jobs Flink CDC YAML avec des fonctions d'IA pour annoter intelligemment le texte en temps réel lors de l'ingestion de données dans un lac de données.
Architecture de la solution
Les entreprises génèrent chaque jour de grands volumes de données textuelles non structurées, telles que des tickets de service client, des avis utilisateurs et des dossiers de réclamation. Les approches traditionnelles reposent sur une annotation manuelle ou un traitement par lots hors ligne T+1, coûteux, lent et incohérent.
En appelant des fonctions d'IA dans le module Transform d'un job CDC YAML, vous annotez les données en temps réel à mesure qu'elles transitent de Kafka vers le lac de données Paimon, obtenant ainsi une annotation en streaming avec une latence inférieure à la seconde.
Cette solution couvre les scénarios typiques suivants :
Annotation des risques liés aux réclamations clients : utilise
AI_COMPLETEpour évaluer la gravité des réclamations, détecter l'intention d'exposition publique et annoter les risques des tickets de service client selon plusieurs dimensions.Annotation de classification de contenu : utilise
AI_CLASSIFYpour classer automatiquement les avis ou retours utilisateurs dans des catégories prédéfinies.Masquage des informations sensibles : utilise
AI_MASKpour identifier et masquer les informations personnellement identifiables (PII) dans les données avant leur entrée dans le lac de données.
Prérequis
Realtime Compute for Apache Flink est activé et un espace de travail a été créé. Pour plus d'informations, consultez Activer Realtime Compute for Apache Flink.
Le service Flink AI (modèles intégrés) est activé.
Seule la version VVR 11.9 (y compris les éditions en aperçu) et les versions ultérieures du moteur Realtime Compute sont prises en charge.
Une instance Kafka a été créée et un sujet contenant des données textuelles à annoter est prêt.
Limites
Les fonctions d'IA ne peuvent être utilisées que dans l'expression
projectiondu module Transform des jobs CDC YAML.Le débit des fonctions d'IA est soumis aux limites de taux d'Alibaba Cloud Model Studio. Lorsque la limite de taux est atteinte, les jobs Flink peuvent subir une contre-pression ou des redémarrages dus à des délais d'attente dépassés. Pour plus d'informations, consultez la documentation sur les limites de taux .
La version actuelle prend en charge les modèles Model Studio intégrés suivants :
|
Modèle |
Description |
|
qwen3,6-flash |
Génération de texte générale, recommandé pour les scénarios d'annotation |
|
qwen3.6-plus |
Capacité de raisonnement supérieure |
|
qwen3.5-flash |
Génération de texte générale |
|
qwen3,5-plus |
Capacité de raisonnement supérieure |
|
text-embedding-v4 |
Vectorisation de texte |
Référence des fonctions d'IA
Le module Transform de CDC YAML prend en charge les fonctions d'IA suivantes.
|
Fonction |
Signature |
Champs de retour |
Description |
|
AI_COMPLETE |
|
|
Génération de texte générale |
|
|
|
Classification de texte |
|
|
|
|
Traduction de texte |
|
|
|
|
Résumé de texte |
|
|
|
|
Analyse des sentiments |
|
|
|
|
Extraction d'informations structurées |
|
|
|
|
Masquage des informations sensibles |
Utilisez ['field_name'] pour accéder aux champs de retour dans l'expression projection. Par exemple : AI_COMPLETE('mymodel', content, '')['result'].
Scénario 1 : Annotation des risques liés aux réclamations clients
Utilisez AI_COMPLETE pour annoter les risques des tickets de service client selon plusieurs dimensions, notamment le niveau de gravité de la réclamation, l'intention d'exposition publique et la tendance à la diffamation de marque.
Exemple de job
Des fichiers de dépendance supplémentaires et des configurations sont requis pour le déploiement. Pour plus d'informations, consultez la section Déploiement et démarrage.
source:
type: kafka
name: Kafka Source
properties.bootstrap.servers: <YOUR-KAFKA-BROKER>:9092
topic: customer_complaints
value.format: json
scan.startup.mode: earliest-offset
# Output test results to console logs
sink:
type: values
# sink:
# type: paimon
# catalog.properties.metastore: rest
# catalog.properties.uri: <YOUR-DLF-ENDPOINT>
# catalog.properties.warehouse: <YOUR-CATALOG-NAME>
# catalog.properties.token.provider: dlf
# table.properties.deletion-vectors.enabled: true
transform:
- source-table: customer_complaints
projection: >
comment,
AI_COMPLETE('mymodel', comment, '')['result'] as risk_label
pipeline:
parallelism: 2
model:
- name: mymodel
type: openai-compatible
model-name: qwen3.6-flash
system-prompt: 'Prompt:
#You are an e-commerce customer complaint risk assessment expert. Perform objective annotation based on user review content.
#Annotation rules
1. Complaint severity level (choose one): Normal / Dissatisfied / Angry
2. Explicit exposure intent (yes/no): Yes / No
3. Brand defamation tendency (yes/no): Yes / No
#Output (strictly follow this structure, one item per line)
Complaint severity: xxx
Explicit exposure intent: xxx
Brand defamation tendency: xxx
Confidence: 0.xx
Annotation basis: xxx
'
Exemples d'entrée et de sortie
Données d'entrée (format JSON) :
{
"comment": "It broke less than a month after purchase, customer service kept telling me to wait, waited two weeks with no response. If this isn't resolved, I'll post it online to expose you."
}
Données de sortie :
DataChangeEvent{
tableId=customer_complaints,
after=[
The customer called to report that an air conditioner purchased in March 2024...,
"Complaint severity: Angry
Explicit exposure intent: Yes
Brand defamation tendency: Yes
Confidence: 0.95
Annotation basis: If this isn't resolved, I'll post it online to expose you."
],
op=INSERT, meta=()
}
Le type de données des champs de sortie des fonctions d'IA est VARIANT, ce qui facilite l'accès au contenu structuré au format JSON. Si les consommateurs en aval nécessitent un type spécifique (tel que STRING ou INT), utilisez CAST pour une conversion explicite, par exemple CAST(risk_label AS STRING).
Scénario 2 : Annotation de classification de contenu
Utilisez AI_CLASSIFY pour classer automatiquement les avis ou retours utilisateurs dans des catégories prédéfinies.
Exemple de job
Des fichiers de dépendance supplémentaires et des configurations sont requis pour le déploiement. Pour plus d'informations, consultez la section Déploiement et démarrage.
source:
type: kafka
name: Kafka Source
properties.bootstrap.servers: <YOUR-KAFKA-BROKER>:9092
topic: user_reviews
value.format: json
scan.startup.mode: earliest-offset
# Output test results to console logs
sink:
type: values
# sink:
# type: paimon
# catalog.properties.metastore: rest
# catalog.properties.uri: <YOUR-DLF-ENDPOINT>
# catalog.properties.warehouse: <YOUR-CATALOG-NAME>
# catalog.properties.token.provider: dlf
# table.properties.deletion-vectors.enabled: true
transform:
- source-table: user_reviews
projection: >
content,
AI_CLASSIFY('mymodel', content, 'ARRAY[''Product quality'',''After-sales service'',''Logistics issues'',''Price disputes'']')['category'] as category,
AI_CLASSIFY('mymodel', content, 'ARRAY[''Product quality'',''After-sales service'',''Logistics issues'',''Price disputes'']')['confidence'] as confidence
pipeline:
parallelism: 2
model:
- name: mymodel
type: openai-compatible
model-name: qwen3.6-flash
Exemples d'entrée et de sortie
Données d'entrée :
{"content": "The air conditioner is way too noisy. It buzzes as soon as it turns on, making it impossible to sleep."}
Données de sortie :
DataChangeEvent{
tableId=user_reviews,
before=[],
after=[The air conditioner is way too noisy. It buzzes as soon as it turns on, making it impossible to sleep., "Product quality", 0.95],
op=INSERT, meta=()
}
Scénario 3 : Masquage des informations sensibles
Utilisez AI_MASK pour identifier et masquer automatiquement les informations personnellement identifiables (noms, numéros de téléphone et adresses) dans les données entrant dans le lac de données.
Exemple de job
Des fichiers de dépendance supplémentaires et des configurations sont requis pour le déploiement. Pour plus d'informations, consultez la section Déploiement et démarrage.
source:
type: kafka
name: Kafka Source
properties.bootstrap.servers: <YOUR-KAFKA-BROKER>:9092
topic: user_feedbacks
value.format: json
scan.startup.mode: earliest-offset
# Output test results to console logs
sink:
type: values
# sink:
# type: paimon
# catalog.properties.metastore: rest
# catalog.properties.uri: <YOUR-DLF-ENDPOINT>
# catalog.properties.warehouse: <YOUR-CATALOG-NAME>
# catalog.properties.token.provider: dlf
# table.properties.deletion-vectors.enabled: true
transform:
- source-table: user_feedbacks
projection: >
AI_MASK('mymodel', content, 'ARRAY[''name'',''phone number'',''ID number'',''address'']')['masked_text'] as masked_content,
AI_MASK('mymodel', content, 'ARRAY[''name'',''phone number'',''ID number'',''address'']')['detected_entities'] as detected_entities
pipeline:
parallelism: 2
model:
- name: mymodel
type: openai-compatible
model-name: qwen3.6-flash
Exemples d'entrée et de sortie
Données d'entrée :
{"content": "Customer Zhang San, phone number 13812345678, address 88 Jianguo Road, Chaoyang District, Beijing, reported that the refrigerator is not cooling."}
Données de sortie :
DataChangeEvent{
tableId=user_feedbacks,
before=[],
after=["Customer Zhang*, phone number 138****5678, address Chaoyang District, Beijing **, reported that the refrigerator is not cooling.", [
{"type":"name","value":"Zhang San"},
{"type":"phone number","value":"13812345678"},
{"type":"address","value":"88 Jianguo Road, Chaoyang District, Beijing"}
]],
op=INSERT, meta=()
}
Déploiement et démarrage
Connectez-vous à la console Realtime Compute . Créez un job d'ingestion de données CDC YAML et collez la configuration YAML correspondant à votre scénario dans l'éditeur. Pour plus d'informations, consultez Développer un job d'ingestion de données Flink CDC .
-
Téléchargez les fichiers de dépendance supplémentaires. Dans la section Additional Dependencies de l'ébauche du job, téléchargez le package JAR suivant :
Déployez et démarrez le job.
Surveillance et limites de taux
Dans la version actuelle, vous pouvez surveiller l'utilisation des jetons des fonctions d'IA via l'interface Web Flink. Dans le tableau de bord Flink, cliquez sur le job cible et sélectionnez l'onglet Metrics. Dans la liste déroulante Add Metric, sélectionnez la métrique de l'opérateur cible (par exemple, ai_model_completion_tokens) pour afficher la valeur actuelle de la métrique.