Skip to content

Softwareutvikling med Generativ AI 

Generativ AI har tatt verden med storm, og åpnet nye horisonter for teknologiske innovasjoner. For mange er ChatGPT et magisk verktøy som plutselig ble en fast sparringspartner i hverdagen. Er ChatGPT den revolusjonen den blir fremstilt som, og hvordan kan vi gå frem dersom vi ønsker å bruke ChatGPT i softwareutvikling? I denne artikkelen kan du lese om funnene fra et av årets sommerprosjekter i twoday, som har utforsket potensialet av GPT i softwareutvikling.
31. aug twoday student

Dette blogginnlegget er skrevet av Ståle Eikebrokk, Sandra Kvaløy, Synne Stokkevåg Berg og Elias Borge Svinø. De har jobbet som Summer interns i twoday. Les mer om sommeren deres her. 

Prosjektet

Denne sommeren har vi vært på prosjekt hos Utlendingsdirektoratet (UDI), med mål om å utvikle en chatbot basert på GPT-modeller. Underveis i prosjektet har vi blitt oppfordret til å bruke generativ AI, slik som ChatGPT, som verktøy for å sjekke potensialet generativ AI har innenfor softwareutvikling. Vi har brukt ChatGPT Plus som inneholder den nyeste språkmodellen GPT-4. I tillegg har vi tatt i bruk verktøyene GitHub Copilot og Refact.ai som er in-editor GPT-baserte kodeverktøy. 

Et bilde som inneholder tekst, skjermbilde, Font, nummer

Automatisk generert beskrivelse

 

Les mer: Hvordan bli en mer effektiv utvikler med ChatGPT?

Hva er GPT god på? 

En av de fordelene vi oppdaget med GPT, er dens evne til å generere ny og fungerende kode. Kodegenerasjon basert på ønsket funksjonalitet, prosjektdetaljer og parametere vi gir, har vist seg å være et hjelpemiddel for å kunne sette oss raskt inn i ny teknologi og prøve ut rammeverk vi hadde lite eller ingen erfaring med.  

En fordel vi la merke til er muligheten for å gjennomgå kode. Når koden blir mer kompleks og omfangsrik, kan det være utfordrende å oppdage både feil og forbedringsområder. GPT har vært nyttig til å finne feil som kanskje ville gått under radaren. Det har også hjulpet oss å forstå koden. Dette har ikke bare forbedret kvaliteten på koden vår, men også frigjort tid til å fokusere på mer strategiske og kritiske oppgaver.  

GPT har vist seg å være nyttig i konfigurasjonsoppgaver, spesielt i komplekse tjenester som Azure Services. Før prosjektet hadde ingen i teamet erfaring med Azure. GPT har klart å gi støtte gjennom tyngre konfigurasjonsprosesser og tilby kode for oppkobling, som forenklet konfigurasjonen og økte forståelsen for skytjenester og hvordan de anvendes. 

Les mer: Hvordan bli en mer effektiv utvikler med ChatGPT?

Når skal man være forsiktig med bruk av GPT

Et viktig område hvor vi har måttet være forsiktige er når det gjelder å stole på ChatGPT for arkitekturvalg, spesielt for større og mer komplekse problemstillinger. Selv om ChatGPT er dyktig til å håndtere ulike problemstillinger, mener vi at den ikke kan erstatte menneskelig ekspertise og intuitiv forståelse når det gjelder å ta avgjørelser om systemdesign og arkitektur. Vi har konkludert med at det er best å bruke ChatGPT som et hjelpemiddel, og ikke en erstatning for vår egen intuisjon og erfaring. 

En annen begrensning vi har støtt på, er at ChatGPT kan være utdatert når det kommer til de aller nyeste rammeverkene og versjonene. Teknologien utvikler seg raskt, det er derfor viktig å dobbeltsjekke forslag fra ChatGPT mot den nyeste dokumentasjonen for det aktuelle rammeverket eller verktøyet. Vi har også opplevd at ChatGPT kan hallusinere, eller finne på ting, når den ikke vet svaret på et spørsmål. Dette kan være forvirrende, og det er viktig å ha en sunn skepsis til informasjonen som leveres av ChatGPT, og alltid validere den mot pålitelige kilder. 

