Schlüssel und Endpunkt einer Azure-AI-Ressource.Schlüssel und Endpunkt einer Azure-AI-Ressource.

Eine Reihe von Beiträgen in diesem Blog demonstrieren, welche AI-Services in Azure zur Verfügung stehen, was diese in Einzelnen leisten, worin sich Diese von den AI-Diensten anderer Anbieter unterscheiden und wie Sie die einzelnen Dienste im neuen Azure AI Studio oder den diversen dienstspezifischen Studios im Browser erkunden, bzw. die Leistungsfähigkeit der einzelnen Modelle testen können. Gedacht sind die Dienste jedoch in erster Linie dazu, eigene AI-Anwendungen und Copiloten zu entwickeln. Wie das konzeptionell funktioniert, zeigt dieser Beitrag.

Alle bisher gezeigten Azure-AI-Dienste wie z. B. Vision, Language, Speech oder OpenAI verfügen über REST-Endpunkte, sowie mindestens über Client-SDK-Unterstützung für C# und Python, oft auch für weitere Sprachen. Dieser Beitrag befasst sich mit den zugehörigen Workflows, damit ihr Anwendungscode sicher auf die genannten Schnittstellen zugreifen kann. Ich beschränke mich dabei exemplarisch auf C#, verweise aber an den entsprechenden Quellen auf die Microsoft-Dokumentationen zu Python. Ferner gehe ich für diesen Beitrag davon aus, dass Sie mit den erforderlichen Azure-Ressource-Typen vertraut bist. Zum Nachvollziehen dieses Beitrags benötigen Sie folgende Azure-Resource-Typen:

  • Azure AI services multi-service account
  • Azure Key Vault
  • Service Prinzipal für ihre App

Darüber hinaus verwende ich für alle Beispiele in diesem Beitrag Microsoft Visual Studio Code unter Windows als „Entwicklungsumgebung“. Sie können VS Code auch unter Linux verwenden oder VS Studio oder eine andere IDE verwenden, allerdings sind die Integrationsmöglichkeiten Azure und anderen Cloud-Diensten, Git, GitHub, Kubernetes, Docker usw. bei VS Code unerreicht komfortabel.

Repository einrichten

Wir beginnen damit, das Beispiel-Repository https://github.com/MicrosoftLearning/mslearn-ai-services des GitHub-Repos von Microsoft-Learning für Azure-AI-Services herunterzuladen oder zu klonen. Sie könnten z. B. das GitHub-Repository im Browser öffnen und dort auf den grünen Code-Button klicken.

Von dort aus könnten Sie dann …

  • entweder die URL für ein nachfolgendes „git clone“-Kommando kopieren, welches Sie in ihrem lokalen Editor/Arbeitsverzeichnis ausführen
  • die URL ihrer lokal installierten git-Desktop-App öffnen
  • das gesamte Repo als ZIP-Archiv herunterladen und entpacken, um es dann wieder in der IDE Ihrer Wahl zu öffnen
  • oder das gesamte Repo direkt von hier aus in VS Code zu öffnen.

Letzteres gelingt aber noch viel einfacher, wenn Sie direkt mit VS Code starten, mit F1 die Befehlspalette öffnen und je nach Lokalisierung Ihrer VS Code-Umgebung z. B. nach „Git: Clone“ oder „Git: Klonen“ suchen. Dann müssen Sie nur die o. g. URL aus Ihrer Zwischenablage einfügen:

Das Klonen eines GirHub-Repos aus VS Code.
Das Klonen eines GirHub-Repos aus VS Code.

Dabei klappt dann Ihr Windows-Explorer auf, damit mit Sie das lokale Ziel-Verzeichnis für das geklonte Repository wählen können. Danach klicken Sie im Hauptmenü von VS Code auf „Ordner öffnen“ und navigieren genau zum Unterordner …\mslearn-ai-services\Labfiles\01-use-azure-ai-services, um Diesen im VS-Code-Explorer zu öffnen. Dabei poppt in VS Code rechts unten die Meldung auf, dass ein Git-Repositiory im übergeordneten Ordner gefunden wurde. Sie können dann zustimmen, dieses Repo in VS Code zu öffnen:

