
Dieses Projekt ist so konstruiert, dass es scheitert
(bis es nicht)
Starten Sie neu, bis es funktioniert
Dieses Projekt zielt darauf ab, Code mithilfe der OpenAI -API auf evolutionäre Weise Code zu generieren. Dies bedeutet, dass jede Generation auf dem vorherigen aufbaut, um den Code besser zu machen, ihn zu erweitern, zu refaktor oder Fehler zu beheben.
Dieses Projekt "Fail2" ist die zweite Version und wurde von seinem Vorgänger "Fail1" abgeleitet, der Verbesserungen und zusätzliche Funktionen enthält.
Der generierte Code wird im Browser in einem Canvas -Element ausgeführt und zielt darauf ab, 2D -Anwendungen mit JavaScript zu erstellen.
Dieser Leitfaden führt Sie durch den Prozess der Verwendung unseres generativen Prozesses, der von OpenAIs GPT-3.5-Sprachmodell betrieben wird, um innovative JavaScript-Canvas2D-Projekte zu erstellen. Sie lernen, wie Sie Abhängigkeiten installieren, Ihren API -Schlüssel hinzufügen, die erste Generation ausführen und die Ergebnisse untersuchen.
Stellen Sie sicher, dass Sie Folgendes auf Ihrem System installiert haben:
Klonen Sie das Repository in Ihre lokale Maschine:
git clone [email protected]:failfa-st/fail2.gitNavigieren Sie zum Projektverzeichnis:
cd fail2Installieren Sie die erforderlichen Abhängigkeiten durch Ausführen:
npm installErstellen Sie ein Konto unter https://platform.openai.com/signup und erhalten Sie Ihren API -Schlüssel.
Kopieren Sie die Datei .env.example in .env :
cp .env.example .env Öffnen Sie die .env -Datei und fügen Sie Ihre OpenAI -API -Schlüssel hinzu:
OPENAI_API_KEY=your_api_key_hereDer generierte Code wird auf einem lokalen Entwicklungsserver ausgeführt. Beginnen wir also zuerst
npm run devDadurch wird http: // localhost: 8080 in Ihrem Browser geöffnet. Wenn dies nicht der Fall ist, dann öffnen Sie es sich bitte selbst und halten Sie es offen.
Führen Sie den folgenden Befehl aus, um den Codegenerierungsprozess zu starten:
node base-default.js -p "<prompt>" -g <generations> -P "<persona>" -t <temperature> -c -m "<model>" -n "<negative_prompt>" -s <seed>
Oder verwenden Sie eines der grundlegenden Beispiele:
node base-default.js -p "matrix code" -g 3
node base-art.js -p "flow field" -g 10 -c -s 123456789
node base-game.js -p "arcade game asteroids" -g 5 -n "audio files, images, alert" -P "JavaScript expert, game developer, retro lover"
| Option | Alias | Typ | Standard | Beschreibung |
|---|---|---|---|---|
--prompt | -p | string | "extend the code" | Legt die Eingabeaufforderung für den generierten Code fest |
--negativePrompt | -n | string | "" | Legt die negative Eingabeaufforderung für den generierten Code fest |
--generations | -g | number | 1 | Legt die Anzahl der Generationen für den generierten Code fest |
--persona | -P | string | "JavaScript expert, performance expert" | Legt die Person der generierten Code fest |
--temperature | -t | number | 0.2 | Legt die Temperatur für den generierten Code fest |
--seed | -s | number | -1 | Legt den Samen für den generierten Code fest ( -1 erstellt einen zufälligen Samen) |
--model | -m | string | "gpt-3.5-turbo" | Legt das Modell fest, das zum Generieren des Codes verwendet werden soll |
--clean | -c | boolean | false | Setzen Sie auf true , wenn Sie zuvor generierte Code entfernen möchten |
Das Flag --temperature steuert die Kreativitätsstufe im generierten Code mit einem Bereich von 0 bis 2. Höhere Werte führen zu innovativerem Code, erhöhen jedoch auch das Risiko von Fehlern oder ungültigem JavaScript. Verwenden Sie für die besten Ergebnisse einen Wert unter 0,5, um die Kreativität mit Zuverlässigkeit auszugleichen. Der Standardwert beträgt 0,2.
Das Flag --negativePrompt negiert jeden von Kommas getrennten Teil der Eingabeaufforderung mit "Nein", um unerwünschte Verhaltensweisen im generierten Code zu verhindern. Zum Beispiel wird --negativePrompt "audio, images" "no audio, no images" . Diese Funktion hilft dabei, sicherere und bessere Code zu erstellen, kann jedoch nicht alle unerwünschten Verhaltensweisen beseitigen.
Das Flag --model kann verwendet werden, um das Modell für das Generieren von Code anzugeben. Das Standardmodell ist "gpt-3.5-turbo" . Sie können jedoch auch das "gpt-4" -Modell verwenden, das mehr Token bietet, aber zu unerwünschtem Verhalten führen kann.
Die Verwendung des
"gpt-4"-Modells erhöht die Zeit, die zum Generieren von Code benötigt wird, erheblich, da es langsamer ist als das Standardmodell "Standard"gpt-3.5-turbo".
Weitere Informationen zu den verfügbaren Modellen und ihren jeweiligen Funktionen finden Sie in der OpenAI -Dokumentation.
Das --seed Flag legt den Saatgut für den in der Codegenerierung verwendeten Zufallszahlengenerator fest. Standardmäßig wird der Saatgut auf eine Zufallszahl zwischen 0 und 100000000 gesetzt. Wenn ein benutzerdefinierter Samen mit dem Flag --seed -Flag geliefert wird, wird dieser Wert stattdessen verwendet.
Der Samen ist eine Pseudo-Random-Zahl und kann eindeutige Ergebnisse generieren, aber jedes Mal nicht gleich.
Dieses Projekt enthält drei Starterdateien, base-default.js (No Importe), base-art.js (NoiseJs und Color) und base-game.js (Rauschen, Farbe und Ton), die einen grundlegenden Ausgangspunkt und ein Beispiel dafür bieten, wie Abhängigkeiten hinzugefügt werden.
Euen Starterdateien müssen immer mitbase-beginnen.
Um zusätzliche Token-Kosten zu vermeiden, erstellen Sie eine benutzerdefinierte Basisdatei wie
base-no-changelog.jsohne den ChangeLog-Kommentar.
Dieses Projekt generiert Code mithilfe der OpenAI -API und folgt einer Reihe von Anweisungen und Einschränkungen, um Code zu erstellen, die erweitert, neu reflektiert oder festgelegt werden können. Jede Generation von Code baut auf dem vorherigen auf und zielt darauf ab, den Code zu verbessern. Das Projekt verwendet verschiedene Personas, um Code zu generieren und eine bestimmte Anzahl von Code -Generationen zu erstellen. Der generierte Code wird mit hübscher und in separaten Dateien gespeichert. Das Projekt verfolgt auch Änderungen und bietet einen Changelog. Zusätzlich kann der zuvor generierte Code entfernt werden. Das Projekt kann Fehler bewältigen.
Der generierte Code wird in eine Datei, project/src/index.js , geschrieben, die von WebPack kompiliert wird. Ein WebPack Dev Server wird ausgeführt, sodass Sie die Live -Änderungen ansehen können, wenn sich der Codegenerierungsprozess entwickelt.
Das Projekt verwendet zwei Hauptdateien:
base.js : Diese Datei verwaltet den Code -Erzeugungsprozess mithilfe der OpenAI -API, schreibt den generierten Code in Dateien (einschließlich project/src/index.js ) und verarbeitet Fehler, die während der Codegenerierung auftreten können.base-*.js : Diese Datei ist der Ausgangspunkt für den Codegenerierungsprozess. Es enthält den anfänglichen Code -Snippet und legt alles in Bewegung, um Code zu generieren, indem die erforderlichen Funktionen von base.js aufgerufen werden. Um von einer bestimmten Generation fortzufahren, entweder weil Sie damit zufrieden sind oder ein Problem beheben müssen, verwenden Sie das folgende Format: node generation-xxxx.js -g <generation + 1> -p "<prompt>"
1. Fixieren eines Pannens in Generation 4
In diesem Beispiel gibt es ein Problem mit der vierten Generation einer prozeduralen Generation, was dazu führt, dass der Hintergrund zu dunkel ist und der Spielspieler unsichtbar ist. Um dieses Problem zu beheben, führt der Benutzer den folgenden Befehl aus:
node generation-0004.js -g 5 -p "fix: dark background, player invisible" -c
Dieser Befehl startet von Generation 4 ( generation-0004.js ) und übergeht mit der nächsten Generation (Generation 5) und bietet eine Aufforderung zur Behebung des Problems mit der Dunkelheit und des Spielers der Spieler.
2. Hinzufügen eines Bewertungssystems bei Generation 3
In diesem Fall ist der Benutzer mit dem Fortschritt des Spiels in der dritten Generation zufrieden und möchte ein Bewertungssystem hinzufügen. Dazu führen sie den folgenden Befehl aus:
node generation-0003.js -g 4 -p "feat: implement scoring" -c
Dieser Befehl initiiert von Generation 3 ( generation-0003.js ) und geht an die nächste Generation (Generation 4), wobei eine Aufforderung zur Implementierung eines Bewertungsfunktion in das Spiel einbezogen wird.
3.. Beibehalten des Durchflussfelds von Generation 5, aber die nachfolgenden Generationen ignorieren
In dieser Situation schätzt der Benutzer das in der fünften Generation generierte Flussfeld, ist jedoch mit den Ergebnissen späterer Generationen unzufrieden. Um das gewünschte Ergebnis zu erzielen, führen sie den folgenden Befehl aus:
node generation-0005.js -g 10 -p "flow field" -c
Dieser Befehl beginnt von Generation 5 ( generation-0005.js ) und setzt sich bis zur Generation 10 fort, wobei das Flussfeld von Generation 5 beibehalten wird und die unerwünschten Ergebnisse der dazwischen liegenden Generationen nicht berücksichtigt.