Condividi tramite


API GPT-4o Realtime per la voce e l'audio (anteprima)

Nota

Questa funzionalità è attualmente in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

L'API GPT-4o in tempo reale di Azure OpenAI per il riconoscimento vocale e l'audio fa parte della famiglia di modelli GPT-4o che supporta interazioni conversazionali a bassa latenza, "riconoscimento vocale, riconoscimento vocale". L'API audio realtime GPT-4o è progettata per gestire interazioni conversazionali in tempo reale e a bassa latenza, rendendola ideale per i casi d'uso che coinvolgono interazioni live tra un utente e un modello, ad esempio agenti di supporto clienti, assistenti vocali e traduttori in tempo reale.

La maggior parte degli utenti dell'API Realtime deve distribuire e ricevere audio da un utente finale in tempo reale, incluse le applicazioni che usano WebRTC o un sistema di telefonia. L'API Realtime non è progettata per connettersi direttamente ai dispositivi degli utenti finali e si basa sulle integrazioni client per terminare i flussi audio dell'utente finale.

Modelli supportati

Attualmente solo gpt-4o-realtime-preview versione: 2024-10-01-preview supporta l'audio in tempo reale.

Il gpt-4o-realtime-preview modello è disponibile per le distribuzioni globali nelle aree Stati Uniti orientali 2 e Svezia centrale.

Importante

Il sistema archivia le richieste e i completamenti, come descritto nella sezione "Utilizzo dati e accesso per il monitoraggio degli abusi" delle Condizioni di prodotto specifiche del servizio per il servizio Azure OpenAI, ad eccezione del fatto che l'eccezione limitata non è applicabile. Il monitoraggio degli abusi verrà attivato per l'uso dell'API gpt-4o-realtime-preview anche per i clienti che altrimenti sono approvati per il monitoraggio degli abusi modificati.

Supporto dell'API

Il supporto per l'API Realtime è stato aggiunto per la prima volta nella versione 2024-10-01-previewdell'API .

Nota

Per altre informazioni sull'API e sull'architettura, vedere il repository audio in tempo reale OpenAI GPT-4o di Azure su GitHub.

Distribuire un modello per l'audio in tempo reale

Per distribuire il gpt-4o-realtime-preview modello nel portale di Azure AI Foundry:

  1. Passare al portale di Azure AI Foundry e assicurarsi di aver eseguito l'accesso con la sottoscrizione di Azure con la risorsa del servizio Azure OpenAI (con o senza distribuzioni di modelli).
  2. Selezionare il playground audio in tempo reale in Playgrounds (Playground) nel riquadro sinistro.
  3. Selezionare Crea nuova distribuzione per aprire la finestra di distribuzione.
  4. Cercare e selezionare il gpt-4o-realtime-preview modello e quindi selezionare Conferma.
  5. Nella distribuzione guidata assicurarsi di selezionare la versione del 2024-10-01 modello.
  6. Seguire la procedura guidata per completare la distribuzione del modello.

Ora che è disponibile una distribuzione del gpt-4o-realtime-preview modello, è possibile interagire con esso in tempo reale nel portale di Azure AI Foundry Playground audio in tempo reale o nell'API In tempo reale.

Usare l'audio in tempo reale GPT-4o

Per chattare con il modello distribuito gpt-4o-realtime-preview nel playground audio in tempo reale di Azure AI Foundry, seguire questa procedura:

  1. Passare alla pagina servizio Azure OpenAI nel portale di Azure AI Foundry. Assicurarsi di aver eseguito l'accesso con la sottoscrizione di Azure con la risorsa del servizio Azure OpenAI e il modello distribuito gpt-4o-realtime-preview .

  2. Selezionare il playground audio in tempo reale in Playgrounds (Playground) nel riquadro sinistro.

  3. Selezionare il modello distribuito gpt-4o-realtime-preview dall'elenco a discesa Distribuzione .

  4. Selezionare Abilita microfono per consentire al browser di accedere al microfono. Se è già stata concessa l'autorizzazione, è possibile ignorare questo passaggio.

    Screenshot del playground audio in tempo reale con il modello distribuito selezionato.

  5. Facoltativamente, è possibile modificare il contenuto nella casella di testo Fornire le istruzioni del modello e il contesto . Fornire al modello le istruzioni sul comportamento e su qualsiasi contesto a cui deve fare riferimento durante la generazione di una risposta. È possibile descrivere la personalità dell'assistente, definire cosa deve e non deve rispondere e come formattare le risposte.

  6. Facoltativamente, modificare le impostazioni, ad esempio soglia, riempimento del prefisso e durata del silenzio.

  7. Selezionare Avvia ascolto per avviare la sessione. Puoi parlare con il microfono per avviare una chat.

    Screenshot del playground audio in tempo reale con il pulsante di avvio dell'ascolto e l'accesso al microfono abilitato.

  8. Puoi interrompere la chat in qualsiasi momento parlando. È possibile terminare la chat selezionando il pulsante Arresta ascolto .

