GitHub Copilot vs ChatGPT  - UGIdotNET
Questo sito si serve dei cookie per fornire servizi. Utilizzando questo sito acconsenti all'utilizzo dei cookie. Ulteriori informazioni Ok

GitHub Copilot vs ChatGPT 

di pubblicato il 24/04/2024

Azure  OpenAI  Visual Studio  Visual Studio Code 

In questo articolo vorrei analizzare le differenze tra due strumenti che sembrano porsi in sovrapposizione: GitHub Copilot e ChatGPT. Quali sono le differenze fondamentali tra i due? Quale scegliere? E bisogna davvero scegliere? 

In questo articolo vorrei analizzare le differenze tra due strumenti che sembrano porsi in sovrapposizione: GitHub Copilot e ChatGPT. Quali sono le differenze fondamentali tra i due? Quale scegliere? E bisogna davvero scegliere? 

ChatGPT 

Partiamo analizzando ChatGPT. Si tratta di un portale web dove è possibile avviare una chat con un Large Language Model (LLM). Ci sono diversi tier di ChatGPT

Screenshot della pagina di pricing di ChatGPT

Al tier gratuito abbiamo una esperienza abbastanza minima, che ci permette di interagire con il modello GPT-3.5. 

Le cose cominciano a farsi interessanti dal tier Plus, che già ci offre la possibilità di interagire con il modello GPT-4. Questo ci offre anche accesso al web. L’accesso al web è importante, in quanto quando poniamo una domanda al modello, questo è in grado di risponderci sulla base di una “conoscenza nativa” derivante dal suo training. Poniamo il caso che il modello sia stato allenato con i dati provenienti dal web fino al 2021, chiedendogli chi sia il primo ministro del Regno Unito ci risponderebbe Boris Johnson (primo ministro in carica in quegli anni). Se allo stesso modello dessimo accesso al web, sarebbe in grado di risponderci con la risposta esatta: Rishi Sunak (primo ministro in carica al momento in cui viene scritto questo articolo). 

Il tier Team, aggiunge oltre all’interazione con altri modelli quali DALL-E, la possibilità che i dati inviati tramite le richieste non vengano usati per riallenare il modello

GitHub Copilot 

GitHub Copilot è un fine-tune del modello GPT-4 per il codice. Con fine-tuning si intende la possibilità di allenare un modello specializzando su un determinato scenario, in questo caso lavorare sul codice. Le capacità di base sono quindi le stesse di GPT-4, che è già altamente in grado di lavorare sul codice, con una specializzazione specifica su questa feature. 

Come ChatGPT, anche GitHub Copilot offre diversi tier di prezzo.

Screenshot della pagina di pricing di GitHub Copilot

Si può notare come per i tier Individual e Business la differenza di feature sia più che altro legata all’aspetto di “Management and Policies”. Il tier Individual ha come target di utilizzo infatti singoli individui mentre il tier Business punta a scenari più aziendali, dove la gestione di utenti e policy centralizzata offre un vantaggio significativo per gli amministratori dello strumento. 

Dedicherò invece un paragrafo a parte per il tier Enterprise più avanti in questo articolo. 

Terms & Conditions 

Un’altra differenza fondamentale tra i due tool, si trova nelle Terms & Conditions (T&C). I termini e condizioni di utilizzo di GitHub Copilot garantiscono che il modello sottostante non verrà riallenato tramite i dati immessi dall’utente. Sostanzialmente, anche nel tier Individual, quando GitHub Copilot analizza il vostro codice per fornirvi risposte e suggerimenti non utilizza le porzioni di codice analizzato per riallenare il proprio algoritmo, preservando la proprietà intellettuale. 

Per quanto riguarda ChatGPT, questo vale a partire dal tier Team. 

Dal punto di vista di Copilot in Edge, invece, la Commercial Data Protection viene garantita per le tipologie di account elencate nel primo paragrafo di questo link, e solo quando si accede con l’account aziendale e non con quello personale. 

Per via della protezione dei dati, per un uso professionale non consiglierei mai un tier che non offra funzionalità di protezione dei dati, a tal scopo d’ora in poi considereremo un confronto tra i diversi tier di GitHub Copilot e ChatGPT Team. 

IDE Integration 

Il vantaggio principale di GitHub Copilot è l’integrazione con l’IDE: nasce infatti come tool per suggerire codice in tempo reale allo sviluppatore man mano che scrive codice. Inferisce dal contesto di quanto è già stato scritto e di quanto si sta scrivendo per suggerire intere porzioni di codice in maniera proattiva