Danach müssen Sie das zu öffnende Repository noch einmal bestätigen. Erweitern Sie dann im Explorer vorerst das o. g. Verzeichnis  „…\mslearn-ai-services\Labfiles\01-use-azure-ai-services“. Erstelle Sie dann im Azure-Portal eine Azure-AI-Ressource vom Typ „Azure AI services multi-service account”. 

Arbeiten mit der REST-API

Schauen wir uns nun an, wie Sie die REST-API Ihrer Azure-AI-Ressource programmatisch nutzen, also eine JSON-Anforderung über HTTP an den Service senden. Zur Erinnerung: die URL-Endpunkt und die zugehörigen API-Schlüssel Ihrer Azure-AI-Ressource (2 Stück per Default) finden Sie im Azure-Portal bei Ihrer Azure-AI-Ressource (hier „Azure AI services multi-service account“) im Menü „Schlüssel und Endpunkt“.

Schlüssel und Endpunkt einer Azure-AI-Ressource.
Schlüssel und Endpunkt einer Azure-AI-Ressource.

In folgendem Beispiel adressieren wir die Sprach-REST-API der Azure-AI-Services (früher „Cognitive-Services“) in einer Konsolenanwendung, für eine einfache Spracherkennung. Sie können das tun, weil Sie zuvor eine Azure-Ressource vom Typ „Azure AI services multi-service account“ erstellt haben. Diese „versteht“ z. B. die Bild- (Vision), Sprach- (Language) und Spracherkennungs- (Speech)-API. In diesem Fall handelt es sich um die Language-API.

