5 min read

Erstellen eines KI-fähigen Suchdienstes mit Microsoft Azure

Inhaltsübersicht

Einleitung

In diesem Artikel beschreibe ich einen Leitfaden zur Erstellung eines KI-fähigen Suchdienst von Microsoft Azure mit Hilfe von Terminal, der Azure CLI und des Azure REST-Endpunkts.

Der Suchdienst von Microsoft Azure ermöglicht die Nutzung fortschrittlicher KI-Modelle, um präzisere und personalisierte Suchergebnisse zu liefern. Die Vorteile von Microsoft liegen in der nahtlosen Integration in weit verbreitete Tools wie Office 365, sowie in der hohen Datensicherheit und der kontinuierlichen Weiterentwicklung durch innovative KI-Technologien.

Ein solcher Suchdienst kann in einem Unternehmensumfeld dazu verwendet werden, interne Dokumente und Informationen schnell zu durchsuchen und Mitarbeitern schnelleren Zugriff auf relevante Daten zu ermöglichen. In der E-Commerce Branche kann der Dienst beispielsweise personalisierte Produktempfehlungen basierend auf dem Suchverhalten der Kunden liefern, was die Umwandlungsrate (engl. Conversion-Rate) erhöhen und die Kundenzufriedenheit steigern kann. In der Gesundheitsbranche kann ein Suchdienst medizinische Fachkräften bei der schnelleren Auffindung von Patientenakten und relevanten Begleitmaterial unterstützen.

Vorteilhaft bei der Erstellung eines Suchdienstes über das Terminal sind beispielsweise das Automatisierungspotenzial durch Skripting, die höhere Flexibilität bei der Konfiguration sowie die Integration in CI/CD-Pipelines, was die Bereitstellung und Verwaltung in größeren Projekten optimiert.

Architekturdiagramm des KI-fähigen Suchdienstes

Im folgenden Architekturdiagramm werden die grundlegenden Komponenten des KI-fähigen Suchdienstes dargestellt, sowie die Möglichkeit zur Integration von KI-Funktionalität hervorgehoben.

--- config: look: handDrawn theme: neutral themeVariables: fontFamily: "Linux Biolinum" lineColor: "#988558" --- graph TB; subgraph KI Suchdienst subgraph Suchdienst-Komponenten [Suchdienst Komponenten] C[ Azure Suchdienst] -->|verwendet| H[ Indizierte Suchdaten] F[ Such-Indexer] -->|erstellt| H F -->|verwendet| J[ Datenquelle] end subgraph Speicherkonto [Speicherkonto] I[ Speicher-Container] E[ Daten] end subgraph Skillsets [Skillsets] style Skillsets stroke-dasharray: 5 5; A[ Bildanalyse] B[ Entitätserkennung] D[ ...] style A stroke-dasharray: 5 5; style B stroke-dasharray: 5 5; style D stroke-dasharray: 5 5; end J -->|verweist auf| I I -->|enthält| E F -.->|indiziert| E C -.->|kann verwenden| Skillsets end U[ Benutzer] -->|formuliert Anfragen| C %% Define the class for custom node color classDef myStyle stroke:#988558; class A,B,C,D,E,F,G,H,I,J myStyle;
Das Diagramm fasst die einzelnen Schritte der Erstellung eines KI-Suchdienstes mit Azure zusammen

Der Suchdienst besteht aus 3 Hauptkomponenten:

  1. Suchdienst-Komponenten: Dieser Bereich zeigt die Kernbestandteile des Suchdienstes, einschließlich des Azure Suchdienstes, des Such-Indexers und der indizierten Suchdaten. Der Such-Indexer erstellt die indizierten Daten und verwendet eine Datenquelle, die in einem Speicher-Container gespeichert ist.
  2. Speicherkonto: Hier wird der Speicher-Container dargestellt, der die Rohdaten enthält, die für den Suchdienst verwendet werden. Diese Struktur verdeutlicht, wie die Daten organisiert sind und wie sie für die Indizierung zugänglich sind.
  3. Skillsets: Diese Subgruppe stellt die Möglichkeit dar, den Suchdienst mit KI-Skills zu erweitern. Beispielhaft sind im Diagramm die Skills Bildanalyse und Entitätserkennung enthalten.

Die Interaktion des Benutzers mit dem Suchdienst erfolgt durch Suchanfragen an den Azure Suchdienst.

ℹ️
Die hier erwähnten Skillsets werden in diesem Artikel nicht näher behandelt, da sie für zukünftige Beiträge vorgesehen sind. Weitere Informationen zu Skillsets die auf Azure verfügbar sind, sind unter Zusätzliche Resourcen aufgelistet.

