Skip to main content
Il s’agit d’un notebook interactif. Vous pouvez l’exécuter localement ou utiliser les liens ci-dessous :

Comment utiliser Weave avec des données Audio : un exemple OpenAI

Cette démo utilise 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é, nous utilisons l’OpenAI Realtime API pour diffuser de l’audio en temps réel. Cliquez sur la vignette suivante pour voir la démonstration vidéo, ou cliquez ici. Everything Is AWESOME

Configuration

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. Ici, nous utilisons set_env, compatible avec le gestionnaire de clés secrètes de Google Colab, comme alternative à google.colab.userdata, spécifique à Colab. Voir : ici pour les instructions d’utilisation.
Enfin, importez les bibliothèques requises.

Exemple de streaming et de stockage audio

Nous allons 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.
Nous allons maintenant définir notre requête de complétion OpenAI et ajouter notre décorateur Weave (op). Ici, nous définissons la fonction prompt_endpont_and_log_trace. Cette fonction comporte trois étapes principales :
  1. Nous créons 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.
    • Nous demandons au modèle de compter lentement jusqu’à 13 avec des accents variés.
    • Nous définissons la complétion sur “stream”.
  2. Nous ouvrons un nouveau fichier de sortie, dans lequel les données diffusées en continu sont écrites fragment par fragment.
  3. Nous renvoyons un descripteur de fichier ouvert vers le fichier audio afin que Weave consigne les données audio dans la trace.

Test

Exécutez la cellule suivante. Le prompt système, le prompt utilisateur et l’audio de sortie seront enregistrés dans une trace Weave. Après avoir exécuté la cellule, cliquez sur le lien à côté de l’emoji ”🍩” pour afficher votre trace.

Utilisation avancée : Realtime Audio API avec Weave

Intégration de Realtime Audio API avec Weave et interface conversationnelle audio en streaming L’API temps réel d’OpenAI est une API conversationnelle très performante et fiable pour créer des assistants audio et textuels en temps réel. Veuillez noter :
  • Consultez les cellules de Configuration du microphone
  • En raison des limitations de l’environnement d’exécution de Google Colab, vous devez l’exécuter sur votre machine hôte dans un notebook Jupyter. Il n’est pas possible de l’exécuter dans le navigateur.
    • Sous MacOS, vous devrez installer portaudio via Brew (voir ici) pour que Pyaudio fonctionne.
  • Le bouton bascule enable_audio_playback active la lecture de l’audio généré par l’assistant. Veuillez noter qu’un casque est requis si cette option est activée, car la détection d’écho nécessite une implémentation très complexe.

Configuration requise

Configuration du microphone

Exécutez la cellule suivante pour trouver tous les périphériques audio disponibles. Ensuite, renseignez INPUT_DEVICE_INDEX et OUTPUT_DEVICE_INDEX en fonction des périphériques répertoriés. Votre périphérique d’entrée aura au moins 1 canal d’entrée, et votre périphérique de sortie aura au moins 1 canal de sortie.

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

Le SDK Python d’OpenAI ne prend pas encore en charge la Realtime API. Nous implémentons l’intégralité du schéma de l’OAI Realtime API dans Pydantic pour en améliorer la lisibilité, et pourrons le déprécier lorsque la prise en charge officielle sera disponible.

Schéma Pydantic pour l’OpenAI Realtime API

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

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 audio Realtime d’OpenAI. Le fonctionnement est le suivant :
  1. init: Nous initialisons 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 ouvrons une connexion à l’API Realtime.
  2. receive_messages_thread: Un thread gère la réception des messages depuis l’API. Quatre types d’événements principaux sont traités : - 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. Nous journalisons la transcription dans Weave et l’affichons à l’utilisateur.
    • RESPONSE_AUDIO_DELTA: Le serveur envoie un nouveau fragment de l’audio de réponse de l’assistant. Nous l’ajoutons aux données de la réponse en cours via l’ID de réponse, puis au flux de sortie pour la lecture.
    • RESPONSE_DONE: Le serveur indique qu’une réponse de l’assistant est terminée. Nous obtenons tous les fragments audio associés à la réponse, ainsi que la transcription, et les journalisons dans Weave.
    3.send_audio: Un gestionnaire ajoute des fragments d’audio utilisateur à un tampon et envoie des fragments audio lorsque le tampon audio atteint une certaine taille.

Enregistreur audio

Nous utilisons un flux d’entrée pyaudio avec un gestionnaire associé à la méthode send_audio du modèle RTAudio. Le flux est renvoyé au thread principal afin de pouvoir être arrêté en toute sécurité à la fin du programme.

Thread principal (Lancez-moi !)

Le thread principal lance un modèle Audio en temps réel intégrant Weave. Ensuite, on ouvre un enregistrement et on attend une interruption clavier de l’utilisateur.