Prerequisiti

Prerequisiti di Microsoft Entra ID

Per l'autenticazione senza chiave consigliata con Microsoft Entra ID, è necessario:

  • Installare l'interfaccia della riga di comando di Azure usata per l'autenticazione senza chiave con Microsoft Entra ID.
  • Assegnare il ruolo Cognitive Services User all'account utente. È possibile assegnare ruoli nella portale di Azure in Controllo di accesso (IAM)>Aggiungere un'assegnazione di ruolo.

Distribuire un modello per l'audio in tempo reale

Per distribuire il gpt-4o-realtime-preview modello nel portale di Azure AI Foundry:

  1. Passare al portale di Azure AI Foundry e assicurarsi di aver eseguito l'accesso con la sottoscrizione di Azure con la risorsa del servizio Azure OpenAI (con o senza distribuzioni di modelli).
  2. Selezionare il playground audio in tempo reale in Playgrounds (Playground) nel riquadro sinistro.
  3. Selezionare Crea nuova distribuzione per aprire la finestra di distribuzione.
  4. Cercare e selezionare il gpt-4o-realtime-preview modello e quindi selezionare Conferma.
  5. Nella distribuzione guidata assicurarsi di selezionare la versione del 2024-10-01 modello.
  6. Seguire la procedura guidata per completare la distribuzione del modello.

Ora che è disponibile una distribuzione del gpt-4o-realtime-preview modello, è possibile interagire con esso in tempo reale nel portale di Azure AI Foundry Playground audio in tempo reale o nell'API In tempo reale.

Impostazione

  1. Creare una nuova cartella realtime-audio-quickstart per contenere l'applicazione e aprire Visual Studio Code in tale cartella con il comando seguente:

    mkdir realtime-audio-quickstart && code realtime-audio-quickstart
    
  2. package.json Creare con il comando seguente:

    npm init -y
    
  3. Aggiornare in package.json ECMAScript con il comando seguente:

    npm pkg set type=module
    
  4. Installare la libreria client audio in tempo reale per JavaScript con:

    npm install https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/js/v0.5.2/rt-client-0.5.2.tgz
    
  5. Per l'autenticazione senza chiave consigliata con Microsoft Entra ID, installare il @azure/identity pacchetto con:

    npm install @azure/identity
    

Recuperare le informazioni sulle risorse

È necessario recuperare le informazioni seguenti per autenticare l'applicazione con la risorsa OpenAI di Azure:

Nome variabile Valore
AZURE_OPENAI_ENDPOINT Questo valore è disponibile nella sezione Chiavi ed endpoint quando si esamina la risorsa dal portale di Azure.
AZURE_OPENAI_DEPLOYMENT_NAME Questo valore corrisponderà al nome personalizzato scelto per la distribuzione quando è stato distribuito un modello. Questo valore è disponibile in Distribuzioni di modelli di gestione>risorse nella portale di Azure.
OPENAI_API_VERSION Altre informazioni sulle versioni api.

Altre informazioni sull'autenticazione senza chiave e sull'impostazione delle variabili di ambiente.

Attenzione

Per usare l'autenticazione senza chiave consigliata con l'SDK, assicurarsi che la AZURE_OPENAI_API_KEY variabile di ambiente non sia impostata.

