ChatGPT Wie hilfreich ist diese KI in der Softwareentwicklung?

10.11.2023 14:52 Von Lukas

Daniel Prokhorov

ChatGPT ist ein mächtiges Sprachmodell, das auf der Grundlage von Millionen von Texten trainiert wurde und in der Lage ist, menschenähnliche Antworten auf Fragen zu generieren. Entwickler:innen können das Modell nutzen, um ihre Arbeit zu optimieren, indem sie gezielte Antworten auf spezifische Fragen und Aufgaben erhalten. 

In diesem Blogbeitrag zeigen wir euch, wie ChatGPT in der Softwareentwicklung eingesetzt werden kann und welche Vorteile sich daraus ergeben. 

In unserem letzten Blogbeitrag haben wir bereits über die Funktionsweise von ChatGPT als großes Sprachmodell von OpenAI gesprochen und haben die mittlerweile berühmte KI zu ihrer Funktionsweise und Schöpfer:innen befragt. 
In diesem Blogbeitrag betrachten wir ChatGPT im Kontext der Softwareentwicklung und beschreiben, wie diese KI-Engine Entwickler:innen helfen kann, ihre Arbeit effektiver und effizienter zu gestalten.

5 Beispiele wie ChatGPT bei der Softwareentwicklung helfen kann. 

Seit seiner Veröffentlichung hat sich ChatGPT bereits in vielen verschiedenen Situationen als hilfreich erwiesen. Sicherlich hat die KI bereits schon einigen Schüler:innen bei den Hausaufgaben geholfen oder die ein oder andere ungeliebte Mail formuliert. Aber auch bei komplexeren Aufgabenstellungen erweist sich ChatGPT als echte Hilfe. 

Wir stellen euch fünf verschiedene Bereiche vor, in denen ChatGPT Entwickler:innen unterstützend zur Seite stehen kann:
  1. Fehlerbehebung: Wenn Entwickler:innen auf einen Fehler stoßen und nicht sicher sind, wie sie ihn beheben sollen, können sie ChatGPT Fragen stellen und mögliche Lösungen erhalten. ChatGPT kann auch helfen, den Kontext des Fehlers besser zu verstehen und somit eine schnellere Lösung zu finden.
  2. Optimierung von Code: Entwickler:innen können ChatGPT verwenden, um Vorschläge für die Verbesserung des Codes zu erhalten. ChatGPT kann beispielsweise Vorschläge zur Verwendung von optimierten Algorithmen oder zur Verbesserung der Speichernutzung machen.
  3. Entscheidungsfindung: ChatGPT kann helfen, Entscheidungen über die Auswahl von Technologien oder Frameworks zu treffen. Entwickler:innen können Fragen stellen wie „Welche Datenbank-Engine ist am besten geeignet, um meine Anforderungen zu erfüllen?“ und ChatGPT wird die relevanten Informationen bereitstellen. 
  4. Dokumentation: ChatGPT kann zudem helfen, eine bessere Dokumentation zu erstellen, indem es Fragen beantwortet und Empfehlungen zur Verbesserung der Dokumentation gibt. Darüber hinaus kann die Dokumentation von Code-Repositories verbessert werden, indem ChatGPT beim Schreiben von klaren und präzisen Beschreibungen von Funktionen und APIs unterstützt.
  5. Best Practices: ChatGPT kann Entwickler: innen helfen, Best Practices zu erlernen und umzusetzen, indem es Empfehlungen gibt, welche Best Practices bei der Entwicklung von Anwendungen befolgt werden sollten. Die KI kann beispielsweise Empfehlungen zur Sicherheit und Skalierbarkeit von Anwendungen geben.

Prompt Engineering: Wie man mit ChatGPT Sprachmodelle optimieren kann

Ein zentraler Aspekt aller großer Sprachmodelle ist das sogenannte Prompt Engineering. 

Darunter versteht man die Fähigkeit, spezifische Fragen oder Aufgaben an das Modell zu stellen und gezielte Antworten zu erhalten. Durch die Verwendung von Prompt Engineering können Entwickler: innen die Leistung des Modells optimieren und gezieltere Ergebnisse erlangen. Die Bedeutung des Prompt Engineerings unterstreicht zudem die Tatsache, dass es auf diesem Gebiet inzwischen Fachliteratur gibt, so z.B. dass erst kürzlich erschiene Buch von David Roy Spradlin „Effective Prompt Engineering for Artificial Intelligence“ oder von Dwayne Anderson speziell auf ChatGPT ausgerichtete Buch: „Master ChatGPT - Content Mastery Via Prompt for Profits: Unlock Your Content Creation Potential with Intuitive Prompts and Templates on ChatGPT“. 

Zero-Shot-, One-Shot- und Few-Shot-Prompts