Et aspekt med ChatGPT som ofte kritiseres er GDPR og datasikkerhet. Realiteten er at all inndata og utdata fra en samtale med ChatGPT, vil lagres hos OpenAI. For en privatperson er vanligvis ikke dette et problem, men som konsulent kan det by på utfordringer. Som utvikler jobber man ofte på kodebaser man ikke selv eier, og som kan inneholde konfidensielle nøkler eller informasjon. Svært få kunder ønsker kildekoden sin «publisert», og selv om du velger å stole på OpenAI og tro på at de ikke selger brukerdataen videre, vil de mest sannsynlig bruke dine samtaler for å trene språkmodellene sine. Dette gjør det teoretisk mulig at din kildekode, eller biter av den, dukker opp i noen andres output ved en senere anledning.  

Akkurat hva OpenAI gjør med dataene er usikkert, og det har derfor dukket opp en del skepsis mot å bruken av ChatGPT i softwareutvikling. For at vi som team skulle kunne teste ChatGPTs maksimale potensiale hadde vi en tidlig forventningsavklaring med kunden, og fikk tillatelse til å «dele deres kode» online. Mye av grunnen til dette var fordi vi utviklet en Proof of Concept applikasjon fra bunn av, og kanskje hadde vi fått et annet svar dersom vi skulle videreutvikle eksisterende systemer. 

"ChatGPT er mektig, effektivt og revolusjonerende. Ja, verktøyet har sine skavanker med tanke på datasikkerhet og utdatert informasjon, men dersom du bruker det bevisst og riktig, vil du etter vår mening bli en bedre, mer effektiv utvikler. "

 

In-Editor Kodeverktøy 

I tillegg til ChatGPT har vi tatt i bruk verktøyene GitHub Copilot og Refact.ai. Begge disse er in-editor kodeverktøy med mål om å knytte kode og GPT enda tettere sammen. For å sammenligne de to verktøyene fikk halvparten av teamet tilgang på CoPilot, og andre halvparten fikk Refact.ai. Copilot Chat (betaversjon), er mer tilgjengelig enn tradisjonell ChatGPT og eliminerer behovet for å kopiere og lime inn kode. Likevel har vi erfart at den gjør en del feil og sliter med å forstå den større konteksten. Auto-forslagene til Copilot i sanntid er nyttige, og bedre enn tradisjonell autocomplete, men de kan være litt trege. Refact.ai, tillater oss å legge ved en kodefil som kontekst i chatten. Dette gir ChatGPT umiddelbar tilgang på koden man jobber med. Der Refact.ai er virkelig sterk er med dens innebygde funksjoner. Her finner du for eksempel Find Bugs, Explain Code, Make Code Shorter osv. Med disse kan du markere opptil 30 linjer kode, tykke på en knapp, og vipps blir koden forbedret!  

A screen shot of a computer program

Description automatically generated

Hvordan prompter du best?

Fagfeltet Prompt Engineering har dukket opp i kjølvannet av lanseringen av ChatGPT. Det sier noe om hvordan vi best bør prompte språkmodellene. Selv om du med enkle nettbaserte kurs kan bedre forståelsen din for hvordan prompts tolkes, mottas og utføres, har vi erfart at god prompting egentlig ikke er så avansert.  

Det vil ofte lønne seg å gi GPT så mye kontekst som mulig. Det er rett og slett fordi, det modellen ikke har fått vite, vil den enten neglisjere eller improvisere rundt. Likevel er det ikke alle programmeringsutfordringer som krever så mye kontekst. Et eksempel som vi har brukt ofte er for eksempel feilhåndtering. Vi får en error i terminalen, markerer teksten, CTRL+C, CTRL+V og send. Ofte vil GPT kunne klare å løse de små problemene, med kun feilmeldingen som input. Det samme gjelder problemer som «Fix this code», «Translate to Python» eller «I need help», hvis du virkelig er desperat. Refact.ai og Github Copilot dekker mange av disse use-casene, men ikke alle. Derfor endte vi opp med å supplere med ChatGPT i de fleste tilfeller.  