Testo in uscita audio

  1. Creare il text-in-audio-out.js file con il codice seguente:

    import { DefaultAzureCredential } from "@azure/identity";
    import { LowLevelRTClient } from "rt-client";
    import dotenv from "dotenv";
    dotenv.config();
    async function text_in_audio_out() {
        // Set environment variables or edit the corresponding values here.
        const endpoint = process.env["AZURE_OPENAI_ENDPOINT"] || "yourEndpoint";
        const deployment = "gpt-4o-realtime-preview";
        if (!endpoint || !deployment) {
            throw new Error("You didn't set the environment variables.");
        }
        const client = new LowLevelRTClient(new URL(endpoint), new DefaultAzureCredential(), { deployment: deployment });
        try {
            await client.send({
                type: "response.create",
                response: {
                    modalities: ["audio", "text"],
                    instructions: "Please assist the user."
                }
            });
            for await (const message of client.messages()) {
                switch (message.type) {
                    case "response.done": {
                        break;
                    }
                    case "error": {
                        console.error(message.error);
                        break;
                    }
                    case "response.audio_transcript.delta": {
                        console.log(`Received text delta: ${message.delta}`);
                        break;
                    }
                    case "response.audio.delta": {
                        const buffer = Buffer.from(message.delta, "base64");
                        console.log(`Received ${buffer.length} bytes of audio data.`);
                        break;
                    }
                }
                if (message.type === "response.done" || message.type === "error") {
                    break;
                }
            }
        }
        finally {
            client.close();
        }
    }
    await text_in_audio_out();
    
  2. Accedere ad Azure con il comando seguente:

    az login
    
  3. Eseguire il file JavaScript.

    node text-in-audio-out.js
    

Attendere qualche istante per ottenere la risposta.

Output

Lo script ottiene una risposta dal modello e stampa la trascrizione e i dati audio ricevuti.

L'output sarà simile al seguente:

Received text delta: Hello
Received text delta: !
Received text delta:  How
Received text delta:  can
Received text delta:  I
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received text delta:  help
Received 12000 bytes of audio data.
Received text delta:  you
Received text delta:  today
Received text delta: ?
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 24000 bytes of audio data.

Esempio di applicazione Web

L'esempio Web JavaScript su GitHub illustra come usare l'API GPT-4o Realtime per interagire con il modello in tempo reale. Il codice di esempio include una semplice interfaccia Web che acquisisce l'audio dal microfono dell'utente e lo invia al modello per l'elaborazione. Il modello risponde con testo e audio, che il codice di esempio esegue il rendering nell'interfaccia Web.

È possibile eseguire il codice di esempio in locale nel computer seguendo questa procedura. Per le istruzioni più aggiornate, vedere il repository in GitHub .

  1. Se non è installato Node.js, scaricare e installare la versione LTS di Node.js.

  2. Clonare il repository nel computer locale:

    git clone https://github.com/Azure-Samples/aoai-realtime-audio-sdk.git
    
  3. Passare alla cartella nell'editor javascript/samples/web di codice preferito.

    cd ./javascript/samples
    
  4. Eseguire download-pkg.ps1 o download-pkg.sh per scaricare i pacchetti necessari.

  5. Passare alla web cartella dalla ./javascript/samples cartella .

    cd ./web
    
  6. Eseguire npm install per installare le dipendenze dei pacchetti.

  7. Eseguire npm run dev per avviare il server Web, spostandosi in qualsiasi richiesta di autorizzazioni del firewall in base alle esigenze.

  8. Passare a uno degli URI forniti dall'output della console (ad esempio http://localhost:5173/) in un browser.

  9. Immettere le informazioni seguenti nell'interfaccia Web:

    • Endpoint: endpoint della risorsa di una risorsa OpenAI di Azure. Non è necessario aggiungere il /realtime percorso. Una struttura di esempio potrebbe essere https://my-azure-openai-resource-from-portal.openai.azure.com.
    • Chiave API: chiave API corrispondente per la risorsa OpenAI di Azure.
    • Distribuzione: nome del gpt-4o-realtime-preview modello distribuito nella sezione precedente.
    • Messaggio di sistema: facoltativamente, è possibile fornire un messaggio di sistema come "Si parla sempre come un pirata amichevole".
    • Temperatura: facoltativamente, è possibile fornire una temperatura personalizzata.
    • Voce: facoltativamente, è possibile selezionare una voce.
  10. Selezionare il pulsante Registra per avviare la sessione. Accettare le autorizzazioni per usare il microfono, se richiesto.

  11. Verrà visualizzato un << Session Started >> messaggio nell'output principale. Poi puoi parlare con il microfono per avviare una chat.

  12. Puoi interrompere la chat in qualsiasi momento parlando. È possibile terminare la chat selezionando il pulsante Arresta .

