GPT-Engineer Il tuo nuovo assistente AI per la programmazione

GPT-Engineer il tuo nuovo assistente AI per la programmazione

 

Introduzione

 

Non sarebbe fantastico avere un partner di codifica che non si stanca mai, lavora tutto il giorno e può generare un intero codice da una singola descrizione del progetto. Questo è l’obiettivo di un nuovo progetto chiamato GPT-Engineer, uno dei numerosi codificatori AI emergenti. È un generatore di applicazioni basato su AI che utilizza il potere di GPT per aiutarti a creare applicazioni. Sviluppato da Anton Osika, GPT-Engineer è un elemento rivoluzionario nel mondo dello sviluppo assistito da AI. Puoi controllare il repository di GPT-Engineer su GitHub qui per vederlo in azione.

GPT-Engineer non è solo un altro strumento AI; è il tuo assistente di codifica. Che tu stia costruendo un’applicazione semplice o qualcosa di più complesso, come un gioco, GPT-Engineer può aiutarti. È come avere uno sviluppatore junior al tuo fianco, che pone domande di chiarimento per assicurarsi di capire appieno i requisiti del tuo progetto.

 

Avviare GPT-Engineer

 

Prima di iniziare a codificare con GPT-Engineer, è necessario installarlo. Per farlo, clona il repository di GPT-Engineer dalla pagina GitHub del progetto. Successivamente, crea un nuovo ambiente con una versione recente di Python e installa i moduli necessari. Per una guida passo-passo, vai alla pagina GitHub di GPT-Engineer.

 

Sfruttare GPT-4 per promemoria di documentazione di design

 

La generazione di prompt di GPT-Engineer si basa sull’alimentazione di documenti di design. Ma come si redige un documento di design utile? Perché non utilizzare GPT-4 per aiutarti a crearli?!?

Utilizziamo GPT-4 per generare descrizioni dettagliate del progetto, che possono poi essere inserite in GPT-Engineer. In questo modo, puoi assicurarti che il tuo partner di codifica AI abbia tutte le informazioni necessarie per costruire la tua applicazione.

Come esempio, creiamo un documento di design con GPT-4 per dare un promemoria a GPT-Engineer. In realtà non serve molto per ottenere da ChatGPT un documento di design utile, anche se possono essere più complessi, come vedrai di seguito. Ecco il nostro promemoria:

Voglio implementare un gioco del serpente in Python, utilizzando le regole e il gameplay classici del gioco. Può utilizzare librerie esterne per realizzarlo. Genera un documento di design per questo progetto.

 

Ecco le prime righe del documento di design generato, che posso assicurarti, nel complesso, fa un buon lavoro nel delineare ciò che deve essere fatto.

Introduzione Lo scopo di questo documento di design è delineare i dettagli di implementazione per la creazione di un gioco classico del serpente in Python. Il gioco seguirà le regole e il gameplay tradizionali, in cui il giocatore controlla un serpente che cresce di lunghezza mangiando cibo, evitando collisioni con se stesso e con i limiti del gioco. Il gioco verrà sviluppato utilizzando librerie esterne per facilitare la grafica e l’input dell’utente.

Componenti del gioco Il gioco del serpente sarà composto dai seguenti componenti: a) Serpente: un oggetto mobile che cresce di lunghezza quando mangia cibo e perde il gioco se collide con se stesso o con i limiti del gioco. b) Cibo: un oggetto posizionato casualmente che il serpente può mangiare per aumentare la sua lunghezza e il punteggio. …

 

Ora che abbiamo un promemoria del documento di design, possiamo usarlo con GPT-Engineer.

 

Creazione di un documento di design con ChatGPT

 

Una delle grandi cose di GPT-Engineer è la sua versatilità. Può implementare un semplice gioco del serpente, così come può aiutarti a creare una vasta gamma di applicazioni, incluso un database chiave-valore semplice utilizzando solo i moduli standard della libreria di Python. Desidera descrivere il progetto nel file main.prompt, e GPT-Engineer ti chiederà eventuali chiarimenti necessari. Una volta forniti i dettagli, rilassati e guarda GPT-Engineer generare la tua base di codice.

