Anfang November konnte ich an der W-JAX 2024 in München teilnehmen, einer der führenden Entwicklerkonferenzen in Deutschland, die sich auf die neuesten Trends in der Softwareentwicklung, Architektur und Innovation konzentriert. Im Fokus der diesjährigen Konferenz standen unter anderem die Themen Künstliche Intelligenz (KI), Machine Learning und Cloud-native Technologien. Besonders begeistert war ich vom Workshop „AI-driven Software-Development mit GPT und Co.“, den ich besucht habe. Dieser wurde von Jörg Neumann, dem Gründer und Geschäftsführer der NeoGeeks GmbH, geleitet.
Blick hinter die Kulissen der Generative AI
Der Workshop startete mit einer Einführung in das Thema Generative AI (GenAI) und ihren Unterschied zu herkömmlichem Machine Learning (ML). Jörg Neumann erklärte, dass es beim klassischen Machine Learning im Wesentlichen um die Erkennung von Mustern geht, während GenAI versucht, menschliche Sprache zu verstehen und zu generieren. Der Ursprung der generativen KI liegt interessanterweise bei Google, wo im Übersetzungsteam eine Art „Ursprache“ entwickelt wurde. Diese Ursuppe diente dann als Grundlage, um mithilfe neuronaler Netze wieder eine verständliche Sprache zu erzeugen. Das war der Beginn eines neuen Ansatzes, der letztlich zu den heute bekannten Modellen wie GPT führte.
Die Grundlagen der KI-Modelle: Tokens, Embeddings und das Training
Das Grundprinzip von GenAI besteht darin, dass KI-Modelle mithilfe von großen Datenmengen trainiert werden, um eigenständig neue Inhalte zu erzeugen, die den Mustern und Regeln der Trainingsdaten ähneln. Dabei können Texte, Bilder, Musik, Videos, Programmcode und viele weitere Arten von Inhalten generiert werden.
Zentrale Techniken sind hierbei „Tokens“ und „Embeddings“. Unter Embeddings versteht man die Vektordarstellung von Wörten, Sätzen, Dokumenten – ungewandelt in sog. Tokens. Beim Trainieren der Modelle werden diese Tokens in Beziehung zueinander gesetzt, was einen mehrdimensionalen Raum („Wolke“) erzeugt. Eine Dimension/Beziehung kann z.B. sein „welches Wort ist nahe dran“ oder „was ist das Gegenteil“, aber natürlich auch deutlich komplexere – bei GPT-3 sind es ca. 12000 Dimension.
Der eigentliche Trainingsprozess besteht im Wesentlichen aus den folgenden Schritten:
- Pretraining: Monatelanges Training auf Basis riesiger Internet-Datensätze mit tausenden GPUs
- Supervised Fine-Tuning: Manuelle Generierung idealer Antworten, oft in sogenannten „Clickfarmen“
- Reward Modeling: Bewertung und Optimierung der Antworten, um die Qualität zu verbessern. System lernt hier auch, dass es keine Antworten geben soll zu Politik, Sexismus, etc
- Reinforcement Learning: Basierend auf tausenden manuellen Eingaben lernt das Modell, noch präzisere Antworten zu liefern
Hier wird klar, wie aufwändig der Trainingsprozess ist. Der aktuelle Trend geht zunehmend zu kleineren, aber spezialisierten Modellen, die trotz geringerer Datenmengen eine hohe Qualität bieten.
Prompt Engineering: Wie man die besten Ergebnisse erzielt
Ein weiterer Schwerpunkt des Workshops war das Thema Prompt Engineering. Jörg stellte verschiedene Techniken vor, um die Antworten der KI zu verbessern. Die Standard-Techniken sind:
- Few-Shot Prompting: Prompting mit Beispielen
- Chain-of-Thought: Aufteilung der Aufgabe in mehrere Schritte (Modelle rechnen schlecht!)
- Generated Knowledge: Hier wird zusätzliches Wissen mitgeben
- Self-Refine: z.B. mit Anweisung „Verbessere Dich selbst“
Neben dem Standard-Eingabe-Prompt gibt es auch den sog. System-Prompt, mit welchem man den Chat grundlegend konfigurieren kann wie z.B. die Art der Sprache („Sprich wie ein Pirat“) und auch die sog. „Temperatur“, also wie konservativ oder kreativ die Antworten des KI-Tools sind.
Über den OpenAI Playground und das Azure OpenAI Studio konnten wir in einer praktischen Demo sehen, wie sich KI-Modelle konfigurieren und direkt einsetzen lassen. Dort gibt es u.a. jeweils einen Assistenten, um sich den System-Prompts und auch Codes zur Einbindung erzeugen zu lassen. Im Azure OpenAI Studio gibt es auch die Möglichkeit schnell Chatbots-Oberflächen zu erstellen.
Erweiterte Konzepte: Function Calling und RAG
Schliesslich wurden erweiterte Themen wie Function Calling und Retrieval-Augmented Generation (RAG) behandelt und diese auch anhand von praktischen Beispielen demonstriert. Diese Konzepte erlauben es, KI-Modelle mit externen Datenquellen zu verbinden und domänenspezifisches Wissen zu integrieren. Beim RAG-Pattern werden Dokumente in einer Vektordatenbank gespeichert, was es ermöglicht, spezifische Informationen in die Antworten der KI einfließen zu lassen – ohne das Modell neu trainieren zu müssen.
Fazit: KI verändert die Softwareentwicklung
Die Möglichkeiten, die Generative AI bietet, sind enorm. In den nächsten Jahren wird KI die Art und Weise, wie wir Software entwickeln, vermutlich grundlegend verändern. Die vorgestellten Frameworks und Tools bieten spannende Ansätze, um intelligente Systeme effizienter zu gestalten.
Und keine Konferenz endet, ohne dass man dieses Zitat gesehen hat:
The electric light did not come from the continuous improvement of the candle
Oren Hari