Programmieren mit ChatGPT – Eine Technik Revolution kündigt sich an !


Der von OpenAI entwickelte Chatbot kann nicht nur Texte in vielen verschiedenen Sprachen verfassen, sondern auch programmieren. Dabei beherrscht die KI ein weites Feld von Programmiersprachen, von Python über Java bis hin zu Visual Basic Scripten. Im Grunde muss man der KI nur genaue Anweisungen geben und bekommt dann, mit etwas Glück, lauffähigen Code ausgeliefert. Eine Beschränkung besteht derzeit noch darin, dass die Größe der Ausgabe stark begrenzt ist, also nur relativ kleine Programme generiert werden können. Dadurch sind Möglichkeiten und Usability derzeit noch auf sehr kleine Kommandozeilen-Tools beschränkt. Das dürfte sich in zukünftigen Versionen jedoch ändern. Die Möglichkeiten sind aber dennoch schon jetzt sehr beeindruckend.

Hier ein paar Programmbeispiele:

Einen kleinen Bildgenerator in Python welcher ein Mandelbrot Fraktal erstellt und direkt als Bilddatei speichert:

# Import the required modules
from PIL import Image
from numpy import complex, array

# Create a new image of the specified size
img = Image.new('RGB', (800, 600))
pixels = img.load()

# Set the complex plane coordinates
xmin, xmax = -2.0, 1.0
ymin, ymax = -1.2, 1.2

# Iterate over the pixels in the image
for ix in range(img.size[0]):
    for iy in range(img.size[1]):

        # Map the pixel coordinates to the complex plane
        z = complex(xmin + (xmax - xmin) * ix / img.size[0],
                    ymin + (ymax - ymin) * iy / img.size[1])

        # Compute the mandelbrot function
        c = z
        for i in range(255):
            if abs(z) > 2.0: break
            z = z * z + c

        # Set the pixel color based on the number of iterations
        pixels[ix, iy] = (i, i, i)

# Save the image to a JPG file
img.save('fractal.jpg', 'JPEG')

Die Ergebnisse können sich sehen lassen:

Verschlüsselung mit AES256:

Die nächste Aufgabe ist ein Code um eine Texteingabe in Python mit einem Passwort sicher zu verschlüsseln. So könnte man z.B. Chat-Nachrichten vor dem Versenden noch einmal zusätzlich verschlüsseln, um sie abhörsicher zu machen. ChatGPT wählt hier automatisch und unaufgefordert die als sehr sicher geltende SHA256-Hashingmethode aus. Interessant ist hierbei auch, dass ChatGPT eigenständig einen SALT-Algorithmus einfügt, um den generierten Schlüssel gegen Brute-Force-Angriffe zu härten. Die Verschlüsselung erfolgt dann am Ende in AES. Auf Nachfrage kann die KI dieses Vorgehen auch detailliert erklären.

Hier der Code:

# Import the necessary libraries
import os
import base64
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

# Prompt the user for a password
password = input("Enter password: ")

# Prompt the user for the text to be encrypted
text = input("Enter text to be encrypted: ")

# Convert the password to bytes
password = password.encode()

# Generate a random salt
salt = os.urandom(16)

# Use the PBKDF2 algorithm to generate a key from the password and salt
kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=100000
)
key = base64.urlsafe_b64encode(kdf.derive(password))

# Create the Fernet object using the generated key
f = Fernet(key)

# Encrypt the text using the Fernet object
encrypted_text = f.encrypt(text.encode())

# Print the encrypted text
print("Encrypted text:", encrypted_text)

# Decrypt the text using the Fernet object
decrypted_text = f.decrypt(encrypted_text)

# Print the decrypted text
print("Decrypted text:", decrypted_text.decode())

Computerspiele:

ChatGPT kann auch einfache Computerspiele generieren. Da die Größe des Ausgabetextes stark limitiert ist sind derzeit nur sehr einfache Kommandozeilen Spiele möglich. Zum Beispiel ein von ChatGPT generiertes Ratespiel

