Dieser Beitrag dokumentiert das Bauen eines Intune-KI-Sprachbots mit Azure OpenAI. Der Bot hört auf eine gesprochene Frage im Stil eines Helpdesks, fragt über Microsoft Graph den Intune-Gerätestatus des Nutzers ab und antwortet – laut ausgesprochen – mit den relevanten Richtlinien- oder Compliance-Informationen.
Im heutigen Blog kündige ich die Veröffentlichung unseres experimentellen, KI-gesteuerten Sprachassistenten für Fragen rund um Microsoft Intune an. Wie du weißt, bin ich ein großer Fan von Automatisierung und KI-Technologien. Ich habe mich mit Fabian Peschke zusammengetan, um diesen innovativen Sprachbot zu entwickeln, der Nutzern bei ihren Intune-Fragen helfen soll.
Unser Sprachbot basiert auf zwei verschiedenen kognitiven Diensten von Microsoft: Azure Speech Services und OpenAIs GPT-35 Turbo. Die Azure Speech Services ermöglichen es dem Bot, Sprache zu erkennen und zu synthetisieren, während die Engine von OpenAI es dem Bot erlaubt, Nutzeranfragen intelligent zu verstehen und zu beantworten. Dieser Bot wurde auf Basis dieses Beispiels von Microsoft entwickelt.

