Utilisez la transcription en temps réel lorsque votre application doit obtenir du texte à partir d’un microphone, d’un appel ou d’un autre flux audio en direct, sans réponse vocale de l’assistant. Le modèle recommandé renvoie des deltas de transcription au fil de la réception de la parole, puis une transcription finale lorsque votre application valide chaque tour de parole audio.
Commencez avec gpt-live-transcribe. Utilisez la transcription de fichiers si votre audio est déjà enregistré, ou consultez la vue d’ensemble de la transcription pour comparer les workflows.
Créez une session de transcription
Créez une session avec type: "transcription" et sélectionnez gpt-live-transcribe. Établissez la connexion via WebSocket pour les pipelines audio côté serveur ou via WebRTC pour l’audio dans le navigateur.
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 24000
},
"transcription": {
"model": "gpt-live-transcribe"
},
"turn_detection": null
}
}
}
}Cet exemple utilise de l’audio PCM à 24 kHz et désactive la détection automatique des tours de parole afin que vous puissiez valider explicitement chacun d’eux. Pour consulter l’ensemble des paramètres de session, reportez-vous à la référence des sessions Realtime.
Envoyez l’audio en streaming
Envoyez des blocs audio avec input_audio_buffer.append :
ws.send(
JSON.stringify({
type: "input_audio_buffer.append",
audio: base64Pcm16,
})
);Lorsque la détection automatique des tours de parole est désactivée, validez le tampon pour terminer un tour de parole audio :
ws.send(
JSON.stringify({
type: "input_audio_buffer.commit",
})
);Pour laisser le serveur détecter et valider les limites des tours de parole, configurez plutôt la détection de l’activité vocale.
Gérez les événements de transcription
Écoutez les deltas de transcription incrémentaux et les événements de fin de transcription :
ws.on("message", (data) => {
const event = JSON.parse(data);
if (event.type === "conversation.item.input_audio_transcription.delta") {
process.stdout.write(event.delta);
}
if (event.type === "conversation.item.input_audio_transcription.completed") {
console.log("\nFinal transcript:", event.transcript);
}
});Un événement delta contient le texte de transcription nouvellement disponible :
{
"type": "conversation.item.input_audio_transcription.delta",
"item_id": "item_003",
"content_index": 0,
"delta": "Hello,"
}
Un événement de fin de transcription contient la transcription finale de l’élément validé :
{
"type": "conversation.item.input_audio_transcription.completed",
"item_id": "item_003",
"content_index": 0,
"transcript": "Hello, how are you?"
}
L’ordre des événements de fin de transcription provenant de différents tours de parole n’est pas garanti. Utilisez item_id pour associer les événements de transcription aux éléments d’entrée validés.
Ajoutez du contexte à la transcription
Ajoutez du contexte lorsque l’audio contient du vocabulaire spécialisé ou que plusieurs langues sont attendues. Envoyez un nouvel événement session.update pour modifier la configuration de la transcription au cours d’une session existante.
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 24000
},
"transcription": {
"model": "gpt-live-transcribe",
"prompt": "A customer support call about a premium plan and account AC-42.",
"keywords": ["premium plan", "AC-42", "billing"],
"languages": ["en", "fr"],
"delay": "low"
},
"turn_detection": null
}
}
}
}- Utilisez
promptpour décrire l’enregistrement ou son contexte. - Utilisez
keywordspour indiquer les noms de produits, les acronymes et les autres termes exacts susceptibles d’apparaître dans l’audio. - Utilisez
languagespour indiquer les langues attendues en entrée.
Les formats de codes de langue pris en charge comprennent :
- Les codes ISO 639-1, tels que
en,esetfr. - Certains codes ISO 639-3, tels que
eng,spa,yueetcmn. - Les codes de variantes régionales de
zh, tels quezh-cn,zh-twetzh-hk.
La Realtime API rejette les codes de langue non pris en charge ou mal formatés.
Les mots-clés servent d’indications ; leur présence dans la sortie n’est pas obligatoire. Gardez chaque mot-clé sur une seule ligne et n’incluez ni <, ni >, ni retour chariot, ni saut de ligne. La Realtime API rejette la mise à jour de la session si un mot-clé contient l’un de ces caractères ou si prompt dépasse la limite de longueur du modèle.
gpt-live-transcribe utilise languages à la place du champ au singulier language. N’envoyez pas les deux.
Transcrivez un tour de parole validé
Utilisez gpt-transcribe dans une session Realtime uniquement si vous avez spécifiquement besoin que la transcription commence après la validation d’un tour de parole audio ou que la sortie indique les langues détectées. Ce workflow spécialisé nécessite une connexion WebSocket.
Lorsque gpt-transcribe transcrit l’audio d’entrée dans une session de la Realtime API ou s’exécute dans une session dédiée à la transcription, il utilise automatiquement les tours de parole déjà transcrits comme contexte.
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 24000
},
"transcription": {
"model": "gpt-transcribe"
},
"turn_detection": null
}
}
}
}Ajoutez de l’audio au tampon et envoyez input_audio_buffer.commit. Le modèle peut alors émettre des deltas de transcription avant l’événement final de fin de transcription. Cet événement comprend également les langues détectées :
{
"type": "conversation.item.input_audio_transcription.completed",
"item_id": "item_003",
"content_index": 0,
"transcript": "Bonjour, pouvez-vous m'entendre ?",
"languages": [{ "code": "fr" }]
}
Lorsque gpt-transcribe ne peut pas prédire la langue de manière fiable, languages est un tableau vide. gpt-live-transcribe ne renvoie pas de prédictions des langues détectées.
Ajustez la latence et la précision
La transcription en streaming implique un compromis entre latence et qualité de transcription. Un délai plus court peut permettre d’obtenir du texte partiel plus tôt. Un délai plus long donne au modèle davantage de contexte audio avant qu’il n’émette du texte et peut réduire le taux d’erreur sur les mots.
Commencez par définir audio.input.transcription.delay et effectuer des tests avec vos données audio réelles. Voici quelques valeurs de départ utiles :
minimalpour les interactions les plus sensibles à la latence ;lowpour des sous-titres en direct à faible latence ;mediumpour un compromis équilibré entre latence et précision ;highlorsque la précision compte davantage que l’affichage immédiat ;xhighlorsque votre workflow peut tolérer le délai le plus long pour bénéficier de davantage de contexte.
Le délai exact en millisecondes peut varier selon la configuration du modèle. Mesurez donc les performances avec des données audio représentatives, sans supposer que chaque niveau correspond à un délai fixe.
Ne choisissez pas un réglage uniquement à partir de données audio synthétiques. Effectuez des tests représentatifs avec différents microphones, de l’audio téléphonique, des accents, du bruit de fond, une alternance entre plusieurs langues, du vocabulaire métier et des sessions longues.
Gérez les scores de confiance, les horodatages et les étiquettes de locuteur
gpt-live-transcribe ne renvoie ni horodatages au niveau des mots, ni étiquettes de locuteur, ni scores de confiance de transcription. Si votre application nécessite des horodatages ou des étiquettes de locuteur, utilisez un modèle de transcription de fichiers compatible ou ajoutez une solution de repli dans votre application.
Liste de vérification pour la production
- Définissez une latence cible et un seuil de précision avant d’ajuster les paramètres.
- Effectuez des tests avec des données audio réelles issues de la production, et pas seulement avec des échantillons sans bruit.
- Testez chaque langue cible.
- Incluez des nombres, des dates, des montants monétaires, des adresses e-mail, des noms de produits et des termes métier dans votre jeu d’évaluation.
- Suivez les transcriptions vides, tronquées et retardées séparément du taux d’erreur sur les mots.
- Définissez comment votre interface doit réviser le texte partiel lorsque des deltas ultérieurs corrigent le texte précédent.
- Utilisez
item_idpour ordonner et rapprocher les transcriptions finales. - Prévoyez une solution de repli pour les horodatages, les étiquettes de locuteur ou les champs de confiance non pris en charge.
Guides connexes
Comparez les sessions d’agent vocal, de traduction et de transcription.
Traduisez la parole en direct avec une session de traduction dédiée.
Transmettez de l’audio brut en continu via un pipeline multimédia côté serveur.
Configurez la détection des tours de parole pour les flux audio en direct.