Prima di tutto, generiamo un documento di design con ChatGPT-4. Ricorda, non è necessario utilizzare ChatGPT per fare ciò. Se hai una descrizione dettagliata del software che desideri costruire, puoi utilizzarla. Ma per una conversione completa delle tue note di design in qualcosa che è facilmente assimilabile da GPT-Engineer, questa è una scelta logica da fare.

Ecco il prompt che l’autore ha utilizzato con ChatGPT-4 per generare un documento di progettazione:

Generare un documento di progettazione di alta qualità che possa essere utilizzato dal nostro team di progetto per progettare il software descritto di seguito. Dovrebbe essere completo e utilizzabile come unica documentazione di progettazione per completare il nostro progetto.

— Semplice motore di database chiave-valore scritto in Python utilizzando solo moduli della libreria standard (eccetto quelli menzionati di seguito).

La base di interazione con il motore di database quando è in esecuzione dovrebbe avvenire tramite modulo Python importato con un’API di libreria chiara e concisa.

Dovrebbe esserci anche una console separata che può essere eseguita per agire come una REPL a riga di comando per interagire con il motore di database e database.

Metodi aggiuntivi di interazione dovrebbero includere un’API creata con Fast API (libreria esterna).

Specifiche di progettazione:

Un database chiave-valore è un tipo di database NoSQL che memorizza i dati come una collezione di coppie chiave-valore. A differenza dei database relazionali tradizionali, i database chiave-valore non impongono uno schema rigido, fornendo flessibilità e scalabilità per determinati casi d’uso. Progettare un database chiave-valore comporta diverse specifiche importanti da considerare.

Comandi che dovrebbero essere accessibili: – connettersi al database – eliminare il database – ottenere la chiave – inserire dati – aggiornare i dati – eliminare i dati – cercare l’esistenza sia di chiavi che di valori

Modello di dati: Ogni record è composto da una chiave univoca e un valore associato. Il valore può essere un semplice valore scalare o una struttura dati complessa (come JSON o XML).

Struttura della chiave: La chiave funge da identificatore primario per ogni voce dati e deve essere univoca nel database. Le chiavi possono essere stringhe alfanumeriche, numeri interi o chiavi composite (valori multipli combinati per formare una singola chiave).

Struttura del valore: Il valore associato a ogni chiave può essere di qualsiasi tipo di dato. Può variare dai tipi di dati di base (stringhe, numeri, booleani) a strutture più complesse come oggetti nidificati o array.

Prestazioni e caching: Tecniche di caching in memoria dovrebbero essere impiegate per velocizzare le operazioni di lettura e ridurre la latenza.

 

Ecco il documento di progettazione che ChatGPT-4 ha prodotto:

Panoramica L’obiettivo principale di questo progetto è progettare e sviluppare un

motore di database chiave-valore leggero scritto in Python, utilizzando solo moduli della libreria standard e FastAPI per l’interfaccia HTTP. L’applicazione fornirà le funzionalità essenziali di un database chiave-valore, inclusa la connessione al database, l’inserimento, l’aggiornamento, l’eliminazione e il recupero dei dati, insieme alla funzionalità di ricerca per chiavi e valori.

Il database sarà interfacciato tramite tre metodi: 1. Un modulo Python che può essere importato da altri programmi Python. 2. Una console REPL a riga di comando per l’interazione manuale. 3. Un’API creata con FastAPI per interazioni remote.

Componenti Il motore di database avrà i seguenti componenti

principali:

