Cloud und KI – Software für den Bestellprozess optimieren

Als Informatiker bekomme ich gerne Anfragen in der Form „Welches technische Produkt soll ich kaufen, welches ist besser ?“ Meistens hat man sich damit selbst nicht gerade beschäftigt und muss sich zuerst selbst einarbeiten um auf dem neuesten Stand zu sein. Deshalb habe ich mir ein System überlegt, welches Aufgrund einer Bestandsliste oder per aktuellem Produkt weitere oder neuere Produkte unterbreiten kann. Dazu sollen Cloud Services und künstliche Intelligenz (KI) zum Einsatz kommen.

Bestellsystem Übersicht (Bildquelle: ChatGPT und PlantUML)

Systemübersicht

Die obige Grafik beschreibt ein entsprechendes System in Microsoft Azure. Es besteht aus

  • Linke Seite: Die drei Schichten Ansicht, Geschäftslogik, Daten. Die Produktdaten werden hier für die späteren Abfragen abgelegt.
  • Rechte Seite: Drei KI-Modelle installiert in Azure Foundry. Warum drei Modelle vorgeschlagen werden, sehen wir weiter unten im Beitrag.

In diesem Artikel werden wir den Fokus auf Microsoft Foundry sowie die benötigten Daten legen.

Microsoft Foundry – Künstliche Intelligenz (KI)

Als ersten Schritt benötigen wir drei KI Sprachmodelle. Diese installieren wir über die Foundry Plattform. Sind die Modelle bereitgestellt ist es möglich diese direkt in der Umgebung zu testen oder diese über eine entsprechende Schnittstelle in die Software einzubinden. Dazu werden verschiedene Software Development Kit (SDK) angeboten. Das Foundry SDK ist auf der Lernplattform verfügbar. Ein Beispielcode ist nachfolgend dargestellt:

Installation mit Maven:

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-core</artifactId>
  <version>1.57.1</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-ai-openai</artifactId>
  <version>1.0.0-beta.16</version>
</dependency>

Beispiel eines Modellaufrufs:

1  OpenAIClient client = new OpenAIClientBuilder()
2    .credential(new AzureKeyCredential(AZURE_KEY))
3    .endpoint(AZURE_END_POINT)
4    .buildClient();
5  List chatMessages = new ArrayList<>();
6  ChatCompletionsOptions opts = new ChatCompletionsOptions(chatMessages);
7     ...
8     .setSchema(BinaryData.fromString(JSON_OUTPUT_FORMAT)
9     ...
10 ChatCompletions completions = client.getChatCompletions(MODEL_NAME, opts);
11   for (ChatChoice choice : completions.getChoices()) {
12      ChatResponseMessage message = choice.getMessage();
13      System.out.println(message.getContent());
14   }

Fragen wir alle drei Modelle mit unserem Produktnamen an, dürften wir vorerst keine vernünftigen Antworten erhalten.
Im nächsten Schritt möchten wir deshalb die Eingaben und Ausgaben verbessern.

Prompt Engineering / Retrieval Augmented Generation (RAG)

Unter Prompt Engineering versteht man das Konzept der KI möglichst gute und strukturierte Eingaben (sogenannte Kontexte) zu geben. Dies verbessert insbesondere die Antworten. Als Beispiele können das „Automat“ oder „Co-Star“ Framework als Anregung mitgegeben werden.

In unserem Beispiel ist die Eingabe die Produktbeschreibung des Herstellers. Als Ausgabe möchten wir strukturierten Text haben, z.B. Json. Dies kann im Code bei den Optionen als Json Schema Definition mitgegeben werden ( siehe obige Box Zeile 8 ). Ein Beispiel für die Eingabestruktur und die Ausgabedaten sehen wir im nachfolgenden Beispiel:

Schema:
{
"type": "object",
 "properties": {
  "products": {
   "type": "array",
   "items": {
    "type": "object",
    "properties": {
     "name": { "type": "string" },
     "price": { "type": "string" }
   },
   "required": ["name", "price"],
   "additionalProperties": false
   }
 }
},
...
Ausgabe:
{
  "products": [
    {
      "name": "Product 1",
      "price": "Price in $"
    },
    {
      "name": "Product 2",
      "price": "Price in $"
    },
    {
      "name": "Product 3",
      "price": "Price in $"
    },
...

Die Ausgaben möchten wir später in der Cloud und in unserem Entscheidungsbaum weiter verwenden. Wir speichern die Eingabedaten als „Prompt Data“ in der Datenbank.

Eine weitere Verbesserung erzielen wir mit RAG. RAG bietet uns die Möglichkeit der KI zusätzlichen Kontext zu geben. Bis anhin ist der KI zum Beispiel nicht bekannt ob wir die Bestellung als Privatperson (1 Stück) oder als Unternehmen (100 Stück) machen möchten. Es ist aber auch möglich, komplett neue Produktlisten von zusätzlichen Anbietern zur Verfügung zu stellen. Mit dieser Datenanreicherung stellen wir den Modellen weitere oder aktuellere Informationen der Produkte zur Verfügung.

Microsoft Azure Cloud

Sind alle KI Komponenten bereit, können wir den Regelbaum implementieren. Dieser soll dazu dienen aus den drei Modellantworten eine final gültige Antwort nach unseren Kriterien zu liefern. Ist der Preis z.B. 50% höher als das alte Produkt kann unser Entscheidungsbaum die Vorschläge ablehnen. Sind sich die Modelle einig können wir das Produkt zur Bestellung im Bestellsystem eintragen. Die drei Modelle und der Regelbaum bieten eine vernünftige gegenseitige Kontrolle und kann nach etwas Erfahrung entsprechend angepasst werden. Der finale Code kann schlussendlich mit einem Container in Azure installiert werden.

Schlussfolgerung

Mit relativ wenig Aufwand lassen sich entsprechende KI Modelle in der Cloud bereitstellen und über SDKs nutzen. Mit RAG lassen sich kontextbezogene und aktuelle Daten in die KI-Modelle einspeisen und mit den Services der Cloud Anbieter können diese Komponenten relativ elegant verbunden werden.

 

Dieser Blogbeitrag wurde mit Unterstützung von KI erstellt.

Beitrag teilen

Roman Zweifel

Roman Zweifel ist Solution Architekt und bloggt aus dem Unterricht des CAS Cloud and Platform Manager

Alle Beiträge ansehen von Roman Zweifel →

Schreibe einen Kommentar