GitHub Copilot

Marcus Olsson,

När GitHub presenterade Copilot i slutet av juni visste jag inte vad jag skulle tycka – verkar det inte lite väl kraftfullt för att vara sant?

Men efter att ha testat deras "technical preview" – mest för skojs skull – så nej, det är redan nu en väldigt kraftfull och imponerande teknik, även om det kanske i mitt fall inte är något som jag kommer att använda dagligen i mitt arbete.

Vad är Copilot?

Github säljer in Copilot som "your AI pair programmer", vilket ja – kanske man kan säga. Men jag tycker nog att det är enklare att förklare det som ett väldigt avancerat verktyg för intellisense/code suggestion – som med hjälp av AI dels förstår kontexten av din kod och är tränad emot oändliga mängder publik kod som finns på GitHub.

Samtidigt som du skriver din kod ger Copilot dig förslag, och om man så önskar kan man be den generera upp till tio förslag som man kan granska och därefter välja ut det som passar en bäst.

Copilot bygger i grunden på OpenAI som jag har skrivit tidigare om.

AI passar annars programmering otroligt väl, då det egentligen är väldigt sällan ens problem eller lösning är helt unik – oftast har någon gjort något väldigt liknande tidigare.

Laravel? Laravel!

I dokumentationen för Copilot nämns inte PHP som ett språk som stöds, men ganska omgående så upptäckte jag att Copilot inte alls har några som helst problem med att upptäcka PHP eller Laravel för den delen. Även om den verkar ha tränats mer emot exempelvis Javascript.

T.ex. i en existerande applikation så satte jag upp en enkel funktion, getUser():

1use \App\models\User;
2 
3function getUser(User $user)
4{
5 // Copilot
6 return $user;
7}
1use \App\models\User;
2 
3function getUser(User $user)
4{
5 // Copilot
6 return $user;
7}

Logiskt. Men vid test av t.ex.

1use \App\models\User;
2 
3public function getUser(int $id)
4{
5 // Copilot
6 $user = User::find($id);
7 return $user;
8}
1use \App\models\User;
2 
3public function getUser(int $id)
4{
5 // Copilot
6 $user = User::find($id);
7 return $user;
8}

Väldigt enkel sak, men mäkta imponerande ändå.

Ett problem just nu för just PHP är att AI:t verkar krångla till syntaxen och formateringen emellanåt, ofta så sker det ganska att man får med extra brackets och/eller att indenteringen är väldigt fel.

Men i tester med Javascript verkar alltså inte detta vara riktigt lika förekommande problem.

Koda med kommentarer och kontext

Det kanske mest imponerande med Copilot annars är att man kan få förslag på kod utefter ens kommentarer då AI:t viktar ens kontext väldigt högt, t.ex. kan man med en enkel beskrivning:

1/**
2* Remove the last 2 characters from a string
3*/
1/**
2* Remove the last 2 characters from a string
3*/

Så kan man få hela kodblocket:

1/**
2* Remove the last 2 characters from a string
3*/
4public function trimLastTwoChars($string) {
5 return substr($string, 0, strlen($string) - 2);
6}
1/**
2* Remove the last 2 characters from a string
3*/
4public function trimLastTwoChars($string) {
5 return substr($string, 0, strlen($string) - 2);
6}

Framtiden för Copilot och AI-programmering

Även med många fel och brister med Copilot just nu så är givetvis detta framtiden. Vi har en bit kvar till helt automatiserad kod, men det är redan nu såpass stabilt att vi mer och mer kommer se AI-stödd programmering – där AI främst kommer att hjälpa till att skriva kod bättre och snabbare.

Är alltså ett tag kvar innan vi programmerare blir ersatta, men resurser så som Stack Overflow blir kanske lite mindre besökta.

Sidnot: Copilot och copyright

En intressant diskussion som har blossat upp kring Copilot är frågan kring copyright då systemet bygger till stor del på öppen källkod. Jag själv har lite för dåligt påläst i frågan, men tidigare EU-parlamentarikern Julia Reda har som alltid en en bra "take" på frågan, hennes bloggpost hittar man här.