Ablaufdiagramm zur Erstellung des KI-fähigen Suchdienstes

Das folgende Ablaufdiagramm unterteilt die relevanten Schritte dieses Leitfadens in drei Phasen zusammen, die die Einrichtung von Ressourcen, die Datenvorbereitung, sowie Konfiguration des Suchdienste durchführen. 

--- config: look: handDrawn theme: neutral themeVariables: fontFamily: "Linux Biolinum" lineColor: "#988558" --- flowchart TD %% Start- und Endknoten Start((Start)) End((Ende)) %% Subgraph: Ressourcen erstellen subgraph Resources [1\. Ressourcenerstellung] direction LR subgraph R1[ ] direction TB Step11[Ressourcengruppe erstellen] Step12[Azure Suchdienst erstellen] end subgraph R2[ ] direction TB Step13[Storage-Account erstellen] Step14[Storage-Container erstellen] end R1 --> R2 Step11 --> Step12 Step13 --> Step14 end %% Subgraph: Datenvorbereitung subgraph DataPrep [2\. Datenvorbereitung] direction LR Step21[Beispieldaten und -Indexdefinition herunterladen] Step22[Beispieldaten und -Indexdefinition hochladen] end Step21 --> Step22 %% Subgraph: Suchdienst konfigurieren subgraph Config [3\. Suchdienst-Konfiguration] direction LR Step31[Datenquelle erstellen] Step32[Index erstellen] Step33[Indexer erstellen] end Step31 --> Step32 --> Step33 %% Verbindungen Start --> Init[Vorbereitung der Umgebung] --> Resources --> DataPrep --> Config --> Execution[Suchdienst-Ausführung] --> End %% Define the class for custom node color classDef myStyle stroke:#988558; class Init,Resources,DataPrep,Config,Execution myStyle; %% class Step11,Step12,Step13,Step14 myStyle; %% class Step21,Step22 myStyle; %% class Step31,Step32,Step33 myStyle; %% class Step11,Step12,Step13,Step14 myStyle; %% class Init,Execution myStyle;
Das Diagramm fasst die wesentlichen Komponenten des KI-Suchdienstes mit Azure zusammen

Abschließend kann der Suchdienst mithilfe der Testdaten auf seine Funktionalität über das Azure Portal getestet werden, worauf hier nicht näher eingegangen wird.

Vorbereitung der Umgebung

Voraussetzung für die Durchführung der Schritt-für-Schritt Anleitung ist ein Azure-Konto sowie grundlegende Kenntnisse in der Nutzung der Azure-Platform. Zudem werden Berechtigungen benötigt um eine Ressourcengruppe, einen Azure Suchdienst und ein Speicherkonto einzurichten.

Zuallererst sind die erwarteten Umgebungsvariablen zu definieren. Eine entsprechende Vorlage ist in der Datei .env zu finden.

Anschließend kann das Skript 01_ensure_prerequisites.sh ausgeführt werden das sicherstellt, dass die Rolle Search Service Contributor dem Azure-Konto zugewiesen ist und eine Active-Directory basierte Anmeldung möglich ist.

Als nächstes ist eine Authentifizierung mit diesem Azure-Konto über die Azure CLI durchzuführen das mit dem folgenden Befehl erfolgen kann:

az login

Schritt-für-Schritt-Anleitung

1. Ressourcenerstellung

Im ersten Schritt wird eine Ressourcengruppe erstellt, die alle für den Suchdienst erstellten Azure-Ressourcen organisiert. Dies kann über die Azure CLI mit dem folgenden Befehl efolgen:

az group create --name $RESOURCE_GROUP --location $LOCATION

Nun kann der Suchdienst mit folgenden Befehl erstellt werden:

az search service create \
    --name $SEARCH_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP \
    --sku $SEARCH_SKU \
    --location $LOCATION

Um Daten die für den Suchdienst zu speichern, werden ein Azure Speicherkonto sowie ein Speicher-Container benötigt. Dies wird mit den folgenen Befehlsblock durchgeführt:

# Speicherkonto anlegen
az storage account create \
    --name $STORAGE_ACCOUNT_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --sku Standard_LRS

# Speicherkonto's Zugriffsschlüssel holen
STORAGE_KEY=$(az storage account keys list --account-name

# Speicher-Container anlegen
$STORAGE_ACCOUNT_NAME --resource-group $RESOURCE_GROUP --query [0].value -o tsv)
az storage container create \
    --name $CONTAINER_NAME \
    --account-name $STORAGE_ACCOUNT_NAME \
    --account-key $STORAGE_KEY

