ReAct er en tilnærming som bygger videre på Chain-of-Thought (CoT), men utvider denne ved å legge til handlinger som kan utføres, som å gjøre beregninger, kalle et API eller bruke et verktøy. I dagens praksis blir dette ofte brukt sammen med rammeverk som LangChain, der AI kan generere spesifikke formater som et program kan tolke som en handling, for eksempel en kommando for å utføre noe eller en spørring som skal kjøres, og deretter mate resultatet tilbake til AI-en. Selv uten et slikt kjøremiljø, er det mulig å gjennomføre en form for ReAct ved å instruere AI-en til først å skissere en plan og deretter produsere et resultat. Dette kan minne om CoT, men er spesifikt rettet mot bruk av verktøy eller utførelse av deloppgaver.
En praktisk demonstrasjon kan være å bruke Python til å hente været i Paris og vise det. Uten at AI-en har tilgang til nettleserfunksjoner, kan den ikke faktisk hente været, men en ReAct-tilnærming ville fått AI-en til først å resonere seg frem til at den trenger å bruke en vær-API for å få tilgang til sanntidsdata. Den ville deretter prøve å bruke et tilgjengelig verktøy for å gjøre API-anropet. Hvis det lykkes, ville den få tilgang til faktisk værdata; hvis ikke, kan den erkjenne begrensningen eller bruke hypotetiske data. Til slutt ville AI-en skrive Python-koden for å vise værinformasjonen, med de dataene den har klart å hente gjennom denne resonerings- og handlingsprosessen.
ReAct er spesielt nyttig i sammenhenger der AI-en trenger ekstern informasjon, eller i iterativ testing, for eksempel når AI-en kan korrigere seg selv ved faktisk å kjøre kode. I feilrettingskontekster er en AI som kan utføre koden for å teste den ekstremt verdifull. På den annen side er ikke denne teknikken lett tilgjengelig uten spesifik verktøystøtte. Dersom man kun bruker ren prompting i en plattform som ChatGPT, vil AI-en enten forestille seg handlingene eller bare gjøre CoT uten å utføre faktiske handlinger.
I mer avanserte prompting-scenarier, kan man kombinere teknikker, som for eksempel å bruke en few-shot prompt som også demonstrerer CoT i eksemplene. Man kan også kombinere en rolle med CoT: "Som en senioringeniør, tenk steg for steg gjennom problemet, og gi deretter koden." Et eksempel på en slik kombinasjon kan være når man vil lage en kode for en kompleks algoritme, samtidig som man ønsker at den skal være godt kommentert og inkludere testtilfeller. Den kombinerte prompten kan være: "Du er en ekspert Python-utvikler. La oss løse dette steg for steg. Vi trenger en funksjon merge_sorted_lists(list1, list2) som slår sammen to sorterte lister til én sortert liste. Først, forklar tilnærmingen, deretter gi Python-koden med kommentarer. Etter det, gi 2–3 eksempeltester i kode for å demonstrere at det fungerer." Denne typen prompt er omfattende, og AI-en kan gi en forklaring, deretter koden med kommentarer, og til slutt noen testtilfeller.
For å bruke ReAct til sitt fulle potensial, må man forstå både AI-modellen og dens begrensninger. Når man skriver en prompt, er det viktig å vite hvordan man håndterer kompleksitet og unngår å overskride grensene for hva modellen kan håndtere. Hvis en prompt blir for stor eller inkluderer for mange instrukser, kan modellen bli forvirret eller kutte av deler av svaret. I slike tilfeller kan det være nødvendig å forenkle eller dele opp prompten i flere deler.
Erfaringsmessig kan AI-modeller noen ganger produsere feilaktige fakta eller kode (de "hallusinerer"), så det er viktig å dobbeltsjekke resultatene og ikke bruke AI-en som en sannhetskilde uten kritisk vurdering. Det er også mulig å unngå at AI-en gir for mye detaljerte eller ubrukelige koder ved å be om en mer konsis løsning. I tilfeller der AI-en bruker funksjoner som ikke eksisterer, kan man på forhånd spesifisere hvilke API-funksjoner som kan benyttes. Jo bedre man forstår AI-en, desto mer kan man tilpasse promptene for å unngå svakhetene dens.
For mer komplekse oppgaver kan man dele opp oppgaven i flere deloppgaver. For eksempel kan man først be AI-en om å liste opp trinnene for å implementere en grunnleggende kompilator for et enkelt aritmetisk uttrykk. Når AI-en gir trinnene, kan man ta for seg hvert trinn med separate prompt, kanskje til og med i separate filer eller økter. Denne fremgangsmåten kan sammenlignes med systemdesign, der man skisserer og deretter finjusterer hver del. Det gir muligheten til å benytte AI-ens evne til å hjelpe med planlegging, ikke bare koding.
En annen viktig del av prompting-teknikker er hvordan man bruker tilstandsfull samtale kontra en engangsprompt. I et chat-miljø har man en samtalehistorikk som bygger opp konteksten, noe som gjør det mulig å raffinere tidligere svar. I et IDE-miljø er konteksten stort sett innholdet i filene og kommentarene. Man kan bruke samtalehistorikk når man ønsker at AI-en skal huske tidligere detaljer eller når man ønsker å justere et svar. Når man ønsker at AI-en kun skal fokusere på det som er relevant akkurat nå, kan det være nyttig å bruke en ny prompt uten tidligere kontekst.
Endelig er det viktig å forstå og unngå vanlige antipatterns i prompting. Et klassisk eksempel på feilaktig prompting er en vag beskrivelse som "Det fungerer ikke, vær så snill å fikse det", uten tilstrekkelig detalj. Slike vage prompt kan føre til dårlige svar og ineffektive løsninger. Det er viktig å være spesifikk, tydelig og presis når man lager en prompt for å få optimale resultater.
Hvordan Unngå Skjevheter i AI-generert Kode: Et Ansvarlig Perspektiv på Etikk i Utvikling
I utviklingen av AI-drevne verktøy er det viktig å forstå hvordan historiske skjevheter kan forplante seg i de modellene vi bygger. AI kan speile eksisterende skjevheter fra treningsdataene som brukes til å utvikle systemene, og dette kan ha vidtrekkende konsekvenser, spesielt når AI brukes til å utvikle koder for sensitive områder som lån, politipratikk eller helsevesen.
For eksempel, når en AI skal skrive kode for en kredittscore-algoritme for lånesøknader, er det viktig å være oppmerksom på at kredittvurderingssystemer i USA har en dokumentert historie med å reflektere og forsterke rasebaserte skjevheter. Dette skyldes historiske praksiser som redlining og systemisk diskriminering som har hatt langvarige økonomiske konsekvenser for blant annet svarte og marginaliserte grupper. Hvis AI-modellen er trent på data som bærer disse historiske skjevhetene, kan den ende opp med å inkorporere diskriminerende variabler. Eksempler på dette kan være bruk av postnumre, som kan være en proxy for rasemessige demografier på grunn av segregerte boligmønstre. Resultatet kan bli at AI-en utvikler kode som fører til urettferdige beslutninger, som igjen forsterker de historiske ulikhetene og påvirker virkelige menneskers liv.
En lignende utfordring finnes i algoritmer for prediktiv politibruk, der historiske arrestdata (som i seg selv kan være skjeve) kan føre til at AI-systemer uforholdsmessig rammer bestemte samfunn. På samme måte må AI-modeller i spesialiserte domener som medisinsk programvare være nøye overvåket, slik at de ikke viderefører skjevheter fra tidligere praksis. For eksempel har medisinske retningslinjer historisk sett vært preget av forskning som i stor grad har brukt mannlige deltakere, noe som kan føre til feildiagnoser og mindre effektive behandlinger for andre kjønn. Det er derfor viktig å dobbeltsjekke at AI-modeller som anbefaler løsninger for medisinsk diagnostikk, ikke utilsiktet kodifiserer slike skjevheter.
Verktøy er i ferd med å utvikles for å oppdage skjevheter i AI-utdata, men disse er i dag mer vanlig i generative modeller som GPT-3, som genererer innhold. AI-verktøy som genererer kode, produserer sjeldent hatefulle ytringer, men det er fortsatt viktig å ha innholdsføringer for å forhindre skadelige utdata. Ansvarlig bruk av AI-verktøy innebærer at vi også må være forberedt på å hindre at modellene produserer diskriminerende eller skadelige algoritmer.
Det finnes flere metoder for å identifisere og redusere skjevheter på ulike stadier av utviklingsprosessen. For det første bør AI-verktøy testes med mangfoldige eksempler. Hvis for eksempel en AI-modell genererer komponenter som skal brukes av mennesker, må den håndtere en bredere variasjon av brukerinndata. Hvis en valideringsskjema forventer feltene "Fornavn" og "Etternavn", bør det også tillate kulturbestemte variasjoner, som for eksempel en enstavelsesnavn som er vanligere i noen kulturer. Det er viktig å bevisst unngå å anta at det finnes en én-en løsning for hvordan data bør formateres. Videre bør utviklere eksplisitt instruere AI til å være inkluderende, for eksempel ved å generere eksempler som inkluderer et bredt utvalg av kulturer eller ved å unngå kjønnsbestemt språk i kodedokumentasjon.
En annen viktig metode for å redusere skjevhet er å ansette mangfoldige team for å gjennomgå resultatene av AI-modeller. Med et team av utviklere fra forskjellige bakgrunner er det lettere å oppdage subtile skjevheter som kanskje ikke er åpenbare for en mer homogen gruppe. Å involvere mennesker fra underrepresenterte grupper, eller i det minste vurdere deres perspektiver, kan bidra til å korrigere skjevheter som ellers kunne blitt oversett.
Ansvarlig bruk av AI-verktøy handler ikke bare om å unngå skjevheter, men også om å utvikle praksiser som sørger for at koden vi skriver er rettferdig for alle brukere, uavhengig av deres bakgrunn. Skjevhet og rettferdighet må forstås i lys av hvordan AI-verktøy påvirker både brukere og utviklere, og vi må sikre at verktøyene ikke bare løser problemer, men også forhindrer at vi reproduserer de samme feilene og ulikhetene som finnes i samfunnet.
I tillegg til å unngå skjevheter i kode, er det viktig å etablere et sett med gyldne regler for ansvarlig bruk av AI i utviklingsprosessen. For det første bør man alltid ha en menneskelig aktør i løkken. AI-en skal ikke jobbe uten tilsyn, og den genererte koden må gjennomgås og valideres av utviklerne før den tas i bruk. For det andre, ansvarlig AI-bruk betyr å ta fullt ansvar for koden som produseres. Hvis noe går galt, er det ikke AI-en sin feil; det er utviklingsteamets ansvar. Dette krever at man forstår og kan forklare koden, enten den er skrevet fra bunnen av eller generert av AI. Videre må utviklere være forsiktige med å beskytte brukernes personvern og innhente samtykke før man bruker personlige data til AI-modeller.
Et annet aspekt som må vurderes, er etterlevelse av lover og reguleringer som stadig er i utvikling, spesielt når det gjelder AI. Reglene rundt databeskyttelse, som GDPR, kan sette strenge krav til hvordan data brukes og behandles, og det er viktig å være klar over hvilke reguleringer som gjelder for AI-modeller og kodegenerering.
Til slutt må organisasjoner som benytter seg av AI-verktøy, etablere en ansvarlig AI-kultur. Dette innebærer å oppmuntre til diskusjon om etikk, sørge for nødvendig opplæring, og gjennomføre systematiske sjekklister for å validere AI-generert kode. Et team som kontinuerlig vurderer både tekniske og etiske aspekter av AI-utvikling vil være bedre rustet til å skape rettferdige, etiske og pålitelige systemer.
Hvordan utvikler samfunnet seg med AI-verktøy i programvareutvikling?
Utviklerfellesskapet spiller en viktig rolle i hvordan verktøy som vibe coding og AI blir adoptert, regulert og videreutviklet. Dette er en oppfordring til handling, både for deg som leser og praktiker: Eksperimenter. Ikke vent på at alle svarene skal gis til deg. Gå ut og prøv vibe coding i forskjellige kontekster. Bruk AI for å bygge noe uvanlig og nytt. Utfordre grensene for hva disse verktøyene kan gjøre. Kanskje du vil oppdage et nytt bruksområde eller en begrensning som ingen har dokumentert ennå. Hver eneste eksperiment, enten det lykkes eller mislykkes, tilfører verdifull kunnskap til fellesskapet.
Del funnene dine. Skriv om erfaringene dine, eller diskuter dem i det minste med kolleger. Hvis du finner en teknikk som fungerer utmerket, publiser den. Hvis du støter på et problem, advar andre. I denne raske utviklingen er deling av kunnskap innen fellesskapet den eneste måten vi alle kan henge med på. Ved å poste løsningen på en AI-feil kan du spare noen for mange timer med feilsøking, eller kanskje du kan tenne kreativiteten til noen andre med et spennende AI-assistert prosjekt.
Bidra til verktøyene. Hvis du har interesse for det, kan du bidra til utviklingen av AI-verktøyene selv. Dette kan bety å bidra med kode til åpne AI-rammeverk eller rett og slett gi detaljert tilbakemelding til verktøyutviklere (mange av dem er svært ivrige på å høre fra brukere om hva som kan forbedres). Ved å være med på å forme verktøyene, påvirker du direkte hvordan fremtiden vil se ut. Mange av dagens AI-kodingsassistenter har kommet langt takket være utviklere som deg, som har testet beta-versjoner og gitt verdifull innsikt.
Vær en forkjemper for positiv forandring. Innenfor din organisasjon eller ditt fellesskap, vær en talsperson for bruk av AI for å forbedre produktiviteten, samt for å trene folk til å bruke det på riktig måte. Oppfordre ledere til å sette av tid til å lære AI-verktøy, eller til å oppdatere politikk som kanskje forbyr dem på grunn av misforståelser. Vis hvordan det kan gjøres på en sikker og gunstig måte. Jo flere suksesshistorier vi ser om AI som støtter team på en positiv måte, desto mer vil bransjen lene seg mot det.
Adopter et livslangt studentmentalitet. Ha et åpent sinn og vær ydmyk. Vi er alle elever i denne nye æraen, og de unge som kommer i fremtiden, kan være vant til AI-verktøy på en naturlig måte (som dagens nyutdannede vokste opp med mer eksponering for programmering enn mange eldre). Vær klar til å lære fra hvem som helst, uavhengig av erfaring, fordi dette er nytt for oss alle på en eller annen måte. Hvis du beholder den studentmentaliteten, vil du alltid finne vekst og unngå å falle i fellen med å tro at du har alt under kontroll.
Balansér entusiasme med forsiktighet. Vær entusiastisk over hva som er mulig—din spenning vil inspirere andre. Men vær også stemmen som advarer om forsiktighet når det er nødvendig, og sørg for at entusiasmen ikke fører til tankeløs bruk. For eksempel, fremhev fordelene med AI-drevet utvikling, men også sørg for at enhetsprøver og kodegjennomganger blir gjort på AI-utsagnene. Denne balanserte tilnærmingen vil gjøre vibe coding både bærekraftig og respektert.
Mentor den neste generasjonen. Etter hvert som du oppnår ferdigheter og erfaring, hjelp de som er nye. Vibe coding senker terskelen for å begynne med programmering, og det betyr at flere nybegynnere kan begynne å kode. De vil trenge veiledning i å lære solide grunnprinsipper som AI kan abstrahere bort. Ved å veilede dem, sikrer du at den neste generasjonen utviklere ikke blir for avhengige av AI uten å forstå de grunnleggende konseptene. Du vil videreføre arven av gode programvareingeniørpraksiser, nå forsterket med AI.
Den eksponentielle endringen vi er vitne til er en sjelden mulighet. Tenk på tidligere teknologiske sprang, fra den industrielle revolusjonen til internett-boomen—de som engasjerte seg i dem formet hele industrier. Vi er på et slikt skjæringspunkt med AI i programvareutvikling. Det handler ikke bare om å beholde jobben din eller gjøre ting enklere; det handler om å ha en stemme i hvordan teknologien utvikler seg og hvordan den påvirker samfunnet. Ved å lese denne boken har du vist at du er en fremtidsrettet person. Nå oppfordrer jeg deg til å sette den fremtidsrettede tenkningen ut i praksis. Hver eneste linje kode du skriver med AI, hver prompt du konstruerer, hver kollega du lærer, hver policy du påvirker—alt dette bidrar til fremtiden for vibe coding.
Vær oppmerksom på at i sin kjerne har koding alltid handlet om å skape og løse problemer. Vibe coding, drevet av AI, er et utrolig kraftig nytt medium for skapelse. Omfavn det med optimisme og nysgjerrighet. Bruk det til å bygge ting som betyr noe. Og når du gjør det, hold menneskelige verdier i sentrum—vår kreativitet, vårt skjønn, våre verdier. Fremtiden for programmering blir skrevet akkurat nå, ikke bare i koden, men i hvordan vi velger å integrere disse AI-partnerne i vårt arbeid. Det er en spennende og uutforsket vei, og hver av oss får være en pioner. Så ta steget frem, eksperimenter modig, del åpent og led med det beste av menneskelig intellekt og ånd. Ved å gjøre dette vil du ikke bare tilpasse deg fremtiden—du vil aktivt forme den.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский