Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Başvuru belgeleri | Paketi (NuGet) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, Azure AI Foundry Modellerinde Azure OpenAI ile iletişim kurmak için Azure AI Konuşma Hizmeti'ni kullanabilirsiniz. Konuşma hizmeti tarafından tanınan metin Azure OpenAI'ye gönderilir. Konuşma tanıma hizmeti, Azure OpenAI'den gelen metin yanıtından konuşmayı sentezler.
Azure OpenAI ile konuşma başlatmak için mikrofona konuşun.
- Konuşma tanıma hizmeti konuşmanızı tanır ve metne dönüştürür (konuşmadan metne).
- Metin olarak isteğiniz Azure OpenAI'ye gönderilir.
- Konuşma hizmeti metninden konuşmaya özelliği, Yanıtı Azure OpenAI'den varsayılan konuşmacıya sentezler.
Bu örneğin deneyimi bir ileri geri alışveriş olsa da, Azure OpenAI konuşmanızın bağlamını hatırlamıyor.
Önkoşullar
- Azure aboneliği - Ücretsiz olarak oluşturun
- Azure portalında Azure AI Foundry Models'de bir Microsoft Azure OpenAI kaynağı oluşturun .
- Azure OpenAI kaynağınızda bir model dağıtma. Model dağıtımı hakkında daha fazla bilgi için bkz. Azure OpenAI kaynak dağıtımı kılavuzu.
- Azure OpenAI kaynak anahtarını ve uç noktasını alın. Azure OpenAI kaynağınız dağıtıldıktan sonra anahtarları görüntülemek ve yönetmek için Kaynağa git'i seçin.
- Azure portalında Konuşma için bir AI Foundry kaynağı oluşturun.
- Konuşma kaynak anahtarını ve bölgesini alın. Konuşma kaynağınız dağıtıldıktan sonra anahtarları görüntülemek ve yönetmek için Kaynağa git'i seçin.
Ortamı ayarlama
Konuşma SDK'sı bir NuGet paketi olarak kullanılabilir ve .NET Standard 2.0'ı uygular. Konuşma SDK'sını bu kılavuzun ilerleyen bölümlerinde yüklersiniz, ancak daha fazla gereksinim için önce SDK yükleme kılavuzunu gözden geçirin.
Ortam değişkenlerini belirleme
Bu örnekte , , AZURE_OPENAI_API_KEY
, AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_CHAT_DEPLOYMENT
ve SPEECH_KEY
adlı SPEECH_REGION
ortam değişkenleri gerekir.
Azure AI Foundry kaynaklarına erişmek için uygulamanızın kimliğinin doğrulanması gerekir. Bu makalede, kimlik bilgilerinizi depolamak için ortam değişkenlerini nasıl kullanacağınız gösterilmektedir. Ardından uygulamanızın kimliğini doğrulamak için kodunuzdan ortam değişkenlerine erişebilirsiniz. Üretim için kimlik bilgilerinizi depolamak ve erişmek için daha güvenli bir yol kullanın.
Önemli
Kimlik bilgilerini bulutta çalışan uygulamalarınızla depolamaktan kaçınmak için Azure kaynakları için yönetilen kimliklerle Microsoft Entra Id kimlik doğrulaması yapmanızı öneririz.
API anahtarlarını dikkatli kullanın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin. API anahtarlarını kullanıyorsanız, bunları Azure Key Vault'ta güvenli bir şekilde depolayın, anahtarları düzenli olarak döndürün ve rol tabanlı erişim denetimi ve ağ erişim kısıtlamalarını kullanarak Azure Key Vault'a erişimi kısıtlayın. Uygulamalarınızda API anahtarlarını güvenli bir şekilde kullanma hakkında daha fazla bilgi için bkz . Azure Key Vault ile API anahtarları.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
Ortam değişkenlerini ayarlamak için bir konsol penceresi açın ve işletim sisteminizle geliştirme ortamınızın yönergelerini izleyin.
- Ortam değişkenini
AZURE_OPENAI_API_KEY
ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirinyour-openai-key
. - Ortam değişkenini
AZURE_OPENAI_ENDPOINT
ayarlamak için değerini kaynağınızın bölgelerinden biriyle değiştirinyour-openai-endpoint
. - Ortam değişkenini
AZURE_OPENAI_CHAT_DEPLOYMENT
ayarlamak için değerini kaynağınızın bölgelerinden biriyle değiştirinyour-openai-deployment-name
. - Ortam değişkenini
SPEECH_KEY
ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirinyour-speech-key
. - Ortam değişkenini
SPEECH_REGION
ayarlamak için değerini kaynağınızın bölgelerinden biriyle değiştirinyour-speech-region
.
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
Not
Yalnızca geçerli çalışan konsolda ortam değişkenine erişmeniz gerekiyorsa ortam değişkenini yerine set
ile setx
ayarlayın.
Ortam değişkenlerini ekledikten sonra, konsol penceresi de dahil olmak üzere ortam değişkenini okuması gereken tüm çalışan programları yeniden başlatmanız gerekebilir. Örneğin, düzenleyiciniz Visual Studio ise, örneği çalıştırmadan önce Visual Studio'yu yeniden başlatın.
Mikrofondan konuşmayı tanıma
Yeni bir konsol uygulaması oluşturmak için bu adımları izleyin.
Yeni projeyi istediğiniz klasörde bir komut istemi penceresi açın. .NET CLI ile bir konsol uygulaması oluşturmak için bu komutu çalıştırın.
dotnet new console
komutu proje dizininde bir Program.cs dosyası oluşturur.
.NET CLI ile yeni projenize Konuşma SDK'sını yükleyin.
dotnet add package Microsoft.CognitiveServices.Speech
.NET CLI ile yeni projenize Azure OpenAI SDK'sını (ön sürüm) yükleyin.
dotnet add package Azure.AI.OpenAI --prerelease
öğesinin içeriğini
Program.cs
aşağıdaki kodla değiştirin.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; } } }
Azure OpenAI tarafından döndürülen belirteç sayısını artırmak veya azaltmak için sınıf örneğindeki
MaxTokens
özelliğini değiştirinChatCompletionsOptions
. Belirteçler ve maliyet etkileri hakkında daha fazla bilgi için bkz . Azure OpenAI belirteçleri ve Azure OpenAI fiyatlandırması.Mikrofondan konuşma tanımayı başlatmak için yeni konsol uygulamanızı çalıştırın:
dotnet run
Önemli
, , AZURE_OPENAI_API_KEY
AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_CHAT_DEPLOYMENT
ve SPEECH_KEY
SPEECH_REGION
açıklandığı gibi ayarladığınızdan emin olun. Bu değişkenleri ayarlamazsanız örnek bir hata iletisiyle başarısız olur.
İstendiğinde mikrofonunuza konuşun. Konsol çıktısı, konuşmaya başlamanızı, ardından isteğinizi metin olarak ve ardından Azure OpenAI'den metin olarak yanıtınızı içerir. Azure OpenAI'den gelen yanıt metinden konuşmaya dönüştürülmeli ve ardından varsayılan konuşmacıya çıkarılmalıdır.
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>
Açıklamalar
Dikkat edilmesi gereken diğer noktalar şunlardır:
- Konuşma tanıma dilini değiştirmek için öğesini desteklenen başka bir
en-US
değiştirin. Örneğin,es-ES
İspanyolca (İspanya) için. Varsayılan dil:en-US
. Konuşulabilecek birden çok dilden birini belirleme hakkında ayrıntılı bilgi için bkz . Dil belirleme. - Duyduğunuz sesi değiştirmek için öğesini desteklenen başka bir
en-US-JennyMultilingualNeural
değiştirin. Ses, Azure OpenAI'den döndürülen metnin dilini konuşmazsa Konuşma hizmeti sentezlenmiş ses çıkışı vermez. - Metinden konuşmaya çıkışın gecikme süresini azaltmak için, hızlı ses üretimi için gerçek zamanlı metin işlemeye olanak tanıyan ve gecikme süresini en aza indirerek gerçek zamanlı ses çıkışlarının akıcılığını ve yanıt hızını artıran metin akışı özelliğini kullanın. Metin akışının nasıl kullanılacağına bakın.
- Konuşma çıkışının görsel bir deneyimi olarak TTS Avatarını etkinleştirmek için, metinden konuşmaya avatar için gerçek zamanlı senteze ve avatar ile sohbet senaryosu için örnek koda bakın.
- Azure OpenAI ayrıca istem girişlerinde ve oluşturulan çıkışlarda con çadır modu ration gerçekleştirir. Zararlı içerik algılanırsa istemler veya yanıtlar filtrelenebilir. Daha fazla bilgi için içerik filtreleme makalesine bakın.
Kaynakları temizleme
Oluşturduğunuz Konuşma kaynağını kaldırmak için Azure portalını veya Azure Komut Satırı Arabirimi'ni (CLI) kullanabilirsiniz.
Başvuru belgeleri | Paketi (PyPi) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, Azure AI Foundry Modellerinde Azure OpenAI ile iletişim kurmak için Azure AI Konuşma Hizmeti'ni kullanabilirsiniz. Konuşma hizmeti tarafından tanınan metin Azure OpenAI'ye gönderilir. Konuşma tanıma hizmeti, Azure OpenAI'den gelen metin yanıtından konuşmayı sentezler.
Azure OpenAI ile konuşma başlatmak için mikrofona konuşun.
- Konuşma tanıma hizmeti konuşmanızı tanır ve metne dönüştürür (konuşmadan metne).
- Metin olarak isteğiniz Azure OpenAI'ye gönderilir.
- Konuşma hizmeti metninden konuşmaya özelliği, Yanıtı Azure OpenAI'den varsayılan konuşmacıya sentezler.
Bu örneğin deneyimi bir ileri geri alışveriş olsa da, Azure OpenAI konuşmanızın bağlamını hatırlamıyor.
Önkoşullar
- Azure aboneliği - Ücretsiz olarak oluşturun
- Azure portalında Azure AI Foundry Models'de bir Microsoft Azure OpenAI kaynağı oluşturun .
- Azure OpenAI kaynağınızda bir model dağıtma. Model dağıtımı hakkında daha fazla bilgi için bkz. Azure OpenAI kaynak dağıtımı kılavuzu.
- Azure OpenAI kaynak anahtarını ve uç noktasını alın. Azure OpenAI kaynağınız dağıtıldıktan sonra anahtarları görüntülemek ve yönetmek için Kaynağa git'i seçin.
- Azure portalında Konuşma için bir AI Foundry kaynağı oluşturun.
- Konuşma kaynak anahtarını ve bölgesini alın. Konuşma kaynağınız dağıtıldıktan sonra anahtarları görüntülemek ve yönetmek için Kaynağa git'i seçin.
Ortamı ayarlama
Python için Konuşma SDK'sı Python Paket Dizini (PyPI) modülü olarak kullanılabilir. Python için Konuşma SDK'sı Windows, Linux ve macOS ile uyumludur.
- Platformunuz için Microsoft Visual Studio için Visual C++ Yeniden Dağıtılabilir 2015, 2017, 2019 ve 2022'yi yükleyin. Bu paketi ilk kez yüklemek için yeniden başlatma gerekebilir.
- Linux'ta x64 hedef mimarisini kullanmanız gerekir.
Python'ın 3.7 veya sonraki bir sürümünden bir sürümünü yükleyin. Daha fazla gereksinim için önce SDK yükleme kılavuzuna bakın.
Şu Python kitaplıklarını yükleyin: os
, requests
, json
.
Ortam değişkenlerini belirleme
Bu örnekte , , AZURE_OPENAI_API_KEY
, AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_CHAT_DEPLOYMENT
ve SPEECH_KEY
adlı SPEECH_REGION
ortam değişkenleri gerekir.
Azure AI Foundry kaynaklarına erişmek için uygulamanızın kimliğinin doğrulanması gerekir. Bu makalede, kimlik bilgilerinizi depolamak için ortam değişkenlerini nasıl kullanacağınız gösterilmektedir. Ardından uygulamanızın kimliğini doğrulamak için kodunuzdan ortam değişkenlerine erişebilirsiniz. Üretim için kimlik bilgilerinizi depolamak ve erişmek için daha güvenli bir yol kullanın.
Önemli
Kimlik bilgilerini bulutta çalışan uygulamalarınızla depolamaktan kaçınmak için Azure kaynakları için yönetilen kimliklerle Microsoft Entra Id kimlik doğrulaması yapmanızı öneririz.
API anahtarlarını dikkatli kullanın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin. API anahtarlarını kullanıyorsanız, bunları Azure Key Vault'ta güvenli bir şekilde depolayın, anahtarları düzenli olarak döndürün ve rol tabanlı erişim denetimi ve ağ erişim kısıtlamalarını kullanarak Azure Key Vault'a erişimi kısıtlayın. Uygulamalarınızda API anahtarlarını güvenli bir şekilde kullanma hakkında daha fazla bilgi için bkz . Azure Key Vault ile API anahtarları.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
Ortam değişkenlerini ayarlamak için bir konsol penceresi açın ve işletim sisteminizle geliştirme ortamınızın yönergelerini izleyin.
- Ortam değişkenini
AZURE_OPENAI_API_KEY
ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirinyour-openai-key
. - Ortam değişkenini
AZURE_OPENAI_ENDPOINT
ayarlamak için değerini kaynağınızın bölgelerinden biriyle değiştirinyour-openai-endpoint
. - Ortam değişkenini
AZURE_OPENAI_CHAT_DEPLOYMENT
ayarlamak için değerini kaynağınızın bölgelerinden biriyle değiştirinyour-openai-deployment-name
. - Ortam değişkenini
SPEECH_KEY
ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirinyour-speech-key
. - Ortam değişkenini
SPEECH_REGION
ayarlamak için değerini kaynağınızın bölgelerinden biriyle değiştirinyour-speech-region
.
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
Not
Yalnızca geçerli çalışan konsolda ortam değişkenine erişmeniz gerekiyorsa ortam değişkenini yerine set
ile setx
ayarlayın.
Ortam değişkenlerini ekledikten sonra, konsol penceresi de dahil olmak üzere ortam değişkenini okuması gereken tüm çalışan programları yeniden başlatmanız gerekebilir. Örneğin, düzenleyiciniz Visual Studio ise, örneği çalıştırmadan önce Visual Studio'yu yeniden başlatın.
Mikrofondan konuşmayı tanıma
Yeni bir konsol uygulaması oluşturmak için bu adımları izleyin.
Yeni projeyi istediğiniz klasörde bir komut istemi penceresi açın. Yeni projeyi istediğiniz yerde bir komut istemi açın ve adlı
azure-openai-speech.py
yeni bir dosya oluşturun.Konuşma SDK'sını yüklemek için şu komutu çalıştırın:
pip install azure-cognitiveservices-speech
OpenAI SDK'sını yüklemek için şu komutu çalıştırın:
pip install openai
Not
Bu kitaplık Microsoft Azure tarafından değil OpenAI tarafından korunur. Kitaplıkta yapılan en son güncelleştirmeleri izlemek için yayın geçmişine veya version.py işleme geçmişine bakın.
azure-openai-speech.py adlı bir dosya oluşturun. Aşağıdaki kodu bu dosyaya kopyalayın:
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))
Azure OpenAI tarafından döndürülen belirteç sayısını artırmak veya azaltmak için parametresini
max_tokens
değiştirin. Belirteçler ve maliyet etkileri hakkında daha fazla bilgi için bkz . Azure OpenAI belirteçleri ve Azure OpenAI fiyatlandırması.Mikrofondan konuşma tanımayı başlatmak için yeni konsol uygulamanızı çalıştırın:
python azure-openai-speech.py
Önemli
, , AZURE_OPENAI_API_KEY
AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_CHAT_DEPLOYMENT
ve SPEECH_KEY
ortam değişkenlerini daha önceSPEECH_REGION
gibi ayarladığınızdan emin olun. Bu değişkenleri ayarlamazsanız örnek bir hata iletisiyle başarısız olur.
İstendiğinde mikrofonunuza konuşun. Konsol çıktısı, konuşmaya başlamanızı, ardından isteğinizi metin olarak ve ardından Azure OpenAI'den metin olarak yanıtınızı içerir. Azure OpenAI'den gelen yanıt metinden konuşmaya dönüştürülmeli ve ardından varsayılan konuşmacıya çıkarılmalıdır.
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>
Açıklamalar
Dikkat edilmesi gereken diğer noktalar şunlardır:
- Konuşma tanıma dilini değiştirmek için öğesini desteklenen başka bir
en-US
değiştirin. Örneğin,es-ES
İspanyolca (İspanya) için. Varsayılan dil:en-US
. Konuşulabilecek birden çok dilden birini belirleme hakkında ayrıntılı bilgi için bkz . Dil belirleme. - Duyduğunuz sesi değiştirmek için öğesini desteklenen başka bir
en-US-JennyMultilingualNeural
değiştirin. Ses, Azure OpenAI'den döndürülen metnin dilini konuşmazsa Konuşma hizmeti sentezlenmiş ses çıkışı vermez. - Metinden konuşmaya çıkışın gecikme süresini azaltmak için, hızlı ses üretimi için gerçek zamanlı metin işlemeye olanak tanıyan ve gecikme süresini en aza indirerek gerçek zamanlı ses çıkışlarının akıcılığını ve yanıt hızını artıran metin akışı özelliğini kullanın. Metin akışının nasıl kullanılacağına bakın.
- Konuşma çıkışının görsel bir deneyimi olarak TTS Avatarını etkinleştirmek için, metinden konuşmaya avatar için gerçek zamanlı senteze ve avatar ile sohbet senaryosu için örnek koda bakın.
- Azure OpenAI ayrıca istem girişlerinde ve oluşturulan çıkışlarda con çadır modu ration gerçekleştirir. Zararlı içerik algılanırsa istemler veya yanıtlar filtrelenebilir. Daha fazla bilgi için içerik filtreleme makalesine bakın.
Kaynakları temizleme
Oluşturduğunuz Konuşma kaynağını kaldırmak için Azure portalını veya Azure Komut Satırı Arabirimi'ni (CLI) kullanabilirsiniz.