2. Datenvorbereitung

Um den Suchdienst zu testen werden die Azure Beispieldaten zu Hotelbewertungen verwendet. Mit dem folgenden Befehlsblock werden die Beispiel-Hoteldaten sowie eine entsprechende Beispiel-Indexdefinition mit curl heruntergeladen die die Datenstruktur beschreibt, und anschließend diese in den neu angelegten Speicher-Container hochgeladen:

# Herunterladen der Beispieldaten und der entsprechenden Indexdefinition
curl -o $EXAMPLE_DATA_FILENAME $EXAMPLE_DATA_URL
curl -o $EXAMPLE_DATA_INDEX_FILENAME $EXAMPLE_DATA_INDEX_URL

# Hochladen der Hotel-Daten in den Speicher-Container:
az storage blob upload \
    --account-name $STORAGE_ACCOUNT_NAME \
    --account-key $STORAGE_KEY \
    --container-name $CONTAINER_NAME \
    --file $EXAMPLE_DATA_FILENAME \
    --name $EXAMPLE_DATA_FILENAME \
    --overwrite # erlauben die Datei zu überschreiben, falls sie bereits existiert

3. Suchdienst konfigurieren

Nun wird noch eine Datenquelle angelegt, die auf unseren Storage-Container mit den relevanten Daten verweist. Da der Befehl aktuell von Azure CLI nicht unterstützt wird, erfolgt das Anlegen über die Azure REST API, für dessen Nutzung ein Zugriffstoken benötigt wird:

# Zugriffstoken ermitteln
ACCESS_TOKEN=$(az account get-access-token --resource https://search.azure.com --query accessToken -o tsv)

# Erstellen einer Datenquelle mit der POST-Anfrage
DATA_SOURCE_PAYLOAD=$(cat <<EOF
{
    "name": "$DATA_SOURCE_NAME",
    "description": "Data source for hotel data",
    "type": "azureblob",
    "credentials": {
        "connectionString": "DefaultEndpointsProtocol=https;AccountName=$STORAGE_ACCOUNT_NAME;AccountKey=$STORAGE_KEY;EndpointSuffix=core.windows.net"
    },
    "container": {
        "name": "$CONTAINER_NAME"
    }
}
EOF
)

curl -X POST \
    "https://$SEARCH_SERVICE_NAME.search.windows.net/datasources?api-version=2021-04-30-Preview" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $ACCESS_TOKEN" \
    -d "$DATA_SOURCE_PAYLOAD"

Anschließend wird ein Suchindex erstellt, der die Datenstruktur für den Suchdient definiert:

curl -X POST \
  "https://$SEARCH_SERVICE_NAME.search.windows.net/indexes?api-version=2021-04-30-Preview" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d @$EXAMPLE_DATA_INDEX_FILENAME

Zuletzt wird ein Indexer erstellt und ausgeführt, der die Daten im Suchdienst indiziert und damit deren Durchsuchbarkeit gewährleistet:

# Erstellen des Indexers
curl -X POST \
  "https://$SEARCH_SERVICE_NAME.search.windows.net/indexers?api-version=2021-04-30-Preview" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d "{
    \"name\": \"$INDEXER_NAME\",
    \"dataSourceName\": \"$DATA_SOURCE_NAME\",
    \"targetIndexName\": \"$INDEX_NAME\"
  }"

# Ausführen des Indexers
curl -X POST \
  "https://$SEARCH_SERVICE_NAME.search.windows.net/indexers/$INDEXER_NAME/run?api-version=2021-04-30-Preview" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
ℹ️
Datenquellen, Indizes und Indexer können zum jetzigen Zeitpunkt nicht über die Azure CLI erstellt werden, sondern nur über die Azure REST-API.

Mit diesen Schritten lässt sich ein KI-fähiger Suchdienst in Microsoft Azure erstellen. Alle Schritte wurden über das Terminal, die Azure CLI und die Azure REST API durchgeführt.

Das GitHub Repository mit den entsprechenden Skripten finden Sie hier.

Fazit und Ausblick

Mit der Erstellung eines KI-fähigen Suchdienstes in Microsoft Azure ist eine erste Grundlage für personalisierte Suchlösungen geschaffen. Die hier beschriebenen Schritten präsentieren einige der technischen Grundlagen und geben einen Einblick in die Azure CLI und REST-API die es erlauben skript-basierte und automatisierbare Suchlösungen mit vielseitigen Einsatzmöglichkeiten zu erstellen.

Zusätzliche Ressourcen