So verwenden Sie die GPT-4o Echtzeit-API für Sprache und Audio (Vorschau)
Hinweis
Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und sollte nicht für Produktionsworkloads verwendet werden. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.
Die Azure OpenAI GPT-4o Echtzeit-API für Sprache und Audio ist Teil der GPT-4o-Modellfamilie, die latenzarme Unterhaltungsinteraktionen mit Sprachein- und ausgabe unterstützt. Die GPT-4o Realtime-API wurde entwickelt, um Unterhaltungsinteraktionen in Echtzeit und mit niedriger Latenz zu verarbeiten. Die Echtzeit-API eignet sie sich hervorragend für Anwendungsfälle, die Liveinteraktionen zwischen einem Benutzer und einem Modell umfassen, z. B. Kundendienstmitarbeiter, Sprachassistenten und Echtzeitübersetzer.
Die meisten Benutzer der Echtzeit-API müssen Ton von einem Endbenutzer in Echtzeit bereitstellen und empfangen, einschließlich Anwendungen, die WebRTC oder ein Telefoniesystem verwenden. Die Echtzeit-API ist nicht für die direkte Verbindung mit Endbenutzergeräten konzipiert und basiert auf Clientintegrationen zum Beenden von Endbenutzer-Audiodatenströmen.
Unterstützte Modelle
Derzeit unterstützt nur die Version gpt-4o-realtime-preview
: 2024-10-01-preview
unterstützt Echtzeitaudio.
Das gpt-4o-realtime-preview
-Modell ist für globale Bereitstellungen in den Regionen USA, Osten 2 und Schweden, Mitte verfügbar.
Wichtig
Das System speichert Ihre Prompts und Vervollständigungen, wie im Abschnitt „Datennutzung und Zugriff auf Missbrauchsüberwachung der dienstspezifischen Produktbedingungen für Azure OpenAI Service beschrieben wird, es sei denn, die eingeschränkte Ausnahme gilt nicht. Die Missbrauchsüberwachung wird für die Verwendung der gpt-4o-realtime-preview
-API auch für Kunden aktiviert, die ansonsten zur modifizierten Missbrauchsüberwachung zugelassen sind.
API-Unterstützung
Die Unterstützung für die Echtzeit-API wurde erstmals in der API-Version 2024-10-01-preview
hinzugefügt.
Hinweis
Weitere Informationen zur API und Architektur finden Sie im „Azure OpenAI GPT-4o real-time audio“-Repository auf GitHub.
Erste Schritte
Bevor Sie GPT-4o-Echtzeitaudio verwenden können, benötigen Sie Folgendes:
- Azure-Abonnement – kostenloses Abonnement erstellen.
- Eine Azure OpenAI-Ressource, die in einer unterstützten Region erstellt wurde. Weitere Informationen finden Sie unter Erstellen einer Ressource und Bereitstellen eines Modells mit Azure OpenAI.
- Sie benötigen eine Bereitstellung des
gpt-4o-realtime-preview
-Modells in einer unterstützten Region, wie im Abschnitt Unterstützten Modelle beschrieben wird. Sie können ein Modell aus dem Modellkatalog des Azure KI Foundry-Portals oder aus Ihrem Projekt in KI Foundry-Portal bereitstellen.
Schritte zum Bereitstellen und Verwenden des gpt-4o-realtime-preview
-Modells finden Sie in der Schnellstartanleitung zu Echtzeitaudio.
Weitere Informationen zur API und Architektur finden Sie in den verbleibenden Abschnitten in diesem Handbuch.
Beispielcode
Derzeit besteht die schnellste Möglichkeit, mit der Entwicklung mit der GPT-4o-Echtzeit-API zu beginnen, darin, den Beispielcode aus dem GitHub-Repository Azure OpenAI GPT-4o real-time audio herunterzuladen.
Das Azure-Samples/aisearch-openai-rag-audio-Repo enthält ein Beispiel für die Implementierung der RAG-Unterstützung in Anwendungen, die VoIP als Benutzeroberfläche verwenden, unterstützt von der GPT-4o-Echtzeit-API für Audio.
Verbindung und Authentifizierung
Die Realtime-API (über /realtime
) basiert auf der WebSockets-API, um die vollständig asynchrone Streamingkommunikation zwischen Endbenutzer und Modell zu erleichtern.
Wichtig
Gerätedetails wie das Aufzeichnen und Rendern von Audiodaten liegen außerhalb des Umfangs der Echtzeit-API. Sie sollte im Kontext eines vertrauenswürdigen Zwischendiensts verwendet werden, der sowohl Verbindungen mit Endbenutzern als auch Modellendpunktverbindungen verwaltet. Verwenden Sie sie nicht direkt von nicht vertrauenswürdigen Endbenutzergeräten.
Auf die Echtzeit-API wird über eine sichere WebSocket-Verbindung mit dem /realtime
-Endpunkt Ihrer Azure OpenAI-Ressource zugegriffen.
Sie können einen vollständigen Anforderungs-URI erstellen, indem Sie Folgendes verketten:
- Das sichere WebSocket-Protokoll (
wss://
) - Den Hostnamen Ihres Azure OpenAI-Ressourcenendpunkts, z. B.
my-aoai-resource.openai.azure.com
- Den
openai/realtime
-API-Pfad - Einen
api-version
-Abfragezeichenfolge-Parameter für eine unterstützte API-Version, z. B.2024-10-01-preview
- Einen
deployment
-Abfragezeichenfolge-Parameter mit dem Namen Ihrergpt-4o-realtime-preview
-Modellimplementierung
Das folgende Beispiel ist ein gut konstruierter /realtime
-Anforderungs-URI:
wss://my-eastus2-openai-resource.openai.azure.com/openai/realtime?api-version=2024-10-01-preview&deployment=gpt-4o-realtime-preview-deployment-name
Zum Authentifizieren:
- Microsoft Entra (empfohlen): Verwenden Sie die tokenbasierte Authentifizierung mit der
/realtime
-API für eine Azure OpenAI Service-Ressource mit aktivierter verwalteter Identität. Wenden Sie ein abgerufenes Authentifizierungstoken mithilfe einesBearer
-Tokens mit demAuthorization
-Header an. - API-Schlüssel:
api-key
kann auf eine von zwei Arten bereitgestellt werden:- Verwenden eines
api-key
-Verbindungsheaders für die Prehandshake-Verbindung. Diese Option ist in einer Browserumgebung nicht verfügbar. - Verwenden eines
api-key
-Abfragezeichenfolge-Parameters für den Anforderungs-URI. Abfragezeichenfolgenparameter werden bei Verwendung von https/wss verschlüsselt.
- Verwenden eines
Architektur der Echtzeit-API
Sobald die WebSocket-Verbindungssitzung zu /realtime
aufgebaut und authentifiziert ist, findet die funktionale Interaktion über Ereignisse zum Senden und Empfangen von WebSocket-Nachrichten statt. Diese Ereignisse nehmen jeweils die Form eines JSON-Objekts auf.
Ereignisse können parallel gesendet und empfangen werden, und Anwendungen sollten sie in der Regel sowohl gleichzeitig als auch asynchron behandeln.
- Ein Anrufer auf Clientseite stellt eine Verbindung mit
/realtime
her, wodurch eine neuesession
gestartet wird. - Eine
session
erstellt Automatisch eine standardmäßigeconversation
. Mehrere gleichzeitige Unterhaltungen werden nicht unterstützt. - Die
conversation
sammelt Eingabesignale, bis einresponse
-Ereignis ausgelöst wird, entweder über ein direktes Ereignis durch den Anrufer oder automatisch per VAD (Voice Activity Detection, Sprechaktivitätserkennung). - Jede
response
besteht aus einer oder mehrerenitems
, die Nachrichten, Funktionsaufrufe und andere Informationen kapseln können. - Jede Nachricht
item
hatcontent_part
, so dass mehrere Modalitäten (Text und Audio) in einem einzigen Element dargestellt werden können. - Das
session
verwaltet die Konfiguration der Behandlung von Anrufereingaben (z. B. Benutzerton) und der gemeinsamen Erzeugung von Ausgaben. - Jedes vom Aufrufer initiierte
response.create
kann, falls gewünscht, einen Teil des Verhaltens der Ausgaberesponse
außer Kraft setzen. - Das vom Server erstellte
item
und dascontent_part
in den Nachrichten können asynchron und parallel aufgefüllt werden. So können beispielsweise Ton-, Text- und Funktionsinformationen gleichzeitig und nach dem Rotationsprinzip empfangen werden.
Sitzungskonfiguration
Häufig ist das erste Ereignis, das vom Aufrufer in einer neu eingerichteten /realtime
-Sitzung gesendet wird, eine session.update
-Nutzlast. Dieses Ereignis steuert ein breites Spektrum an Ein- und Ausgabeverhalten, wobei Eigenschaften der Ausgabe- und Antwortgenerierung später über das response.create
-Ereignis außer Kraft gesetzt werden können.
Das session.update
-Ereignis kann verwendet werden, um die folgenden Aspekte der Sitzung zu konfigurieren:
- Die Transkription von Benutzeraudioeingaben wird über die
input_audio_transcription
-Eigenschaft der Sitzung aktiviert. Das Angeben eines Transkriptionsmodells (whisper-1
) in dieser Konfiguration ermöglicht die Übermittlung vonconversation.item.audio_transcription.completed
-Ereignissen. - Die Verarbeitung von Sprecherwechseln wird von der
turn_detection
-Eigenschaft gesteuert. Diese Eigenschaft kann aufnone
oderserver_vad
festgelegt werden, wie im Abschnitt Eingabeaudiopuffer und Verarbeiten von Sprecherwechseln beschrieben. - Tools können so konfiguriert werden, dass der Server externe Dienste oder Funktionen aufrufen kann, um die Unterhaltung anzureichern. Tools werden als Teil der
tools
-Eigenschaft in der Sitzungskonfiguration definiert.
Es folgt ein Beispiel-session.update
, das verschiedene Aspekte der Sitzung, einschließlich der Werkzeuge, konfiguriert. Alle Sitzungsparameter sind optional und können bei Bedarf weggelassen werden.
{
"type": "session.update",
"session": {
"voice": "alloy",
"instructions": "Call provided tools if appropriate for the user's input.",
"input_audio_format": "pcm16",
"input_audio_transcription": {
"model": "whisper-1"
},
"turn_detection": {
"threshold": 0.4,
"silence_duration_ms": 600,
"type": "server_vad"
},
"tools": [
{
"type": "function",
"name": "get_weather_for_location",
"description": "gets the weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state such as San Francisco, CA"
},
"unit": {
"type": "string",
"enum": [
"c",
"f"
]
}
},
"required": [
"location",
"unit"
]
}
}
]
}
}
Eingabeaudiopuffer und Verarbeiten von Sprecherwechseln
Der Server verwaltet einen Eingabeaudiopuffer, der vom Client bereitgestellte Audiodaten enthält, die noch nicht zum Unterhaltungszustand committet wurden.
Eine der wichtigsten sitzungsweiten Einstellungen ist turn_detection
, die steuert, wie der Datenfluss zwischen dem Anrufer und dem Modell gehandhabt wird. Die Einstellung turn_detection
kann auf none
oder server_vad
(zur Verwendung der serverseitigen Sprechaktivitätserkennung) festgelegt werden.
Ohne Serverentscheidungsmodus
Standardmäßig ist die Sitzung so konfiguriert, dass der Typ turn_detection
effektiv auf none
festgelegt wird.
Die Sitzung stützt sich auf vom Anrufer initiierten Ereignisse input_audio_buffer.commit
und response.create
, um Gespräche voranzutreiben und Ausgaben zu generieren. Diese Einstellung ist nützlich für Anwendungen oder Situationen, die „Drücken zum Sprechen“ verwenden, in denen ein externes Steuerelement für den Audiofluss verwendet wird (z. B. anruferseitige VAD-Komponente). Diese manuellen Signale können auch im server_vad
-Modus verwendet werden, um die vom VAD ausgelösten Reaktionen zu ergänzen.
- Der Client kann Audioinhalte an den Puffer anfügen, indem er das
input_audio_buffer.append
-Ereignis übermittelt. - Der Client committet den Eingabeaudiopuffer durch Senden des
input_audio_buffer.commit
-Ereignisses. Durch den Commit wird ein neues Benutzernachrichtenelement in der Unterhaltung erstellt. - Der Server antwortet durch Senden des
input_audio_buffer.committed
-Ereignisses. - Der Server antwortet durch Senden des
conversation.item.created
-Ereignisses.
Serverentscheidungsmodus
Die Sitzung kann mit dem auf server_vad
festgelegten Typ turn_detection
konfiguriert werden. In diesem Fall wertet der Server Benutzeraudiodaten vom Client (gesendet über input_audio_buffer.append
) mithilfe einer VAD-Komponente (Sprechaktivitätserkennung) aus. Der Server verwendet diese Audiodaten automatisch, um die Antwortgenerierung für entsprechende Unterhaltungen zu initiieren, wenn ein Ende der Sprache erkannt wird. Die Stilleerkennung für den VAD kann bei der Angabe des server_vad
-Erkennungsmodus konfiguriert werden.
- Der Server sendet das
input_audio_buffer.speech_started
-Ereignis, wenn er den Start von Sprache erkennt. - Der Client kann optional Audioinhalte an den Puffer anfügen, indem er das
input_audio_buffer.append
-Ereignis übermittelt. - Der Server sendet das
input_audio_buffer.speech_stopped
-Ereignis, wenn er das Ende der Sprache erkennt. - Der Server committet den Eingabeaudiopuffer durch Senden des
input_audio_buffer.committed
-Ereignisses. - Der Server sendet das
conversation.item.created
-Ereignis mit dem Benutzernachrichtenelement, das aus dem Audiopuffer erstellt wurde.
Unterhaltung und Antwortgenerierung
Sie können pro Sitzung eine aktive Unterhaltung haben. Die Unterhaltung sammelt Eingabesignale, bis eine Antwort gestartet wird, entweder über ein direktes Ereignis durch den Anrufer oder automatisch per VAD (Voice Activity Detection, Sprechaktivitätserkennung).
- Das Serverereignis
conversation.created
wird direkt nach der Sitzungserstellung zurückgegeben. - Der Client fügt der Unterhaltung neue Elemente mit einem
conversation.item.create
-Ereignis hinzu. - Das Serverereignis
conversation.item.created
wird zurückgegeben, wenn der Client der Unterhaltung ein neues Element hinzufügt.
Optional kann der Client Elemente in der Unterhaltung abschneiden oder löschen:
- Der Client schneidet ein früheres Audionachrichtenelement des Assistenten mit einem
conversation.item.truncate
-Ereignis ab. - Das Serverereignis
conversation.item.truncated
wird zurückgegeben, um Client- und Serverstatus zu synchronisieren. - Der Client löscht ein Element in der Unterhaltung mit einem
conversation.item.delete
-Ereignis. - Das Serverereignis
conversation.item.deleted
wird zurückgegeben, um Client- und Serverstatus zu synchronisieren.
Zugehöriger Inhalt
- Testen des Schnellstarts für Echtzeitaudio
- Siehe Realtime-API-Referenz
- Erfahren Sie mehr über Kontingente und Grenzwerte in Azure OpenAI