Eng im Zusammenhang mit Prompt Engineering stehen auch die Begrifflichkeiten „Zero-Shot“, „One-Shot“ und „Few-Shot“. Diese Begriffe beschreiben die Art und Weise, wie das Modell auf eine bestimmte Anfrage reagiert und wie viel Training es benötigt hat, um diese Anfrage zu verstehen und eine angemessene Antwort zu generieren.

Zero-Shot-Prompts sind Anfragen, bei denen das Modell nicht explizit auf diese spezifische Anfrage trainiert wurde. Stattdessen verwendet das Modell das Wissen, das es während des Trainingsprozesses erworben hat, um eine Antwort zu generieren. Wenn das Modell beispielsweise auf die Frage „Was ist die Hauptstadt von Spanien?“ mit „Madrid“ antwortet, handelt es sich um ein Zero-Shot-Prompt, da das Modell nicht speziell auf diese Frage trainiert wurde.

One-Shot-Prompts sind Anfragen, bei denen das Modell exakt ein Beispiel benötigt, um eine angemessene Antwort zu generieren. Few-Shot-Prompts dagegen sind Anfragen, bei denen das Modell mehrere Beispiele für das "in-context learning" benötigt, um eine angemessene Antwort zu generieren.

Few-Shot-Prompts sind Anfragen, bei denen das Modell mehrere Beispiele benötigt, um eine angemessene Antwort zu generieren. Wenn das Modell beispielsweise auf die Frage „Wie können wir unsere Anwendung auf die Cloud migrieren?“ mit einer detaillierten Antwort antwortet, die auf mehreren Beispielen und früheren Erfahrungen basiert, handelt es sich um ein Few-Shot-Prompt.

In der Praxis können Entwickler:innen diese verschiedenen Arten von Prompts nutzen, um das Modell effektiver zu trainieren und bessere Ergebnisse zu erzielen. Zudem ist es hilfreich, dass ChatGPT Techniken des bestärkenden Lernens verwendet. Dadurch kann das Modell in einer aktiven Chat-Session den Bezug zu den vorherigen Antworten kennen und gezieltere Ergebnisse auf weitere Prompts liefern.

Welche Rolle spielt die Sprache bei Prompt Engineering?

Bei der Prompteingabe sollte zudem beachtet werden, in welcher Sprache diese erfolgt. ChatGPT ist ein Sprachmodell, das auf der Grundlage von Millionen von Texten trainiert wurde. Die Qualität der Ergebnisse hängt jedoch auch von der Sprache ab, in der es eingesetzt wird. Insbesondere im Kontext der Softwareentwicklung ist Englisch am besten für ChatGPT geeignet.

Englisch ist die internationale Sprache der Softwareentwicklung. Die meisten Programmiersprachen und -tools verwenden englische Begriffe und Schreibweisen. ChatGPT wurde auch hauptsächlich mit englischen Texten trainiert, so dass es für englischsprachige Prompts besser geeignet ist. Die englische Sprache hat auch eine größere Vielfalt an Texten und eine höhere Frequenz von Software-spezifischen Begriffen, was für eine bessere Leistung von ChatGPT von Vorteil ist.

In der Softwareentwicklung wird Deutsch in einigen Ländern, wie z.B. Deutschland, Österreich und der Schweiz, häufig verwendet. ChatGPT kann auch für deutsche Texte trainiert werden und liefert akzeptable Ergebnisse für deutschsprachige Fragen und Anfragen in der Softwareentwicklung. Allerdings hat die deutsche Sprache eine geringere Frequenz von Software-spezifischen Begriffen, was zu einer geringeren Leistung von ChatGPT führen kann. 

Verwendung von ChatGPT bei der Extraktion von JPEG-komprimierten Bildern

