Passer au contenu principal
Il s’agit d’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 que vous puissiez inspecter les prompts, les sorties audio et les transcriptions aux côtés du reste des données de votre application LLM. Le notebook s’adresse aux développeurs qui utilisent déjà les modèles audio d’OpenAI et souhaitent gagner en observabilité sur leurs traces audio. Le notebook utilise d’abord l’API Chat Completions d’OpenAI avec GPT 4o Audio Preview pour générer des réponses audio à partir de prompts textuels et les suivre dans Weave. Interface de l’API Chat Completions d’OpenAI avec intégration de GPT 4o Audio Preview et flux de travail de génération de réponses audio Pour ce cas d’utilisation avancé, le notebook utilise l’API Realtime d’OpenAI pour diffuser de l’audio en temps réel, afin que vous puissiez voir comment Weave capture les deux côtés d’une conversation en direct. Cliquez sur la vignette suivante pour voir la démonstration vidéo. Vignette vidéo de la démonstration audio Weave Realtime

Configuration

Cette section installe les packages Python, charge les clés API et importe les bibliothèques nécessaires pour l’exemple de chat completions. Commencez par installer les dépendances OpenAI (openai) et Weave (weave), ainsi que la dépendance set-env pour la gestion des clés API.
Ensuite, chargez les clés API requises pour OpenAI et Weave. Cet exemple utilise set_env, compatible avec le gestionnaire de clés secrètes de Google Colab, comme alternative à google.colab.userdata, spécifique à 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 chargés, vous pouvez maintenant configurer un appel vers l’endpoint Completions d’OpenAI avec la modalité audio activée. Créez d’abord le client OpenAI et initialisez un projet Weave afin que Weave consigne les appels suivants dans votre espace de travail.
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éez un objet de complétion à l’aide du modèle gpt-4o-audio-preview, qui prend en charge les entrées et sorties texte et audio.
    • Demandez au modèle de compter lentement jusqu’à 13 avec des accents variés.
    • Définissez la complétion sur stream.
  2. Ouvrez un nouveau fichier de sortie, dans lequel les données diffusées en continu sont écrites fragment par fragment.
  3. Renvoyez un descripteur de fichier ouvert vers le fichier audio afin que Weave consigne les données audio dans la trace.

Test

Après avoir défini la fonction, exécutez la cellule suivante pour l’appeler de bout en bout et confirmer que l’audio est généré et enregistré. Weave stocke les prompts système et utilisateur dans une trace, ainsi que l’audio de sortie. Après avoir exécuté la cellule, cliquez sur le lien de trace affiché dans la sortie de la cellule pour afficher votre trace. À ce stade, vous disposez d’un appel audio de chat-completions complet avec trace dans Weave.

Utilisation avancée : API Realtime avec Weave

La suite de ce cookbook présente un exemple plus avancé qui utilise l’API Realtime d’OpenAI avec 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 conçue pour créer des assistants audio et texte en temps réel. Avant d’exécuter l’exemple Realtime, consultez les prérequis suivants :
  • Consultez les cellules de la section Configuration du microphone.
  • En raison des limitations de l’environnement d’exécution Google Colab, vous devez exécuter cet exemple sur votre machine locale dans un notebook Jupyter. Vous ne pouvez pas l’exécuter dans le navigateur.
    • Sur macOS, vous devez installer portaudio via Brew pour que PyAudio fonctionne.
  • L’option enable_audio_playback lit l’audio produit par l’assistant. Un casque est requis si vous l’activez, car la détection d’écho nécessite une implémentation complexe.

Configuration requise

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

Configuration du microphone

Comme l’exemple Realtime enregistre à partir de votre microphone et lit l’audio via vos haut-parleurs, vous devez indiquer à PyAudio quels périphériques utiliser. Exécutez la cellule suivante pour trouver tous les périphériques audio disponibles. Ensuite, renseignez INPUT_DEVICE_INDEX et OUTPUT_DEVICE_INDEX à partir des périphériques répertoriés. Votre périphérique d’entrée dispose 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 présentent le client Realtime étape par étape : le schéma des messages, un composant d’écriture audio, le modèle instrumenté avec Weave et l’enregistreur. Le SDK Python OpenAI ne prend pas encore en charge l’API Realtime. Cet exemple implémente le schéma complet de l’API Realtime d’OpenAI dans Pydantic pour en améliorer la lisibilité, et pourrait être déprécié une fois la prise en charge officielle disponible.

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

Module d’écriture de flux audio (sur disque et en mémoire)

La classe utilitaire suivante met en mémoire tampon des fragments de flux audio dans un fichier WAV (ou un tampon en mémoire), afin que l’audio puisse ensuite être transmis vers 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 : initialiser les tampons locaux (audio d’entrée) et les flux (flux de lecture de l’assistant, flux d’écriture sur disque de l’audio utilisateur), puis ouvrir une connexion à l’API Realtime.
  2. receive_messages_thread : un thread gère la réception des messages depuis l’API. Le code gère quatre principaux types d’événements :
    • RESPONSE_AUDIO_TRANSCRIPT_DONE : le serveur indique que la réponse de l’assistant est terminée et fournit la transcription.
    • CONVERSATION_ITEM_INPUT_AUDIO_TRANSCRIPTION_COMPLETED : le serveur indique que l’audio de l’utilisateur a été transcrit et envoie sa transcription. Le code journalise la transcription vers Weave et l’affiche à l’utilisateur.
    • RESPONSE_AUDIO_DELTA : le serveur envoie un nouveau fragment audio de la réponse de l’assistant. Le code l’ajoute aux données de réponse en cours en fonction de l’ID de réponse, puis l’ajoute au flux de sortie pour la lecture.
    • RESPONSE_DONE : le serveur indique qu’une réponse de l’assistant est terminée. 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 des fragments audio de l’utilisateur à un tampon et envoie des fragments audio lorsque le tampon audio atteint une certaine taille.

Enregistreur audio

Une fois le modèle défini, vous avez besoin d’un moyen de lui fournir l’entrée du microphone. Cet exemple utilise un flux d’entrée PyAudio avec un gestionnaire associé à la méthode send_audio du modèle RTAudio. Le code renvoie le flux au thread principal afin de pouvoir être arrêté en toute sécurité à la fin du programme.

Thread principal

Cette cellule finale relie les composants précédents et exécute l’assistant en temps réel. Le thread principal lance un modèle Audio en temps réel intégrant Weave. Ensuite, le code ouvre 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 de l’utilisateur et de l’assistant, ainsi que l’audio.