Skip to main content
Ceci est un notebook interactif. Vous pouvez l’exécuter localement ou utiliser les liens suivants :
Ce notebook vous montre comment utiliser Weave pour journaliser et tracer l’audio généré par les API audio d’OpenAI, afin d’inspecter les prompts, les sorties audio et les transcriptions avec les autres données de votre application LLM. Il s’adresse aux développeurs qui utilisent déjà les modèles audio d’OpenAI et qui souhaitent gagner en observabilité sur leurs traces audio. Le notebook utilise d’abord l’API de complétions de chat d’OpenAI avec GPT 4o Audio Preview pour générer des réponses audio à partir de prompts textuels, puis les suivre dans Weave. Interface de l’API de complétions de chat d’OpenAI avec intégration de GPT 4o Audio Preview et flux de travail de génération de réponses audio Pour le cas d’usage avancé, le notebook utilise l’API Realtime d’OpenAI pour diffuser de l’audio en temps réel. Vous pourrez ainsi voir comment Weave capture les deux interlocuteurs d’une conversation en direct. Cliquez sur la miniature suivante pour voir la démonstration vidéo. Miniature vidéo de la démonstration audio Realtime de Weave

Configuration

Cette section permet d’installer les paquets Python, de charger les identifiants d’authentification de l’API et d’importer les bibliothèques nécessaires à l’exemple de complétions de chat. Commencez par installer les dépendances OpenAI (openai) et Weave (weave), ainsi que set-env, la dépendance de gestion des clés API.
Chargez ensuite les clés API requises pour OpenAI et Weave. Cet exemple utilise set_env, qui est compatible avec le gestionnaire de clés secrètes de Google Colab et remplace google.colab.userdata, propre à Colab. Voir les instructions d’utilisation de set-env-colab-kaggle-dotenv.
Enfin, importez les bibliothèques requises.

Exemple de streaming et de stockage audio

Une fois les dépendances installées et les identifiants d’authentification chargés, vous pouvez configurer un appel au point de terminaison de complétions d’OpenAI en activant la modalité audio. Commencez par créer le client OpenAI et initialiser un projet Weave afin que Weave journalise les appels suivants dans votre workspace.
Définissez maintenant la requête de complétion OpenAI et ajoutez le décorateur Weave (op). Le décorateur @weave.op() indique à Weave de capturer les entrées, les sorties et le fichier audio de la fonction dans une trace. Le code suivant définit la fonction prompt_endpoint_and_log_trace. Cette fonction comporte trois étapes principales :
  1. Créer un objet de complétion à l’aide du modèle gpt-4o-audio-preview, qui prend en charge les entrées et sorties textuelles et audio.
    • Demander au modèle de compter lentement jusqu’à 13 en variant les accents.
    • Configurer la complétion en mode stream.
  2. Ouvrir un nouveau fichier de sortie pour recevoir les données diffusées en continu, fragment par fragment.
  3. Renvoyer un descripteur de fichier ouvert pointant vers le fichier audio afin que Weave journalise les données audio dans la trace.

Tests

Après avoir défini la fonction, exécutez la cellule suivante pour l’appeler de bout en bout et vérifier que l’audio est bien généré et journalisé. Weave stocke les prompts système et utilisateur dans une trace, avec l’audio produit en sortie. Une fois la cellule exécutée, cliquez sur le lien de la trace affiché dans la sortie de la cellule pour consulter votre trace. Vous disposez désormais dans Weave d’un appel audio chat complétion complet et tracé.

Utilisation avancée : API Realtime avec Weave

La suite de ce cookbook présente un exemple plus avancé qui associe l’API Realtime d’OpenAI à Weave pour tracer une conversation audio bidirectionnelle en direct. Intégration de l’API audio Realtime d’OpenAI avec Weave et interface de conversation audio en streaming L’API Realtime d’OpenAI est une API conversationnelle permettant de créer des assistants audio et texte en temps réel. Avant d’exécuter l’exemple Realtime, prenez connaissance des exigences suivantes :
  • Consultez les cellules de la section Configuration du microphone.
  • En raison des limitations de l’environnement d’exécution de Google Colab, vous devez exécuter cet exemple sur votre machine hôte, sous forme de Jupyter Notebook. Il ne peut pas être exécuté dans le navigateur.
    • Sur macOS, vous devez installer portaudio via Brew pour que PyAudio fonctionne.
  • L’option enable_audio_playback permet de lire l’audio produit par l’assistant. Si vous l’activez, un casque est indispensable, car la détection d’écho nécessiterait une implémentation complexe.

