WIKI
AI-103 AI Apps and Agents Developer

09 · Analyse de texte et solutions vocales

30 min de lecture Mis à jour le 21 octobre 2026
Sur cette page

Version : 1.1 · Date : 2026-10-21 · Domaine 4 de l'examen : Implement text analysis solutions (10 à 15 %)

En une phrase : pour le texte, on combine des Foundry Tools spécialisés (Azure Language pour les PII et les entités, Azure Translator pour la traduction) et des LLM pilotés par prompt et structured outputs ; pour la voix, Azure Speech transcrit et synthétise, et Voice Live ou les Foundry voice agents font du temps réel une modalité d'agent à part entière.

Vue d'ensemble : texte et voix, quel Foundry Tool, quel modèle, pour quelle sortie

Ce que l'examen demande#

Deux blocs du domaine Implement text analysis solutions, repris mot pour mot du guide d'étude AI-103 (compétences mesurées au 16 avril 2026) :

# Compétence mesurée (guide officiel, en anglais) Section de ce chapitre
Apply language model text analysis
1 Implement solutions to extract entities, topics, summaries, and structured JSON outputs by using generative prompting and Foundry Tools 2
2 Configure detection of sentiment, tone, safety issues, and sensitive content 3
3 Build solutions that translate text by using Azure Translator in Foundry Tools or LLM‑powered translation flows 4
4 Customize language model outputs for domain tasks, such as compliance summarization and domain extraction 5
Implement speech solutions
5 Implement workflows to convert speech to text and text to speech for agentic interactions 6
6 Integrate speech as an agent modality, including custom speech models 7
7 Enable multimodal reasoning from audio inputs 8
8 Translate speech into other languages by using language models and Foundry Tools 9

Le choix général entre un modèle et un Foundry Tool est posé au chapitre 01, les structured outputs et la Responses API au chapitre 05, les guardrails et Content Safety au chapitre 04, le prompt engineering au chapitre 07. Ce chapitre les applique au texte et à la parole.


1. Les bases à maîtriser#

1.1 Foundry Tool ou LLM : la règle de choix#

Un LLM sait extraire des entités, résumer, classer un sentiment ou traduire. Un Foundry Tool spécialisé reste souvent meilleur quand le résultat doit être déterministe, mesurable, bon marché et conforme. À l'examen, la bonne réponse combine souvent les deux : le Foundry Tool pour la partie normée, le LLM pour la partie qui demande de comprendre ou de reformuler.

Tâche de texte : Foundry Tool ou LLM

flowchart TD
    A["Tâche de texte ou de parole"] --> B{"Résultat normé et mesurable ?<br/>PII, entités, langue, transcription"}
    B -- Oui --> T["Foundry Tool<br/>Azure Language, Azure Speech, Azure Translator"]
    B -- Non --> C{"Il faut comprendre, reformuler,<br/>suivre un schéma ou un ton ?"}
    C -- Oui --> L["LLM + prompt + structured outputs"]
    C -- Non --> T
    T --> G["Sortie exploitée par l'application ou l'agent"]
    L --> S["Guardrails sur la sortie du LLM"] --> G

1.2 Ce qui a changé, et que les questions récentes supposent#

