Boost 4D mit OpenAI!

Künstliche Intelligenz verändert unser tägliches Leben rapide, nicht nur als Entwickler. Die meisten von Ihnen, wenn nicht alle, haben bereits von ChatGPT von OpenAI gehört. In diesem Beitrag geht es um einen Proof-of-Concept, der mit Qodly Studio in einem praktischen Anwendungsfall gemacht wurde: wie man KI nutzt, um glaubwürdige und realistische Datensätze für Ihre Apps zu generieren. Mit anderen Worten: wie Sie Ihre Anwendung schnell mit Daten füllen können, um sie zu testen oder zu demonstrieren. Machen Sie sich bereit!

Wer ist wer

ChatGPT ist eine Variante des GPT-Modells (Generative Pre-trained Transformer), das für das Verständnis und die Generierung natürlicher Sprache in einem Gesprächskontext optimiert wurde. Es wurde entwickelt, um textbasierte Unterhaltungen mit Benutzern zu führen, menschenähnliche Antworten zu geben und kohärente und kontextbezogene Texte zu generieren. ChatGPT kann für eine Vielzahl von Anwendungen eingesetzt werden, darunter Chatbots, virtuelle Assistenten, Kundensupport und vieles mehr, bei denen eine Interaktion mit Benutzern über natürliche Sprache erforderlich ist.

OpenAI API ist die Programmierschnittstelle, die es Entwicklern ermöglicht, auf die Fähigkeiten von ChatGPT und anderen von OpenAI bereitgestellten Modellen zuzugreifen und diese zu nutzen. Sie fungiert als Brücke zwischen dem Modell und den Anwendungen der Entwickler und ermöglicht es ihnen, Textaufforderungen zu senden und vom Modell generierte Antworten zu erhalten.

Was BRINGT MIR DAS?

Da es sich um eine Rest-API handelt, ist es recht einfach, sie mit 4D zu nutzen, und wir werden das anhand eines interessanten Anwendungsfalls sehen. Nehmen wir einmal an, Sie arbeiten an einer brandneuen Anwendung. Sie entwerfen Ihre Struktur: Datenklassen, Attribute und Beziehungen. Sie entwerfen Ihre Bildschirme und Transaktionen, entweder über Desktop-Bildschirme oder Qodly-Webformulare. Was fehlt jetzt noch? Die Daten natürlich!

Sie haben nicht immer eine csv- oder json-Datei zum Importieren bereit und auch nicht die Zeit, einen relevanten Datensatz zu sammeln und zu bereinigen. Hier kann KI eine gewisse Hilfe sein. In diesem Proof of Concept zeigen wir Ihnen, wie eine einfache, aber nützliche und praktische KI-Nutzung für Sie als Entwickler aussehen könnte.

Stellen Sie sich vor, Sie könnten einfach sagen: „Gib mir französische Vornamen“ oder „Gib mir typische Kommentare zu Stundenzetteln“, und Ihre Datenbank wird entsprechend befüllt. Schauen Sie sich das folgende Video an, um weitere Beispiele zu sehen, wie Sie mit einer mit Qodly Studio erstellten Anwendung nützliche Daten erzeugen können.

Neugierig geworden? Sie können den Code der Demo hier erhalten (4D v20 R2 Minimum):

4D, Qodly und OpenAI

Probieren Sie es aus, verbessern Sie es oder passen Sie es für Ihre Zwecke an. ABER: Vergessen Sie nicht, etwas zur DEMO beizutragen – die Community lebt von der Interaktion!

WIE FUNKTIONIERT ES?

Im Grunde ist es ganz einfach, nichts besonders Ausgefallenes.

Abgesehen von der Auflistung von Datenklassen und ihren Attributen – was in der generischen 4D Programmierung üblich ist – dreht sich das Herzstück dieser Demo um die Abfrage der OpenAI API.

Dies geschieht in einer eigenen Benutzerklasse, in einer Funktion namens queryOpenAI().

Function queryOpenAI() : Text
  var $url : Text
  var $headers; $data; $opts : Object
  var $request : 4D.HTTPRequest
	
  $url:="https://api.openai.com/v1/chat/completions"
  $headers:=New object("Authorization"; "Bearer "+This.apiKey; "Content-Type"; "application/json")
	
  $data:={}
  $data.model:="gpt-3.5-turbo"
  $data.messages:=This.messages.copy()
  $data.messages.push({role: "user"; content: This.userPrompt})
	
  $opts:={method: "POST"; headers: $headers; body: $data}
	
  $request:=4D.HTTPRequest.new($url; $opts)
  $request.wait()
	
  This.fetchStatusCode:=$request.response.status
	
  If (This.fetchStatusCode=200)
    return $request.response.body.choices[0].message.content
  Else 
    return ""
  End if 

Wenn Sie es gewohnt sind, die 4D.HTTPRequest Klasse zu verwenden, ist diese Funktion kein Geheimnis für Sie (beachten Sie, dass Sie nach der Registrierung Ihren eigenen API Key verwenden müssen). Kein Geheimnis? Bis auf die Eigenschaften This.messages und This.userPrompt, die zur Abfrage von OpenAI verwendet werden, indem sie in den Body der Anfrage eingefügt werden.

