
Este proyecto está creado para fallar
(hasta que no lo haga)
Reiniciar hasta que funcione
Este proyecto tiene como objetivo generar código utilizando la API de OpenAI de manera evolutiva. Significa que cada generación se basará en la anterior para mejorar el código, extenderlo, refactorizarlo o solucionar errores.
Este proyecto, "Fail2", es la segunda versión y se ha derivado de su predecesor, "Fail1", que incorpora mejoras y características adicionales.
El código generado se ejecutará en el navegador en un elemento de lona y tiene como objetivo crear aplicaciones 2D utilizando JavaScript.
Esta guía lo guiará a través del proceso de uso de nuestro proceso generativo impulsado por el modelo de lenguaje GPT-3.5 de Opensei para crear innovadores proyectos de JavaScript Canvas2D. Aprenderá a instalar dependencias, agregar su tecla API, ejecutar la primera generación y explorar los resultados.
Asegúrese de tener lo siguiente instalado en su sistema:
Clonar el repositorio de su máquina local:
git clone [email protected]:failfa-st/fail2.gitNavegue al directorio del proyecto:
cd fail2Instale las dependencias requeridas ejecutando:
npm installCree una cuenta en https://platform.openai.com/signup y obtenga su clave API.
Copie el archivo .env.example a .env :
cp .env.example .env Abra el archivo .env y agregue su tecla API de OpenAI:
OPENAI_API_KEY=your_api_key_hereEl código generado se ejecutará en un servidor de desarrollo local, así que comencemos este primero
npm run devEsto abrirá http: // localhost: 8080 en su navegador. Si no es así, ábralo tú mismo y manténgalo abierto.
Para iniciar el proceso de generación de código, ejecute el siguiente comando:
node base-default.js -p "<prompt>" -g <generations> -P "<persona>" -t <temperature> -c -m "<model>" -n "<negative_prompt>" -s <seed>
O use uno de los ejemplos básicos:
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"
| Opción | Alias | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
--prompt | -p | string | "extend the code" | Establece el mensaje para el código generado |
--negativePrompt | -n | string | "" | Establece la solicitud negativa para el código generado |
--generations | -g | number | 1 | Establece el número de generaciones para el código generado |
--persona | -P | string | "JavaScript expert, performance expert" | Establece la persona del código generado |
--temperature | -t | number | 0.2 | Establece la temperatura para el código generado |
--seed | -s | number | -1 | Establece la semilla para el código generado ( -1 crea una semilla aleatoria) |
--model | -m | string | "gpt-3.5-turbo" | Establece el modelo para usar para generar el código |
--clean | -c | boolean | false | Establecer en true si desea eliminar cualquier código generado previamente |
El indicador --temperature controla el nivel de creatividad en el código generado, con un rango de 0 a 2. Los valores más altos dan como resultado un código más innovador, pero también aumentan el riesgo de errores o JavaScript inválido. Para obtener los mejores resultados, use un valor inferior a 0.5 para equilibrar la creatividad con confiabilidad. El valor predeterminado es 0.2.
El indicador --negativePrompt niega cada parte separada por comas de la solicitud con "No" para evitar comportamientos no deseados en el código generado. Por ejemplo, --negativePrompt "audio, images" se convierte en "no audio, no images" . Esta característica ayuda a crear un código más seguro y mejor, pero puede no eliminar todo el comportamiento no deseado.
El indicador --model se puede usar para especificar el modelo para usar para generar código. El modelo predeterminado es "gpt-3.5-turbo" . Sin embargo, también puede optar por usar el modelo "gpt-4" , que proporciona más tokens pero puede dar lugar a un comportamiento no deseado.
El uso del modelo
"gpt-4"aumentará significativamente el tiempo que lleva generar código, ya que es más lento que el modelo predeterminado"gpt-3.5-turbo".
Para obtener más información sobre los modelos disponibles y sus respectivas características, consulte la documentación de Operai.
El indicador --seed establece la semilla para el generador de números aleatorios utilizado en la generación de código. Por defecto, la semilla se establece en un número aleatorio entre 0 y 100000000. Si se proporciona una semilla personalizada con el indicador --seed , ese valor se usará en su lugar.
La semilla es un número pseudo-aleatorio y puede generar resultados únicos, pero no será el mismo cada vez.
Este proyecto viene con tres archivos de inicio, base-default.js (sin importaciones), base-art.js (ruidojs y color) y base-game.js (ruidojs, color y tono), que proporcionan un punto de partida básico y un ejemplo de cómo agregar dependencias.
️ Los archivos de inicio siempre deben comenzar conbase-
Para evitar costos de token adicionales, cree un archivo base personalizado como
base-no-changelog.jssin el comentario de ChangeLog.
Este proyecto genera código utilizando la API de OpenAI y sigue un conjunto de instrucciones y restricciones para producir código que se puede extender, refactorizar o fijar. Cada generación de código se basa en la anterior y tiene como objetivo mejorar el código. El proyecto utiliza diferentes personajes para generar código y puede crear un número específico de generaciones de código. El código generado está formateado usando Prettier y se guarda en archivos separados. El proyecto también realiza un seguimiento de los cambios y proporciona un ChangeLog. Además, puede eliminar el código previamente generado. El proyecto puede manejar errores.
El código generado se escribe en un archivo, project/src/index.js , que es compilado por Webpack. Se ejecuta un servidor de desarrollo webpack, lo que le permite ver los cambios en vivo a medida que evoluciona el proceso de generación de códigos.
El proyecto usa dos archivos principales:
base.js : este archivo gestiona el proceso de generación de código utilizando la API de OpenAI, escribe el código generado en archivos (incluido project/src/index.js ) y maneja errores que pueden ocurrir durante la generación de código.base-*.js : este archivo es el punto de partida para el proceso de generación de códigos. Contiene el fragmento de código inicial y establece todo en movimiento para generar código llamando a las funciones necesarias desde base.js Para continuar desde cierta generación, ya sea porque está satisfecho con ella o necesita corregir un problema, use el siguiente formato: node generation-xxxx.js -g <generation + 1> -p "<prompt>"
1. Fijar una falla en la Generación 4
En este ejemplo, hay un problema con la cuarta generación de una generación de procedimientos, lo que hace que los antecedentes sean demasiado oscuros y el jugador del juego sea invisible. Para solucionar este problema, el usuario ejecuta el siguiente comando:
node generation-0004.js -g 5 -p "fix: dark background, player invisible" -c
Este comando comienza desde la Generación 4 ( generation-0004.js ) y pasa a la próxima generación (Generación 5) al tiempo que proporciona un aviso para solucionar el problema de la oscuridad y la visibilidad del jugador.
2. Agregar un sistema de puntuación en la Generación 3
En este caso, el usuario está satisfecho con el progreso del juego en la tercera generación y quiere agregar un sistema de puntuación. Para hacerlo, ejecutan el siguiente comando:
node generation-0003.js -g 4 -p "feat: implement scoring" -c
Este comando se inicia desde la Generación 3 ( generation-0003.js ) y procede a la próxima generación (Generación 4), incorporando un aviso para implementar una función de puntuación en el juego.
3. Retener el campo de flujo de la generación 5 pero no tener en cuenta las generaciones posteriores
En esta situación, el usuario aprecia el campo de flujo generado en la quinta generación, pero no está contento con los resultados de las generaciones posteriores. Para lograr el resultado deseado, ejecutan el siguiente comando:
node generation-0005.js -g 10 -p "flow field" -c
Este comando comienza desde la Generación 5 ( generation-0005.js ) y continúa hasta la Generación 10, manteniendo el campo de flujo de la Generación 5 e ignorando los resultados no deseados de las generaciones intermedias.