Service État au 21/10/2026
Azure Language in Foundry Tools Fonctions core recommandées pour les nouveaux projets : PII detection, Language detection, Prebuilt NER, Custom NER, Text analytics for health. Fonctions legacy (supportées pour l'existant) : Key phrase extraction, Sentiment analysis and opinion mining, Summarization, Entity linking, Custom question answering, CLU, Custom text classification, Orchestration workflow
Fonctions legacy datées Retrait le 31 mars 2029 pour Sentiment analysis and opinion mining, Key phrase extraction, Summarization, Entity linking, CQA, CLU et Custom text classification ; Microsoft oriente les nouveaux projets vers les Foundry Models
Azure Language MCP server (preview) Les capacités d'Azure Language exposées comme outils d'agent, en serveur distant dans le Foundry Tool Catalog ou en serveur local
Azure Translator in Foundry Tools Text translation 2026-06-06 (GA) : choix entre NMT et LLM par requête, adaptive custom translation, tone et gender ; changements incompatibles avec la v3.0 (inputs en requête, value en réponse)
Azure Speech in Foundry Tools Speech to text (real-time, fast, batch), Azure LLM Speech, custom speech, text to speech, custom voice, speech translation, Live Interpreter, Voice Live
Foundry voice agents (preview) Agent kind: voice géré dans Foundry, avec téléphonie intégrée et traçage du pipeline vocal

1.3 Authentification sans clé#

Comme partout dans Foundry, on préfère Microsoft Entra ID aux clés (chapitre 03). Ce qui est propre aux Foundry Tools de ce chapitre :

Service Ce qu'il faut pour Entra ID
Azure Language Custom subdomain obligatoire (les endpoints régionaux ne prennent pas Entra ID) ; rôle Cognitive Services Language Reader (ou Cognitive Services User) ; TextAnalyticsClient(endpoint, credential=DefaultAzureCredential())
Azure Translator Rôle Cognitive Services User ; endpoint personnalisé https://{ressource}.cognitiveservices.azure.com/translator/... ou endpoint global avec l'en-tête Ocp-Apim-ResourceId ; si les réseaux sont restreints (VNet), l'endpoint personnalisé est obligatoire
Azure Speech Custom domain obligatoire (irréversible) et rôle Cognitive Services Speech User ou Cognitive Services Speech Contributor ; SpeechConfig(token_credential=..., endpoint=...) ; le ConversationTranslator ne prend pas en charge Entra ID
Voice Live en mode agent Entra ID uniquement (pas de clé) ; vers un agent d'une autre resource, l'identité managée de Voice Live doit avoir le rôle Foundry User sur la resource cible

2. Extraire entités, sujets, résumés et JSON#

2.1 Avec Azure Language#

Besoin Fonction Azure Language Remarque
Personnes, lieux, organisations, dates… Prebuilt NER Catégories prédéfinies, aucun entraînement
Vos propres catégories (n° de contrat, clause…) Custom NER Modèle entraîné sur vos textes annotés ; fonction core
Données personnelles PII detection Texte, conversations (chat, transcriptions), documents natifs (.pdf, .docx, .txt) ; texte masqué (redacted_text)
Données cliniques Text analytics for health Extraction et étiquetage d'informations médicales
Mots-clés, résumé Key phrase extraction, Summarization (extractive ou abstractive) Legacy, retrait le 31/03/2029 : préférer un LLM pour un nouveau projet
from azure.ai.textanalytics import TextAnalyticsClient
from azure.identity import DefaultAzureCredential

# Endpoint de la resource (custom domain), authentification sans clé
client = TextAnalyticsClient(endpoint="https://{ressource}.cognitiveservices.azure.com/",
                             credential=DefaultAzureCredential())

documents = ["Le client Jean Martin ([email protected], 06 12 34 56 78) conteste la facture F-2026-118."]

for doc in client.recognize_pii_entities(documents, language="fr"):
    if not doc.is_error:
        print(doc.redacted_text)                      # texte avec les PII masquées
        for e in doc.entities:
            print(e.text, e.category, round(e.confidence_score, 2))

for doc in client.recognize_entities(documents, language="fr"):   # Prebuilt NER
    if not doc.is_error:
        print([(e.text, e.category) for e in doc.entities])

2.2 Avec un LLM et les structured outputs#

Pour les sujets, les résumés au format imposé ou une extraction dont le schéma change souvent, on utilise un LLM avec la Responses API et un JSON schema strict : la réponse respecte toujours la forme demandée.

PII masquées, puis JSON strict

import json
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient

project = AIProjectClient(endpoint="https://{ressource}.services.ai.azure.com/api/projects/{project}",
                          credential=DefaultAzureCredential())
openai = project.get_openai_client()

schema = {
    "type": "object",
    "properties": {
        "sujets":     {"type": "array", "items": {"type": "string"}},
        "entites":    {"type": "array", "items": {"type": "object",
                       "properties": {"texte": {"type": "string"}, "type": {"type": "string"}},
                       "required": ["texte", "type"], "additionalProperties": False}},
        "resume":     {"type": "string"},
        "sentiment":  {"type": "string", "enum": ["positif", "neutre", "négatif"]},
    },
    "required": ["sujets", "entites", "resume", "sentiment"],
    "additionalProperties": False,          # obligatoire en mode strict
}

response = openai.responses.create(
    model="gpt-5-mini",                     # nom du model deployment
    instructions="Tu analyses des réclamations clients. Résumé en deux phrases maximum, en français.",
    input=texte_masque,                     # texte déjà passé par la PII detection
    text={"format": {"type": "json_schema", "name": "analyse_reclamation", "strict": True, "schema": schema}},
)
analyse = json.loads(response.output_text)

Structured outputs garantit la forme, pas la vérité : une valeur peut être conforme au schéma et fausse. On valide par des règles métier et des evaluators (chapitre 04).

2.3 Combiner les deux#

Motif Quand
PII detection puis LLM Politique de confidentialité : le modèle ne doit pas voir les données personnelles
NER puis LLM Les entités doivent être normées (catégories stables), le LLM rédige le résumé autour
LLM puis contrôle Extraction libre par LLM, puis guardrail PII filter sur la sortie et règles de validation
Agent + Azure Language MCP server Un agent appelle PII, NER ou la détection de langue comme des outils, à la demande

3. Détecter le sentiment, le ton, les risques et le contenu sensible#

À détecter Solution À savoir
Sentiment (positif, neutre, négatif) Sentiment analysis d'Azure Language : étiquette par document et par phrase, scores de confiance de 0 à 1 ; opinion mining lie le sentiment à un aspect (« le personnel » → positif) Legacy, retrait le 31/03/2029
Sentiment, ton, émotion, ironie LLM avec un champ enum dans le JSON schema (section 2.2) Évaluer sur un jeu annoté avant de remplacer l'ancien service
Problèmes de sécurité (haine, violence, sexuel, automutilation, jailbreak) Guardrails des déploiements et Azure AI Content Safety (chapitre 04) Les catégories et niveaux de gravité sont détaillés au chapitre 04
Contenu sensible en entrée PII detection d'Azure Language (texte, conversation, document), avec masquage Anonymisation par remplacement synthétique : preview
Contenu sensible dans la réponse du modèle Guardrail PII filter (personal data filter) Modes Annotate ou Annotate and Block, réglables par catégorie de PII ; annotations à partir de l'API 2025-01-01-preview

Le PII filter couvre notamment les données personnelles (e-mail, téléphone, adresse), financières (carte, IBAN, SWIFT), les identifiants nationaux et des secrets Azure (connection strings, clés de compte de stockage). En mode Annotate, la réponse contient detected, filtered et redacted.


4. Traduire du texte avec Azure Translator ou un LLM#

4.1 Les fonctions d'Azure Translator#

Fonction Ce qu'elle fait
Text translation 2026-06-06 (GA) Traduction temps réel, choix NMT ou LLM, tone, gender, adaptive custom translation, transliteration
Text translation v3 (GA) Version précédente : dynamic dictionary, prévention de traduction ; SDK et conteneur
Document translation, synchronous Un fichier (seul ou avec un glossaire), structure et format préservés, sans compte de stockage, réponse directe
Document translation, asynchronous Lots de fichiers complexes, conteneurs Blob source et cible, structure et format préservés ; fichiers image en preview (2025-12-01-preview)
Custom Translator Modèle NMT entraîné sur un corpus parallèle et des dictionnaires (phrase ou sentence) ; appelé par son category ID ; réentraînement jusqu'à ~48 h
Adaptive custom translation 5 à 10 000 paires de segments alignés (500 caractères max) : un index bilingue construit en quelques minutes oriente un LLM (terminologie, style) sans entraîner de modèle

4.2 Un appel, trois moteurs#

Azure Translator 2026-06-06 : NMT, Custom Translator ou LLM

Dans la version 2026-06-06, chaque élément de targets choisit son moteur avec deploymentName :

deploymentName Moteur Facturation Options
general (défaut) NMT standard Au caractère source profanityAction, textType (plain ou html)
{categoryID} Modèle Custom Translator Au caractère source —
Nom d'un déploiement LLM (ex. GPT-5.1) LLM Au jeton (entrée et sortie) tone (formal, informal, neutral), gender (female, male, neutral), adaptiveDatasetId, referenceTextPairs (5 paires max)

Règles d'examen :

  • l'option LLM exige une Foundry resource et n'est pas disponible quand Translator est configuré avec un Private Endpoint ;
  • allowFallback (vrai par défaut) bascule sur le système général si le modèle choisi ne prend pas en charge la paire de langues ; à false, le service renvoie une erreur ;
  • limites par requête : 1 000 éléments de 50 000 caractères en NMT, 50 éléments de 5 000 caractères en LLM ;
  • sans language, la langue source est détectée (detectedLanguage dans la réponse).
import requests
from azure.identity import DefaultAzureCredential

url = "https://{ressource}.cognitiveservices.azure.com/translator/text/translate?api-version=2026-06-06"
token = DefaultAzureCredential().get_token("https://cognitiveservices.azure.com/.default").token

body = {"inputs": [{
    "text": "Le médecin est disponible lundi prochain. Voulez-vous prendre rendez-vous ?",
    "language": "fr",
    "targets": [
        {"language": "en"},                                            # NMT (general)
        {"language": "es", "deploymentName": "gpt-51-traduction",      # LLM : ton et genre
         "tone": "formal", "gender": "female"},
    ],
}]}

r = requests.post(url, json=body, headers={"Authorization": f"Bearer {token}"})
for t in r.json()["value"][0]["translations"]:
    print(t["language"], t["text"])

4.3 Un flux de traduction entièrement piloté par LLM#

On peut aussi traduire avec un simple prompt sur un Foundry Model, par exemple pour réécrire dans un registre précis ou traduire et résumer en une étape. C'est le choix pertinent quand la traduction n'est qu'une étape d'un traitement génératif. Pour le volume, la prévisibilité du coût (au caractère) et la constance terminologique (Custom Translator, glossaires), Azure Translator reste la référence. Microsoft conseille de réserver le LLM aux cas qui demandent du ton, du style ou du contexte, et de laisser le trafic de masse sur NMT.


5. Personnaliser les sorties pour un domaine métier#

Exemples typiques : synthèse de conformité (résumer un contrat en signalant les clauses à risque selon une grille interne) et extraction métier (codes produits, numéros de police, clauses de résiliation).

Levier Effet Quand
Instructions (system / developer) Rôle, règles, vocabulaire, format, « réponds “non trouvé” plutôt que d'inventer » Toujours en premier (chapitre 07)
Few-shot 2 à 5 exemples entrée → sortie attendue Format ou style difficile à décrire
Structured outputs Schéma JSON strict, enum pour les valeurs autorisées Sortie consommée par un programme
Grounding / RAG La grille de conformité ou le référentiel est fourni au modèle Règles qui changent, besoin de citations (chapitre 05)
Custom NER (Azure Language) Entités métier extraites de façon stable et mesurée Gros volumes, catégories fixes
Fine-tuning (SFT) Le modèle apprend le format et le ton à partir d'exemples L'invite devient trop longue ou le format n'est pas tenu (chapitre 01)
Evaluations Mesurer la qualité avant et après chaque changement Toujours (chapitre 04)

Remplacer un service legacy (CLU, custom text classification, summarization) par un LLM : construire un jeu de test à partir des données existantes, comparer les deux, puis basculer ; les fonctions legacy restent supportées jusqu'au 31/03/2029.

Instructions (extrait) d'une synthèse de conformité
Tu es analyste conformité. À partir du contrat fourni :
1. Résume l'objet du contrat en 3 phrases maximum.
2. Liste chaque clause de la grille ci-dessous avec : présente / absente / non conforme, et la citation exacte.
3. Si une information manque, écris "non trouvé". N'invente jamais de clause.
Grille : durée, résiliation anticipée, pénalités, protection des données (RGPD), juridiction.

6. Speech to text et text to speech pour les agents#

6.1 Les modes de speech to text#

Speech to text : quel mode pour quel besoin

Mode Points clés
Real-time Speech SDK, Speech CLI ou REST pour audio court ; résultats intermédiaires ; jusqu'à deux canaux transcrits séparément (preview)
Fast transcription Synchrone, plus rapide que le temps réel, latence prévisible ; fichiers de moins de 2 h et 300 Mo ; forme display uniquement (ponctuation, majuscules) ; modèles : Azure Transcribe (défaut), Azure LLM Speech, MAI-Transcribe-2
Batch transcription Asynchrone depuis des URL ou un conteneur Azure, résultats stockés ; de quelques minutes à quelques heures ; un custom speech model y est utilisable sans endpoint hébergé
Azure LLM Speech Mode enhanced de la fast transcription (enhancedMode.enabled) : tâches transcribe ou translate, custom prompting, multilingue par défaut ; audio de moins de 5 h et 500 Mo
Custom speech Modèle de base + vos données (texte du domaine, audio annoté) ; qualité mesurée par le WER ; déployé sur un endpoint personnalisé
Phrase list Personnalisation légère à l'exécution (noms propres, produits), sans entraînement

Démarche recommandée par Microsoft : mesurer le word error rate du modèle de base sur des enregistrements réels, puis ajouter une phrase list, et n'entraîner un custom speech model que si le WER reste trop élevé. Un modèle déployé reste figé jusqu'à ce que vous le mettiez à jour, même quand un nouveau modèle de base sort.

6.2 Le text to speech#

  • Standard voices : voix neuronales prêtes à l'emploi, dont des voix multilingues et HD ; Voice Live annonce plus de 600 voix sur plus de 150 locales.
  • SSML (Speech Synthesis Markup Language) : régler le débit, la hauteur, les pauses, la prononciation, le style.
  • Custom voice et text-to-speech avatar : voir la section 7.5.
import azure.cognitiveservices.speech as speechsdk
from azure.identity import DefaultAzureCredential

# Entra ID : custom domain obligatoire, rôle Cognitive Services Speech User
config = speechsdk.SpeechConfig(token_credential=DefaultAzureCredential(),
                                endpoint="https://{custom-domain}.cognitiveservices.azure.com/")
config.speech_recognition_language = "fr-FR"

# Speech to text depuis le micro, avec une phrase list
recognizer = speechsdk.SpeechRecognizer(speech_config=config)
phrases = speechsdk.PhraseListGrammar.from_recognizer(recognizer)
phrases.addPhrase("Contoso")
phrases.addPhrase("Foundry IQ")
result = recognizer.recognize_once_async().get()
print(result.text)

# Text to speech avec SSML
ssml = """<speak version='1.0' xml:lang='fr-FR' xmlns='http://www.w3.org/2001/10/synthesis'>
  <voice name='en-US-AvaMultilingualNeural'>
    Votre dossier est validé. <break time='300ms'/> <prosody rate='-10%'>Avez-vous une autre question ?</prosody>
  </voice>
</speak>"""
synthesizer = speechsdk.SpeechSynthesizer(speech_config=config)
synthesizer.speak_ssml_async(ssml).get()

7. La voix comme modalité d'agent#

7.1 Cascade ou temps réel#

Agent vocal : pipeline en cascade ou temps réel géré

Cascade (STT → LLM → TTS) Voice Live API Foundry voice agent (preview)
Qui orchestre Vous Le service (STT, modèle, TTS en un flux) Le service, configuré comme un agent kind: voice
Latence perçue La plus élevée Faible Faible
Modèles Tout modèle de texte gpt-realtime, GPT-5, GPT-4.1, GPT-4o, Phi… gérés par le service Speech-to-speech (gpt-realtime) ou modèles de texte, managed ou self_deployed
Extras À coder Noise suppression, echo cancellation, détection d'interruption et de fin de tour, avatar, function calling Idem + téléphonie intégrée (Teams Phone, Twilio), traçage du pipeline vocal, enregistrements optionnels
Connexion Vos API WebSocket (serveur à serveur), API compatible avec la Realtime API Endpoint du project : /api/projects/{project}/agents/{agent}/endpoint/protocols/voice?api-version=v1

7.2 Voice Live API#

  • Entièrement géré : pas de modèle audio à déployer, pas de capacité à planifier.
  • Personnalisation : phrase list ou custom speech en entrée, custom voice en sortie.
  • Tarification par niveau Pro, Standard ou Lite, déterminé par le modèle choisi (vous ne choisissez pas le niveau) ; repères : environ 10 jetons par seconde d'audio en entrée et 20 en sortie pour les modèles Azure OpenAI.
  • Mode agent : Voice Live se connecte à un agent Foundry existant (agent_name, project_name, version et conversation_id optionnels) ; les instructions et les outils restent dans l'agent. Entra ID obligatoire pour ce mode.
  • Variantes de données : gpt-realtime-datazone et -regional gardent invites et réponses dans la zone de données ou la région de la resource.
sequenceDiagram
    actor U as Utilisateur
    participant C as Client (navigateur, téléphone)
    participant V as Voice Live
    participant A as Agent Foundry
    participant T as Outil (fonction, MCP)
    C->>V: Ouvre la session (jeton Entra ID)
    V-->>C: session.updated
    U->>C: Parle
    C->>V: Audio en continu
    V->>V: Réduction de bruit, fin de tour
    V->>A: Tour utilisateur
    A->>T: Appel d'outil
    T-->>A: Résultat
    A-->>V: Réponse
    V-->>C: Audio de synthèse en continu
    U->>C: Interrompt
    C->>V: Nouvel audio
    V-->>C: Réponse coupée, nouveau tour

7.3 GPT Realtime API (Azure OpenAI)#

Connexion Usage Latence indicative
WebRTC Applications clientes (web, mobile) : le choix par défaut ~100 ms
WebSocket Serveur à serveur, middleware ~200 ms
SIP Téléphonie : centres d'appels, SVI Variable
  • Endpoint GA /openai/v1/realtime, sans paramètre api-version daté.
  • Types de session : realtime (agent vocal), transcription (transcription en flux), et une translation session sur /openai/v1/realtime/translations.
  • Modèles de transcription utilisables dans la session : gpt-4o-transcribe, gpt-4o-mini-transcribe, whisper-1 (et gpt-4o-transcribe-diarize dans Voice Live), avec un prompt de contexte (« termes attendus : Azure, Foundry »). Le Model retirement schedule annonce le retrait des modèles Azure OpenAI whisper, tts et tts-hd (version 001) le 15/12/2026 : préférer les modèles gpt-4o-* pour un nouveau projet.
  • L'API n'est pas faite pour se connecter directement aux appareils : un client (WebRTC, téléphonie) termine le flux audio. Pas de clé longue durée dans le code du navigateur.

7.4 Foundry voice agents (preview)#

  • On crée un nouvel agent avec Voice comme interaction mode (VoiceAgentDefinition en SDK) : un agent texte existant ne peut pas changer de mode ; on peut le réutiliser comme subagent (même project, pas dans un project isolé par VNet).
  • model_type : managed (le service héberge le modèle) ou self_deployed (votre déploiement).
  • Le definition regroupe instructions, voix (audio.output.voice), transcription, turn detection, réduction de bruit, greeting.
  • store vaut false par défaut : à true, transcript, événements et audio brut sont conservés ensemble (consentement, rétention à prévoir).
  • REST : en-tête Foundry-Features: VoiceAgents=V1Preview ; jeton Entra pour https://ai.azure.com/.default.
import os
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import RealtimeServerEventError, RealtimeServerEventSessionUpdated
from azure.identity import DefaultAzureCredential

# pip install "azure-ai-projects[voice]>=2.7.0" azure-identity
with DefaultAzureCredential() as cred, AIProjectClient(endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
                                                       credential=cred, allow_preview=True) as project:
    with project.beta.voice_agents.realtime.connect(agent_name="agent-accueil-vocal", api_version="v1") as conn:
        while True:                                   # attendre que la session soit prête avant d'envoyer l'audio
            event = conn.recv(timeout=45)
            if isinstance(event, RealtimeServerEventError):
                raise RuntimeError(event.error.message)
            if isinstance(event, RealtimeServerEventSessionUpdated):
                print("Session vocale prête")
                break

7.5 Custom speech et custom voice#

L'examen cite explicitement les custom speech models (reconnaissance) ; la custom voice (synthèse) en est le pendant.

Custom speech (entrée) Custom voice (sortie)
But Mieux reconnaître le jargon, les accents, le bruit Une voix unique pour la marque ou un personnage
Données Textes du domaine, audio + transcriptions de référence, prononciations Enregistrements du voice talent + scripts
Mesure WER avant et après Écoute, tests dans le playground
Accès Ouvert Limited Access (formulaire aka.ms/customneural)
Coût Entraînement (modèles de base depuis octobre 2023), hébergement de l'endpoint, usage Entraînement, hébergement, usage
Dans Voice Live Phrase list ou custom speech model en entrée Custom voice en sortie, facturée en plus

Voix de synthèse : standard, lite, professional, personal

Pour une professional voice, le voice talent enregistre d'abord une déclaration de consentement ; pour une personal voice, le service génère un speakerProfileId à partir de ce consentement et de 5 à 90 secondes d'audio, et la voix parle environ une centaine de langues avec détection automatique. Le disclosure (dire à l'auditeur qu'il entend une voix de synthèse) fait partie des obligations d'IA responsable.


8. Raisonner sur des entrées audio#

Approche Ce que fait le modèle Exemple
Audio completions (gpt-4o-audio-preview, gpt-4o-mini-audio-preview) Reçoit de l'audio dans /chat/completions et répond en texte, en audio ou les deux « Décris l'appel et résume la satisfaction du client »
Realtime API, Voice Live Écoute et répond en continu, appelle des outils Agent vocal
Azure LLM Speech Transcription ou traduction guidée par un prompt Transcrire une réunion avec le vocabulaire du projet
Transcription puis LLM Le LLM raisonne sur le texte transcrit Analyse de sentiment d'appels archivés (batch)
import base64
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://ai.azure.com/.default")
client = AzureOpenAI(azure_endpoint="https://{ressource}.openai.azure.com/", api_version="2025-01-01-preview",
                     azure_ad_token_provider=token_provider)

with open("appel-client.wav", "rb") as f:
    audio_b64 = base64.b64encode(f.read()).decode("utf-8")

completion = client.chat.completions.create(
    model="gpt-4o-mini-audio-preview",           # nom du déploiement audio
    modalities=["text"],                         # réponse texte seulement
    messages=[{"role": "user", "content": [
        {"type": "text", "text": "Résume cet appel et indique si le client est satisfait."},
        {"type": "input_audio", "input_audio": {"data": audio_b64, "format": "wav"}},
    ]}],
)
print(completion.choices[0].message.content)

Piège : Microsoft indique que le système de content filtering ne s'applique pas aux invites et réponses traitées par les modèles audio comme Whisper. Si le contenu doit être filtré, transcrire puis appliquer Content Safety ou les guardrails au texte. En streaming avec l'audio en sortie, seul le format pcm16 est accepté.


9. Traduire la parole#

Traduire la parole : quatre chemins

Chemin Points clés
Speech translation (Speech SDK, TranslationRecognizer) Parole → texte traduit et parole de synthèse ; deux langues cibles directement dans un appel ; language identification jusqu'à 10 langues candidates ; custom translation (category ID de Custom Translator) avec une resource multiservice
Live Interpreter Langue d'entrée détectée en continu, changement de langue dans la même session, voix naturelle qui garde le style de l'orateur, personal voice possible (accès à demander)
Azure LLM Speech, task: translate Fichiers préenregistrés, une langue cible (targetLanguage) parmi une liste fermée
GPT Realtime, translation session Traduction continue sur /openai/v1/realtime/translations
Transcription puis LLM Traduire et reformuler (registre, résumé) en une étape générative
import azure.cognitiveservices.speech as speechsdk
from azure.identity import DefaultAzureCredential

cfg = speechsdk.translation.SpeechTranslationConfig(token_credential=DefaultAzureCredential(),
                                                    endpoint="https://{custom-domain}.cognitiveservices.azure.com/")
cfg.speech_recognition_language = "fr-FR"
cfg.add_target_language("en")
cfg.add_target_language("de")                       # deux langues cibles dans le même appel

recognizer = speechsdk.translation.TranslationRecognizer(translation_config=cfg)
result = recognizer.recognize_once_async().get()
print(result.text, result.translations["en"], result.translations["de"])

Au-delà de deux langues cibles, il faut une Foundry resource (multiservice) ou un service de traduction séparé, et chaque langue au-delà de la deuxième est facturée au caractère (tarif Translator). Piège : la synthèse vocale de la traduction (voice_name + événement synthesizing) ne fonctionne qu'avec une seule langue cible.


10. Labs conseillés#

Dans un abonnement de test, avec une Foundry resource et un project dédiés. Coût : jetons des modèles, caractères traduits, heures d'audio transcrites ou synthétisées, minutes de Voice Live ; un custom speech model facture aussi l'entraînement et l'endpoint hébergé. Supprimer le groupe de ressources à la fin.

  1. PII puis JSON
    1. Dans Foundry, ouvrir le playground PII detection (texte), tester une réclamation contenant e-mail et téléphone.
    2. Exécuter le code de la section 2.1, puis celui de la section 2.2 sur le texte masqué.
    3. Attendu : redacted_text sans données personnelles, JSON toujours conforme au schéma, même avec un texte inhabituel.
  2. Sentiment : service legacy contre LLM
    1. Analyser 10 avis clients avec Sentiment analysis (playground) puis avec le schéma de la section 2.2.
    2. Attendu : accord sur les cas simples, le LLM capte mieux l'ironie et le ton ; noter les écarts dans un tableau.
  3. Translator : NMT, LLM et tonalité
    1. Déployer un modèle de type GPT dans la Foundry resource.
    2. Envoyer la requête de la section 4.2 avec une cible general et une cible LLM tone: formal.
    3. Attendu : en-têtes de facturation au caractère pour NMT, au jeton pour le LLM ; formulation plus soutenue avec le LLM.
  4. Transcription : fast, LLM Speech, phrase list
    1. Transcrire le même enregistrement avec la fast transcription par défaut, puis avec LLM speech dans le playground Speech to text, en ajoutant des instructions.
    2. En temps réel, ajouter une phrase list avec des noms propres mal reconnus.
    3. Attendu : les noms propres sont mieux reconnus ; la sortie LLM speech suit les consignes.
  5. Agent vocal
    1. Créer un agent avec l'interaction mode Voice (preview), une voix standard, un greeting.
    2. Lui parler depuis le portail, l'interrompre en cours de réponse.
    3. Attendu : la réponse s'arrête à l'interruption ; le traçage montre turn detection, appel du modèle et audio de sortie.

11. Pièges d'examen#

Situation dans la question Réponse attendue Pourquoi
Masquer les données personnelles avant de les envoyer à un LLM PII detection d'Azure Language (redacted_text) Fonction core, déterministe ; le guardrail PII filter agit sur la sortie du modèle
Empêcher le modèle de répondre avec des données personnelles Guardrail PII filter en Annotate and Block Il analyse la sortie du LLM
Extraire des catégories métier fixes à très gros volume Custom NER Core, entraîné sur vos annotations, mesurable
Un nouveau projet de sentiment analysis ou de summarization LLM (Foundry Models) de préférence Fonctions legacy, retrait le 31/03/2029
Garantir une sortie JSON exploitable par le code Structured outputs (json_schema, strict: true, additionalProperties: false) Le JSON mode simple ne garantit pas le schéma
Traduire en formel et au féminin Translator 2026-06-06 avec un déploiement LLM (tone, gender) Options réservées au moteur LLM
Terminologie maison sans entraîner de modèle Adaptive custom translation (adaptiveDatasetId ou referenceTextPairs) Index construit en minutes, pas de réentraînement
Modèle de traduction dédié entraîné sur un gros corpus parallèle Custom Translator, appelé par category ID Entraînement et déploiement complets
Translator derrière un Private Endpoint, option LLM en échec LLM non disponible avec un Private Endpoint Limite documentée
Translator en réseau restreint : l'endpoint global échoue Utiliser l'endpoint personnalisé Obligatoire avec les VNet
Traduire un PDF en gardant la mise en page, un seul fichier, sans stockage Document translation synchronous Le mode batch exige des conteneurs Blob
Entra ID refusé par le Speech SDK Activer le custom domain et donner Cognitive Services Speech User Prérequis d'Entra pour Speech
Transcrire 10 000 enregistrements d'appels archivés Batch transcription Asynchrone, depuis le stockage
Transcrire au plus vite un fichier de 40 minutes Fast transcription Synchrone, moins de 2 h et 300 Mo
Jargon médical mal reconnu malgré une phrase list Custom speech model, mesuré par le WER Adaptation du modèle de base
Agent vocal à faible latence sans orchestrer STT, LLM et TTS Voice Live ou Foundry voice agent Pipeline géré, interruptions, fin de tour
Brancher Voice Live sur un agent Foundry avec une clé API Impossible : Entra ID obligatoire en mode agent Clés non prises en charge
Application web de voix en temps réel avec la Realtime API WebRTC Latence la plus faible côté client
Raccorder des appels téléphoniques à la Realtime API SIP Intégration téléphonie
Une voix de marque unique Professional voice (Limited Access, consentement du voice talent) Accès sur formulaire
Laisser chaque utilisateur cloner sa propre voix dans l'application Personal voice (5 à 90 s + consentement, Limited Access) Cas d'usage restreints
Résumer un appel directement depuis le fichier audio Audio completions (input_audio) ou transcription puis LLM Raisonnement multimodal
Filtrer le contenu nuisible d'un flux traité par Whisper Transcrire puis filtrer le texte Le content filtering ne s'applique pas aux modèles audio comme Whisper
Interprète de réunion qui suit les changements de langue Live Interpreter Langue détectée en continu
Sous-titres traduits en deux langues en un seul appel Speech translation (deux langues cibles) Au-delà, plusieurs ressources ou services

12. Scénarios d'entraînement#

1. Un assureur reçoit 50 000 e-mails de réclamation par jour. Il veut un JSON avec le type de sinistre, le n° de police, un résumé et le sentiment, sans exposer les données personnelles au modèle.

PII detection d'Azure Language sur chaque e-mail, puis un LLM avec structured outputs (schéma strict, enum pour le sentiment). Le n° de police, catégorie métier stable, peut venir d'un Custom NER. Evaluations sur un échantillon annoté.

2. Une équipe utilise Key phrase extraction et Summarization d'Azure Language. Doit-elle tout réécrire demain ?

Non : ces fonctions legacy restent supportées jusqu'au 31 mars 2029. Planifier la migration vers des Foundry Models : jeu de test, comparaison, bascule. Les nouveaux projets partent directement sur un LLM.

3. Un site de e-commerce traduit ses fiches produits en 12 langues ; le service marketing veut un ton informel en espagnol et la terminologie maison partout.

Translator 2026-06-06 : NMT (general) pour le volume, cible LLM avec tone: informal pour l'espagnol, et adaptive custom translation (adaptiveDatasetId) pour la terminologie. Vérifier que la resource n'est pas derrière un Private Endpoint, sinon l'option LLM est indisponible.

4. Un cabinet juridique veut traduire des contrats Word en gardant la mise en page, un document à la fois, avec son glossaire.

Document translation synchronous avec un fichier de glossaire : pas de stockage Blob, structure préservée.

5. Un centre d'appels veut des transcriptions et une analyse de satisfaction de tous les appels de la veille.

Batch transcription depuis le conteneur d'enregistrements, puis un LLM avec un schéma JSON (sentiment, motif, résolution). Masquer les PII des transcriptions (PII detection en mode conversation).

6. Un hôpital constate que les noms de médicaments sont mal transcrits par la dictée vocale.

Mesurer le WER sur de vrais enregistrements ; ajouter une phrase list ; si insuffisant, entraîner un custom speech model avec le vocabulaire médical et des audios annotés, puis le déployer sur un endpoint personnalisé.

7. Une banque veut un agent vocal de support : faible latence, interruptions naturelles, accès aux outils de son agent texte existant, appels téléphoniques entrants.

Un Foundry voice agent (preview) avec téléphonie intégrée (Teams Phone ou Twilio), l'agent texte existant réutilisé comme subagent dans le même project ; ou, pour une solution GA, Voice Live connecté à l'agent texte (Entra ID obligatoire).

8. Une application mobile de voyage doit traduire en direct une conversation entre deux personnes qui changent de langue.

Live Interpreter : pas de langue d'entrée à fixer, changement de langue géré, voix naturelle ; la personal voice demande un accès sur formulaire.

9. Un éditeur veut que sa mascotte ait une voix unique dans son assistant.

Professional voice (custom voice) : demande d'accès Limited Access, déclaration de consentement du voice talent, 300 à 2 000 phrases enregistrées, déploiement sur un endpoint ; informer les utilisateurs qu'il s'agit d'une voix de synthèse.

10. Un développeur web veut connecter son navigateur à gpt-realtime pour une démo vocale.

WebRTC (latence la plus faible côté client), endpoint GA /openai/v1 ; ne pas mettre de clé longue durée dans le code du navigateur.


13. Pour aller plus loin#

  • Azure Language agents (preview) : Intent Routing agent et Exact Question Answering agent pour des réponses mot pour mot aux questions critiques, avec supervision humaine.
  • Conteneurs : Sentiment analysis, Language detection, Key phrase extraction, Custom NER, Text analytics for health, Summarization et PII existent en conteneurs Docker pour garder les données sur site ; Speech et Translator aussi.
  • Text-to-speech avatar : vidéo d'un avatar photoréaliste synchronisée avec la voix, en temps réel ou en lot ; l'avatar personnalisé est en Limited Access.
  • Pronunciation assessment : retour sur la précision et la fluidité de prononciation, pour l'apprentissage des langues.
  • Video translation et captioning : sous-titres synchronisés, filtres d'injures, résultats partiels.
  • Microsoft Translator Pro : application mobile de traduction parole à parole, avec des langues utilisables hors ligne.

14. Fiche à retenir#

  • Foundry Tool pour le normé (PII, NER, langue, traduction de masse, transcription) ; LLM pour comprendre et reformuler ; souvent les deux.
  • Azure Language core : PII, Language detection, Prebuilt NER, Custom NER, Text analytics for health.
  • Legacy, retrait 31/03/2029 : Sentiment/opinion mining, Key phrases, Summarization, Entity linking, CQA, CLU, Custom text classification.
  • Structured outputs : text.format json_schema, strict: true, additionalProperties: false ; la forme, pas la vérité.
  • PII : PII detection (entrée, redacted_text) vs guardrail PII filter (sortie, Annotate / Annotate and Block).
  • Translator 2026-06-06 : deploymentName = general (NMT, au caractère), {categoryID} (Custom Translator), LLM (au jeton, tone, gender, adaptive).
  • LLM dans Translator : Foundry resource requise, pas avec un Private Endpoint, 50 éléments de 5 000 caractères.
  • Document translation : sync (un fichier + glossaire, sans Blob) ou async (Blob source et cible).
  • STT : real-time (flux), fast (synchrone, < 2 h et 300 Mo), batch (asynchrone, stockage), LLM Speech (enhanced, prompt, translate).
  • Custom speech : WER, endpoint personnalisé ; d'abord une phrase list.
  • Speech + Entra : custom domain et Cognitive Services Speech User ; SpeechConfig(token_credential=…, endpoint=…).
  • Voice Live : STT + modèle + TTS gérés, bruit, écho, fin de tour ; mode agent = Entra ID ; niveaux Pro, Standard, Lite selon le modèle.
  • Foundry voice agent (preview) : kind: voice, managed ou self_deployed, téléphonie, store false par défaut.
  • Realtime API : WebRTC (client), WebSocket (serveur), SIP (téléphonie) ; endpoint /openai/v1.
  • Custom voice : Limited Access, consentement ; professional (300 à 2 000 phrases), personal (5 à 90 s), lite (démo).
  • Audio en entrée : input_audio (audio completions) ; pas de content filtering sur les modèles audio comme Whisper.
  • Traduction de la parole : Speech translation (2 cibles, 10 langues candidates), Live Interpreter, LLM Speech translate, Realtime translation session.

Références#

Toutes lues le 21/10/2026 sur Microsoft Learn :

Sur cette page
Échap

Tape au moins 2 lettres. Plusieurs mots : tous doivent apparaître.