Anfrage: Write a very simple game in python than only requires very few code

import random

# Generate a random number between 1 and 10
secret_num = random.randint(1, 10)

# Give the user three attempts to guess the number
print("I'm thinking of a number between 1 and 10. Can you guess it?")
for i in range(3):
    guess = int(input("Enter your guess: "))
    if guess == secret_num:
        print("You guessed it! The number was {}".format(secret_num))
        break
    else:
        print("Sorry, that's not the number. Try again.")

# If the user didn't guess the number in three attempts,
# let them know what the number was
if guess != secret_num:
    print("The number I was thinking of was {}".format(secret_num))

Der Nutzer muss dann die richtige Zahl erraten:

Einen Download Manager:

Dateien aus dem Internet Herunterzuladen ist doch immer mal wieder ganz praktisch. Also habe ich ChatGPT angewiesen einen einfachen text basierten DownloadManager zu entwickeln.

Write a simple Python script that asks the User for a Download URL and then downloads and saves the file into the folder of the script

Here is a simple Python script that asks the user for a download URL and then downloads and saves the file into the folder of the script:

Copy code
import os
import urllib.request

# Ask the user for the download URL
url = input("Enter the download URL: ")

# Extract the file name from the URL
file_name = os.path.basename(url)

# Download the file
urllib.request.urlretrieve(url, file_name)

# Print a success message
print("File downloaded and saved successfully!")

Der Download von beliebigen Dateien über http/https funktioniert damit einwandfrei. Allerdings würde ich jetzt noch gerne den Download Fortschritt in einem Downloadbalken sehen und die Downloadgeschwindigkeit angezeigt bekommen. Dazu passe ich die Frage an die KI dann noch mal an um neuen Code zu bekommen.

Write a simple Python script that asks the User for a Download URL and then downloads and saves the file into the folder of the script. Also include a progressbar and show the download speed during the download

Here is a simple script that asks the user for a download URL and then downloads and saves the file into the folder of the script. It also includes a progress bar and shows the download speed during the download:

Copy code
import requests
import os
from tqdm import tqdm

# Ask the user for the download URL
url = input("Enter the download URL: ")

# Download the file
response = requests.get(url, stream=True)

# Get the total file size in bytes
total_size = int(response.headers.get('content-length', 0))

# Get the filename from the URL
filename = os.path.basename(url)