Col tempo, GitHub Copilot si è evoluto aggiungendo diverse feature, oltre alla Code Completion di cui abbiamo appena parlato: Chat e Smart Actions. 

Possiamo immaginare la feature Chat come una implementazione di uno scenario ChatGPT-like. Trattandosi tuttavia di un modello specializzato sul codice, si restringe quindi il campo: chiedendo a GitHub Copilot chi sia il primo ministro del Regno Unito ci risponderà: 

Copilot risponde "Scusa, ma possono assisterti solo con domande rigaurdanti la programmazione" alla domanda "Chi è il primo ministro del Regno Unito?"

Se ChatGPT è in grado di rispondermi a domande di codice e domande generiche, qual è quindi il vantaggio ad usare la chat di GitHub Copilot rispetto a ChatGPT? 

Tenendo a mente che con questa domanda si fa un paragone tra una feature di un prodotto più ampio (GitHub Copilot non è solo la sua chat) e un prodotto nella sua interezza (ChatGPT è un servizio di chat), i punti di forza di GitHub Copilot risiedono nella sua integrazione con l’IDE. 

Senza lasciare la schermata di Visual Studio Code (o Visual Studio o JetBrains), possiamo selezionare porzioni di codice e porre domande dirette al nostro assistente di pair programming. Dal punto di vista del backend, la domanda che viene posta al modello conterrà quindi: 

  • il nostro contesto: il codice selezionato
  • la nostra domanda, ad esempio “spiegami cosa fa questa porzione di codice”
  • il system prompt: per system prompt si intende un prompt di base che è stato definito e scritto lato backend e che circonda la domanda che noi abbiamo fatto. Sono le istruzioni di base. Nei casi più semplici possiamo pensare al system prompt come una serie di indicazioni base quali “Sei un assistente virtuale molto disponibile nell’aiutare. Cerchi sempre di spiegare le cose in maniera completa ma mai prolissa e sei in grado di schematizzare concetti complessi in modo da renderne la comprensione più semplice”. Questo è un system prompt notevolmente semplice, quello di GitHub Copilot sarà chiaramente più complesso e conterrà istruzioni quali “Rispondi solo a domande relative al mondo della programmazione”, il che genera risposte come quella nello screenshot precedente. 

Questo system prompt è uno dei punti di forza di GitHub Copilot: il codice generato dallo strumento non viene direttamente passato all’utente finale, ma viene filtrato e ricontrollato anche al fine di evitare scenari di prompt-injection (concetto simile alla SQL-injection ma che si applica a scenari di prompt engineering). 

Ancora più importante del system prompt, è la capacità di GitHub Copilot di accedere al contesto allargato del nostro IDE. Il contesto è formato dai file aperti nei tab e dai file presenti nella cartella aperta. Esiste infatti la possibilità, tramite la keyword @workspace, di porre domande più ampie sull’intera repository aperta.

Copilot risponde correttamente alla domanda basandosi sul contesto della soluzione

Copilot risponde correttamente alla domanda basandosi sul contesto del singolo progetto 

Nei due screenshot sopra riportati vediamo come GitHub Copilot Chat sia in grado di analizzare l’intera struttura delle folder, senza dover selezionare specificatamente delle porzioni di codice, e fornirmi le risposte esatte. Nel secondo caso è in grado addirittura di comprendere quali sono gli scopi di utilizzo di determinati servizi che ho descritto e di come funzionano le API che ho definito. Può inoltre generare dei link ai file in modo da potervi accedere direttamente senza dover navigare la struttura della mia repository. 

Prendendo ad esempio altre estensioni di Visual Studio Code che integrano un modello GPT con il nostro IDE, le funzioni sono nativamente più ridotte: Visual chatGPT Studio - Visual Studio Marketplace. Possiamo vedere come in questo caso le features offerte si fermano a quel sottoinsieme di funzionalità che riguardano la selezione di porzioni di codice e la possibilità di porre domande sulle stesse. 

Ma analizziamo uno scenario ancora più complesso di quanto visto ora: poniamo di avere due microservizi che parlino tra loro tramite una coda. In aggiunta al tag “@workspace” utilizzo anche il tag “#file:” per arricchire il contesto della chat inserendo, oltre al codice selezionato, un altro file. In questo modo posso chiedere come venga formato, all’interno del microservizio 1, l’evento gestito dal microservizio 2: 