Configuration des exigences

L’exemple Realtime nécessite des paquets supplémentaires pour les E/S audio et la communication via WebSocket. Installez-les, puis rechargez vos variables d’environnement.

Configuration du microphone

Comme l’exemple Realtime enregistre le son de votre microphone et le restitue via vos haut-parleurs, vous devez indiquer à PyAudio les périphériques à utiliser. Exécutez la cellule suivante pour trouver tous les périphériques audio disponibles. Renseignez ensuite INPUT_DEVICE_INDEX et OUTPUT_DEVICE_INDEX en fonction des périphériques listés. Votre périphérique d’entrée doit disposer d’au moins un canal d’entrée, et votre périphérique de sortie d’au moins un canal de sortie.

Implémentation du schéma de l’API Realtime d’OpenAI

Les sections suivantes construisent pas à pas le client Realtime : le schéma des messages, un module d’écriture audio, le modèle instrumenté avec Weave et l’enregistreur. Le SDK Python d’OpenAI ne prend pas encore en charge l’API Realtime. Pour une meilleure lisibilité, cet exemple implémente le schéma complet de l’API Realtime d’OpenAI avec Pydantic ; cette implémentation pourra être abandonnée dès que la prise en charge officielle sera disponible.

Schéma Pydantic pour l’API Realtime d’OpenAI

Enregistreur de flux audio (sur disque et en mémoire)

La classe utilitaire suivante met en mémoire tampon les fragments audio reçus en streaming dans un fichier WAV (ou dans un tampon en mémoire), afin que l’audio puisse ensuite être transmis à Weave pour la journalisation.

Modèle audio en temps réel

Le modèle audio en temps réel (RT) utilise un WebSocket pour envoyer des événements à l’API Realtime d’OpenAI. Le modèle fonctionne comme suit :
  1. init : initialise les tampons locaux (audio d’entrée) et les flux (flux de lecture de l’assistant, flux d’écriture sur disque de l’audio de l’utilisateur), puis ouvre une connexion à l’API Realtime.
  2. receive_messages_thread : un thread se charge de recevoir les messages de l’API. Le code traite quatre principaux types d’événements :
    • RESPONSE_AUDIO_TRANSCRIPT_DONE : le serveur signale que la réponse de l’assistant est terminée et fournit la transcription.
    • CONVERSATION_ITEM_INPUT_AUDIO_TRANSCRIPTION_COMPLETED : le serveur signale que l’audio de l’utilisateur a été transcrit et envoie la transcription correspondante. Le code journalise la transcription vers Weave et l’affiche à l’utilisateur.
    • RESPONSE_AUDIO_DELTA : le serveur envoie un nouveau fragment de l’audio de réponse de l’assistant. Le code l’ajoute aux données de la réponse en cours, identifiée par son ID, puis l’envoie au flux de sortie pour lecture.
    • RESPONSE_DONE : le serveur signale la fin d’une réponse de l’assistant. Le code récupère tous les fragments audio associés à la réponse, ainsi que la transcription, et les journalise dans Weave.
  3. send_audio : un gestionnaire ajoute les fragments audio de l’utilisateur à un tampon et envoie les fragments audio lorsque ce tampon atteint une certaine taille.

Enregistreur audio

Une fois le modèle défini, il vous faut un moyen de lui transmettre l’entrée du microphone. Cet exemple utilise un flux d’entrée PyAudio associé à un gestionnaire lié à la méthode send_audio du modèle RTAudio. Le code renvoie le flux au thread principal pour qu’il puisse se fermer proprement à la fin du programme.

Thread principal

Cette dernière cellule assemble les composants précédents et lance l’assistant en temps réel. Le thread principal initialise un Realtime Audio Model intégrant Weave. Le code ouvre ensuite un enregistrement et attend une interruption clavier de l’utilisateur. Lorsque vous arrêtez la cellule, vous disposez d’une trace Weave complète de la conversation, y compris les transcriptions et l’audio de l’utilisateur et de l’assistant.
Dernière modification le 30 septembre 2026