1. **Archivio dati**: Lo spazio di archiviazione effettivo per le coppie chiave-valore. Come implementazione semplice in Python, potrebbe essere un dizionario in cui le chiavi sono identificatori unici e i valori possono essere di qualsiasi tipo di dato. L’archivio dati dovrebbe avere metodi efficienti per accedere, aggiungere, aggiornare ed eliminare dati. 2. **Motore di database**: Il motore che fornisce i metodi per interagire con l’archivio dati. Ciò includerà metodi per connettersi a un database, inserire, aggiornare ed eliminare dati, nonché recuperare un valore per chiave. Dovrebbe includere anche un metodo per verificare l’esistenza di una particolare chiave o valore nell’archivio dati. 3. **Cache in memoria**: Uno strato di caching che contiene dati frequentemente accessati per migliorare la velocità di lettura e ridurre la latenza. Questo può essere implementato utilizzando il decoratore `functools.lru_cache` di Python o una soluzione di caching personalizzata. 4. **CLI**: Un’interfaccia a riga di comando per l’interazione manuale con il motore di database. Questo utilizzerebbe il modulo `cmd` o `argparse` della libreria standard di Python per creare un’interfaccia REPL. 5. **API HTTP**: Un’applicazione FastAPI che espone i metodi del motore di database come API HTTP. Ciò consentirà l’interazione remota con il database.

Modello di dati Il motore di database seguirà un semplice modello di dati chiave-valore

. Ogni record nel database sarà composto da una chiave univoca e un valore associato.

### Struttura della chiave Le chiavi possono essere stringhe alfanumeriche, numeri interi o chiavi composite. Devono essere univoche nel database e fungeranno da identificatore primario per ogni voce dati.

### Struttura del valore Il valore associato a ogni chiave può essere di qualsiasi tipo di dato Python. Può variare dai tipi di dati di base (stringhe, numeri, booleani) a strutture più complesse come oggetti nidificati o array.

Progettazione dell’API L’API della libreria Python, CLI e FastAPI dovrebbero fornire

le seguenti funzioni: – `connect(database_name: str)`: Connettersi a un database. Crea il database se non esiste. – `delete_database(database_name: str)`: Elimina un database. – `insert(key: str, value: Any)`: Inserisce una nuova coppia chiave-valore nel database. – `update(key: str, value: Any)`: Aggiorna il valore di una chiave esistente. – `delete(key: str)`: Elimina una coppia chiave-valore dal database. – `get(key: str)`: Recupera il valore di una chiave dal database. – `exists_key(key: str)`: Verifica se una chiave esiste nel database. – `exists_value(value: Any)`: Verifica se un valore esiste nel database.

Prestazioni e caching Tecniche di caching in memoria saranno

impiegate per velocizzare le operazioni di lettura e ridurre la latenza. Il decoratore `functools.lru_cache` o una soluzione di caching personalizzata potrebbero essere utilizzati a questo scopo. La cache dovrebbe avere una dimensione massima per evitare un uso eccessivo della memoria.

Conclusioni Questo documento fornisce un design di alto livello per un semplice

motore di database chiave-valore utilizzando Python e FastAPI. Aderendo a questo design, possiamo garantire che il database sarà flessibile e scalabile, soddisfacendo le esigenze di diverse applicazioni.

 

E questo è tutto. L’unica cosa rimasta da fare era eseguire GPT-Engineer e indirizzarlo a questi criteri.

 

Conclusioni

 

Quindi, cosa facciamo ora? Come risolviamo i problemi presenti nel codice generato? Beh, di recente e fino a qualche giorno fa, l’autore stava utilizzando GPT-Engineer in combinazione con Aider, un altro progetto capace di generare software basato su GPT, per cercare di perfezionare i risultati. Tuttavia, con la recente disponibilità pubblica del plugin ChatGPT Code Generator, sembra che provare sia a generare che a correggere il codice sia una buona idea.

In sintesi, GPT-Engineer è più di uno strumento, è una potenziale rivoluzione nel modo in cui costruiamo le applicazioni. È una testimonianza del potere dell’IA, degli LLM e forse uno sguardo al futuro della programmazione. Indipendentemente che tu sia uno sviluppatore esperto o che tu stia iniziando, GPT-Engineer merita sicuramente un’occhiata.

Happy coding prompting!