Navigieren Sie dazu jetzt im VS Code Explorer zum Unterordner „rest-client“ für die gewünschte Programmiersprache (hier C#) und öffnen zunächst die Anwendungskonfigurationsdatei „appsettings.json“, in der Sie Ihre Service-Endpunkt-URL sowie Ihren API-Schlüssel eintragen.

Danach könne Siedir bei Interesse auch die Code-Datei (bei C#: Program.cs) ansehen, obwohl dies hier kein Programmier-Kurs ist. Wir möchte den Code lediglich aufrufen. Trotzdem hier ein paar kurze Erläuterungen:

Das Programm importiert zunächst eine Reihe von Namespaces, welche dazu da sind, eine HTTP-Kommunikation zu ermöglichen. Dann ruft die Main-Funktion den Endpunkt und den Schlüssel für deine Azure AI Services-Ressource ab, welche für das Senden von REST-Anforderungen an den Language-Dienst zur Textanalyse erforderlich sind. Das Programm wartet auf Benutzereingaben und nutzt die Funktion „GetLanguage“, zum Aufrufen der REST-API deines Azure AI Services-Endpunktes für die Spracherkennung zur Textanalyse. Im zurückgegeben Ergebnis erkennt der per REST angefragte Azure-AI-Dienst (hier Language) die Sprache des eingegebenen Textes.

Wie bei REST üblich besteht die an die API gesendete Anforderung aus einem JSON-Objekt, das die Eingabedaten enthält, in unserem Fall eine Sammlung von Dokument-Objekten, jedes mit einer „ID“ und einen „Text“. Der Schlüssel für deinen Dienst wird dabei im Anforderungs-Header übergeben, um damit Ihre Client-Anwendung für den Zugriff auf den Dienst zu authentifizieren. Die Antwort des Diensts ist ein JSON-Objekt, das von der Client-Anwendung analysiert werden kann.

Nun müssen Sie den Ordner aus ihrem Explorer nur noch im Terminal öffnen  – klicken Sie dazu mit rechts auf den Ordner im VS Code-Explorer – wählen den Eintrag „Im integrierten Terminal öffnen“ – und rufen das Programm dann mit ..

dotnet run

auf. Das Programm erwartet von Dir die Eingabe eines beliebigen Textes. Du erhältst im Ergebnis ein JSON-Dokument, das ..

  • die Anfrage selbst
  • das Ergebnis („documents“) mit „detectedLanguage“
  • sowie etwaige Fehler (errors)

enthält.

Das erfolgreiche Senden einer REST-Anfrage mit der JSON verpackten Antwort.
Das erfolgreiche Senden einer REST-Anfrage mit der JSON verpackten Antwort.

Testen Sie das Programm nun in verschiedenen Sprachen.

Arbeiten mit dem SDK

Nun wollen wir noch mit den SDKs experimentieren. Für den Language-Dienst sind beispielsweise https://learn.microsoft.com/en-us/azure/ai-services/language-service/concepts/developer-guide?tabs=language-studio#client-libraries-azure-sdk Client-Bibliotheken für .NET, Python, Java und JavaScript verfügbar. Sie können also nicht nur Code schreiben, der die die REST-APIs der Azure AI-Dienste direkt anspricht, sondern auch das Entwickeln von Anwendungen, die auf Azure KI-Dienste aufsetzen, mit Hilfe eines der genannten SDKs erheblich vereinfachen. Navigieren Sie daher jetzt im VS Code-Explorer zum Unterorder „sdk-client“ und öffnen diesen Ordner dann wieder mit Hilfe des Kontextmenüs im Terminal oder navigiere direkt aus dem Terminal dort hin.

cd ..

cd sdk-client

Jetzt müssen Sie das jeweilige SDK installieren. Im Falle von .Net ginge das mit …

dotnet add package Azure.AI.TextAnalytics –version 5.3.0

Ich gehe davon aus, dass auf Ihrem Windows-Arbeitsplatz das .Net-Framework bereits installiert ist. Im Falle von Python müssten Sie erst Python installieren. Das geht z. B. über den Windows-Store. Eine bereits installierte Version würden Sie mit

python –version

ermitteln; bei mir 3.12. Dann könnten Sie mit Hilfe des Python-Paketmanagers pip das Python-SDK installieren.

pip install azure-ai-textanalytics==5.3.0

Doch zurück zu .Net/C#. Hier finden Sie im Ordner „sdk-client“, wie im REST-Beispiel oben, eine Datei „appsettings.json“ mit der Sie den Zugriff auf den Backenddienst in Azure konfigurieren (Schlüssel und Endpunkt), sowie eine Programm-Datei „Program.cs“. Öffnen Sie ggf. die Konfigurationsdatei und passen die darin enthaltenen Konfigurationswerte an, also den Endpunkt und den Authentifizierungsschlüssel für Ihre Azure AI Services-Ressource, es sei denn, die Daten haben sich nach dem REST-Beispiel oben nicht geändert. Falls doch, müssen Sie die Änderungen speichern.

Falls es Sie interessiert (wir wollen wie o. erwähnt den mitgelieferten Beispiel-Code lediglich ausführen) schauen Sie sich jetzt noch den Inhalt der Datei „Program.cs“ an: hier wird zunächst der Namespace für das von dir verwendete SDK importiert. Die Funktion „Main“ ruft dann den Endpunkt und den Schlüssel für deine Azure AI Services-Ressource ab. Diese werden dann mit dem SDK für das Erstellen eines Clients für den Textanalysedienst verwendet. Konkret nutzt die Funktion „GetLanguage-Funktion“ das SDK, um einen Client für den Dienst zu erstellen und nutzt diesen Client dann zum Erkennen der Sprache des eingegebenen Textes.

Testen Sie das Programm nun durch Eingabe von

dotnet run

Im Fall von Python mit

python sdk-client.py

Du wirst dann wie oben beim REST-Beispiel aufgefordert, einen Text einzugeben. Das Ergebnis sollte so aussehen, wie in folgender Abbildung:

Aufruf eines Programms, in den ein Client mit Hilfe des passenden SDKs erstellt wurde.
Aufruf eines Programms, in den ein Client mit Hilfe des passenden SDKs erstellt wurde.

Testen Sie das Programm, wenn Sie mögen auch mit anderen Sprachen. Sie haben damit den ersten Schritt zur Interaktion mit den API-Schnittstellen gemacht.

Das größte Problem hierbei ist, dass Ihre API-Schlüssel in unverschlüsselter Form in der Konfigurationsdatei „appsettings.json“ stecken, welche Sie im schlimmsten Fall auch noch beabsichtigt oder unbeabsichtigt auf einem öffentlichen GitHub-Repo hosten. Daher zeige ich Ihnen im nächsten Teil dieser kleinen Serie, wie Sie die API-Schlüssel sicher in einen Azure Schlüsseltresor (Key Vault) ablegen. Sie müssen dann Ihre Client-Anwendung mit einem Dienstprinzipal ausstatten. Mit Diesem können Sie dann die Client-App mittels Azure RBAC auf sichere Weise berechtigen, die benötigten Schlüssel aus dem Schlüsseltresor abzurufen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.