Prerequisiti

Prerequisiti di Microsoft Entra ID

Per l'autenticazione senza chiave consigliata con Microsoft Entra ID, è necessario:

  • Installare l'interfaccia della riga di comando di Azure usata per l'autenticazione senza chiave con Microsoft Entra ID.
  • Assegnare il ruolo Cognitive Services User all'account utente. È possibile assegnare ruoli nella portale di Azure in Controllo di accesso (IAM)>Aggiungere un'assegnazione di ruolo.

Distribuire un modello per l'audio in tempo reale

Per distribuire il gpt-4o-realtime-preview modello nel portale di Azure AI Foundry:

  1. Passare al portale di Azure AI Foundry e assicurarsi di aver eseguito l'accesso con la sottoscrizione di Azure con la risorsa del servizio Azure OpenAI (con o senza distribuzioni di modelli).
  2. Selezionare il playground audio in tempo reale in Playgrounds (Playground) nel riquadro sinistro.
  3. Selezionare Crea nuova distribuzione per aprire la finestra di distribuzione.
  4. Cercare e selezionare il gpt-4o-realtime-preview modello e quindi selezionare Conferma.
  5. Nella distribuzione guidata assicurarsi di selezionare la versione del 2024-10-01 modello.
  6. Seguire la procedura guidata per completare la distribuzione del modello.

Ora che è disponibile una distribuzione del gpt-4o-realtime-preview modello, è possibile interagire con esso in tempo reale nel portale di Azure AI Foundry Playground audio in tempo reale o nell'API In tempo reale.

Impostazione

  1. Creare una nuova cartella realtime-audio-quickstart per contenere l'applicazione e aprire Visual Studio Code in tale cartella con il comando seguente:

    mkdir realtime-audio-quickstart && code realtime-audio-quickstart
    
  2. Creare un ambiente virtuale. Se Python 3.10 o versione successiva è già installato, è possibile creare un ambiente virtuale usando i comandi seguenti:

    py -3 -m venv .venv
    .venv\scripts\activate
    

    L'attivazione dell'ambiente Python implica che quando si esegue python o pip dalla riga di comando, si usa l'interprete Python contenuto nella cartella .venv dell'applicazione. Per uscire dall'ambiente virtuale Python è possibile usare il comando deactivate. Potrà poi essere riattivato successivamente, quando necessario.

    Suggerimento

    È consigliabile creare e attivare un nuovo ambiente Python da usare per installare i pacchetti necessari per questa esercitazione. Non installare pacchetti nell'installazione globale di Python. È consigliabile usare sempre un ambiente virtuale o conda durante l'installazione di pacchetti Python. In caso contrario, è possibile interrompere l'installazione globale di Python.

  3. Installare la libreria client audio in tempo reale per Python con:

    pip install "https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/py%2Fv0.5.3/rtclient-0.5.3.tar.gz"
    
  4. Per l'autenticazione senza chiave consigliata con Microsoft Entra ID, installare il azure-identity pacchetto con:

    pip install azure-identity
    

Recuperare le informazioni sulle risorse

È necessario recuperare le informazioni seguenti per autenticare l'applicazione con la risorsa OpenAI di Azure:

Nome variabile Valore
AZURE_OPENAI_ENDPOINT Questo valore è disponibile nella sezione Chiavi ed endpoint quando si esamina la risorsa dal portale di Azure.
AZURE_OPENAI_DEPLOYMENT_NAME Questo valore corrisponderà al nome personalizzato scelto per la distribuzione quando è stato distribuito un modello. Questo valore è disponibile in Distribuzioni di modelli di gestione>risorse nella portale di Azure.
OPENAI_API_VERSION Altre informazioni sulle versioni api.