Nun, bei diesen beiden Eigenschaften kommt Ihre Kreativität ins Spiel. Werfen Sie einen Blick auf den Klassenkonstruktor, um die Antwort zu erhalten:

This.systemPrompt:="You are data generator. "
This.systemPrompt+="You will be provided with a description values to generate; and your task is to generate as many values as requested. "
This.systemPrompt+="Generated values must be separated by the character separator ¶. "
This.systemPrompt+="The list must start with 2 characters: ¶¶. "
This.systemPrompt+="The list must end with 2 characters: ¶¶. "
	
This.messages:=[]
This.messages.push({role: "system"; content: This.systemPrompt})
This.messages.push({role: "user"; content: "Generate a list of exactly 10 values for \"firstname\" of type Text."})
This.messages.push({role: "assistant"; content: "¶¶Alice¶Oliver¶Elsa¶Liam¶Maja¶Noah¶Ella¶Lucas¶Wilma¶Hugo¶¶"})
This.messages.push({role: "user"; content: "Generate a list of exactly 10 values for \"amount\" of type number."})
This.messages.push({role: "assistant"; content: "¶¶35¶64797¶101246¶3¶119¶4477¶647779¶357769¶94¶77¶¶"})
This.messages.push({role: "user"; content: "Generate a list of exactly 5 values for \"birthdate\" of type date."})
This.messages.push({role: "assistant"; content: "¶¶1980-10-05¶2035-05-02¶1995-12-15¶2022-10-14¶2011-05-23¶¶"})
	
This.userPrompt:="Generate a list of exactly "+String($quantity)+" values for \""+String($attributeName)+"\" of type "+This.attributeType+"."
This.userPrompt+=($remark#"") ? (" Remark: "+$remark) : ""
If ($attributeType="date")
  This.userPrompt+=". Date format: YYYY-MM-DD"
End if

Sie können diesen Satz von Zeilen als 3 Teile sehen:

  1. Systemaufforderung: Hier legen Sie den Kontext fest, das große Bild. Sie zeigen dem Modell die Richtung an, in die es gehen soll. In diesem Fall schreibe ich eine Art von Anforderungen.
  2. Vorläufige Konversation: Hier können Sie eine Konversation zwischen dem Benutzer (Ihnen) und dem Assistenten (der KI) imitieren. Vergessen Sie nicht, dass OpenAI „nichts weiter“ als ein generatives Modell ist, das Antworten liefert, die mit dem Kontext übereinstimmen. Indem Sie selbst den Anfang einer Diskussion schreiben, erhöhen Sie Ihre Chancen, eine stabile Antwort zu erhalten. Hier simuliere ich 3 Fragen und Antworten, um meine Chancen zu erhöhen, immer eine gut formatierte Antwort in der gewünschten Menge zu erhalten.
  3. Benutzeraufforderung: Dies ist die echte Frage. Eine Kopie der 3 zuvor simulierten Fragen, aber diesmal wird die Eingabeaufforderung mit dem initialisiert, was der Benutzer in der Demo-UI eingestellt hat.

Wie oben beschrieben, werden Systemprompt, vorbereitende Konversation und Benutzerprompt alle in eine Sammlung $data geschoben und als Körper der HTTPRequest an OpenAI übermittelt.

Der Rest ist einfach eine klassische String-Aufteilung.

Tipps und Tricks

Wenn Sie sich die Demo ansehen und selbst damit spielen, werden Sie feststellen, dass die Abfrage von OpenAI einige Zeit dauern kann. Sie können https://status.openai.com/ überprüfen, wenn Sie eine Ausfallzeit vermuten. Ein Aspekt hat einen großen Einfluss auf die Antwortzeiten: die Anzahl der Token in der API-Antwort. Je länger die Antwort ist, desto langsamer erhalten Sie sie. Aber in vielen Fällen ist es schneller, die Maschine einfach laufen zu lassen, auch wenn es eine Weile dauert, als einen relevanten Datensatz zu sammeln, zu bereinigen und zu importieren.

Für diese Demo gibt es in vielerlei Hinsicht Optimierungsmöglichkeiten. Die OpenAI-API bietet einen Streaming-Modus, der das Erlebnis verbessern könnte, indem er es ermöglicht, die Datensatzerstellung in der Datenbank viel schneller zu starten als es derzeit der Fall ist.

Wir hoffen, dass dieses Beispiel Sie inspirieren wird! Werfen Sie einen Blick in die OpenAI API-Referenz, sie ist voll von interessanten Funktionen und anderen Anwendungsfällen. Zögern Sie nicht, etwas beizutragen und uns Vorschläge zu schicken!

Avatar
4D Product Team Leader -Mathieu kam 2020 als Product Team Leader zu 4D. Sein Team besteht aus Product Ownern, der Stimme der User von 4D. Sie arbeiten Hand in Hand mit dem technischen Team und müssen Prioritäten setzen, die Reichweite festlegen und überprüfen, ob neue Funktionen den Erwartungen der 4D User entsprechen. Mathieu war zuvor als Projektleiter und Teammanager in verschiedenen IT-Abteilungen führender Branchen tätig - Automobil, Sicherheit, Werbung, spezialisiert auf internationale Kontexte und Cloud-orientierte Dienste.