
Ce projet est construit pour échouer
(jusqu'à ce que ce ne soit pas le cas)
Redémarrer jusqu'à ce que cela fonctionne
Ce projet vise à générer du code à l'aide de l'API OpenAI de manière évolutive. Cela signifie que chaque génération s'appuiera sur la précédente pour améliorer le code, la prolonger, la refacter ou corriger les bogues.
Ce projet, "Fail2", est la deuxième version et a été dérivé de son prédécesseur, "Fail1", incorporant des améliorations et des fonctionnalités supplémentaires.
Le code généré sera exécuté dans le navigateur sur un élément Canvas et vise à créer des applications 2D à l'aide de JavaScript.
Ce guide vous guidera à travers le processus d'utilisation de notre processus génératif alimenté par le modèle de langue GPT-3.5 d'OpenAI pour créer des projets JavaScript JavaScript innovants. Vous apprendrez à installer des dépendances, à ajouter votre clé API, à exécuter la première génération et à explorer les résultats.
Assurez-vous que vous avez installé les suivants sur votre système:
Clone le référentiel de votre machine locale:
git clone [email protected]:failfa-st/fail2.gitAccédez au répertoire du projet:
cd fail2Installez les dépendances requises en fonctionnant:
npm installCréez un compte sur https://platform.openai.com/Signup et obtenez votre clé API.
Copiez le fichier .env.example sur .env :
cp .env.example .env Ouvrez le fichier .env et ajoutez votre clé API OpenAI:
OPENAI_API_KEY=your_api_key_hereLe code généré s'exécutera dans un serveur de développement local, alors commençons ce premier
npm run devCela ouvrira http: // localhost: 8080 dans votre navigateur. Si ce n'est pas le cas, veuillez l'ouvrir vous-même et le garder ouvert.
Pour démarrer le processus de génération de code, exécutez la commande suivante:
node base-default.js -p "<prompt>" -g <generations> -P "<persona>" -t <temperature> -c -m "<model>" -n "<negative_prompt>" -s <seed>
Ou utilisez l'un des exemples de base:
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 | Taper | Défaut | Description |
|---|---|---|---|---|
--prompt | -p | string | "extend the code" | Définit l'invite pour le code généré |
--negativePrompt | -n | string | "" | Définit l'invite négative pour le code généré |
--generations | -g | number | 1 | Définit le nombre de générations pour le code généré |
--persona | -P | string | "JavaScript expert, performance expert" | Définit le personnage du code généré |
--temperature | -t | number | 0.2 | Définit la température du code généré |
--seed | -s | number | -1 | Définit la graine du code généré ( -1 crée une graine aléatoire) |
--model | -m | string | "gpt-3.5-turbo" | Définit le modèle à utiliser pour générer le code |
--clean | -c | boolean | false | Définir sur true si vous souhaitez supprimer tout code généré précédemment |
L'indicateur --temperature contrôle le niveau de créativité dans le code généré, avec une plage de 0 à 2. Des valeurs plus élevées entraînent un code plus innovant, mais augmentent également le risque d'erreurs ou de JavaScript non valide. Pour les meilleurs résultats, utilisez une valeur inférieure à 0,5 pour équilibrer la créativité avec la fiabilité. La valeur par défaut est de 0,2.
Le drapeau --negativePrompt nie chaque partie séparée par des virgules de l'invite avec "non" pour empêcher les comportements indésirables dans le code généré. Par exemple, --negativePrompt "audio, images" ne devient "no audio, no images" . Cette fonctionnalité aide à créer un code plus sûr et meilleur mais peut ne pas éliminer tout comportement indésirable.
L'indicateur --model peut être utilisé pour spécifier le modèle à utiliser pour la génération de code. Le modèle par défaut est "gpt-3.5-turbo" . Cependant, vous pouvez également choisir d'utiliser le modèle "gpt-4" , qui fournit plus de jetons mais peut entraîner un comportement indésirable.
L'utilisation du modèle
"gpt-4"augmentera considérablement le temps nécessaire pour générer du code car il est plus lent que le modèle"gpt-3.5-turbo"par défaut.
Pour en savoir plus sur les modèles disponibles et leurs fonctionnalités respectives, veuillez vous référer à la documentation OpenAI.
L'approvisionnement --seed Seed définit la graine du générateur de nombres aléatoires utilisé dans la génération de code. Par défaut, la graine est définie sur un nombre aléatoire entre 0 et 100000000. Si une graine personnalisée est fournie avec l'indicateur --seed , cette valeur sera utilisée à la place.
La graine est un nombre pseudo-aléatoire et peut générer des résultats uniques, mais ne sera pas le même à chaque fois.
Ce projet est livré avec trois fichiers de démarrage, base-default.js (pas d'importations), base-art.js (bruit et couleur) et base-game.js (bruit, couleur et ton), qui fournissent un point de départ de base et un exemple de la façon d'ajouter des dépendances.
️ Les fichiers de démarrage doivent toujours commencer parbase-
Pour éviter les coûts de jetons supplémentaires, créez un fichier de base personnalisé tel que
base-no-changelog.jssans le commentaire de changelog.
Ce projet génère du code à l'aide de l'API OpenAI et suit un ensemble d'instructions et de contraintes pour produire du code qui peut être étendu, refactorisé ou corrigé. Chaque génération de code s'appuie sur la précédente et vise à améliorer le code. Le projet utilise différentes personnages pour générer du code et peut créer un nombre spécifié de générations de code. Le code généré est formaté à l'aide de plus jolis et enregistré dans des fichiers séparés. Le projet garde également une trace des modifications et fournit un changelog. De plus, il peut supprimer le code généré précédemment. Le projet peut gérer les erreurs.
Le code généré est écrit dans un fichier, project/src/index.js , qui est compilé par webpack. Un serveur de développement WebPack s'exécute, vous permettant de visualiser les modifications en direct à mesure que le processus de génération de code évolue.
Le projet utilise deux fichiers principaux:
base.js : Ce fichier gère le processus de génération de code à l'aide de l'API OpenAI, écrit le code généré en fichiers (y compris project/src/index.js ) et gère les erreurs qui pourraient se produire pendant la génération de code.base-*.js : Ce fichier est le point de départ du processus de génération de code. Il contient l'extrait de code initial et définit tout en mouvement pour générer du code en appelant les fonctions nécessaires à partir de base.js Pour continuer à partir d'une certaine génération, soit parce que vous en êtes satisfait, soit vous devez corriger un problème, utilisez le format suivant: node generation-xxxx.js -g <generation + 1> -p "<prompt>"
1. Fixation d'un problème dans la génération 4
Dans cet exemple, il y a un problème avec la quatrième génération d'une génération procédurale, ce qui fait que l'arrière-plan est trop sombre et le joueur de jeu est invisible. Pour résoudre ce problème, l'utilisateur exécute la commande suivante:
node generation-0004.js -g 5 -p "fix: dark background, player invisible" -c
Cette commande commence à partir de la génération 4 ( generation-0004.js ) et passe à la prochaine génération (génération 5) tout en fournissant une invite pour résoudre l'obscurité en arrière-plan et la visibilité des joueurs.
2. Ajout d'un système de notation à la génération 3
Dans ce cas, l'utilisateur est satisfait des progrès du jeu à la troisième génération et souhaite ajouter un système de notation. Pour ce faire, ils exécutent la commande suivante:
node generation-0003.js -g 4 -p "feat: implement scoring" -c
Cette commande découle de la génération 3 ( generation-0003.js ) et passe à la prochaine génération (génération 4), incorporant une invite pour implémenter une fonctionnalité de notation dans le jeu.
3. Retenir le champ d'écoulement de la génération 5 mais sans tenir compte des générations ultérieures
Dans cette situation, l'utilisateur apprécie le champ d'écoulement généré dans la cinquième génération mais n'est pas satisfait des résultats des générations ultérieures. Pour atteindre le résultat souhaité, ils exécutent la commande suivante:
node generation-0005.js -g 10 -p "flow field" -c
Cette commande commence à partir de la génération 5 ( generation-0005.js ) et se poursuit jusqu'à la génération 10, en maintenant le champ d'écoulement de la génération 5 et en ignorant les résultats indésirables des générations entre les deux.