Altre informazioni sull'autenticazione senza chiave e sull'impostazione delle variabili di ambiente.

Testo in uscita audio

  1. Creare il text-in-audio-out.py file con il codice seguente:

    import base64
    import asyncio
    from azure.identity.aio import DefaultAzureCredential
    from rtclient import (
        ResponseCreateMessage,
        RTLowLevelClient,
        ResponseCreateParams
    )
    
    # Set environment variables or edit the corresponding values here.
    endpoint = os.environ["AZURE_OPENAI_ENDPOINT"]
    deployment = "gpt-4o-realtime-preview"
    
    async def text_in_audio_out():
        async with RTLowLevelClient(
            url=endpoint,
            azure_deployment=deployment,
            token_credential=DefaultAzureCredential(),
        ) as client:
            await client.send(
                ResponseCreateMessage(
                    response=ResponseCreateParams(
                        modalities={"audio", "text"}, 
                        instructions="Please assist the user."
                    )
                )
            )
            done = False
            while not done:
                message = await client.recv()
                match message.type:
                    case "response.done":
                        done = True
                    case "error":
                        done = True
                        print(message.error)
                    case "response.audio_transcript.delta":
                        print(f"Received text delta: {message.delta}")
                    case "response.audio.delta":
                        buffer = base64.b64decode(message.delta)
                        print(f"Received {len(buffer)} bytes of audio data.")
                    case _:
                        pass
    
    async def main():
        await text_in_audio_out()
    
    asyncio.run(main())
    
  2. Eseguire il file Python.

    python text-in-audio-out.py
    

Attendere qualche istante per ottenere la risposta.

Output

Lo script ottiene una risposta dal modello e stampa la trascrizione e i dati audio ricevuti.

L'output sarà simile al seguente:

Received text delta: Hello
Received text delta: !
Received text delta:  How
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received text delta:  can
Received 12000 bytes of audio data.
Received text delta:  I
Received text delta:  assist
Received text delta:  you
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received text delta:  today
Received text delta: ?
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 28800 bytes of audio data.

Prerequisiti

Prerequisiti di Microsoft Entra ID

Per l'autenticazione senza chiave consigliata con Microsoft Entra ID, è necessario:

  • Installare l'interfaccia della riga di comando di Azure usata per l'autenticazione senza chiave con Microsoft Entra ID.
  • Assegnare il ruolo Cognitive Services User all'account utente. È possibile assegnare ruoli nella portale di Azure in Controllo di accesso (IAM)>Aggiungere un'assegnazione di ruolo.

Distribuire un modello per l'audio in tempo reale

Per distribuire il gpt-4o-realtime-preview modello nel portale di Azure AI Foundry:

  1. Passare al portale di Azure AI Foundry e assicurarsi di aver eseguito l'accesso con la sottoscrizione di Azure con la risorsa del servizio Azure OpenAI (con o senza distribuzioni di modelli).
  2. Selezionare il playground audio in tempo reale in Playgrounds (Playground) nel riquadro sinistro.
  3. Selezionare Crea nuova distribuzione per aprire la finestra di distribuzione.
  4. Cercare e selezionare il gpt-4o-realtime-preview modello e quindi selezionare Conferma.
  5. Nella distribuzione guidata assicurarsi di selezionare la versione del 2024-10-01 modello.
  6. Seguire la procedura guidata per completare la distribuzione del modello.

Ora che è disponibile una distribuzione del gpt-4o-realtime-preview modello, è possibile interagire con esso in tempo reale nel portale di Azure AI Foundry Playground audio in tempo reale o nell'API In tempo reale.

