Zu den zahlreichen Funktionen der Azure-OpenAI-Modelle gehört es auch, Code oder Code-Schnipsel aus Eingaben in natürlicher Sprache erstellen zu können. Ob für das Generieren einzelner Code-Zeilen oder die Transformation von Code in eine andere Programmiersprache: Die Einsatzbereiche sind vielfältig.
Die meisten der von Azure OpenAI bereitgestellten Sprachmodelle können in der einen oder anderen Weise Code generieren. Allerdings variiert die Qualität der Ergebnisse von Modell zu Modell sehr deutlich. So bietet beispielsweise das Standardtextmodell der GPT3-Familie (z. B. text-davinci-002) zwar ein recht gutes Grundverständnis von Code, „Codex“ hingegen (z. B. code-davinci-002) bietet ergänzend zum Standard-Textmodell erweiterte Coding-Funktionen.
Die beiden hier genannten Modelle gehören in Azure OpenAI aktuell aber bereits zu den Legacy-Modellen und sind damit für neue Bereitstellungen seit dem 6. Juli 2023 nicht mehr verfügbar. Eine Übersicht der aktuellen Modelle findet sich in der Azure-OpenAI-Dokumentation.
Mit jeder neuen Modellgeneration verbessern die Basismodelle ihre Leistungsfähigkeit und damit auch ihr Verständnis für Sprache und Code erheblich. Dies führt dazu, dass bestimmte Codex-Modelle aktuell gar nicht mehr erforderlich sind. Denn die jeweiligen Verbesserungen gipfeln in einem einzigen Modell der neueren Generationen, also aktuell z.B. in „gpt-35-turbo“ und „gpt-4“. Diese lassen sich dann sowohl für natürliche Sprache als auch für Code nutzen. Alle Beispiele in diesem Text basieren aus Kostengründen auf gpt-35-turbo. Stellen sie daher zum Nachvollziehen der folgenden Beispiele in Azure OpenAI ein neues Deployment auf Basis des Modells „gpt-35-turbo“ mit der Modellversion „0301 (Standard)“ bereit, wie im ersten Artikel dieser Azure-OpenAI-Reihe demonstriert.
Zur Info: „gpt-35-turbo“ wird normalerweise mit der Chatvervollständigungs-API genutzt, die GPT-3.5 Turbo Version 0301 lässt sich aber auch mit der Completion-API verwenden. Hingegen unterstützen die GPT-3.5 Turbo-Versionen 0613 und 1106 ausschließlich die Chat-Completion-API. Dabei ist z. B. GPT-3.5 Turbo Version 0301 die erste Version des veröffentlichten Modells und Version 0613 dann die Zweite, welche dem Modell Unterstützung für Funktionsaufrufe hinzufügt. Aktuell sind die Modelle GPT-4, GPT-4-32k und GPT-4 Turbo mit Vision für alle Azure-OpenAI-Kunden erhältlich, allerdings variiert die Verfügbarkeit je nach Region. Sollte GPT-4 in Ihrer Region nicht angezeigt werden, wählen Sie eine andere Region oder schauen später einfach noch einmal nach. Alle genannten Modelle können mit der Chat-Completion-API genutzt werden, wobei GPT-4 Version 0314 die erste Version des veröffentlichten Modells ist und Version 0613 die Zweite, die dem Modell Unterstützung für Funktionsaufrufe hinzufügte.
Funktionen oder ganze Anwendungen erstellen
Die genannten Azure-OpenAI-Modelle sind grundsätzlich dazu in der Lage, Funktionen in mehreren Programmiersprachen zu generieren. Man muss einfach in Prosa beschreiben, was das jeweilige Ziel ist. Angenommen, wir möchten einen Quicksort-Algorithmus in C# implementieren.
Zur Erinnerung: Quicksort ist ein schon seit 1960 bekannter, schneller, rekursiver und nicht stabiler Sortieralgorithmus mit der Eigenschaft, dass er eine sehr kurze innere Schleife verwendet (was die Ausführungsgeschwindigkeit erhöht) und außer dem für die eigentliche Rekursion benötigten Platz auf dem Aufruf-Heap, ohne weiteren zusätzlichen Speicherplatz auskommt. Das eigentliche Funktionsprinzip finden sie in zahlreichen Quellen im Netz. In Pseudocode sieht das Ganze etwa so aus:
funktion quicksort(links, rechts)
falls links < rechts dann
teiler:= teile(links, rechts)
quicksort(links, teiler - 1)
quicksort(teiler + 1, rechts)
ende
ende
Der blanke zurückgegebene Code sieht aus wie folgt:
public static int QuickSearch(int[] arr, int target) {
int left = 0;
int right = arr.Length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
}
else if (arr[mid] < target) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
Man kann einfach eine Eingabeaufforderung wie im ersten Bild tätigen oder den Prompt auf Deutsch formulieren: „Schreibe eine C#-Funktion für einen Quicksort.“ Der Bot liefert dann auch noch gleich eine passende Erläuterung zum Algorithmus (siehe Abbildung).
Selbstverständlich funktioniert das auch für Python, Java, NodeJS oder PHP.
Statt die gleiche Frage wie im Beispiel für die jeweilige Programmiersprache erneut zu stellen, kann man dem Modell auch ein vorhandenes Code-Segment mitgeben und um die Übersetzung in eine andere Programmiersprache bitten. Wie wäre es mit einer klassischen binären Suche in Python:
def binäre_suche(folge: Sequence[int], x: int) -> Tuple[str, int]:
links = 0
rechts = len(folge) - 1 while links <= rechts:
mitte = links + (rechts - links) // 2 # Bereich halbieren
if folge[mitte] == x:
return 'Position', mitte if folge[mitte] > x:
rechts = mitte - 1 # im linken Abschnitt weitersuchen
else:
links = mitte + 1 # im rechten Abschnitt weitersuchen return 'Lücke', links
Nutzen wir nun also das Modell, um das Code-Fragment z. B. nach Java zu transferieren. Das Ergebnis folgt auf dem Fuße.