Copilot risponde correttamente incrociando i dati provenienti dal codice selezionato e dal riferimento ad un altro file 

Cosa si intende per “domande di programmazione”? 

È interessante soffermarsi sul restringimento di contesto di operabilità di GitHub Copilot. Quando si afferma che lo strumento è in grado di rispondere a domande di programmazione, non dobbiamo pensare che questo si riduca al solo mondo del codice nel senso più stretto. 

Siamo anche infatti in grado di porre domande sui framework, strumenti di terze parti che utilizziamo nel codice e sull’architettura di hosting di un applicativo, quali “Come posso creare un cluster AKS in maniera sicura?” 

Copilot fornisce informazioni architetturali circa come mettere in sicurezza un cluster AKS 

Rimangono quindi escluse domande di carattere generale quali “Quali sono i principi generali della meccanica quantistica?”. Domande che quindi non afferiscono in alcun modo, neanche dal punto di vista architetturale, con la scrittura di codice. 

Tuttavia, se dovessimo aver bisogno di risposte relative a certi argomenti al fine di condurre un’analisi per il codice che stiamo scrivendo, abbiamo alternative per ottenere tali risposte? Possiamo tranquillamente sfruttare strumenti più generici come ChatGPT o strumenti che nativamente hanno modo di accedere al web per fornire risposte come Copilot su Edge. 

Screenshot della pagina di Copilot for Microsoft 365 

GitHub Copilot Enterprise 

Nel tier Enterprise, il distacco in termini di feature si allunga. Oltre alla Chat normale e alla Code completion (presenti anche nei primi due tier), si aggiungono delle feature veramente interessanti: 

  • Conoscenza della knowledge base della mia organizzazione: GitHub Copilot è in grado di indicizzare le repository presenti nella mia organizzazione e rispondere a domande relative a tutti i file in essa contenuti. Uno scenario RAG, o Chat With Your Data, incentrato sul codice che offre la possibilità di poter porre domande alla chat sull’utilizzo di altri progetti rispetto a quelli sui quali sto lavorando al momento (per esempio una libreria di funzioni condivise utilizzate all’interno della mia organizzazione).
  • Pull Request Diff Analysis: qui abbiamo la capacità di poter far analizzare a GitHub Copilot i singoli commit che compongono una Pull Request evidenziando i cambiamenti fondamentali che la impattano.
  • Web Search Powered by Bing (beta): possiamo porre domande sugli ultimi aggiornamenti di un framework e la risposta verrà generata cercando contenuti online. Attenzione: parliamo sempre anche qui di domande relative al codice.
  • Fine-Tuned Models (coming soon): è una feature che ancora deve essere resa disponibile in General Availability, ma che permetterà di fare fine-tuning del modello di GitHub Copilot sulla base delle nostre repository. In cosa si differenzia rispetto all’indicizzazione? Semplice: il modello non dovrà andare a cercare risposte in base a domande poste dall’utente su un database di informazioni indicizzate, avrà la risposta insita nel suo modello. Allo stesso modo nel quale ChatGPT nel free tier può dirci chi è il primo ministro del Regno Unito senza cercare la risposta, GitHub Copilot sarà in grado di sapere nativamente quali sono le librerie condivise dentro la nostra organizzazione. Supponete di avere una libreria che viene utilizzata per interagire con le API di OpenAI, quando GitHub Copilot starà per suggerirvi (anche proattivamente!) del codice per chiamare le API di OpenAI non suggerirà una generica richiesta HTTP, bensì suggerirà l’invocazione della libreria adatta.  

Conclusioni 

Se dal punto della proattività GitHub Copilot risulta essere l’unico strumento che offra il servizio di suggerire, senza richieste esplicite, intere porzioni di codice, l’integrazione nativa della Chat con l’IDE rende l’utilizzo dello strumento notevolmente più agevole anche nel paragone verso servizi integrati con ChatGPT, che richiedono un intervento più manuale per la costruzione del contesto. 

Dal punto di vista dei costi, ChatGPT Team ha un costo superiore rispetto a GitHub Copilot Business, che però offre feature per la programmazione più avanzate. Quello che si perde non avendo la possibilità di fare ricerca online – sostituibile come abbiamo visto con altri strumenti – lo si guadagna in proattività e facilità d’uso dello strumento. GitHub Copilot Enterprise, invece, ha un costo superiore a ChatGPT Team offrendo però una serie di funzionalità aggiuntive veramente interessanti per scenari Enterprise.