Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure OpenAI GPT Realtime API för tal och ljud är en del av GPT-4o-modellfamiljen som stöder konversationsinteraktioner med låg svarstid, "tal in, tal ut".
Du kan använda Realtids-API:et via WebRTC eller WebSocket för att skicka ljudindata till modellen och ta emot ljudsvar i realtid.
Följ anvisningarna i den här artikeln för att komma igång med Realtids-API:et via WebSockets. Använd Realtids-API:et via WebSockets i server-till-server-scenarier där låg svarstid inte är ett krav.
Tips/Råd
I de flesta fall rekommenderar vi att du använder Realtids-API:et via WebRTC för ljudströmning i realtid i program på klientsidan, till exempel en webbapp eller mobilapp. WebRTC är utformat för låg latens, realtidsljudströmning och är det bästa valet för de flesta användningsfall.
Modeller som stöds
GPT-realtidsmodellerna är tillgängliga för globala distributioner.
-
gpt-4o-realtime-preview(version2024-12-17) -
gpt-4o-mini-realtime-preview(version2024-12-17) -
gpt-realtime(version2025-08-28) -
gpt-realtime-mini(version2025-10-06)
Mer information finns i dokumentationen om modeller och versioner.
API-stöd
Stöd för REALTIDS-API:et lades först till i API-versionen 2024-10-01-preview (har dragits tillbaka). Använd version 2025-08-28 för att få åtkomst till de senaste funktionerna i Realtids-API:et. Vi rekommenderar att du väljer den allmänt tillgängliga API-versionen (utan suffixet "-preview") när det är möjligt.
Distribuera en modell för realtidsljud
Så här distribuerar gpt-realtime du modellen i Azure AI Foundry-portalen:
- Gå till Azure AI Foundry-portalen och skapa eller välj ditt projekt.
- Välj Modeller + slutpunkter under Mina tillgångar i den vänstra rutan.
- Välj + Distribuera modell>Distribuera basmodell för att öppna distributionsfönstret.
- Sök efter och välj
gpt-realtimemodellen och välj sedan Bekräfta. - Granska distributionsinformationen och välj Distribuera.
- Följ guiden för att slutföra distributionen av modellen.
Nu när du har en distribution av modellen kan du interagera med den gpt-realtime i Azure AI Foundry portalens Audio-lekplats eller i realtids-API:t.
Använda GPT-realtidsljudet
Om du vill chatta med din distribuerade gpt-realtime modell i Azure AI Foundrysrealtidsljudlekplats följer du dessa steg:
Gå till Azure AI Foundry-portalen och välj ditt projekt som har din distribuerade
gpt-realtimemodell.Välj Lekplatser i den vänstra rutan.
Välj Ljudlekplats>Prova ljudlekplatsen.
Anmärkning
Chattlekplatsen stödjer inte
gpt-realtimemodellen. Använd ljudlekplatsen enligt beskrivningen i det här avsnittet.Välj din distribuerade
gpt-realtimemodell i listrutan Distribution .Du kan också redigera innehållet i textrutan Ge modellinstruktioner och kontext . Ge modellinstruktionerna om hur den ska bete sig och vilken kontext den ska referera till när du genererar ett svar. Du kan beskriva assistentens personlighet, berätta vad den ska och inte ska svara på och tala om för den hur svar ska formateras.
Du kan också ändra inställningar som tröskelvärde, prefixutfyllnad och varaktighet för tystnad.
Välj Börja lyssna för att starta sessionen. Du kan tala i mikrofonen för att starta en chatt.
Du kan avbryta chatten när som helst genom att tala. Du kan avsluta chatten genom att välja knappen Sluta lyssna .
Förutsättningar
- En Azure-prenumeration – Skapa en kostnadsfritt
- Node.js LTS- eller ESM-stöd.
- En Azure OpenAI-resurs som skapats i en av de regioner som stöds. Mer information om regiontillgänglighet finns i dokumentationen för modeller och versioner.
- Sedan måste du distribuera en
gpt-realtimemodell med din Azure OpenAI-resurs. Mer information finns i Skapa en resurs och distribuera en modell med Azure OpenAI.
Krav för Microsoft Entra-ID
För den rekommenderade nyckellösa autentiseringen med Microsoft Entra-ID måste du:
- Installera Azure CLI som används för nyckellös autentisering med Microsoft Entra-ID.
-
Cognitive Services UserTilldela rollen till ditt användarkonto. Du kan tilldela roller i Azure-portalen under Åtkomstkontroll (IAM)>Lägg till rolltilldelning.
Distribuera en modell för realtidsljud
Så här distribuerar gpt-realtime du modellen i Azure AI Foundry-portalen:
- Gå till Azure AI Foundry-portalen och skapa eller välj ditt projekt.
- Välj Modeller + slutpunkter under Mina tillgångar i den vänstra rutan.
- Välj + Distribuera modell>Distribuera basmodell för att öppna distributionsfönstret.
- Sök efter och välj
gpt-realtimemodellen och välj sedan Bekräfta. - Granska distributionsinformationen och välj Distribuera.
- Följ guiden för att slutföra distributionen av modellen.
Nu när du har en distribution av modellen kan du interagera med den gpt-realtime i Azure AI Foundry portalens Audio-lekplats eller i realtids-API:t.
Ställ in
Skapa en ny mapp
realtime-audio-quickstart-jsoch gå till snabbstartsmappen med följande kommando:mkdir realtime-audio-quickstart-js && cd realtime-audio-quickstart-jsSkapa
package.jsonmed följande kommando:npm init -ytypeUppdatera tillmoduleipackage.jsonmed följande kommando:npm pkg set type=moduleInstallera OpenAI-klientbiblioteket för JavaScript med:
npm install openaiInstallera de beroende paket som används av OpenAI-klientbiblioteket för JavaScript med:
npm install wsFör den rekommenderade nyckellösa autentiseringen med Microsoft Entra-ID installerar du
@azure/identitypaketet med:npm install @azure/identity
Hämta resursinformation
Du måste hämta följande information för att autentisera ditt program med din Azure OpenAI-resurs:
| Variabelnamn | Värde |
|---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din resurs från Azure-portalen. |
AZURE_OPENAI_DEPLOYMENT_NAME |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns underResurshanteringsmodelldistributioner> i Azure-portalen. |
Läs mer om nyckellös autentisering och inställning av miljövariabler.
Försiktighet
Om du vill använda den rekommenderade nyckellösa autentiseringen med SDK:t kontrollerar du att AZURE_OPENAI_API_KEY miljövariabeln inte har angetts.
Text i ljudutgång
index.jsSkapa filen med följande kod:import OpenAI from 'openai'; import { OpenAIRealtimeWS } from 'openai/realtime/ws'; import { DefaultAzureCredential, getBearerTokenProvider } from '@azure/identity'; import { OpenAIRealtimeError } from 'openai/realtime/internal-base'; let isCreated = false; let isConfigured = false; let responseDone = false; // Set this to false, if you want to continue receiving events after an error is received. const throwOnError = true; async function main() { // The endpoint of your Azure OpenAI resource is required. You can set it in the AZURE_OPENAI_ENDPOINT // environment variable or replace the default value below. // You can find it in the Azure AI Foundry portal in the Overview page of your Azure OpenAI resource. // Example: https://{your-resource}.openai.azure.com const endpoint = process.env.AZURE_OPENAI_ENDPOINT || 'AZURE_OPENAI_ENDPOINT'; const baseUrl = endpoint.replace(/\/$/, "") + '/openai/v1'; // The deployment name of your Azure OpenAI model is required. You can set it in the AZURE_OPENAI_DEPLOYMENT_NAME // environment variable or replace the default value below. // You can find it in the Azure AI Foundry portal in the "Models + endpoints" page of your Azure OpenAI resource. // Example: gpt-realtime const deploymentName = process.env.AZURE_OPENAI_DEPLOYMENT_NAME || 'gpt-realtime'; // Keyless authentication const credential = new DefaultAzureCredential(); const scope = 'https://cognitiveservices.azure.com/.default'; const azureADTokenProvider = getBearerTokenProvider(credential, scope); const token = await azureADTokenProvider(); // The APIs are compatible with the OpenAI client library. // You can use the OpenAI client library to access the Azure OpenAI APIs. // Make sure to set the baseURL and apiKey to use the Azure OpenAI endpoint and token. const openAIClient = new OpenAI({ baseURL: baseUrl, apiKey: token, }); const realtimeClient = await OpenAIRealtimeWS.create(openAIClient, { model: deploymentName }); realtimeClient.on('error', (receivedError) => receiveError(receivedError)); realtimeClient.on('session.created', (receivedEvent) => receiveEvent(receivedEvent)); realtimeClient.on('session.updated', (receivedEvent) => receiveEvent(receivedEvent)); realtimeClient.on('response.output_audio.delta', (receivedEvent) => receiveEvent(receivedEvent)); realtimeClient.on('response.output_audio_transcript.delta', (receivedEvent) => receiveEvent(receivedEvent)); realtimeClient.on('response.done', (receivedEvent) => receiveEvent(receivedEvent)); console.log('Waiting for events...'); while (!isCreated) { console.log('Waiting for session.created event...'); await new Promise((resolve) => setTimeout(resolve, 100)); } // After the session is created, configure it to enable audio input and output. const sessionConfig = { 'type': 'realtime', 'instructions': 'You are a helpful assistant. You respond by voice and text.', 'output_modalities': ['audio'], 'audio': { 'input': { 'transcription': { 'model': 'whisper-1' }, 'format': { 'type': 'audio/pcm', 'rate': 24000, }, 'turn_detection': { 'type': 'server_vad', 'threshold': 0.5, 'prefix_padding_ms': 300, 'silence_duration_ms': 200, 'create_response': true } }, 'output': { 'voice': 'alloy', 'format': { 'type': 'audio/pcm', 'rate': 24000, } } } }; realtimeClient.send({ 'type': 'session.update', 'session': sessionConfig }); while (!isConfigured) { console.log('Waiting for session.updated event...'); await new Promise((resolve) => setTimeout(resolve, 100)); } // After the session is configured, data can be sent to the session. realtimeClient.send({ 'type': 'conversation.item.create', 'item': { 'type': 'message', 'role': 'user', 'content': [{ type: 'input_text', text: 'Please assist the user.' } ] } }); realtimeClient.send({ type: 'response.create' }); // While waiting for the session to finish, the events can be handled in the event handlers. // In this example, we just wait for the first response.done event. while (!responseDone) { console.log('Waiting for response.done event...'); await new Promise((resolve) => setTimeout(resolve, 100)); } console.log('The sample completed successfully.'); realtimeClient.close(); } function receiveError(err) { if (err instanceof OpenAIRealtimeError) { console.error('Received an error event.'); console.error(`Message: ${err.cause.message}`); console.error(`Stack: ${err.cause.stack}`); } if (throwOnError) { throw err; } } function receiveEvent(event) { console.log(`Received an event: ${event.type}`); switch (event.type) { case 'session.created': console.log(`Session ID: ${event.session.id}`); isCreated = true; break; case 'session.updated': console.log(`Session ID: ${event.session.id}`); isConfigured = true; break; case 'response.output_audio_transcript.delta': console.log(`Transcript delta: ${event.delta}`); break; case 'response.output_audio.delta': let audioBuffer = Buffer.from(event.delta, 'base64'); console.log(`Audio delta length: ${audioBuffer.length} bytes`); break; case 'response.done': console.log(`Response ID: ${event.response.id}`); console.log(`The final response is: ${event.response.output[0].content[0].transcript}`); responseDone = true; break; default: console.warn(`Unhandled event type: ${event.type}`); } } main().catch((err) => { console.error('The sample encountered an error:', err); }); export { main };Logga in på Azure med följande kommando:
az loginKör JavaScript-filen.
node index.js
Vänta en stund för att få svaret.
Utgång
Skriptet hämtar ett svar från modellen och skriver ut avskriften och mottagna ljuddata.
Utdata ser ut ungefär så här:
Waiting for events...
Waiting for session.created event...
Received an event: session.created
Session ID: sess_CQx8YO3vKxD9FaPxrbQ9R
Waiting for session.updated event...
Received an event: session.updated
Session ID: sess_CQx8YO3vKxD9FaPxrbQ9R
Waiting for response.done event...
Waiting for response.done event...
Waiting for response.done event...
Received an event: response.output_audio_transcript.delta
Transcript delta: Sure
Received an event: response.output_audio_transcript.delta
Transcript delta: ,
Received an event: response.output_audio_transcript.delta
Transcript delta: I
Waiting for response.done event...
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 4800 bytes
Received an event: response.output_audio.delta
Audio delta length: 7200 bytes
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio_transcript.delta
Transcript delta: 'm
Received an event: response.output_audio_transcript.delta
Transcript delta: here
Received an event: response.output_audio_transcript.delta
Transcript delta: to
Received an event: response.output_audio_transcript.delta
Transcript delta: help
Received an event: response.output_audio_transcript.delta
Transcript delta: .
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio_transcript.delta
Transcript delta: What
Received an event: response.output_audio_transcript.delta
Transcript delta: do
Received an event: response.output_audio_transcript.delta
Transcript delta: you
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio_transcript.delta
Transcript delta: need
Received an event: response.output_audio_transcript.delta
Transcript delta: assistance
Received an event: response.output_audio_transcript.delta
Transcript delta: with
Received an event: response.output_audio_transcript.delta
Transcript delta: ?
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 28800 bytes
Received an event: response.done
Response ID: resp_CQx8YwQCszDqSUXRutxP9
The final response is: Sure, I'm here to help. What do you need assistance with?
The sample completed successfully.
Förutsättningar
- Ett Azure-abonnemang. Skapa en kostnadsfritt.
- Python 3.8 eller senare version. Vi rekommenderar att du använder Python 3.10 eller senare, men minst Python 3.8 krävs. Om du inte har en lämplig version av Python installerad kan du följa anvisningarna i VS Code Python-självstudien för det enklaste sättet att installera Python på operativsystemet.
- En Azure OpenAI-resurs som skapats i en av de regioner som stöds. Mer information om regiontillgänglighet finns i dokumentationen för modeller och versioner.
- Sedan måste du distribuera en
gpt-realtimeellergpt-realtime-minimodell med din Azure OpenAI-resurs. Mer information finns i Skapa en resurs och distribuera en modell med Azure OpenAI.
Krav för Microsoft Entra-ID
För den rekommenderade nyckellösa autentiseringen med Microsoft Entra-ID måste du:
- Installera Azure CLI som används för nyckellös autentisering med Microsoft Entra-ID.
-
Cognitive Services UserTilldela rollen till ditt användarkonto. Du kan tilldela roller i Azure-portalen under Åtkomstkontroll (IAM)>Lägg till rolltilldelning.
Distribuera en modell för realtidsljud
Så här distribuerar gpt-realtime du modellen i Azure AI Foundry-portalen:
- Gå till Azure AI Foundry-portalen och skapa eller välj ditt projekt.
- Välj Modeller + slutpunkter under Mina tillgångar i den vänstra rutan.
- Välj + Distribuera modell>Distribuera basmodell för att öppna distributionsfönstret.
- Sök efter och välj
gpt-realtimemodellen och välj sedan Bekräfta. - Granska distributionsinformationen och välj Distribuera.
- Följ guiden för att slutföra distributionen av modellen.
Nu när du har en distribution av modellen kan du interagera med den gpt-realtime i Azure AI Foundry portalens Audio-lekplats eller i realtids-API:t.
Ställ in
Skapa en ny mapp
realtime-audio-quickstart-pyoch gå till snabbstartsmappen med följande kommando:mkdir realtime-audio-quickstart-py && cd realtime-audio-quickstart-pySkapa en virtuell miljö. Om du redan har Python 3.10 eller senare installerat kan du skapa en virtuell miljö med hjälp av följande kommandon:
När du aktiverar Python-miljön innebär det att när du kör
pythonellerpipfrån kommandoraden använder du sedan Python-tolken.venvsom finns i mappen för ditt program. Du kan användadeactivatekommandot för att avsluta den virtuella python-miljön och senare återaktivera den när det behövs.Tips/Råd
Vi rekommenderar att du skapar och aktiverar en ny Python-miljö som ska användas för att installera de paket som du behöver för den här självstudien. Installera inte paket i din globala Python-installation. Du bör alltid använda en virtuell miljö eller conda-miljö när du installerar Python-paket, annars kan du avbryta den globala installationen av Python.
Installera OpenAI Python-klientbiblioteket med:
pip install openai[realtime]För den rekommenderade nyckellösa autentiseringen med Microsoft Entra-ID installerar du
azure-identitypaketet med:pip install azure-identity
Hämta resursinformation
Du måste hämta följande information för att autentisera ditt program med din Azure OpenAI-resurs:
| Variabelnamn | Värde |
|---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din resurs från Azure-portalen. |
AZURE_OPENAI_DEPLOYMENT_NAME |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns underResurshanteringsmodelldistributioner> i Azure-portalen. |
Läs mer om nyckellös autentisering och inställning av miljövariabler.
Försiktighet
Om du vill använda den rekommenderade nyckellösa autentiseringen med SDK:t kontrollerar du att AZURE_OPENAI_API_KEY miljövariabeln inte har angetts.
Text i ljudutgång
text-in-audio-out.pySkapa filen med följande kod:import os import base64 import asyncio from openai import AsyncOpenAI from azure.identity import DefaultAzureCredential, get_bearer_token_provider async def main() -> None: """ When prompted for user input, type a message and hit enter to send it to the model. Enter "q" to quit the conversation. """ credential = DefaultAzureCredential() token_provider = get_bearer_token_provider(credential, "https://cognitiveservices.azure.com/.default") token = token_provider() # The endpoint of your Azure OpenAI resource is required. You can set it in the AZURE_OPENAI_ENDPOINT # environment variable. # You can find it in the Azure AI Foundry portal in the Overview page of your Azure OpenAI resource. # Example: https://{your-resource}.openai.azure.com endpoint = os.environ["AZURE_OPENAI_ENDPOINT"] # The deployment name of the model you want to use is required. You can set it in the AZURE_OPENAI_DEPLOYMENT_NAME # environment variable. # You can find it in the Azure AI Foundry portal in the "Models + endpoints" page of your Azure OpenAI resource. # Example: gpt-realtime deployment_name = os.environ["AZURE_OPENAI_DEPLOYMENT_NAME"] base_url = endpoint.replace("https://", "wss://").rstrip("/") + "/openai/v1" # The APIs are compatible with the OpenAI client library. # You can use the OpenAI client library to access the Azure OpenAI APIs. # Make sure to set the baseURL and apiKey to use the Azure OpenAI endpoint and token. client = AsyncOpenAI( websocket_base_url=base_url, api_key=token ) async with client.realtime.connect( model=deployment_name, ) as connection: # after the connection is created, configure the session. await connection.session.update(session={ "instructions": "You are a helpful assistant. You respond by voice and text.", "output_modalities": ["audio"], "audio": { "input": { "transcription": { "model": "whisper-1", }, "format": { "type": "audio/pcm", "rate": 24000, }, "turn_detection": { "type": "server_vad", "threshold": 0.5, "prefix_padding_ms": 300, "silence_duration_ms": 200, "create_responese": True, } }, "output": { "voice": "alloy", "format": { "type": "audio/pcm", "rate": 24000, } } } }) # After the session is configured, data can be sent to the session. while True: user_input = input("Enter a message: ") if user_input == "q": print("Stopping the conversation.") break await connection.conversation.item.create( item={ "type": "message", "role": "user", "content": [{"type": "input_text", "text": user_input}], } ) await connection.response.create() async for event in connection: if event.type == "response.output_text.delta": print(event.delta, flush=True, end="") elif event.type == "response.output_audio.delta": audio_data = base64.b64decode(event.delta) print(f"Received {len(audio_data)} bytes of audio data.") elif event.type == "response.output_audio_transcript.delta": print(f"Received text delta: {event.delta}") elif event.type == "response.output_text.done": print() elif event.type == "response.done": break print("Conversation ended.") credential.close() asyncio.run(main())Logga in på Azure med följande kommando:
az loginKör Python-filen.
python text-in-audio-out.pyNär du uppmanas att mata in något, skriv ett meddelande och tryck på Retur för att skicka det till modellen. Ange "q" för att avsluta konversationen.
Vänta en stund för att få svaret.
Utgång
Skriptet hämtar ett svar från modellen och skriver ut avskriften och mottagna ljuddata.
Utdata ser ut ungefär så här:
Enter a message: How are you today?
Received text delta: I
Received text delta: ’m
Received text delta: feeling
Received text delta: fantastic
Received text delta: ,
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received 12000 bytes of audio data.
Received text delta: thanks
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received text delta: for
Received text delta: asking
Received text delta: !
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received text delta: It
Received text delta: ’s
Received text delta: a
Received text delta: great
Received text delta: day
Received text delta: to
Received text delta: chat
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 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received text delta: and
Received text delta: I
Received text delta: ’m
Received text delta: energized
Received text delta: and
Received text delta: ready
Received text delta: to
Received text delta: help
Received text delta: you
Received text delta: out
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 12000 bytes of audio data.
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 text delta: How
Received text delta: about
Received text delta: you
Received text delta: ?
Received text delta: How
Received text delta: ’s
Received text delta: your
Received text delta: day
Received text delta: going
Received text delta: so
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 12000 bytes of audio data.
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 text delta: far
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 12000 bytes of audio data.
Received 24000 bytes of audio data.
Enter a message: q
Stopping the conversation.
Conversation ended.
Förutsättningar
- En Azure-prenumeration – Skapa en kostnadsfritt
- Node.js LTS- eller ESM-stöd.
- TypeScript är installerat globalt.
- En Azure OpenAI-resurs som skapats i en av de regioner som stöds. Mer information om regiontillgänglighet finns i dokumentationen för modeller och versioner.
- Sedan måste du distribuera en
gpt-realtimemodell med din Azure OpenAI-resurs. Mer information finns i Skapa en resurs och distribuera en modell med Azure OpenAI.
Krav för Microsoft Entra-ID
För den rekommenderade nyckellösa autentiseringen med Microsoft Entra-ID måste du:
- Installera Azure CLI som används för nyckellös autentisering med Microsoft Entra-ID.
-
Cognitive Services UserTilldela rollen till ditt användarkonto. Du kan tilldela roller i Azure-portalen under Åtkomstkontroll (IAM)>Lägg till rolltilldelning.
Distribuera en modell för realtidsljud
Så här distribuerar gpt-realtime du modellen i Azure AI Foundry-portalen:
- Gå till Azure AI Foundry-portalen och skapa eller välj ditt projekt.
- Välj Modeller + slutpunkter under Mina tillgångar i den vänstra rutan.
- Välj + Distribuera modell>Distribuera basmodell för att öppna distributionsfönstret.
- Sök efter och välj
gpt-realtimemodellen och välj sedan Bekräfta. - Granska distributionsinformationen och välj Distribuera.
- Följ guiden för att slutföra distributionen av modellen.
Nu när du har en distribution av modellen kan du interagera med den gpt-realtime i Azure AI Foundry portalens Audio-lekplats eller i realtids-API:t.
Ställ in
Skapa en ny mapp
realtime-audio-quickstart-tsoch gå till snabbstartsmappen med följande kommando:mkdir realtime-audio-quickstart-ts && cd realtime-audio-quickstart-tsSkapa
package.jsonmed följande kommando:npm init -ypackage.jsonUppdatera till ECMAScript med följande kommando:npm pkg set type=moduleInstallera OpenAI-klientbiblioteket för JavaScript med:
npm install openaiInstallera de beroende paket som används av OpenAI-klientbiblioteket för JavaScript med:
npm install wsFör den rekommenderade nyckellösa autentiseringen med Microsoft Entra-ID installerar du
@azure/identitypaketet med:npm install @azure/identity
Hämta resursinformation
Du måste hämta följande information för att autentisera ditt program med din Azure OpenAI-resurs:
| Variabelnamn | Värde |
|---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din resurs från Azure-portalen. |
AZURE_OPENAI_DEPLOYMENT_NAME |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns underResurshanteringsmodelldistributioner> i Azure-portalen. |
Läs mer om nyckellös autentisering och inställning av miljövariabler.
Försiktighet
Om du vill använda den rekommenderade nyckellösa autentiseringen med SDK:t kontrollerar du att AZURE_OPENAI_API_KEY miljövariabeln inte har angetts.
Text i ljudutgång
index.tsSkapa filen med följande kod:import OpenAI from 'openai'; import { OpenAIRealtimeWS } from 'openai/realtime/ws'; import { OpenAIRealtimeError } from 'openai/realtime/internal-base'; import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity"; import { RealtimeSessionCreateRequest } from 'openai/resources/realtime/realtime'; let isCreated = false; let isConfigured = false; let responseDone = false; // Set this to false, if you want to continue receiving events after an error is received. const throwOnError = true; async function main(): Promise<void> { // The endpoint of your Azure OpenAI resource is required. You can set it in the AZURE_OPENAI_ENDPOINT // environment variable or replace the default value below. // You can find it in the Azure AI Foundry portal in the Overview page of your Azure OpenAI resource. // Example: https://{your-resource}.openai.azure.com const endpoint = process.env.AZURE_OPENAI_ENDPOINT || 'AZURE_OPENAI_ENDPOINT'; const baseUrl = endpoint.replace(/\/$/, "") + '/openai/v1'; // The deployment name of your Azure OpenAI model is required. You can set it in the AZURE_OPENAI_DEPLOYMENT_NAME // environment variable or replace the default value below. // You can find it in the Azure AI Foundry portal in the "Models + endpoints" page of your Azure OpenAI resource. // Example: gpt-realtime const deploymentName = process.env.AZURE_OPENAI_DEPLOYMENT_NAME || 'gpt-realtime'; // Keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); const token = await azureADTokenProvider(); // The APIs are compatible with the OpenAI client library. // You can use the OpenAI client library to access the Azure OpenAI APIs. // Make sure to set the baseURL and apiKey to use the Azure OpenAI endpoint and token. const openAIClient = new OpenAI({ baseURL: baseUrl, apiKey: token, }); const realtimeClient = await OpenAIRealtimeWS.create(openAIClient, { model: deploymentName }); realtimeClient.on('error', (receivedError) => receiveError(receivedError)); realtimeClient.on('session.created', (receivedEvent) => receiveEvent(receivedEvent)); realtimeClient.on('session.updated', (receivedEvent) => receiveEvent(receivedEvent)); realtimeClient.on('response.output_audio.delta', (receivedEvent) => receiveEvent(receivedEvent)); realtimeClient.on('response.output_audio_transcript.delta', (receivedEvent) => receiveEvent(receivedEvent)); realtimeClient.on('response.done', (receivedEvent) => receiveEvent(receivedEvent)); console.log('Waiting for events...'); while (!isCreated) { console.log('Waiting for session.created event...'); await new Promise((resolve) => setTimeout(resolve, 100)); } // After the session is created, configure it to enable audio input and output. const sessionConfig: RealtimeSessionCreateRequest = { 'type': 'realtime', 'instructions': 'You are a helpful assistant. You respond by voice and text.', 'output_modalities': ['audio'], 'audio': { 'input': { 'transcription': { 'model': 'whisper-1' }, 'format': { 'type': 'audio/pcm', 'rate': 24000, }, 'turn_detection': { 'type': 'server_vad', 'threshold': 0.5, 'prefix_padding_ms': 300, 'silence_duration_ms': 200, 'create_response': true } }, 'output': { 'voice': 'alloy', 'format': { 'type': 'audio/pcm', 'rate': 24000, } } } }; realtimeClient.send({ 'type': 'session.update', 'session': sessionConfig }); while (!isConfigured) { console.log('Waiting for session.updated event...'); await new Promise((resolve) => setTimeout(resolve, 100)); } // After the session is configured, data can be sent to the session. realtimeClient.send({ 'type': 'conversation.item.create', 'item': { 'type': 'message', 'role': 'user', 'content': [{ type: 'input_text', text: 'Please assist the user.' }] } }); realtimeClient.send({ type: 'response.create' }); // While waiting for the session to finish, the events can be handled in the event handlers. // In this example, we just wait for the first response.done event. while (!responseDone) { console.log('Waiting for response.done event...'); await new Promise((resolve) => setTimeout(resolve, 100)); } console.log('The sample completed successfully.'); realtimeClient.close(); } function receiveError(errorEvent: OpenAIRealtimeError): void { if (errorEvent instanceof OpenAIRealtimeError) { console.error('Received an error event.'); console.error(`Message: ${errorEvent.message}`); console.error(`Stack: ${errorEvent.stack}`); errorEvent } if (throwOnError) { throw errorEvent; } } function receiveEvent(event: any): void { console.log(`Received an event: ${event.type}`); switch (event.type) { case 'session.created': console.log(`Session ID: ${event.session.id}`); isCreated = true; break; case 'session.updated': console.log(`Session ID: ${event.session.id}`); isConfigured = true; break; case 'response.output_audio_transcript.delta': console.log(`Transcript delta: ${event.delta}`); break; case 'response.output_audio.delta': let audioBuffer = Buffer.from(event.delta, 'base64'); console.log(`Audio delta length: ${audioBuffer.length} bytes`); break; case 'response.done': console.log(`Response ID: ${event.response.id}`); console.log(`The final response is: ${event.response.output[0].content[0].transcript}`); responseDone = true; break; default: console.warn(`Unhandled event type: ${event.type}`); } } main().catch((err) => { console.error("The sample encountered an error:", err); }); export { main };tsconfig.jsonSkapa filen för att transpilera TypeScript-koden och kopiera följande kod för 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"] }Installera typdefinitioner för Node
npm i --save-dev @types/nodeTranspilera från TypeScript till JavaScript.
tscLogga in på Azure med följande kommando:
az loginKör koden med följande kommando:
node index.js
Vänta en stund för att få svaret.
Utgång
Skriptet hämtar ett svar från modellen och skriver ut avskriften och mottagna ljuddata.
Utdata ser ut ungefär så här:
Waiting for events...
Waiting for session.created event...
Waiting for session.created event...
Waiting for session.created event...
Waiting for session.created event...
Waiting for session.created event...
Waiting for session.created event...
Waiting for session.created event...
Waiting for session.created event...
Waiting for session.created event...
Waiting for session.created event...
Received an event: session.created
Session ID: sess_CWQkREiv3jlU3gk48bm0a
Waiting for session.updated event...
Waiting for session.updated event...
Received an event: session.updated
Session ID: sess_CWQkREiv3jlU3gk48bm0a
Waiting for response.done event...
Waiting for response.done event...
Waiting for response.done event...
Waiting for response.done event...
Waiting for response.done event...
Received an event: response.output_audio_transcript.delta
Transcript delta: Sure
Received an event: response.output_audio_transcript.delta
Transcript delta: ,
Received an event: response.output_audio_transcript.delta
Transcript delta: I'm
Received an event: response.output_audio_transcript.delta
Transcript delta: here
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 4800 bytes
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 7200 bytes
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio_transcript.delta
Transcript delta: to
Received an event: response.output_audio_transcript.delta
Transcript delta: help
Received an event: response.output_audio_transcript.delta
Transcript delta: .
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio_transcript.delta
Transcript delta: What
Received an event: response.output_audio_transcript.delta
Transcript delta: would
Received an event: response.output_audio_transcript.delta
Transcript delta: you
Received an event: response.output_audio_transcript.delta
Transcript delta: like
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio_transcript.delta
Transcript delta: to
Received an event: response.output_audio_transcript.delta
Transcript delta: do
Received an event: response.output_audio_transcript.delta
Transcript delta: or
Received an event: response.output_audio_transcript.delta
Transcript delta: know
Received an event: response.output_audio_transcript.delta
Transcript delta: about
Received an event: response.output_audio_transcript.delta
Transcript delta: ?
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Waiting for response.done event...
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 12000 bytes
Received an event: response.output_audio.delta
Audio delta length: 24000 bytes
Received an event: response.done
Response ID: resp_CWQkRBrCcCjtHgIEapA92
The final response is: Sure, I'm here to help. What would you like to do or know about?
The sample completed successfully.
Relaterat innehåll
- Läs mer om hur du använder REALTIDS-API:et
- Se API-referensen för realtid
- Läs mer om Azure OpenAI-kvoter och -gränser
- Läs mer om språk- och röststöd för Speech-tjänsten