Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:Annotation intelligente de texte par IA basée sur YAML CDC

Dernière mise à jour :Sep 23, 2026

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.

image

Cette solution couvre les scénarios typiques suivants :

  • Annotation des risques liés aux réclamations clients : utilise AI_COMPLETE pour é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_CLASSIFY pour classer automatiquement les avis ou retours utilisateurs dans des catégories prédéfinies.

  • Masquage des informations sensibles : utilise AI_MASK pour 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 projection du 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

AI_COMPLETE('modelName', input, systemPrompt)

result

Génération de texte générale

AI_CLASSIFY

AI_CLASSIFY('modelName', input, labels)

category, confidence

Classification de texte

AI_TRANSLATE

AI_TRANSLATE('modelName', input, sourceLang, targetLang)

translated_text, detected_language

Traduction de texte

AI_SUMMARIZE

AI_SUMMARIZE('modelName', input, maxLength)

summary

Résumé de texte

AI_SENTIMENT

AI_SENTIMENT('modelName', input)

score, label, confidence

Analyse des sentiments

AI_EXTRACT

AI_EXTRACT('modelName', input, schema)

extracted_json

Extraction d'informations structurées

AI_MASK

AI_MASK('modelName', input, entities)

masked_text, detected_entities

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

Remarque

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=()
}       
Remarque

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

Remarque

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

Remarque

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

  1. 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 .

  2. 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 :

    flink-cdc-pipeline-model-openai-compatible

  3. 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.