Inhaltsverzeichnis
Inhalt
Voraussetzungen
- Python 3.6 oder höher
- Azure Cognitive Services Speech SDK
- OpenAI Python library
Du kannst die benötigten Bibliotheken mit pip installieren:
pip install azure-cognitiveservices-speech
pip install openai
Wie es funktioniert
In diesem Kapitel tauchen wir ein, wie der KI-gesteuerte Sprachassistent für Microsoft Intune funktioniert. Wir betrachten die Integration von Azure Speech Services und der Engine von OpenAI und erklären, wie sie zusammenarbeiten, um ein nahtloses Nutzererlebnis zu bieten.
Azure Speech Services
Azure Speech Services ist eine von Microsoft bereitgestellte Sammlung von APIs, die Spracherkennung und Sprachsynthese ermöglicht. In unserem Sprachassistenten nutzen wir zwei Hauptkomponenten der Azure Speech Services:
Spracherkennung: Diese Komponente ermöglicht es dem Sprachassistenten, gesprochene Worte in Text umzuwandeln. Sie hört auf die Stimme des Nutzers und wandelt die Sprache in Text um, der dann von der OpenAI-Engine verarbeitet werden kann.
Sprachsynthese: Diese Komponente ist dafür zuständig, die von der GPT-35 Turbo Engine generierten textbasierten Antworten in gesprochene Worte umzuwandeln. Sie verwendet ein neuronales Text-to-Speech-System, um menschenähnliche Sprache zu synthetisieren, sodass der Sprachassistent Antworten hörbar liefern kann.
OpenAIs Dienste
Die OpenAI-Engine ist ein leistungsstarkes Sprachmodell, das von OpenAI entwickelt wurde. Es kann menschenähnlichen Text auf Basis eines gegebenen Prompts verstehen und generieren. In unserem Sprachassistenten verarbeitet die GPT-35 Turbo Engine den von der Spracherkennungskomponente erzeugten Text und generiert eine passende Antwort auf Basis der Anfrage des Nutzers.
Integration von Azure Speech Services und der GPT-35 Turbo Engine
Das von uns entwickelte Skript integriert Azure Speech Services und OpenAIs GPT-35 Turbo Engine. Hier ist eine Schritt-für-Schritt-Erklärung, wie der Prozess funktioniert:
- Der Nutzer startet die Konversation mit dem Sprachassistenten, indem er “Hey” gefolgt von seiner Frage sagt.
- Die Spracherkennungskomponente der Azure Speech Services wandelt die Sprache des Nutzers in Text um.
- Der Text wird an das GPT-35 Turbo Modell übergeben, das die Eingabe verarbeitet und auf Basis der Briefing-Nachricht und der im Skript definierten Basisnachricht eine passende Antwort generiert.
You are a Microsoft Intune senior expert voice assistant who can answer all intune related questions. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Microsoft products or intune.
- Die generierte Antwort wird dann an die Sprachsynthesekomponente übergeben, die den Text in Sprache umwandelt und die Antwort hörbar ausgibt.
- Möchte der Nutzer die Konversation beenden, kann er “Stop” sagen oder Strg-Z drücken. Um die Konversation zurückzusetzen und den Verlauf zu löschen, kann der Nutzer “Reset” sagen.
Wo finde ich das Skript
Wie immer findest du mein Skript in meinem GitHub-Repository oder hier:
import os
import azure.cognitiveservices.speech as speechsdk
import openai
# Speech Services
speech_key = ""
speech_region = "" #"eastus"
language = "" #"en-US"
voice = "" #"en-US-JennyMultilingualNeural"
# Open Ai
openai.api_key = ""
openai.api_base = "https://XXXXXXX.openai.azure.com/"
openai.api_type = "azure"
openai.api_version = "2023-03-15-preview"
deployment_id= "" #"gpt-35-turbo"
# Prompt
base_message = [{"role":"system","content":"You are an Microsoft Intune senior expert voice assistant who can answer all intune related questions. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Microsoft products or intune."}]
#######################
###### Functions ######
#######################
def ask_openai(prompt):
base_message.append({"role": "user", "content": prompt})
response = openai.ChatCompletion.create(
engine="gpt-35-turbo",
messages = base_message,
temperature=0.24,
max_tokens=50,
top_p=0.95,
frequency_penalty=0,
presence_penalty=0,
stop=None)
text = response['choices'][0]['message']['content'].replace('n', ' ').replace(' .', '.').strip()
print('Azure OpenAI response:' + text)
base_message.append({"role": "assistant", "content": text})
speech_synthesis_result = speech_synthesizer.speak_text_async(text).get()
if speech_synthesis_result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
print("Speech synthesized to speaker for text [{}]".format(text))
elif speech_synthesis_result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = speech_synthesis_result.cancellation_details
print("Speech synthesis canceled: {}".format(cancellation_details.reason))
if cancellation_details.reason == speechsdk.CancellationReason.Error:
print("Error details: {}".format(cancellation_details.error_details))
def chat_with_open_ai():
while True:
print("Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.")
try:
speech_recognition_result = speech_recognizer.recognize_once_async().get()
if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
text = speech_recognition_result.text
if text == "Stop.":
print("Conversation ended.")
break
if text == "Reset.":
print("Reset")
base_message = [{"role":"system","content":"You are an AI voice assistant that helps to answer questions."}]
if "Hey" in text:
print("Recognized speech: {}".format(speech_recognition_result.text))
ask_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
#######################
######## Start ########
#######################
speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=speech_region)
audio_output_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)
audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
speech_config.speech_recognition_language=language
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
speech_config.speech_synthesis_voice_name=voice
speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_output_config)
try:
chat_with_open_ai()
except Exception as err:
print("Encountered exception. {}".format(err))
Wie man es einrichtet
Wie im Kapitel “Wie es funktioniert” beschrieben, benötigen wir zwei kognitive Dienste. In diesem Kapitel zeige ich dir, wie du beide Dienste in Azure hinzufügen kannst.
Azure Speech Services einrichten
Um Azure Speech Services einzurichten, folge diesen Schritten:
- Melde dich im Azure-Portal an (https://portal.azure.com/)
- Klicke auf Ressource erstellen

- Gib in der Suchleiste “Speech” ein und wähle “Speech” aus den Suchergebnissen aus.
- Klicke auf die Schaltfläche “Erstellen”, um den Einrichtungsprozess zu starten.

- Fülle die erforderlichen Felder aus, einschließlich Subscription, Ressourcengruppe, Name, Region und Tarif. Klicke dann auf “Überprüfen + erstellen“
Wenn dies deine erste Ressource ist, kannst du den Tarif F0 wählen, um ein kostenloses Kontingent zu erhalten

- Nachdem du deine Einstellungen überprüft hast, klicke auf “Erstellen”, um den Speech-Dienst bereitzustellen.
- Sobald die Bereitstellung abgeschlossen ist, navigiere zum Bereich “Keys and Endpoint” der Speech-Ressource. Notiere dir den “Key1” und die “Location/Region“, da du sie später zum Konfigurieren des Skripts benötigst.

OpenAIs GPT-35 Turbo Engine einrichten
Um die GPT-35 Turbo Engine einzurichten, benötigst du Zugriff auf die API von OpenAI. Folge diesen Schritten:
- Fülle das folgende Formular aus, um Zugang zur OpenAI-Beta zu erhalten. (Es kann einige Tage dauern, bis dies genehmigt wird)
- Melde dich im Azure-Portal an (https://portal.azure.com/)
- Klicke auf Ressource erstellen

- Gib in der Suchleiste “OpenAi” ein und wähle “OpenAi” aus den Suchergebnissen aus.
- Klicke auf die Schaltfläche “Erstellen”, um den Einrichtungsprozess zu starten.

- Fülle die erforderlichen Felder aus, einschließlich Subscription, Ressourcengruppe, Name, Region und Tarif. Klicke dann auf “Überprüfen + erstellen“

- Nachdem du deine Einstellungen überprüft hast, klicke auf “Erstellen“, um den OpenAI-Dienst bereitzustellen.
- Sobald die Bereitstellung abgeschlossen ist, navigiere zum Bereich “Keys and Endpoint” der Speech-Ressource. Notiere dir den “Key1” und den “Endpoint“, da du sie später zum Konfigurieren des Skripts benötigst.

- Klicke auf “Model deployment” und +Create
- Stelle das Modell gpt-35-turbo bereit

Das Skript konfigurieren
Jetzt, da du sowohl Azure Speech Services als auch OpenAIs Dienste eingerichtet hast, musst du das Skript mit den erforderlichen API-Schlüsseln und Endpoints konfigurieren.
- Öffne das Skript in deinem bevorzugten Code-Editor, z. B. VS Code.
- Trage die notierten Werte in die Variablen ein

- speech_key: Dein Subscription-Key für Azure Cognitive Services Speech.
- speech_region: Die Region deines Azure Cognitive Services Speech-Dienstes (z. B. “eastus”).
- language: Die Sprache für Spracherkennung und -synthese (z. B. “en-US”).
- voice: Die Stimme für die Sprachsynthese (z. B. “en-US-JennyMultilingualNeural”).
- openai.api_key: Dein OpenAI-API-Schlüssel.
- openai.api_base: Die Basis-URL für die OpenAI-API (z. B. “https://XXXXXXX.openai.azure.com/”).
- deployment_id: Die Deployment-ID für GPT-3.5 Turbo (z. B. “gpt-35-turbo”).
Weitere Informationen findest du hier: https://learn.microsoft.com/en-us/azure/cognitive-services/speech-service/language-support?tabs=stt
- Speichere die Änderungen und führe das Skript aus
Du kannst das Skript auf deinem PC ausführen oder mit Hilfe eines Raspberry Pi, eines Lautsprechers und eines Mikrofons deinen eigenen Sprachassistenten bauen.
Fazit
Mit dem konfigurierten Skript kannst du nun den Sprachassistenten ausführen. Folge den Anweisungen im Skript, um eine Konversation mit dem Bot zu starten und deine Fragen rund um Microsoft Intune zu stellen.
Du hast außerdem viele Möglichkeiten, dies weiterzuentwickeln, deine tägliche Arbeit zu vereinfachen oder deine Fragen zu beantworten.
Das war’s! Du hast beide kognitiven Dienste erfolgreich eingerichtet und das Skript für den KI-gesteuerten Sprachassistenten konfiguriert. Viel Freude mit deinem neuen Intune-Sprachassistenten und lass mich wissen, wenn du Fragen oder Feedback hast.
[…] https://jannikreinhard.com/2023/04/23/intune-ai-voice-bot/ […]