# Save the file in the current directory
with open(filename, 'wb') as f:
    for data in tqdm(response.iter_content(1024), total=total_size // 1024, unit='KB', unit_scale=True):
        f.write(data)

# Print a success message
print(f"{filename} downloaded successfully!")

Das sieht dann am Ende so aus:

Ein Programm in eine andere Programmiersprache übersetzen:

Ich habe ChatGPT die Aufgabe gestellt, den Python-Code des Download-Managers in die Programmiersprache Java zu übersetzen. Dabei ist zwar der Downloadbalken verschwunden, jedoch läuft der Code und der Download wird erfolgreich abgeschlossen und auf dem Dateisystem gespeichert. Wenn KI in Zukunft in der Lage ist, zwischen verschiedenen Programmiersprachen zu übersetzen, dann wäre es in der Tat ein sehr mächtiges Werkzeug, das gerade bei Portierungen extrem viel Arbeit abnehmen könnte.

Hier der Code des Download Managers in Java Übersetzt:

import java.io.*;
import java.net.URL;
import java.util.Scanner;

public class Downloader {
  public static void main(String[] args) {
    // Ask the user for the download URL
    Scanner scanner = new Scanner(System.in);
    System.out.print("Enter the download URL: ");
    String url = scanner.nextLine();

    try {
      // Download the file
      URL downloadURL = new URL(url);
      InputStream inputStream = downloadURL.openStream();
      BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

      // Get the filename from the URL
      String filename = new File(downloadURL.getPath()).getName();

      // Save the file in the current directory
      OutputStream outputStream = new FileOutputStream(filename);
      byte[] data = new byte[1024];
      int bytesRead;
      while ((bytesRead = bufferedInputStream.read(data, 0, data.length)) >= 0) {
        outputStream.write(data, 0, bytesRead);
      }
      bufferedInputStream.close();
      outputStream.close();

      // Print a success message
      System.out.println(filename + " downloaded successfully!");
    } catch (IOException e) {
      System.out.println("Error occurred while downloading the file: " + e.getMessage());
    }
  }
}

Spagetthi Code Erklären und Dokumentieren:

ChatGPT kann dabei nicht nur Code erzeugen sondern auch bereits vorhandenen erklären:

What does this code do ?

import random
from PIL import Image, ImageDraw
width = random.randint(400, 600)
height = random.randint(400, 600)
img = Image.new('RGB', (width, height))
draw = ImageDraw.Draw(img)
draw.ellipse((width/4, height/4, 3*width/4, 3*height/4), fill=(255, 255, 0))
draw.ellipse((width/3, height/3, width/2, height/2), fill=(0, 0, 255))
draw.ellipse((2*width/3, height/3, 5*width/6, height/2), fill=(0, 0, 255))
draw.polygon((width/2, height/2, 5*width/6, 2*height/3, width/2, 5*height/6), fill=(0, 255, 0))
draw.arc((width/3, 2*height/3, 2*width/3, 3*height/4), 0, 180, fill=(255, 0, 0))
filename = 'face_' + str(random.randint(1, 1000000)) + '.png'
img.save(filename)

Das könnte sich bei der Softwareentwicklung noch als sehr praktisch herausstellen, wenn man es mit schlecht dokumentiertem oder unverständlichem Code zu tun bekommt. ChatGPT ist hierbei auch in der Lage, Erklärungskommentare direkt unter jede Zeile in unkommentiertem Code einzufügen. Das kann letztendlich auch das Lernen und Verstehen von bisher unbekanntem Code vereinfachen.

Debuggen und Kaputten Code reparieren:

Wenn man programmiert, dann ärgert man sich recht oft mit irgendwelchen Syntax- und Laufzeitfehlern herum. Da eine KI zu haben, die den Code automatisch reparieren kann, wäre doch ganz praktisch. Ich habe testweise mal den Code für obiges Fractal genommen und dort zahlreiche Fehler eingebaut:

#Fehlerhafter code:

# Import the required modules
from PILL import Image
from numpy import complex, array

# Create a new image of the specified size
img = Image.new('RGB', (800, 600))
pixels = img.loat()

# Set the complex plane coordinates
xmin, xmax = -2.0, 1.6
ymin, ymax = -1.2, 1.2

# Iterate over the pixels in the image
for ix in range(img.size[0]):
    for iy in range(img.size[1]):

        # Map the pixel coordinates to the complex plane
        z = complex(xmin + (xmax - xmin) * ix / img.size[0],
                    ymin + (ymax - ymin) * iy / img.size[5].)

        # Compute the mandelbrot function
        c = z
        for i in range(255):
            if abs(z) > 2.0: break,
            z = z * z + c

        # Set the pixel color based on the number of iterations
        pixels[ix, iy] = ((i, i, i))

# Save the image to a JPG file
img.save('fractal.jpgr', 'JPEG')

Danach habe ich ChatGPT gefragt, ob es den zerschossenen Code für mich reparieren kann. Die Fehler wurden in Sekundenbruchteilen behoben. Zudem habe ich noch eine detaillierte Rückmeldung erhalten, was alles korrigiert wurde:

Beim Debuggen dürfte sich KI in einigen Jahren als große Hilfe erweisen und erheblich dazu beitragen die Arbeitseffektivität von Programmierern zu erhöhen.

IT Sicherheit und Hacking.

ChatGPT kann sogar die Funktionsweise von Sicherheitslücken erklären. Als Aufgabe habe ich hier gestellt, einen absichtlich sehr unsicheren PHP-Code zu erzeugen, der sich potentiell für URL-Injectionen eignet.

Create a very insecure PHP script that allows URL Incection for educational purposes

// Prepare the statement
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");

// Bind the user's input as a parameter
$stmt->bind_param("s", $userInput);

// Execute the statement
$stmt->execute();

// Get the results
$result = $stmt->get_result();

// Print the results
while ($row = $result->fetch_assoc()) {
  print_r($row);
}

ChatGPT gibt sich dann auch alle Mühe zu erklären warum der PHP Script Sicherheitsprobleme besitzt welche sich missbrauchen ließen:

This script is extremely insecure because it directly concatenates the user’s input with a database query without properly sanitizing it. This allows an attacker to inject arbitrary SQL code into the query, potentially allowing them to access or modify sensitive data.

For educational purposes, you can test this script by running it on a server and then trying to inject SQL code into the URL. For example, if the script is hosted at http://example.com/insecureScript.php, you could try accessing http://example.com/insecureScript.php?userInput=something'; DROP TABLE users; -- to see if the script allows for SQL injection.

However, please note that this script is for educational purposes only and should not be used in a real-world application. It is extremely insecure and should not be used as an example of how to properly sanitize user input in PHP. Instead, use prepared statements or parameterized queries to securely handle user input in PHP.

Prinzipiell ist ChatGPT also durchaus bereit, Sicherheitslücken in den generierten Code einzubauen, wenn man dies so aktiv von ihr fordert. Allerdings nur, wenn man angibt, dass dies zu Bildungszwecken geschieht. Ansonsten verweigert ChatGPT die Zusammenarbeit.

Als weiteren Test habe ich auch diverse Samples von stark veraltetem und definitiv mit Sicherheitslücken behaftetem PHP-Code ChatGPT gezeigt und gefragt, ob der Code sicher sei. Als Antwort habe ich dann eine direkte Auflistung der enthaltenen Sicherheitslücken erhalten.

Man kann sich also gut vorstellen, dass künstliche Intelligenz in Zukunft eine wichtige Rolle in der IT-Sicherheitsforschung spielen wird. Idealerweise lassen sich dann Sicherheitslücken finden und schließen, bevor sie von kriminellen Angreifern missbraucht werden können.

Fazit:

Zu erwähnen ist hier auch, dass ChatGPT im Grunde ein stark experimentelles Forschungsprojekt ist. Die Möglichkeiten sind immer noch limitiert. Mittlerweile sind jedoch schon neue Chatbots in Arbeit, die voraussichtlich schon bald sehr viel mächtiger und effizienter sein werden. Dann könnte es durchaus sehr zeitnah passieren, dass es in der Informatik eine Explosion der Produktivität geben wird. Die Arbeitsleistung einzelner Programmierer würde somit radikal steigen. Vermutlich wird dies dann auch deutliche Einflüsse auf die Arbeitsmarktsituation haben, wenn gegebenenfalls deutlich weniger Personal benötigt wird. Meiner Meinung nach kündigt sich hier die nächste große Technikrevolution in der Digitalisierung an, die in den nächsten Jahren noch ungeahnte Folgen nach sich ziehen wird. Es könnte sich dabei herausstellen, dass sich intellektuelle Leistungen bald in ungeahntem Ausmaß automatisieren lassen. Das dürfte dann die Weise, wie wir wirtschaften und arbeiten, grundsätzlich massiv verändern.

Artikel von Max Kehm


Eine Antwort zu “Programmieren mit ChatGPT – Eine Technik Revolution kündigt sich an !”

  1. Hallo Max,
    vielen Dank für diesen hoch interessanten Beitrag zu ChatGPT und seine Hilfe zu Programmierproblemstellungen und Aufgaben. Seit kurzem beschäftige ich mich auch mit ChatGPT hab mich registriert und es ist wirklich beeindruckend wie weit KI schon voran gekommen ist. Natürlich besteht auch immer die Möglichkeit KI nicht zum Nutzen einzusetzen darauf sollte man auch ein Augenmerk haben. Dennoch denke das ist der Weg wie man Problemlösungen schaffen kann mit Hilfe einer guten KI.

    Frohe Feiertage alles Gute

    der Rudy 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert