ChatGPT - er det et verktøy for å effektivisere utviklingsprosessen?
Av Thomas Nøkling
Publisert 19.04.2023
ChatGPT er en avansert språkmodell som er trent på store mengder tekstdata ved hjelp av dyp læring. Den har evnen til å generere naturlig språk og svare på spørsmål på en intelligent måte. ChatGPT kan brukes til en rekke forskjellige formål, inkludert tekstgenerering, chatbots og automatisering av oppgaver som krever språklig forståelse. Som en av de mest avanserte språkmodellene som er tilgjengelige i dag, har ChatGPT vist seg å være en nyttig ressurs for å øke effektiviteten og produktiviteten i mange forskjellige bransjer og applikasjoner.
Denne teknologien kan være til stor hjelp for utviklere som ønsker å effektivisere utviklingsprosessen og spare tid på repetitivt arbeid. I denne bloggposten skal jeg utforske om det er mulig å bruke ChatGPT til å generere et Spring Boot API med minimal involvering fra meg som utvikler. Formålet med denne bloggposten er å vise hvordan man kan bruke ChatGPT til å utvikle et enkelt API og se om teknologien kan levere tilstrekkelig kvalitet på kode for å effektivisere utviklingsprosessen.
I dette lille eksperimentet vil jeg gå igjennom
a) Planlegging av promt som skal brukes for å generere et Spring Boot API.
b) Flytte den genererte koden inn i en kode-editor.
c) Sjekke om den genererte koden/applikasjonen fungerer og gjør det den skal.
d) Potensielle utfordringer underveis.
Målet er å utforske teknologiens evner og å vurdere dens potensiale som et verktøy for å effektivisere utviklingsprosessen.
Planlegging
Et API (Application Programming Interface) er et programvaregrensesnitt som gjør det mulig for forskjellige applikasjoner og systemer å kommunisere med hverandre. APIer er viktige byggeblokker for applikasjoner og gjør det mulig å dele og utveksle data og funksjonalitet mellom systemer på en sikker og effektiv måte.
Å generere et API med ChatGPT kan være et effektivt alternativ til å bygge det fra bunnen av. Ved å bruke ChatGPT kan utviklerne spare tid og ressurser på å utvikle grunnleggende funksjonalitet og fokusere på å implementere forretningslogikken som skal ligge bak APIet.
For å planlegge prosjektet for å generere et API med ChatGPT, må jeg først formulere en prompt som gir tilstrekkelig informasjon om hva slags API jeg ønsker å generere. Prompten skal være så spesifikk som mulig, men også generell nok til at ChatGPT kan levere et passende resultat. I vårt tilfelle ønsker jeg å generere et Spring Boot API som kan utføre CRUD-operasjoner på Book-objekter for å få en oversikt over hvilke bøker som finnes i et bibliotek.
Dette er prompten jeg endte opp med:
ChatGPT Genererer Kode
En av de største fordelene ved å bruke ChatGPT til å generere kode er tidsbesparelsen. Generering av kode ved hjelp av ChatGPT tar mye mindre tid enn å skrive kode manuelt. Dette gir utviklerne mer tid til å fokusere på andre og mer utfordrende problemstillinger.
Likevel er det noen begrensninger med å bruke ChatGPT til dette. Siden ChatGPT er en AI-drevet teknologi, kan den derfor ikke erstatte menneskelig erfaring og kompetanse med tanke på å ta kritiske beslutninger for å nevne noe. Selv om ChatGPT kan generere kode for et API, kan det hende at koden ikke er optimalisert for spesifikke behov i prosjektet.
Jeg vil nå demonstrere hvordan ChatGPT genererer et enkelt API. I mitt eksempel ønsker jeg å generere en enkel applikasjon for biblioteket vårt som kan utføre CRUD-operasjoner (Create, Read, Update, Delete) på Book-objekter. Jeg har gitt ChatGPT en spesifikk prompt som inkluderer informasjon om hvilken type API jeg ønsker å generere.
Det tar kort tid før ChatGPT begynner å skrive koden.
Her er noen skjermbilder som viser hva jeg fikk som resultat fra spørringen min.
Flytte koden inn i en kode-editor
Jeg ønsker å se hvor mye av jobben ChatGPT kan gjøre alene, så her tar jeg av meg utviklerhatten og spiller litt dum for å se om ChatGPT kan gi oppskriften på hvordan å komme i gang.
Jeg følger denne oppskriften og kopierer deretter inn kodeforslagene som ble generert tidligere.
En ting som blir klart umiddelbart, er at jeg ikke har puttet noen av klassene i forskjellige pakker. Dette ville man normalt sett ha gjort for å gjøre prosjektet ryddigere og mer oversiktlig. Men siden ChatGPT ikke har spesifisert at jeg skal gjøre det, så har jeg lagt alt på samme plass.
Applikasjonen starter uten problem, og jeg får en tom JSON-liste når jeg kaller endepunktet http://localhost:8080/api/books
Jeg bruker deretter Postman for å legge til en bok. Først ber jeg ChatGPT om å gi meg JSON-formatet på Post requesten.
Ved å kopiere denne JSONen inn i Postman requesten, så fikk jeg lagt til en bok som forventet, og fikk en autogenerert id tilbake i responsen.
De andre request-typene virket også som forventet.
Jeg tenkte jeg skulle ta det ett steg videre. ChatGPT har generert dette API-et for meg, men bruker nå en “in memory database”.
Dette har liten verdi i det virkelige liv, da alt jeg legger til av bøker vil bli borte om jeg f.eks. starter applikasjonen på nytt.
Jeg vil helst persistere disse dataene på en måte som gjør at de lever videre, selv etter at applikasjonen stoppes.
Kan jeg få ChatGPT til å skrive om koden, slik at jeg kan lagre dette i en database?
Etter jeg har gjort disse endringene, så starter ikke applikasjonen lenger.Dette er fordi jeg ikke har opprettet en PostgreSQL-database. Så da får jeg ChatGPT til å hjelpe meg der også.
Dette er et steg nærmere og jeg får opprettet en database.
Jeg fjerner deretter de to siste linjene i Spring konfigurasjonen, siden jeg ønsker å ha kontroll på opprettelsen av databasetabeller selv. Jeg ber ChatGPT om SQL-en for å opprette Book-tabellen.
Jeg fikk da på plass tabellen i databasen og forventet at applikasjonen skulle starte, men jeg fikk fortsatt feil. Denne gangen var det Spring som kom med feilmelding.Jeg kunne sikkert spurt ChatGPT om feilmeldingene og kanskje kommet frem til noe. Men som en person som har jobbet med endel API-utvikling før, så vet jeg allerede at det mangler noen annotasjoner. Etter jeg la til disse, så startet applikasjonen fint.
Nå har jeg et API som fortsatt har data lagret i databasen, selv om applikasjonen restartes.
Utfordringer
Jeg får mye hjelp av AI-en til å både generere kode og komme godt i gang.Jo lengre ut i prosessen jeg kommer, så ser jeg at jeg må stille flere målrettede spørsmål som leder ChatGPT i den retningen jeg vil. Dette krever jo at jeg som utvikler vet hva jeg ønsker meg, og hvordan/hvorfor jeg skal spørre etter det.Jeg ser også en del unøyaktigheter i forslagene. Da jeg gikk fra “in memory database” til en PostgreSQL database, så glemte ChatGPT å legge til riktige annotasjoner i en klasse. Jeg prøvde riktignok å lage et tilsvarende API i en helt ny prompt, men med å spesifisere allerede fra starten av at dette skulle lagres i en database. Da fikk jeg med de riktige annotasjonene.
I SQL-en som ble generert for å opprette tabellen i databasen, så ser jeg typen VARCHAR(255) brukt flere steder. Dette slår meg som en unødvendig lang begrensning av kolonnen, da jeg aldri kommer til å ha en boktittel eller forfatternavn på 255 karakterer f.eks.
API-et er ganske enkelt. Jeg får ingen definisjon eller dokumentasjon for API-et. Men det kunne jeg fått dersom jeg spurte ChatGPT om å lage det for meg. Den kunne f.eks. generert OpenAPI spesifikasjon eller for eksempel bare en tekst som oppsummerer funksjonene i API-et.
Konklusjon
Etter dette forsøket med å lage et ChatGPT-utviklet API, har jeg lært mye om hvordan AI kan brukes i utviklingsprosessen. Jeg er imponert over hvor mye ChatGPT kan gjøre selv, men jeg innser også at det ikke kan erstatte menneskelig kunnskap og erfaring som utvikler.
Mens jeg fulgte oppskriften som ChatGPT genererte, oppdaget jeg at jeg ofte tok avgjørelser som gikk imot det ChatGPT sa selv om kompleksiteten i APIet er veldig lav. Det er et veldig enkelt API jeg har bedt om, og allikevel så jeg behovet for å blande meg inn til tross for at jeg prøvde å la være. Jeg så også nåværende og fremtidige utfordringer med koden som ble generert. Dette viste meg hvor viktig det er å ha en grunnleggende forståelse for koden som genereres, selv om ChatGPT kan hjelpe.
Etterhvert måtte jeg stille en del ledende spørsmål for å få resultatene jeg ønsket meg. Jeg tror at ChatGPT og andre AI-modeller kan være nyttige verktøy i utviklingsprosessen, spesielt for å automatisere repetitive eller enkle oppgaver. Men det er også viktig å huske på at modellen pr i dag ikke kan løse alt av problemstillinger, og spesielt når det kommer til komplekse problemer og kreativ problemløsning.
Jeg tror at det beste resultatet oppnås når man kombinerer AI-teknologi med menneskelig ekspertise. På denne måten kan man dra nytte av fordelene ved AI-teknologi, samtidig som man sørger for at koden som genereres er av høy kvalitet og oppfyller de ønskede kravene.