Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Referenzdokumentation | Paket (NuGet) | Zusätzliche Beispiele auf GitHub
In diesem Anleitungshandbuch können Sie Azure AI Speech verwenden, um mit Azure OpenAI in Azure AI Foundry Models zu sprechen. Der vom Speech-Dienst erkannte Text wird an Azure OpenAI gesendet. Der Speech-Dienst synthetisiert die Sprache aus der Textantwort von Azure OpenAI.
Sprechen Sie in das Mikrofon, um eine Unterhaltung mit Azure OpenAI zu beginnen.
- Der Speech-Dienst erkennt Ihre Sprache und konvertiert sie in Text (Sprache-in-Text).
- Ihre Anforderung als Text wird an Azure OpenAI gesendet.
- Das Text-zu-Sprache-Feature (Sprachsynthese) des Speech-Diensts synthetisiert die Antwort von Azure OpenAI an den Standardlautsprecher.
Obwohl die Erfahrung dieses Beispiels ein Hin und Her ist, erinnert sich Azure OpenAI nicht an den Kontext Ihrer Unterhaltung.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Im Azure-Portal eine Microsoft Azure OpenAI in Azure AI Foundry Models-Ressource erstellen.
- Stellen Sie ein Modell in Ihrer Azure OpenAI-Ressource bereit. Weitere Informationen zur Modellimplementierung finden Sie in der Anleitung zur Ressourcenbereitstellung in Azure OpenAI.
- Rufen Sie den Azure OpenAI-Ressourcenschlüssel und -Endpunkt ab. Wählen Sie nach der Bereitstellung Ihrer Azure OpenAI-Ressource Zur Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
- Erstellen Sie eine KI Foundry-Ressource für Sprache im Azure-Portal.
- Ermitteln Sie den Ressourcenschlüssel und die Region für Speech. Wählen Sie nach der Bereitstellung Ihrer Speech-Ressource Zu Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
Einrichten der Umgebung
Das Speech SDK ist als NuGet-Paket verfügbar und implementiert .NET Standard 2.0. Sie installieren das Speech SDK im weiteren Verlauf dieses Leitfadens. Überprüfen Sie jedoch zunächst im SDK-Installationsleitfaden, ob weitere Anforderungen gelten.
Festlegen von Umgebungsvariablen
In diesem Beispiel sind Umgebungsvariablen mit den Namen AZURE_OPENAI_API_KEY
, AZURE_OPENAI_ENDPOINT
, AZURE_OPENAI_CHAT_DEPLOYMENT
, SPEECH_KEY
und SPEECH_REGION
erforderlich.
Ihre Anwendung muss authentifiziert werden, um auf Azure AI Foundry-Ressourcen zuzugreifen. In diesem Artikel wird erläutert, wie Sie Umgebungsvariablen verwenden, um Ihre Anmeldeinformationen zu speichern. Anschließend können Sie von Ihrem Code aus auf die Umgebungsvariablen zugreifen, um Ihre Anwendung zu authentifizieren. Verwenden Sie in der Produktion eine sicherere Methode, Ihre Anmeldeinformationen zu speichern und darauf zuzugreifen.
Wichtig
Es wird empfohlen, die Microsoft Entra ID-Authentifizierung mit verwalteten Identitäten für Azure-Ressourcen zu kombinieren, um das Speichern von Anmeldeinformationen mit den in der Cloud ausgeführten Anwendungen zu vermeiden.
Verwenden Sie API-Schlüssel mit Vorsicht. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich. Wenn Sie API-Schlüssel verwenden, speichern Sie sie sicher in Azure Key Vault, rotieren Sie die Schlüssel regelmäßig, und beschränken Sie den Zugriff auf Azure Key Vault mithilfe von rollenbasierter Zugriffssteuerung und Netzwerkzugriffsbeschränkungen. Weitere Informationen zur sicheren Verwendung von API-Schlüsseln in Ihren Apps finden Sie unter API-Schlüssel mit Azure Key Vault.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
Zum Festlegen der Umgebungsvariable für Ihren Ressourcenschlüssel öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.
- Zum Festlegen der Umgebungsvariablen
AZURE_OPENAI_API_KEY
ersetzen Sieyour-openai-key
durch einen der Schlüssel für Ihre Ressource. - Zum Festlegen der Umgebungsvariablen
AZURE_OPENAI_ENDPOINT
ersetzen Sieyour-openai-endpoint
durch eine der Regionen für Ihre Ressource. - Zum Festlegen der Umgebungsvariablen
AZURE_OPENAI_CHAT_DEPLOYMENT
ersetzen Sieyour-openai-deployment-name
durch eine der Regionen für Ihre Ressource. - Zum Festlegen der Umgebungsvariablen
SPEECH_KEY
ersetzen Sieyour-speech-key
durch einen der Schlüssel für Ihre Ressource. - Zum Festlegen der Umgebungsvariablen
SPEECH_REGION
ersetzen Sieyour-speech-region
durch eine der Regionen für Ihre Ressource.
setx AZURE_OPENAI_API_KEY your-openai-key
setx AZURE_OPENAI_ENDPOINT your-openai-endpoint
setx AZURE_OPENAI_CHAT_DEPLOYMENT your-openai-deployment-name
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region
Hinweis
Wenn Sie nur in der aktuell ausgeführten Konsole auf die Umgebungsvariable zugreifen müssen, legen Sie die Umgebungsvariable mit set
anstelle von setx
fest.
Nachdem Sie die Umgebungsvariablen hinzugefügt haben, müssen Sie möglicherweise alle ausgeführten Programme neu starten, die die Umgebungsvariablen lesen müssen, einschließlich des Konsolenfensters. Wenn Sie beispielsweise Visual Studio als Editor verwenden, müssen Sie Visual Studio neu starten, bevor Sie das Beispiel ausführen.
Erkennen von Spracheingaben per Mikrofon
Führen Sie die folgenden Schritte aus, um eine neue Konsolenanwendung zu erstellen.
Öffnen Sie ein Eingabeaufforderungsfenster in dem Ordner, in dem das neue Projekt angezeigt werden soll. Führen Sie diesen Befehl aus, um eine Konsolenanwendung mit der .NET CLI zu erstellen.
dotnet new console
Der Befehl erstellt eine Datei Program.cs im Projektverzeichnis.
Installieren Sie das Speech SDK mit der .NET-CLI in Ihrem neuen Projekt.
dotnet add package Microsoft.CognitiveServices.Speech
Installieren Sie das Azure OpenAI SDK (Vorabversion) in Ihrem neuen Projekt mit der .NET CLI.
dotnet add package Azure.AI.OpenAI --prerelease
Ersetzen Sie den Inhalt von
Program.cs
durch den folgenden Code.using System.Text; using Microsoft.CognitiveServices.Speech; using Microsoft.CognitiveServices.Speech.Audio; using Azure; using Azure.AI.OpenAI; // This example requires environment variables named "AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT" and "AZURE_OPENAI_CHAT_DEPLOYMENT" // Your endpoint should look like the following https://YOUR_OPEN_AI_RESOURCE_NAME.openai.azure.com/ string openAIKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY") ?? throw new ArgumentException("Missing AZURE_OPENAI_API_KEY"); string openAIEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new ArgumentException("Missing AZURE_OPENAI_ENDPOINT"); // Enter the deployment name you chose when you deployed the model. string engine = Environment.GetEnvironmentVariable("AZURE_OPENAI_CHAT_DEPLOYMENT") ?? throw new ArgumentException("Missing AZURE_OPENAI_CHAT_DEPLOYMENT"); // This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" string speechKey = Environment.GetEnvironmentVariable("SPEECH_KEY") ?? throw new ArgumentException("Missing SPEECH_KEY"); string speechRegion = Environment.GetEnvironmentVariable("SPEECH_REGION") ?? throw new ArgumentException("Missing SPEECH_REGION"); // Sentence end symbols for splitting the response into sentences. List<string> sentenceSaperators = new() { ".", "!", "?", ";", "。", "!", "?", ";", "\n" }; try { await ChatWithAzureOpenAI(); } catch (Exception ex) { Console.WriteLine(ex); } // Prompts Azure OpenAI with a request and synthesizes the response. async Task AskAzureOpenAI(string prompt) { object consoleLock = new(); var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion); // The language of the voice that speaks. speechConfig.SpeechSynthesisVoiceName = "en-US-JennyMultilingualNeural"; var audioOutputConfig = AudioConfig.FromDefaultSpeakerOutput(); using var speechSynthesizer = new SpeechSynthesizer(speechConfig, audioOutputConfig); speechSynthesizer.Synthesizing += (sender, args) => { lock (consoleLock) { Console.ForegroundColor = ConsoleColor.Yellow; Console.Write($"[Audio]"); Console.ResetColor(); } }; // Ask Azure OpenAI OpenAIClient client = new(new Uri(openAIEndpoint), new AzureKeyCredential(openAIKey)); var completionsOptions = new ChatCompletionsOptions() { DeploymentName = engine, Messages = { new ChatRequestUserMessage(prompt) }, MaxTokens = 100, }; var responseStream = await client.GetChatCompletionsStreamingAsync(completionsOptions); StringBuilder gptBuffer = new(); await foreach (var completionUpdate in responseStream) { var message = completionUpdate.ContentUpdate; if (string.IsNullOrEmpty(message)) { continue; } lock (consoleLock) { Console.ForegroundColor = ConsoleColor.DarkBlue; Console.Write($"{message}"); Console.ResetColor(); } gptBuffer.Append(message); if (sentenceSaperators.Any(message.Contains)) { var sentence = gptBuffer.ToString().Trim(); if (!string.IsNullOrEmpty(sentence)) { await speechSynthesizer.SpeakTextAsync(sentence); gptBuffer.Clear(); } } } } // Continuously listens for speech input to recognize and send as text to Azure OpenAI async Task ChatWithAzureOpenAI() { // Should be the locale for the speaker's language. var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion); speechConfig.SpeechRecognitionLanguage = "en-US"; using var audioConfig = AudioConfig.FromDefaultMicrophoneInput(); using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig); var conversationEnded = false; while (!conversationEnded) { Console.WriteLine("Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation."); // Get audio from the microphone and then send it to the TTS service. var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync(); switch (speechRecognitionResult.Reason) { case ResultReason.RecognizedSpeech: if (speechRecognitionResult.Text == "Stop.") { Console.WriteLine("Conversation ended."); conversationEnded = true; } else { Console.WriteLine($"Recognized speech: {speechRecognitionResult.Text}"); await AskAzureOpenAI(speechRecognitionResult.Text); } break; case ResultReason.NoMatch: Console.WriteLine($"No speech could be recognized: "); break; case ResultReason.Canceled: var cancellationDetails = CancellationDetails.FromResult(speechRecognitionResult); Console.WriteLine($"Speech Recognition canceled: {cancellationDetails.Reason}"); if (cancellationDetails.Reason == CancellationReason.Error) { Console.WriteLine($"Error details={cancellationDetails.ErrorDetails}"); } break; } } }
Um die Anzahl der von Azure OpenAI zurückgegebenen Token zu erhöhen oder zu verringern, ändern Sie die Eigenschaft
MaxTokens
in der KlasseninstanzChatCompletionsOptions
. Weitere Informationen zu Token und Kostenauswirkungen finden Sie unter Azure OpenAI-Token und Azure OpenAI-Preise.Führen Sie die neue Konsolenanwendung aus, um die Spracherkennung über ein Mikrofon zu starten:
dotnet run
Wichtig
Stellen Sie sicher, dass Sie die AZURE_OPENAI_API_KEY
AZURE_OPENAI_ENDPOINT
, AZURE_OPENAI_CHAT_DEPLOYMENT
, SPEECH_KEY
, SPEECH_REGION
und wie beschrieben festlegen. Wenn Sie diese Variablen nicht festlegen, wird für das Beispiel eine Fehlermeldung ausgegeben.
Sprechen Sie in Ihr Mikrofon, wenn Sie dazu aufgefordert werden. Die Konsolenausgabe enthält die Eingabeaufforderung für Sie, mit dem Sprechen zu beginnen, dann Ihre Anforderung als Text und dann die Antwort von Azure OpenAI als Text. Die Antwort von Azure OpenAI sollte von der Sprachsynthese konvertiert und dann an den Standardlautsprecher ausgegeben werden.
PS C:\dev\openai\csharp> dotnet run
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Recognized speech:Make a comma separated list of all continents.
Azure OpenAI response:Africa, Antarctica, Asia, Australia, Europe, North America, South America
Speech synthesized to speaker for text [Africa, Antarctica, Asia, Australia, Europe, North America, South America]
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Recognized speech: Make a comma separated list of 1 Astronomical observatory for each continent. A list should include each continent name in parentheses.
Azure OpenAI response:Mauna Kea Observatories (North America), La Silla Observatory (South America), Tenerife Observatory (Europe), Siding Spring Observatory (Australia), Beijing Xinglong Observatory (Asia), Naukluft Plateau Observatory (Africa), Rutherford Appleton Laboratory (Antarctica)
Speech synthesized to speaker for text [Mauna Kea Observatories (North America), La Silla Observatory (South America), Tenerife Observatory (Europe), Siding Spring Observatory (Australia), Beijing Xinglong Observatory (Asia), Naukluft Plateau Observatory (Africa), Rutherford Appleton Laboratory (Antarctica)]
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Conversation ended.
PS C:\dev\openai\csharp>
Hinweise
Im Folgenden finden Sie einige weitere Überlegungen:
- Um die Sprache für die Spracherkennung zu ändern, ersetzen Sie
en-US
durch eine andereen-US
. Beispiel:es-ES
für Spanisch (Spanien). Die Standardsprache isten-US
. Ausführliche Informationen zum Identifizieren einer von mehreren Sprachen, die gesprochen werden können, finden Sie unter Sprachenerkennung. - Um die Stimme zu ändern, die Sie hören, ersetzen Sie
en-US-JennyMultilingualNeural
durch eine andere unterstützte Stimme. Wenn die Stimme nicht die Sprache des von Azure OpenAI zurückgegebenen Texts spricht, gibt der Speech-Dienst kein synthetisiertes Audio aus. - Verwenden Sie zum Reduzieren der Latenz für die Text-zu-Sprache-Ausgabe das Feature zum Streamen von Text, das die Textverarbeitung in Echtzeit für die schnelle Audiogenerierung ermöglicht und die Latenz minimiert und die Fluidität und Reaktionsfähigkeit von Audioausgaben in Echtzeit verbessert. Weitere Informationen finden Sie unter Verwendung von Textstreaming.
- Wenn Sie TTS Avatar als visuelle Oberfläche der Sprachausgabe aktivieren möchten, lesen Sie den Artikel Durchführen der Echtzeitsynthese für Text-zu-Sprache-Avatare und sehen Sie sich den Beispielcode für Chatszenarios mit Avatar an.
- Azure OpenAI führt außerdem Inhaltsmoderation für die Eingabeaufforderungen und generierten Ausgaben aus. Die Eingabeaufforderungen oder Antworten können gefiltert werden, wenn schädliche Inhalte erkannt werden. Weitere Informationen finden Sie im Artikel zu Inhaltsfilterung.
Bereinigen von Ressourcen
Sie können das Azure-Portal oder die Azure-Befehlszeilenschnittstelle (CLI) verwenden, um die erstellte Speech-Ressource zu entfernen.
Referenzdokumentation | Paket (PyPi) | Zusätzliche Beispiele auf GitHub
In diesem Anleitungshandbuch können Sie Azure AI Speech verwenden, um mit Azure OpenAI in Azure AI Foundry Models zu sprechen. Der vom Speech-Dienst erkannte Text wird an Azure OpenAI gesendet. Der Speech-Dienst synthetisiert die Sprache aus der Textantwort von Azure OpenAI.
Sprechen Sie in das Mikrofon, um eine Unterhaltung mit Azure OpenAI zu beginnen.
- Der Speech-Dienst erkennt Ihre Sprache und konvertiert sie in Text (Sprache-in-Text).
- Ihre Anforderung als Text wird an Azure OpenAI gesendet.
- Das Text-zu-Sprache-Feature (Sprachsynthese) des Speech-Diensts synthetisiert die Antwort von Azure OpenAI an den Standardlautsprecher.
Obwohl die Erfahrung dieses Beispiels ein Hin und Her ist, erinnert sich Azure OpenAI nicht an den Kontext Ihrer Unterhaltung.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Im Azure-Portal eine Microsoft Azure OpenAI in Azure AI Foundry Models-Ressource erstellen.
- Stellen Sie ein Modell in Ihrer Azure OpenAI-Ressource bereit. Weitere Informationen zur Modellimplementierung finden Sie in der Anleitung zur Ressourcenbereitstellung in Azure OpenAI.
- Rufen Sie den Azure OpenAI-Ressourcenschlüssel und -Endpunkt ab. Wählen Sie nach der Bereitstellung Ihrer Azure OpenAI-Ressource Zur Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
- Erstellen Sie eine KI Foundry-Ressource für Sprache im Azure-Portal.
- Ermitteln Sie den Ressourcenschlüssel und die Region für Speech. Wählen Sie nach der Bereitstellung Ihrer Speech-Ressource Zu Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
Einrichten der Umgebung
Das Speech SDK für Python ist als PyPI-Modul (Python Package Index) verfügbar. Das Speech SDK für Python ist mit Windows, Linux und macOS kompatibel.
- Installieren Sie Microsoft Visual C++ Redistributable für Visual Studio 2015, 2017, 2019 und 2022 für Ihre Plattform. Bei der Erstinstallation dieses Pakets ist möglicherweise ein Neustart erforderlich.
- Unter Linux müssen Sie die x64-Zielarchitektur verwenden.
Installieren Sie eine Python-Version ab 3.7. Prüfen Sie im SDK-Installationshandbuch zunächst, ob weitere Anforderungen gelten.
Installieren Sie die folgenden Python-Bibliotheken: os
, requests
, json
.
Festlegen von Umgebungsvariablen
In diesem Beispiel sind Umgebungsvariablen mit den Namen AZURE_OPENAI_API_KEY
, AZURE_OPENAI_ENDPOINT
, AZURE_OPENAI_CHAT_DEPLOYMENT
, SPEECH_KEY
und SPEECH_REGION
erforderlich.
Ihre Anwendung muss authentifiziert werden, um auf Azure AI Foundry-Ressourcen zuzugreifen. In diesem Artikel wird erläutert, wie Sie Umgebungsvariablen verwenden, um Ihre Anmeldeinformationen zu speichern. Anschließend können Sie von Ihrem Code aus auf die Umgebungsvariablen zugreifen, um Ihre Anwendung zu authentifizieren. Verwenden Sie in der Produktion eine sicherere Methode, Ihre Anmeldeinformationen zu speichern und darauf zuzugreifen.
Wichtig
Es wird empfohlen, die Microsoft Entra ID-Authentifizierung mit verwalteten Identitäten für Azure-Ressourcen zu kombinieren, um das Speichern von Anmeldeinformationen mit den in der Cloud ausgeführten Anwendungen zu vermeiden.
Verwenden Sie API-Schlüssel mit Vorsicht. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich. Wenn Sie API-Schlüssel verwenden, speichern Sie sie sicher in Azure Key Vault, rotieren Sie die Schlüssel regelmäßig, und beschränken Sie den Zugriff auf Azure Key Vault mithilfe von rollenbasierter Zugriffssteuerung und Netzwerkzugriffsbeschränkungen. Weitere Informationen zur sicheren Verwendung von API-Schlüsseln in Ihren Apps finden Sie unter API-Schlüssel mit Azure Key Vault.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
Zum Festlegen der Umgebungsvariable für Ihren Ressourcenschlüssel öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.
- Zum Festlegen der Umgebungsvariablen
AZURE_OPENAI_API_KEY
ersetzen Sieyour-openai-key
durch einen der Schlüssel für Ihre Ressource. - Zum Festlegen der Umgebungsvariablen
AZURE_OPENAI_ENDPOINT
ersetzen Sieyour-openai-endpoint
durch eine der Regionen für Ihre Ressource. - Zum Festlegen der Umgebungsvariablen
AZURE_OPENAI_CHAT_DEPLOYMENT
ersetzen Sieyour-openai-deployment-name
durch eine der Regionen für Ihre Ressource. - Zum Festlegen der Umgebungsvariablen
SPEECH_KEY
ersetzen Sieyour-speech-key
durch einen der Schlüssel für Ihre Ressource. - Zum Festlegen der Umgebungsvariablen
SPEECH_REGION
ersetzen Sieyour-speech-region
durch eine der Regionen für Ihre Ressource.
setx AZURE_OPENAI_API_KEY your-openai-key
setx AZURE_OPENAI_ENDPOINT your-openai-endpoint
setx AZURE_OPENAI_CHAT_DEPLOYMENT your-openai-deployment-name
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region
Hinweis
Wenn Sie nur in der aktuell ausgeführten Konsole auf die Umgebungsvariable zugreifen müssen, legen Sie die Umgebungsvariable mit set
anstelle von setx
fest.
Nachdem Sie die Umgebungsvariablen hinzugefügt haben, müssen Sie möglicherweise alle ausgeführten Programme neu starten, die die Umgebungsvariablen lesen müssen, einschließlich des Konsolenfensters. Wenn Sie beispielsweise Visual Studio als Editor verwenden, müssen Sie Visual Studio neu starten, bevor Sie das Beispiel ausführen.
Erkennen von Spracheingaben per Mikrofon
Führen Sie die folgenden Schritte aus, um eine neue Konsolenanwendung zu erstellen.
Öffnen Sie ein Eingabeaufforderungsfenster in dem Ordner, in dem das neue Projekt angezeigt werden soll. Öffnen Sie am gewünschten Speicherort für das neue Projekt eine Eingabeaufforderung, und erstellen Sie eine neue Datei mit dem Namen
azure-openai-speech.py
.Führen Sie diesen Befehl aus, um das Speech SDK zu installieren:
pip install azure-cognitiveservices-speech
Führen Sie diesen Befehl aus, um das OpenAI-SDK zu installieren:
pip install openai
Hinweis
Diese Bibliothek wird von OpenAI (nicht von Microsoft Azure) unterhalten. Sehen Sie sich die den Releaseverlauf oder den version.py-Commitverlauf an, um die neuesten Updates der Bibliothek nachzuverfolgen.
Erstellen Sie eine Datei mit dem Namen azure-openai-speech.py. Kopieren Sie den folgenden Code in diese Datei:
import os import azure.cognitiveservices.speech as speechsdk from openai import AzureOpenAI # This example requires environment variables named "AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT" and "AZURE_OPENAI_CHAT_DEPLOYMENT" # Your endpoint should look like the following https://YOUR_OPEN_AI_RESOURCE_NAME.openai.azure.com/ client = AzureOpenAI( azure_endpoint=os.environ.get('AZURE_OPENAI_ENDPOINT'), api_key=os.environ.get('AZURE_OPENAI_API_KEY'), api_version="2023-05-15" ) # This will correspond to the custom name you chose for your deployment when you deployed a model. deployment_id=os.environ.get('AZURE_OPENAI_CHAT_DEPLOYMENT') # This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('SPEECH_KEY'), region=os.environ.get('SPEECH_REGION')) audio_output_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True) audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True) # Should be the locale for the speaker's language. speech_config.speech_recognition_language="en-US" speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config) # The language of the voice that responds on behalf of Azure OpenAI. speech_config.speech_synthesis_voice_name='en-US-JennyMultilingualNeural' speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_output_config) # tts sentence end mark tts_sentence_end = [ ".", "!", "?", ";", "。", "!", "?", ";", "\n" ] # Prompts Azure OpenAI with a request and synthesizes the response. def ask_azure_openai(prompt): # Ask Azure OpenAI in streaming way response = client.chat.completions.create(model=deployment_id, max_tokens=200, stream=True, messages=[ {"role": "user", "content": prompt} ]) collected_messages = [] last_tts_request = None # iterate through the stream response stream for chunk in response: if len(chunk.choices) > 0: chunk_message = chunk.choices[0].delta.content # extract the message if chunk_message is not None: collected_messages.append(chunk_message) # save the message if chunk_message in tts_sentence_end: # sentence end found text = ''.join(collected_messages).strip() # join the recieved message together to build a sentence if text != '': # if sentence only have \n or space, we could skip print(f"Speech synthesized to speaker for: {text}") last_tts_request = speech_synthesizer.speak_text_async(text) collected_messages.clear() if last_tts_request: last_tts_request.get() # Continuously listens for speech input to recognize and send as text to Azure OpenAI def chat_with_azure_openai(): while True: print("Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.") try: # Get audio from the microphone and then send it to the TTS service. speech_recognition_result = speech_recognizer.recognize_once_async().get() # If speech is recognized, send it to Azure OpenAI and listen for the response. if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech: if speech_recognition_result.text == "Stop.": print("Conversation ended.") break print("Recognized speech: {}".format(speech_recognition_result.text)) ask_azure_openai(speech_recognition_result.text) elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch: print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details)) break elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled: cancellation_details = speech_recognition_result.cancellation_details print("Speech Recognition canceled: {}".format(cancellation_details.reason)) if cancellation_details.reason == speechsdk.CancellationReason.Error: print("Error details: {}".format(cancellation_details.error_details)) except EOFError: break # Main try: chat_with_azure_openai() except Exception as err: print("Encountered exception. {}".format(err))
Um die Anzahl der von Azure OpenAI zurückgegebenen Token zu erhöhen oder zu verringern, ändern Sie den
max_tokens
-Parameter. Weitere Informationen zu Token und Kostenauswirkungen finden Sie unter Azure OpenAI-Token und Azure OpenAI-Preise.Führen Sie die neue Konsolenanwendung aus, um die Spracherkennung über ein Mikrofon zu starten:
python azure-openai-speech.py
Wichtig
Stellen Sie sicher, dass Sie die Umgebungsvariablen AZURE_OPENAI_API_KEY
, AZURE_OPENAI_ENDPOINT
, AZURE_OPENAI_CHAT_DEPLOYMENT
, SPEECH_KEY
und SPEECH_REGION
wie zuvor beschrieben festlegen. Wenn Sie diese Variablen nicht festlegen, wird für das Beispiel eine Fehlermeldung ausgegeben.
Sprechen Sie in Ihr Mikrofon, wenn Sie dazu aufgefordert werden. Die Konsolenausgabe enthält die Eingabeaufforderung für Sie, mit dem Sprechen zu beginnen, dann Ihre Anforderung als Text und dann die Antwort von Azure OpenAI als Text. Die Antwort von Azure OpenAI sollte von der Sprachsynthese konvertiert und dann an den Standardlautsprecher ausgegeben werden.
PS C:\dev\openai\python> python.exe .\azure-openai-speech.py
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Recognized speech:Make a comma separated list of all continents.
Azure OpenAI response:Africa, Antarctica, Asia, Australia, Europe, North America, South America
Speech synthesized to speaker for text [Africa, Antarctica, Asia, Australia, Europe, North America, South America]
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Recognized speech: Make a comma separated list of 1 Astronomical observatory for each continent. A list should include each continent name in parentheses.
Azure OpenAI response:Mauna Kea Observatories (North America), La Silla Observatory (South America), Tenerife Observatory (Europe), Siding Spring Observatory (Australia), Beijing Xinglong Observatory (Asia), Naukluft Plateau Observatory (Africa), Rutherford Appleton Laboratory (Antarctica)
Speech synthesized to speaker for text [Mauna Kea Observatories (North America), La Silla Observatory (South America), Tenerife Observatory (Europe), Siding Spring Observatory (Australia), Beijing Xinglong Observatory (Asia), Naukluft Plateau Observatory (Africa), Rutherford Appleton Laboratory (Antarctica)]
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Conversation ended.
PS C:\dev\openai\python>
Hinweise
Im Folgenden finden Sie einige weitere Überlegungen:
- Um die Sprache für die Spracherkennung zu ändern, ersetzen Sie
en-US
durch eine andereen-US
. Beispiel:es-ES
für Spanisch (Spanien). Die Standardsprache isten-US
. Ausführliche Informationen zum Identifizieren einer von mehreren Sprachen, die gesprochen werden können, finden Sie unter Sprachenerkennung. - Um die Stimme zu ändern, die Sie hören, ersetzen Sie
en-US-JennyMultilingualNeural
durch eine andere unterstützte Stimme. Wenn die Stimme nicht die Sprache des von Azure OpenAI zurückgegebenen Texts spricht, gibt der Speech-Dienst kein synthetisiertes Audio aus. - Verwenden Sie zum Reduzieren der Latenz für die Text-zu-Sprache-Ausgabe das Feature zum Streamen von Text, das die Textverarbeitung in Echtzeit für die schnelle Audiogenerierung ermöglicht und die Latenz minimiert und die Fluidität und Reaktionsfähigkeit von Audioausgaben in Echtzeit verbessert. Weitere Informationen finden Sie unter Verwendung von Textstreaming.
- Wenn Sie TTS Avatar als visuelle Oberfläche der Sprachausgabe aktivieren möchten, lesen Sie den Artikel Durchführen der Echtzeitsynthese für Text-zu-Sprache-Avatare und sehen Sie sich den Beispielcode für Chatszenarios mit Avatar an.
- Azure OpenAI führt außerdem Inhaltsmoderation für die Eingabeaufforderungen und generierten Ausgaben aus. Die Eingabeaufforderungen oder Antworten können gefiltert werden, wenn schädliche Inhalte erkannt werden. Weitere Informationen finden Sie im Artikel zu Inhaltsfilterung.
Bereinigen von Ressourcen
Sie können das Azure-Portal oder die Azure-Befehlszeilenschnittstelle (CLI) verwenden, um die erstellte Speech-Ressource zu entfernen.