E-Book, Deutsch, 412 Seiten
Reihe: Rheinwerk Computing
Kofler / Öggl / Springer Coding mit KI
1. Auflage 2024
ISBN: 978-3-367-10346-1
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das Praxisbuch für die Softwareentwicklung
E-Book, Deutsch, 412 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-10346-1
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
KI verändert, wie wir Software entwickeln. Wer die neuen KI-Helfer nicht nutzt, macht sich das Leben unnötig schwer und läuft Gefahr, den Anschluss zu verlieren. In diesem Buch erfahren Sie, was Tools wie ChatGPT oder GitHub Copilot bereits leisten können und wo ihre Grenzen liegen. Praxisnahe Beispiele zeigen Ihnen, wie Sie heute schon mit KI-Unterstützung schneller, effizienter und fehlerfreier programmieren können. Ein pragmatischer Leitfaden für alle, die wissen wollen, wie künstliche Intelligenz die Softwareentwicklung verändert.
Aus dem Inhalt:
- Wie funktioniert Künstliche Intelligenz
- Strukturiert programmieren mit KI
- Debugging, Refactoring und Unit-Tests
- Dokumentation automatisiert erstellen
- Datenbankentwicklung und -design
- Scripting und Administration
- Lokale LLMs ausführen
- Projekt-Bootstrapping mit OpenDevin
- Mit der OpenAI-API arbeiten
- KI-Apps und RAGs
- Risiken, Grenzen und Ausblick
Michael Kofler hat Telematik an der TU Graz studiert und ist einer der erfolgreichsten deutschsprachigen IT-Fachbuchautoren. Zu seinen Themengebieten zählen neben Linux auch IT-Sicherheit, Python, Swift, Java und der Raspberry Pi. Er ist Entwickler, berät Firmen und arbeitet als Lehrbeauftragter.
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 9
TEIL I. Coding mit KI-Unterstützung ... 15 1. Einführung ... 17 1.1 ... Coding per Chat ... 17 1.2 ... Die Kunst des Prompting ... 27 1.3 ... Code-Assistenten ... 35 1.4 ... Chat oder Assistent? ... 47 1.5 ... Grundlagen von Large Language Models (LLMs) ... 48 2. Pair Programming ... 63 2.1 ... Code in Funktionen strukturieren ... 64 2.2 ... Beispiel: IBAN-Validierung ... 74 2.3 ... Objektorientiert programmieren ... 81 2.4 ... Beispiel: Quiz ... 90 2.5 ... Beispiel: Sudoku lösen ... 96 3. Debugging ... 107 3.1 ... Web-Applikationen ... 108 3.2 ... App-Entwicklung ... 117 3.3 ... Entwicklung am Raspberry Pi ... 120 3.4 ... Visual Studio und VS Code ... 123 3.5 ... Fazit ... 125 4. Refactoring ... 127 4.1 ... Einführung ins Refactoring ... 128 4.2 ... Refactoring mit KI-Werkzeugen ... 128 4.3 ... Best Practices ... 141 4.4 ... Fazit ... 143 5. Software testen ... 145 5.1 ... Erzeugen von Testdaten ... 146 5.2 ... KI-gestützte Testautomatisierung ... 150 5.3 ... Testgetriebene Entwicklung mit KI ... 155 5.4 ... Arbeiten mit Abh?igkeiten ... 162 5.5 ... Optimieren von Tests ... 168 5.6 ... E2E-Tests ... 175 5.7 ... Fazit ... 179 6. Software dokumentieren ... 181 6.1 ... Inline-Dokumentation ... 183 6.2 ... Funktions- und Klassendokumentation ... 186 6.3 ... API-Dokumentation ... 190 6.4 ... Veraltete Dokumentation ... 193 6.5 ... Fazit ... 196 7. Datenbanken ... 199 7.1 ... Datenbankdesign ... 199 7.2 ... SQL-Kommandos ... 210 7.3 ... Administration ... 218 7.4 ... Client-Programmierung ... 225 8. Scripting und Systemadministration ... 227 8.1 ... Scripting ... 228 8.2 ... Beispiel: Python-Script in PHP-Code umwandeln ... 235 8.3 ... Regul? Muster ... 237 8.4 ... Systemadministration ... 241 8.5 ... Beispiel: wget-Script plus tmpfs-Konfiguration ... 249 8.6 ... GitHub Copilot und ChatGPT im Terminal aufrufen ... 254
TEIL II. Sprachmodelle lokal ausführen, fortgeschrittene KI-Tools ... 259 9. Sprachmodelle lokal ausführen ... 261 9.1 ... Die Qual der LLM-Wahl ... 262 9.2 ... GPT4All ... 267 9.3 ... Ollama ... 271 9.4 ... Open WebUI für Ollama ... 276 9.5 ... Continue ... 284 9.6 ... Ollama-API ... 287 9.7 ... Tabby ... 290 9.8 ... Fazit ... 293
10. Code automatisiert verarbeiten ... 295 10.1 ... OpenAI-API ... 296 10.2 ... Ollama-API ... 308 10.3 ... Groq-API ... 311 10.4 ... Beispiel: Code automatisiert kommentieren ... 312 10.5 ... Beispiel: von Python 2 zu Python 3 ... 321
11. Level-3-Tools: OpenHands und Aider ... 325 11.1 ... OpenHands ... 327 11.2 ... OpenHands in der Praxis ... 333 11.3 ... Aider ... 336 11.4 ... Aider in der Praxis ... 341
12. Retrieval Augmented Generation (RAG) und Text-to-SQL ... 351 12.1 ... Schnellstart RAG ... 352 12.2 ... Das viel-falter-Projekt ... 356 12.3 ... Dokumente laden ... 357 12.4 ... Index erzeugen ... 359 12.5 ... Vector-Store-Datenbanken ... 363 12.6 ... RAG-Abfragen ... 366 12.7 ... Text-to-SQL ... 371
13. Risiken und Ausblick ... 385 13.1 ... Probleme und Einschr?ungen beim Einsatz von KI-Tools ... 385 13.2 ... Beispielhaftes KI-Versagen ... 389 13.3 ... Ethische Fragen ... 400 13.4 ... Schlussfolgerungen und Ausblick ... 404 Index ... 409
1 Einführung
Dieses »Hello, World!«-Kapitel gibt eine erste Einführung in den Umgang mit KI-Tools bei der Programmentwicklung. Anhand von Beispielen zeigt das Kapitel die Verwendung von Chat-basierten Werkzeugen wie ChatGPT sowie von Coding-Assistenten wie GitHub Copilot.
Höchstwahrscheinlich haben Sie schon KI-Coding-Tools ausprobiert. Überfliegen Sie dennoch die folgenden Seiten – vielleicht können wir Sie schon im Einführungskapitel auf neue Ideen bringen, bevor wir in den weiteren Kapiteln mehr in die Tiefe gehen.
Jedenfalls lesenswert ist Abschnitt 1.5, »Grundlagen von Large Language Models (LLMs)«: Er enthält eine knappe Zusammenfassung, wie Sprachmodelle hinter den Kulissen funktionieren. Dieses Wissen ist nicht zuletzt deswegen hilfreich, um die Grenzen der aktuellen Technik besser zu verstehen.
1.1 Coding per Chat
Den intuitivsten Einstieg in das KI-unterstütze Coding bieten Chat-Systeme wie ChatGPT. Als wir dieses Buch im Sommer 2024 verfassten, standen diverse kostenlose Systeme zur Auswahl:
-
https://chatgpt.com (das Original von OpenAI)
-
https://www.bing.com/chat (Microsoft, greift auf ChatGPT/OpenAI zurück)
-
https://gemini.google.com (Google)
-
https://claude.ai (Anthropic)
Auf den meisten Webseiten haben Sie die Option, mit dem Abschluss eines kostenpflichtigen Abos Zusatzfunktionen freizuschalten. Soweit wir bei der Arbeit für dieses Buch mit öffentlich verfügbaren Chat-Systemen experimentiert haben, war ChatGPT unser bevorzugtes System. Bei dieser Website müssen Sie sich einmalig registrieren. Das geht schnell und kostet nichts. Anschließend ist die Anwendung denkbar einfach: Sie formulieren Ihre Frage und erhalten eine Antwort.
Passwortgenerator
Sie brauchen in einem Python-Script eine Funktion, die ein zufälliges Passwort in einer vorgegebenen Länge liefert. Natürlich können Sie den Code selbst schreiben – aber Sie sparen sich vermutlich ein, zwei Minuten Zeit, wenn Sie diese triviale Aufgabe an ChatGPT abgeben.
Abbildung 1.1 ChatGPT hat einen Passwortgenerator in eine Funktion verpackt.
Den Code können Sie nun unkompliziert kopieren und in Ihr Script einbauen. Vergessen Sie die erforderlichen Importe nicht! Diese werden immer am Beginn des Scripts angegeben.
Deutsch oder Englisch?
Wie das einleitende Beispiel gezeigt hat, versteht ChatGPT Prompts in deutscher Sprache. Dennoch empfehlen wir Ihnen, Prompts in englischer Sprache zu formulieren. Dafür gibt es mehrere Gründe:
-
Sprachmodelle sind nur so gut wie das zugrunde liegende Trainingsmaterial. Naturgemäß gibt es viel mehr englischsprachige Websites, Bücher und Repositorys, die zum Training verwendet wurden. Je spezifischer Ihre Fragestellung, je diffiziler das Problem, desto eher werden Sie korrekte Antworten erhalten, wenn Sie Ihren Prompt englisch formulieren. Das gilt selbst dann, wenn Ihr Englisch nicht perfekt ist.
-
Bei den meisten größeren Software-Projekten ist die Verwendung englischer Klassen-, Funktions- und Variablennamen selbstverständlich oder sogar in den Projektrichtlinien festgeschrieben. Mit einem englischen Prompt bringen Sie zum Ausdruck, dass der KI-Codegenerator englische Begriffe vorziehen soll.
-
Auch wenn ChatGPT gleichermaßen deutsch, englisch, französisch sowie diverse andere Sprachen spricht: Auf diverse andere Sprachmodelle trifft dies nicht zu. Gerade öffentlich verfügbare Sprachmodelle, die lokal ausgeführt werden können (siehe Kapitel 9, »Sprachmodelle lokal ausführen«), funktionieren nur in englischer Sprache zufriedenstellend.
Deswegen arbeiten wir in diesem Buch fast durchgängig mit englischen Prompts. Das führt dazu, dass auch die Erklärungen und der erstellte Code auf Englisch ausgegeben werden. Das entspricht den Standards der meisten Entwicklungsprojekte, besonders wenn unterschiedliche Nationalitäten gemeinsam an einer Codebasis arbeiten. Falls Sie trotzdem deutsche Variablennamen und Funktionsbezeichner nutzen wollen, müssen Sie ChatGPT explizit anweisen.
Falls Sie die englischen Erklärungen einmal nicht verstehen, können Sie natürlich nach einer Übersetzung fragen. ChatGPT hilft Ihnen dann weiter und erläutert den Code auf Deutsch.
Python: Datum suchen und ersetzen
In diesem Beispiel sollen in einer Zeichenkette alle Datumsangaben vom US-Format (12/31/2024) in das ISO-Format (2024-12-31) umgewandelt werden. Als Programmiersprache soll Python verwendet werden.
Der Code verwendet das re-Modul, mit dem in Python reguläre Ausdrücke verarbeitet werden. ChatGPT formuliert den Code als Funktion, was die weitere Anwendung vereinfacht. convert_us_to_iso_date enthält wiederum eine Subfunktion replace, die an re.sub als Parameter übergeben wird und jeden Treffer durch das neu formatierte Datum ersetzt.
Prompt: Python: I want to replace all US dates by ISO dates in a string. Can you help?
Certainly! To replace all U.S. date formats (commonly MM/DD/YYYY) with ISO date formats (YYYY-MM-DD) in a string using Python, you can use the re module to find dates and then rearrange the format. Here’s a Python function that accomplishes this:
def convert_us_to_iso_dates(text):
date_pattern = r'\b(\d{1,2})/(\d{1,2})/(\d{4})\b'
def replace(match):
month, day, year = match.groups()
return {year}{month.zfill(2)}{day.zfill(2)}
return re.sub(date_pattern, replace, text)
input_text = "Today's date is 05/09/2024 and the event " +
converted_text = convert_us_to_iso_dates(input_text)
print(converted_text)
This script:
-
Defines a regex pattern to match dates in the format MM/DD/YYYY.
-
Uses a replacement function to rearrange the date components into the ISO format YYYY-MM-DD.
-
Applies this transformation to all occurrences in the provided text.
Der Code funktioniert in der präsentierten Form ausgezeichnet. Wenn Sie mit regulären Ausdrücken nicht vertraut sind, können Sie sich den Aufbau des Musters in einer Folgefrage erläutern lassen:
Prompt: Could you explain the regular pattern?
Certainly! Here’s a breakdown of the pattern r'\b(\d{1,2})/(\d{1,2})/(\d{4})\b':
-
\b: This is a word boundary marker. It ensures that the pattern matches whole words only, which helps prevent partial matches of larger sequences that aren’t dates.
-
(\d{1,2}): This part of the pattern captures one or two digits. The \d denotes a digit (equivalent to [0-9]), and {1,2} specifies that the digit can appear once or twice. This pattern is used for both the month and the day in the date.
-
/: This is a literal forward slash character. It separates the month and day, and day and year, in U.S. date formats.
-
(\d{4}): This captures exactly four digits, representing the year. Here, \d again denotes a digit, and {4} specifies that exactly four digits must be present.
-
\b: Another word boundary marker, ensuring the date is a standalone entity, not part of a larger sequence of numbers or characters.
So, the entire pattern matches strings that start and end with a boundary between words (like spaces or punctuation), followed by one or two digits for the month, a slash, one or two digits for the day, another slash, and finally four digits for the year.
In diesem Buch verzichten wir...