Im folgendem soll nun Anhand eines Praxisbeispiels veranschaulicht werden, wie JPEG komprimierte Bilder der Intel RealSense D435 Kamera (https://www.intelrealsense.com/depth-camera-d435/) für Weiterverarbeitungszwecke (z.B. Darstellung in einer WPF-Applikation), extrahiert werden können. Diese Kamera wird häufig für Robotik Anwendungen eingesetzt, deshalb bietet sie u.a. ROS (Robot Operating System) Topics für Bild/Datenübertragung an. 

Hierfür kann man als Client über das Websocket das Topic „/camera/color/image_raw/compressed“ abonnieren, womit ein Datenaustausch zu Stande kommt. Um die empfangenen Daten nun in das gewünschte Format zu konvertieren könnte man ChatGPT mit folgendem ersten Prompt wie folgt befragen:

Der erste Satz des Prompts beschreibt die Aufgabenstellung in sehr detaillierter Art und Weise. Gefolgt vom aktuellen Code Schnipsel (die Ausgangslage), welches eine Funktion mit einem Action Callback als Eingabeparameter enthält sowie die Konvertierung des Bytearrays in OpenCV Format.

Die Erste Antwort von ChatGPT überrascht insofern, als der Code direkt kompilier- und lauffähig ist, was nicht immer der Fall ist. Vor allem aber hat die KI erkannt, dass die Konvertierung in OpenCV Format unnötig ist und die Ausführung (Invoke) des Action<BitmapSource> Delegaten nach der Konvertierung notwendig ist. 
Möchte man allerdings die in BitmapSource konvertierte Bilddaten in WPF mittels Datenbindung anzeigen lassen, dann wird es zur Laufzeit zu einer Exception kommen, da die Anzeige der Bilder auf dem Hauptthread einer WPF-Anwendung erfolgen muss. Hier die Antwort von ChatGPT dazu:

Praktischerweise liefert die KI gleich die Lösung des Problems mit:

Auch hier liegt ChatGPT richtig, mit diesem Code können die Bilder z.B. innerhalb des Image Elements mittels Datenbindung an die Source Eigenschaft (https://learn.microsoft.com/de-de/dotnet/desktop/wpf/controls/how-to-use-the-image-element?view=netframeworkdesktop-4.8) angezeigt werden. 
Da es sich um ein Topic Abonnement handelt werden die Bilddaten von der Kamera ständig versendet, folglich wird erfahrenen WPF-Entwicklern auffallen, dass ein Dispatcher Aufruf hier möglicherweise ineffizient ist, weil es zu häufig das User Interface über geänderte Bilddaten informiert. Dies hat zu Folge, dass der Hauptthread eine zu hohe Auslastung erfährt und die Applikation möglicherweise anfängt zu ruckeln. 
In diesem Fall könnte man die KI weiter fragen, z.B. ob der BitmapSource Typ freezable (https://learn.microsoft.com/de-de/dotnet/desktop/wpf/advanced/freezable-objects-overview?view=netframeworkdesktop-4.8 ) ist. 

Zum Abschluss könnte man noch ChatGPT fragen, welche Version vom Code performanter ist:

Vor- und Nachteile der Verwendung von ChatGPT in der Softwareentwicklung

Die Nutzung von ChatGPT in der Softwareentwicklung bietet zahlreiche Vorteile, wie etwa die schnelle Generierung von Code-Snippets, die Implementierung neuer Funktionen und die Optimierung von Arbeitsabläufen. Zudem können Entwickler:innen durch die Anwendung von Prompt-Engineering die Leistung des Modells verbessern und gezieltere Ergebnisse erzielen.

Unser Praxisbeispiel zeigt jedoch, dass die KI am besten in Kombination mit menschlichem Wissen arbeitet. Gerade in der Softwareentwicklung ist Fachwissen unerlässlich, um komplexe Probleme in spezifischen Domänen zu lösen und aussagekräftige Prompts zu generieren. Darüber hinaus müssen die Ergebnisse der KI hinterfragt und gegebenenfalls korrigiert werden, um zu einer Lösung zu gelangen.

Es ist unwahrscheinlich, dass ChatGPT die Rolle des:r Entwicklers:in obsolet machen wird. Zum einen macht die KI noch viele Fehler und zum anderen erfordert die Softwareentwicklung weit mehr als nur das Schreiben eines erstklassigen Codes. Die Software muss gut strukturiert, erweiterbar, wartbar und technisch skalierbar sein. Hier kommt die Kernkompetenz eines:r guten Entwicklers:in ins Spiel, der:die über den Tellerrand hinausblickt und kreative Ansätze zur Lösung von Problemen entwickelt.

Insgesamt bietet ChatGPT in der Softwareentwicklung eine spannende Möglichkeit, die Arbeit von Entwickler:innen zu optimieren und zu vereinfachen. Mit dem richtigen Einsatz von menschlichem Wissen und der KI können komplexe Probleme schneller und effizienter gelöst werden. Dennoch wird die Rolle des:der Entwicklers:in auch in Zukunft unerlässlich sein, um die Qualität und Funktionalität der Software sicherzustellen.

Anmerkung zum Datenschutz

In der Welt der Softwareentwicklung spielt Datenschutz eine herausragende Rolle. Im Rahmen unserer Diskussion über ChatGPT möchten wir hervorheben, dass die offiziellen Datenschutzrichtlinien von OpenAI die Sicherheit der Privatsphäre und der Nutzerdaten gewährleisten. 
Es ist zudem wichtig zu betonen, dass der im Unternehmen verwendete Code bei der Arbeit mit KI-Modellen nicht der individuelle Code eines Kunden ist, sondern unser unternehmenseigener Code. Dieser spezifische Ansatz trägt dazu bei, dass keine Datenlecks entstehen können. Denn die Verwendung von firmeneigenem Code ermöglicht eine stringente Kontrolle über die Implementierung und schließt potenzielle Sicherheitslücken aus.

Lukas