ChatGPT3.5, ChatGPT4o e Claude 3.5 Sonnet a confronto
![](/blog/coverimgs/claudevsgpt.jpg)
In questo post vi presentiamo il risultato di una settimana di test atti a confrontare le capacità di generazione codice di ChatGPT3.5 Turbo, ChatGPT4o, e il nuovissimo Claude 3.5 Sonnet, definito da molti sviluppatori il miglior sistema di generazione di codice attualmente esistente.
Il test consisteva nel proporre ai tre modelli esattamente lo stesso prompt iniziale, implementare il codice generato, chiedere ed implementare correzioni ad eventuali errori, fino al raggiungimento (o meno) dello scopo.
Il progetto scelto è stato un elementare server IRC scritto in VB.NET, ed il prompt passato ai tre motori è il seguente:
“Dammi il codice per un semplice server IRC in windows form, visual basic 2010 express edition, con pulsanti di connessione e disconnessione, controllo delle connessioni in multithreading, textbox di log eventi, 2 listbox per utenti e canali auto-aggiornanti, gestione dei comandi utente JOIN, NICK, PRIVMSG, gestione del comando admin KLINE”
I risultati del test sono stati in alcuni casi davvero sorprendenti, e svolgere questo test è stato non solo divertente ma anche molto istruttivo. Ecco di seguito il resoconto.
Server IRC su ChatGPT3.5 Turbo
ChatGPT3.5 Turbo versione 0125 restituisce un codice di 95 righe contenente gli imports, la gestione dei pulsanti, la creazione dei threads e dei sockets, l’invio delle Capabilities list al client, la gestione dei log del server, l’analisi della ricezione dei comandi JOIN, NICK e PRIVMSG.
Il server si avvia e ferma con successo, ma al tentativo di connessione con mIRC su localhost:5667 il client viene disconnesso.
Si segnala a ChatGPT l’errore, si riceve un aggiornamento della routine che gestisce i socket e le richieste di capabilities.
Rieseguito, il client riesce a connettersi, i comandi Nick e Join vengono ricevuti dal server, il nick non cambia in mIRC ma cambia nella listbox utenti, ed il canale non viene aperto in mIRC ma viene aggiunto nella listbox canali.
Si segnala a ChatGPT e si riceve una modifica del codice. Il nick non cambia in mIRC, il canale si apre in mIRC, ma alla chiusura del canale il client viene disconnesso senza motivo, lasciando però canale e utente nelle listbox.
Si segnala a ChatGPT più volte, non si riesce a risolvere il bug.
Non si è proceduto ai test del comando PRIVMSG nè del comando KLINE, ritenuti inutili visto il risultato raggiunto.
La generazione del codice ad ogni richiesta è stata veloce e fluida, il codice veniva sempre restituito completo di tutte le modifiche, pronto per un copia e incolla su Visual Studio. Il codice aveva una adeguata quantità di commenti esplicativi.
Totale numero di righe di codice finale: 124
Percentuale di funzionalità ottenuta: 50%
Server IRC su ChatGPT4o
ChatGPT4o restituisce un codice di 121 righe contenente gli imports, la gestione dei pulsanti, la creazione dei threads e dei sockets, l’invio delle Capabilities al client, l’analisi della ricezione dei comandi JOIN, NICK e PRIVMSG e KLINE, la gestione di eventuali errori in try... catch.
Il server si avvia e ferma con successo, al tentativo di connessione con mIRC su localhost:5667 il client si connette con successo e riceve le capabilities list.
I comandi Nick e Join vengono ricevuti sul server, il nick cambia in mIRC e cambia nella listbox utenti, ed il canale viene aperto in mIRC e viene aggiunto nella listbox canali.
Connesso un secondo client, il primo viene disconnesso causando una ripetizione di messaggi di disconnessione nel server log.
Si interroga ChatGPT e si ottiene una correzione del codice di gestione del rilascio socket e dei threads. Si riesegue, si riesce a connettere due client mIRC per testare PRIVMSG, che non funziona. I messaggi scambiati vengono mostrati nel server log ma non si aprono le finestre di chat privata nei due mIRC.
Si interroga ChatGPT, si riceve una modifica del codice per gestire PRIVMSG, si riesegue, i messaggi privati vengono scambiati, ma non si riesce a ottenere l’apertura delle finestre nei client.
Si testa il comando KLINE, che disconnette con successo i client ma le listbox non vengono aggiornate mostrando ancora utenti e canali.
Si segnala a ChatGPT più volte, non si riesce a risolvere il bug.
La generazione del codice ad ogni richiesta è stata più lenta e meno fluida rispetto a ChatGPT3.5 Turbo, il codice veniva sempre restituito completo di tutte le modifiche, pronto per un copia e incolla su Visual Studio. Il codice era sempre fornito con un uso troppo verboso dei commenti.
Totale numero di righe di codice finale: 184
Percentuale di funzionalità ottenuta: 70%
Server IRC su Claude 3.5 Sonnet
Claude restituisce un codice iniziale di ben 176 righe contenente gli imports, la gestione dei pulsanti, la creazione dei threads e dei sockets, l’invio delle Capabilities list al client, l’analisi della ricezione dei comandi JOIN, NICK e PRIVMSG e KLINE, la gestione di eventuali errori in try... catch, controllo della univocità del nick, e funzioni di analisi del contenuto dello stream di rete non presenti nelle altre versioni.
Il server si avvia e ferma con successo, al tentativo di connessione con mIRC su localhost:5667 il client si connette con successo e riceve le capabilities list.
I comandi Nick e Join vengono ricevuti sul server, il nick cambia in mIRC e cambia nella listbox utenti, ed il canale viene aperto in mIRC e viene aggiunto nella listbox canali.
Connesso un secondo client, la connessione avviene con successo, il server log gestisce la doppia utenza, i due mIRC funzionano bene.
Cercando di cambiare i nick, il primo client viene gestito bene, con riscontro nella listbox, mentre il nick del secondo client cambia in mIRC ma non nella listbox. Il secondo client viene disconnesso, alla riconnessione si riceve errore ‘Nickname già in uso’.
Si interroga Claude e si ottiene una correzione del codice di gestione del rilascio socket e dei nick. Si riesegue, si riesce a connettere due client mIRC ed il problema è risolto. Si testa PRIVMSG, che non funziona. I messaggi scambiati vengono mostrati nel server log, si aprono le finestre di chat privata nei due mIRC, ma i client vengono disconnessi. Le listbox canali e utenti non si aggiornano.
Si interroga Claude, si riceve una modifica del codice per gestire PRIVMSG e le connessioni, si riesegue, i messaggi privati vengono scambiati con successo ma i client vengono disconnessi.
Non si riesce a risolvere il problema.
Si testa il comando KLINE, che disconnette con successo i client ma le listbox non vengono aggiornate mostrando ancora utenti e canali.
Si segnala a Claude più volte, non si riesce a risolvere il bug.
La generazione del codice ad ogni richiesta è stata molto lenta e per niente fluida rispetto a ChatGPT3.5 Turbo, il codice veniva sempre restituito mostrando solo le notifiche con molte righe del tipo “resto del codice invariato”, rendendo difficoltosa a volte la identificazione della giusta posizione. Il codice era sempre fornito con un uso troppo verboso dei commenti.
Totale numero di righe di codice finale: 266
Percentuale di funzionalità ottenuta: 90%
Il nostro parere finale.
Claude si è confermato, come da aspettative, molto migliore dei due modelli di OpenAI per la risoluzione dei problemi e per la generazione di codice di alta qualità e ad alto tasso di successo, ma troppo commentato e verboso, allungando così il numero di righe finale. La generazione del codice è troppo lenta e troppo ‘scattosa’, il codice fornito va fortemente analizzato dall’utente per capire dove effettuare le modifiche. In un paio di occasioni Claude si è fermato per qualche secondo, per poi riprendere più lentamente. Il risultato finale è stato più funzionante, ma il codice è meno intuitivo, troppo verboso e più pesante.
Condividi su Facebook // Dai un like // Assegna una lettura
Precedente - Torna alla lista - Successivo