Det finnes noen gode teknikker for å generere et godt prompt, men det er samtidig en del preferanse i det også. Noen foretrekker å kun skrive ett prompt, og få løst problemet sitt umiddelbart, mens andre liker samtalefølelsen og sender gjerne litt og litt kontekst avhengig av svarene fra GPT. Et tips kan også være å be den drøfte ulike alternativer før den gir en endelig konklusjon. Dette sørger for at du er opplyst om valgene den har tatt, og tilegner deg mer informasjon om problemstillingen. Det viktigste er at du husker på at det ikke er et menneske du prater med, men en prediksjonsmotor som gjetter på hva som er mest sannsynlig at du trenger.  

Vår konklusjon om generativ AI i softwareutvikling

Det er mange gode grunner til å velge AI-drevet utvikling, men en av de viktigste aspektene går på tidsbruk. Vi har på rundt 4 uker gått fra tom kodebase til en fullt fungerende applikasjon, som er bygd på teknologier som få av oss hadde noe erfaring med. Vi har satt opp to backender, konfigurert og mestret flere skytjenester i Azure, bygget grensesnitt i React, koblet det hele sammen, og planlegger å lansere det internt hos UDI. Alle på teamet er enige i at vi aldri hadde rukket alt, dersom vi ikke hadde tatt i bruk generativ AI.  

I tillegg til å effektivisere utviklingsprosessen, er ChatGPT nærmest som en extended brain. Det vi mener med det er at veldig mange ting som før var need-to-know for å komme i gang med et prosjekt eller et script, sklir mer og mer over i nice-to-know. Vi trenger ikke lenger å tråle google etter den spesifikke syntaksen for et endepunkt i Python, hvordan du skal strukturere Config-filer eller bruke mye tid på å lese deg opp på hvordan du skal gå frem med debugging. ChatGPT kan det, og er god på det. Selvsagt må du fremdeles ha en forståelse for hvordan du skal pusle alt sammen, men spesifikk syntax og rutineoppgaver er ikke lenger noe vi behøver å gjøre selv. 

Dersom du ønsker å bruke ChatGPT og samtidig være sikker på at det ikke går på bekostning av datasikkerhet finnes det flere ting du kan gjøre.  

Et triks du kan bruke som er langt sikrere er å beskrive løsningen, istedenfor å sende med kildekode i promptet til ChatGPT. Her er det mye du kan velge å inkludere, men det er noen ting vi har funnet ut som bør være med: 

  • Aktuelle teknologier, og hvordan de samhandler. Da mener vi for eksempel hva slags ansvar de har, og hvilken rolle de spiller i løsningen.
  • Beskriv eksisterende metoder og deres funksjon slik at koden som skapes kan bruke disse og unngå duplikat kode.  
  • Filstruktur for prosjektet. Dersom man skal spørre om litt mer overordnede ting tilføyer det mye kontekst, uten å avsløre spesifikk implementasjon.  
  • Be GPT begrunne hvorfor den tar spesifikke valg, som gjør det lettere å oppdage feil i løsningen eller utdatert informasjon. 

    Ved å legge dette ved i promptet får du med overraskende mye detaljer om løsningen, uten å egentlig dele noe som helst av sensitiv informasjon! En ekstra hack er å ha en detaljert prosjektbeskrivelse lagret for deg selv, slik at du kan gjenbruke den flere ganger.  

    ChatGPT er mektig, effektivt og revolusjonerende. Ja, verktøyet har sine skavanker med tanke på datasikkerhet og utdatert informasjon, men dersom du bruker det bevisst og riktig, vil du etter vår mening bli en bedre, mer effektiv utvikler.  

 

Ta kontakt med oss! 

Er det noe du lurer på kan du legge igjen kontaktinformasjon så tar vi kontakt med deg.

 

Relaterte artikler