Impostazione

  1. Creare una nuova cartella realtime-audio-quickstart per contenere l'applicazione e aprire Visual Studio Code in tale cartella con il comando seguente:

    mkdir realtime-audio-quickstart && code realtime-audio-quickstart
    
  2. package.json Creare con il comando seguente:

    npm init -y
    
  3. Aggiornare in package.json ECMAScript con il comando seguente:

    npm pkg set type=module
    
  4. Installare la libreria client audio in tempo reale per JavaScript con:

    npm install https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/js/v0.5.2/rt-client-0.5.2.tgz
    
  5. Per l'autenticazione senza chiave consigliata con Microsoft Entra ID, installare il @azure/identity pacchetto con:

    npm install @azure/identity
    

Recuperare le informazioni sulle risorse

È necessario recuperare le informazioni seguenti per autenticare l'applicazione con la risorsa OpenAI di Azure:

Nome variabile Valore
AZURE_OPENAI_ENDPOINT Questo valore è disponibile nella sezione Chiavi ed endpoint quando si esamina la risorsa dal portale di Azure.
AZURE_OPENAI_DEPLOYMENT_NAME Questo valore corrisponderà al nome personalizzato scelto per la distribuzione quando è stato distribuito un modello. Questo valore è disponibile in Distribuzioni di modelli di gestione>risorse nella portale di Azure.
OPENAI_API_VERSION Altre informazioni sulle versioni api.

Altre informazioni sull'autenticazione senza chiave e sull'impostazione delle variabili di ambiente.

Attenzione

Per usare l'autenticazione senza chiave consigliata con l'SDK, assicurarsi che la AZURE_OPENAI_API_KEY variabile di ambiente non sia impostata.

Testo in uscita audio

  1. Creare il text-in-audio-out.ts file con il codice seguente:

    import { DefaultAzureCredential } from "@azure/identity";
    import { LowLevelRTClient } from "rt-client";
    import dotenv from "dotenv";
    dotenv.config();
    
    async function text_in_audio_out() {
        // Set environment variables or edit the corresponding values here.
        const endpoint: string = process.env["AZURE_OPENAI_ENDPOINT"] || "yourEndpoint";
        const deployment = "gpt-4o-realtime-preview";
        if (!endpoint || !deployment) {
            throw new Error("You didn't set the environment variables.");
        }
        const client = new LowLevelRTClient(
            new URL(endpoint), 
            new DefaultAzureCredential(), 
            {deployment: deployment}
        );
        try {
            await client.send({
                type: "response.create",
                response: {
                    modalities: ["audio", "text"],
                    instructions: "Please assist the user."
                }
            });
    
            for await (const message of client.messages()) {
                switch (message.type) {
                    case "response.done": {
                        break;
                    }
                    case "error": {
                        console.error(message.error);
                        break;
                    }
                    case "response.audio_transcript.delta": {
                        console.log(`Received text delta: ${message.delta}`);
                        break;
                    }
                    case "response.audio.delta": {
                        const buffer = Buffer.from(message.delta, "base64");
                        console.log(`Received ${buffer.length} bytes of audio data.`);
                        break;
                    }
                }
                if (message.type === "response.done" || message.type === "error") {
                    break;
                }
            }
        } finally {
            client.close();
        }
    }
    
    await text_in_audio_out();
    
  2. Creare il file per eseguire la tsconfig.json transpile del codice TypeScript e copiare il codice seguente per ECMAScript.

    {
        "compilerOptions": {
          "module": "NodeNext",
          "target": "ES2022", // Supports top-level await
          "moduleResolution": "NodeNext",
          "skipLibCheck": true, // Avoid type errors from node_modules
          "strict": true // Enable strict type-checking options
        },
        "include": ["*.ts"]
    }
    
  3. Transpile da TypeScript a JavaScript.

    tsc
    
  4. Accedere ad Azure con il comando seguente:

    az login
    
  5. Eseguire il codice con il comando seguente:

    node text-in-audio-out.js
    

Attendere qualche istante per ottenere la risposta.

Output

Lo script ottiene una risposta dal modello e stampa la trascrizione e i dati audio ricevuti.

L'output sarà simile al seguente:

Received text delta: Hello
Received text delta: !
Received text delta:  How
Received text delta:  can
Received text delta:  I
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received text delta:  help
Received 12000 bytes of audio data.
Received text delta:  you
Received text delta:  today
Received text delta: ?
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 24000 bytes of audio data.