Gå til indhold

Artikel

Når AI bliver en del af software­udviklingen

Darize-konsulent Pierre Zabell deler sine perspektiver på, hvordan AI er ved at forandre softwareudvikling. Teknologien kan udvide og effektivisere udvikleres arbejde markant, men ifølge Pierre kræver det mere end blot at tage de nyeste værktøjer i brug. For at realisere det fulde potentiale afhænger en succesfuld brug af AI i lige så høj grad af governance og kontrol som af selve teknologien.

IT consultants integrating AI in software development.

26. september 2026

  • AI og Data

At udvide udviklerens muligheder

Siden Google introducerede Transformer-arkitekturen i 2017, og OpenAI satte gang i den brede anvendelse af LLM’er med lanceringen af ChatGPT i 2022, har virksomheder på tværs af brancher haft travlt med at finde ud af, hvordan teknologien bedst kan skabe værdi. Softwareudvikling er ingen undtagelse. Large Language Models (LLM’er) har allerede vist deres potentiale gennem utallige eksempler, hvor de har forbedret både produkter, processer og måden, udviklingsteams arbejder på.

Den største gevinst ved AI i softwareudvikling er ikke, at teknologien udfører arbejdet, men at den udvider, hvad en udvikler kan få adgang til: viden, kodebaser og rutineopgaver, som tidligere kunne optage en hel arbejdsdag.

Kodeassistenter udvider udviklerens viden og handlekraft. Teknikker inden for bestemte domæner udvider modellens viden med den specifikke kontekst i din organisation. Agenter udvider denne rækkevidde yderligere til selvstændige handlinger. Men på hvert trin skabes værdien kun, hvis den ledsages af kontrol.

I denne artikel ser vi nærmere på denne udvikling: fra kodeassistenter og de grundlæggende principper, der gør dem effektive, til domænespecifikke systemer og i sidste ende agentiske arbejdsgange, der kan handle mere selvstændigt.

AI-kodeassistenter

Den mest direkte måde, AI kan styrke softwareudvikling på, er gennem kodeassistenter. Udviklere bruger dem typisk på to niveauer:

  1. På det mest grundlæggende niveau fungerer en LLM som en genvej til viden.
    Spørg den om et programmeringssprog, du ikke kender, særlige egenskaber ved et framework eller den bedste måde at strukturere en løsning på, og på få sekunder får du den viden, som tidligere krævede en søgemaskine og flere åbne faner at stykke sammen.
  2. Det større spring kommer med integrerede kodeassistenter.
    Det kan være IDE-værktøjer (Integrated Development Environment) som Cursor og Copilot eller CLI-baserede (Command Line Interface) agenter som Gemini CLI og Claude Code. Her får LLM’en direkte adgang til at læse og ændre kode i dit faktiske projekt i stedet for blot at beskrive ændringer, som du selv skal implementere. Skiftet fra rådgiver til aktiv deltager er dét, der gør en chatbot til et værktøj, der for alvor kan løfte produktiviteten. Den samme model, der kan forklare et koncept, kan nu også implementere det, refaktorere koden og opdage de edge cases, du ellers kunne have overset.

Uanset hvilket niveau du arbejder på, afhænger den reelle værdi af de samme tre ting: at kunne kommunikere effektivt med modellen, bevare kontrollen over, hvilke data den får adgang til, og tilpasse den til dit teams specifikke domæne.

Large Language Models

Et LLM er et neuralt netværk, der er trænet på enorme mængder tekst for at forudsige det næste mest sandsynlige ord (eller token) i en sekvens. Gentages denne enkle mekanisme tilstrækkeligt mange gange, kan modellen producere sammenhængende forklaringer, fungerende kode og ræsonnementer, der strækker sig over flere trin.

Modellen fungerer ved at tage brugerens forespørgsel (input) og opdele den i tokens, som er små tekststykker – ofte dele af ord frem for hele ord. Disse omdannes til tal via modellens ordforråd. Tallene sendes derefter gennem modellens mange lag af lærte parametre, som genererer et svar (output). Når træningen er afsluttet, er modellen statisk. Den lærer ikke nyt og opdaterer sig ikke under brug. Derfor afhænger kvaliteten af resultaterne i høj grad af, hvordan du udformer det input, du giver modellen, inden for det, der kaldes kontekstvinduet.

Kontekstvinduet er modellens samlede arbejdshukommelse i en given interaktion. Alt, hvad modellen bruger til at generere et svar, skal fremgå her: instruktioner, baggrundsviden, tidligere samtaler og dokumenter, der hentes ind som kontekst.

At forstå, hvad der indgår i dette vindue, og hvordan det er struktureret, er afgørende for at skrive forespørgsler, der giver gode svar.

Anatomien i en forespørgsel

En nyttig måde at forstå det på er at se LLM’en som en skuespiller og brugeren som instruktøren. Før skuespilleren kan levere en stærk præstation, skal vedkommende kende hele konteksten: hvilken rolle der spilles, hvad scenen kræver, og hvilken instruktion der er givet. En velformuleret forespørgsel indeholder netop dette og er typisk opbygget af flere lag:

  • System prompt – rollebeskrivelsen:
    Fastlægger modellens rolle, tone og rammer. For eksempel kan den instrueres til at agere som senior softwarearkitekt eller altid svare i et bestemt format.
  • Indhentet kontekst – skuespillerens research:
    Domænespecifik information, som giver modellen adgang til fakta, den ikke blev trænet på, eller som er ændret siden træningen.
  • Samtalehistorik – historien indtil nu:
    Tidligere udvekslinger i samtalen, som hjælper modellen med at bevare sammenhæng, forstå intentionen og undgå at gentage sig selv.
  • Brugerens forespørgsel – scenens replik:
    Det konkrete spørgsmål eller den instruktion, der gives. Jo mere præcis den er, desto mindre behøver modellen at gætte på omfang eller hensigt.

Når alle fire elementer er på plads, følger resultatet som regel med. Opdel komplekse opgaver i mindre trin, giv eksempler på det ønskede output, og betragt det første svar som en prøve frem for den endelige levering. Iterér, indtil resultatet er rigtigt.

AI-governance i eget datacenter

De fleste udviklere vælger som udgangspunkt en af de store AI-udbydere, såsom Anthropic’s Claude, Google’s Gemini eller OpenAI’s ChatGPT, fordi de tilbyder nogle af de mest avancerede modeller til daglig softwareudvikling.

Men den bekvemmelighed har en pris: Hver eneste prompt, der sendes til disse tjenester, herunder proprietær kode, som deles gennem kontekstvinduet, behandles på infrastruktur, der ejes af andre. For organisationer, der håndterer følsom IP, regulerede data eller klienters kodebaser under fortrolighedsaftaler, er det ofte ikke acceptabelt.

Alternativet er at bringe modellen ind i organisationen. Det betyder, at man må undvære de nyeste frontier-modeller, men til de fleste daglige udviklingsopgaver er open-weight-modeller som Gemma, Qwen eller Llama mere end tilstrækkelige.

Det betyder også, at man selv skal håndtere den drift og den infrastrukturkompetence, der følger med at drive AI-systemer internt. Det er ikke et gratis kompromis. Men for den rette organisation er den kontrol, det giver, investeringen værd.

Rækkevidde uden kontrol er blot eksponering, og her bliver princippet for første gang til en infrastrukturbeslutning frem for en abstrakt bekymring.

Opbygning af stacken

En enkel og skalerbar on-premises-løsning består af tre komponenter: hardware, en inferensmotor og en brugergrænseflade (UI).

  • Hardware: Nvidia med CUDA eller AMD med ROCm.
  • Inferens: vLLM, en meget effektiv motor udviklet til produktionsmiljøer.
  • Brugergrænseflade: Open WebUI, som fungerer både som chatgrænseflade og som OpenAI-kompatibel API-proxy, hvilket gør det nemt at integrere i eksisterende udviklerarbejdsgange.

Dette er ikke kun en beslutning om omkostninger eller performance. Det er også et spørgsmål om governance. Når organisationen ejer infrastrukturen, ejer den også politikkerne for, hvordan AI anvendes, hvilke data den må tilgå, og hvem der har ansvaret. Samlet giver denne stack organisationer med behov for et højt niveau af kontrol et troværdigt og produktionsklart alternativ til de store teknologileverandører.

Domæneviden

Uanset om man bruger en cloudbaseret AI-model eller en on-premises-løsning, er en af de første udfordringer at få modellen til at arbejde med domæneviden. Den mest almindelige tilgang er at tilføje denne viden direkte i kontekstvinduet.

En Gemma 4-model har et kontekstvindue på 256.000 tokens. Med cirka 0,75 ord pr. token svarer det til omkring 192.000 ord eller cirka en bog på 550 sider. Det fungerer fint i mindre sammenhænge, men er ikke praktisk for store virksomhedsdomæner.

At udvide modellens rækkevidde til domæneviden i den skala kræver en mere gennemtænkt arkitektur. Der findes tre tilgange, som hver især egner sig til forskellige former for udvidelse.

Tre måder at udvide modellen på
  1. Model Context Protocol (MCP): En standardiseret protokol, der forbinder AI-modeller med eksterne datakilder, værktøjer og miljøer. Den gør det muligt for modellen dynamisk at udfylde sit kontekstvindue baseret på brugerens forespørgsel ved at trække på de informationskilder, den har adgang til. Servere, der implementerer MCP, eksponerer deres funktioner på en AI-venlig måde, så MCP-kunder som Open WebUI kan gøre disse tilgængelige side om side med systemprompten. MCP fungerer i praksis som bindeleddet mellem LLM’er og traditionelle API’er.
  2. Retrieval-Augmented Generation (RAG): En teknik til at fylde kontekstvinduet med domænespecifik viden. Det kræver, at informationen organiseres i et system, der kan søges i, for eksempel en vektordatabase. RAG kan implementeres ved hjælp af kode, som opfanger brugerens forespørgsel og udfører en traditionel databasesøgning, eller ved at lade MCP-kunder håndtere sammensætningen af prompten, når modellen anmoder om en bestemt ressource.
  3. Low-Rank Adaptation (LoRA): En finjusteringsmetode, der ændrer basismodellens vægte via en letvægtsadapter frem for at ændre selve modellen. Resultatet er en tilpasning af modellens adfærd og sprogbrug, så outputtet bedre matcher ønskede krav, hvad enten det drejer sig om struktureret formatering som overholdelse af et bestemt JSON-skema eller branche- og domænespecifik terminologi.

Disse tilgange udelukker ikke hinanden. De fleste produktionssystemer kombinerer to eller tre af dem: MCP til adgang til værktøjer og data i realtid, RAG til forankring i statisk domæneviden og LoRA til at forme stil, tone eller outputformat.

Hver tilgang indebærer dog kompromiser. RAG er kun så god som kvaliteten af informationssøgningen og chunking-strategien bag, og vidensbasen skal holdes opdateret, ellers begynder modellen at svare på baggrund af forældet information. LoRA-adaptere risikerer derimod at blive overtilpasset til snævre træningsdata og skal typisk genoplæres, hver gang basismodellen opdateres.

Den rette kombination afhænger af, hvor hurtigt domæneviden ændrer sig, hvor følsom den er, og hvor meget kontrol organisationen har brug for over modellens adfærd. Det er det samme governance-spørgsmål, der går igen gennem hele denne stack, og den samme afvejning mellem rækkevidde og kontrol, som blev introduceret i begyndelsen.

Agentiske arbejdsgange

Det er her, AI’s rækkevidde udvides fra information til handling. Indtil nu har LLM’en fungeret som en intelligent assistent: den besvarer spørgsmål, forklarer ukendte begreber og hjælper udviklere med at skrive kode. En agent tager de næste skridt ved at give den samme model adgang til værktøjer og mulighed for at udføre opgaver på vegne af en udvikler.

En agent kan bedst beskrives som et ræsonnementslag oven på software. I stedet for at følge en fastlagt sekvens af handlinger modtager den et mål, vurderer hvilke værktøjer der er nødvendige, udfører handlingerne, evaluerer resultaterne og fortsætter, indtil opgaven er løst eller en stopbetingelse er nået.

Modellen erstatter ikke traditionel softwareudvikling, men orkestrerer eksisterende systemer. Versionsstyring, issue trackere, dokumentation, CI/CD-pipelines, databaser, API’er og overvågningsplatforme forbliver byggestenene, mens LLM’en afgør, hvordan de bedst kombineres.

Det ændrer karakteren af softwareautomatisering. Traditionel automatisering følger foruddefinerede arbejdsgange, hvor alle mulige scenarier er forudset af en udvikler. Agentiske arbejdsgange erstatter nogle af disse hårdkodede beslutninger med ræsonnement. I stedet for at skrive et script til enhver tænkelig situation, definerer udviklere målene, stiller værktøjerne til rådighed og fastsætter de rammer, agenten må operere inden for.

For softwareudvikling skaber dette muligheder, der rækker langt ud over kodegenerering.

  • Onboarding: En agent med adgang til intern dokumentation, repositories og arkitekturdiagrammer kan besvare spørgsmål i den rette kontekst, generere læringsøvelser og guide nye udviklere gennem ukendte systemer.
  • Dokumentation: I stedet for at vente på, at dokumentationen bliver forældet, kan en agent løbende sammenligne kildekode med eksisterende dokumentation, identificere uoverensstemmelser og udarbejde forslag til opdateringer.
  • Håndtering af hændelser: Når alarmer udløses, kan en agent indsamle logdata, sammenholde telemetry-data på tværs af tjenester, identificere sandsynlige årsager og præsentere en kort hændelsesrapport, før en ingeniør overhovedet har åbnet dashboardet.
  • Udviklingsarbejdsgange: En agent kan undersøge et fejlslagent build, genskabe problemet, identificere de berørte kildefiler, implementere et forslag til løsning, køre testpakken og oprette en pull request med både kodeændringerne og en forklaring af sin ræsonnering. Ingeniøren gennemgår og godkender resultatet, men en stor del af det gentagne arbejde er allerede udført.
  • Vidensstyring: Designbeslutninger, mødenoter, hændelsesrapporter og Slack-samtaler indeholder ofte værdifuld arkitekturviden, som kan være svær at finde frem til igen. Agenter kan løbende organisere denne information i søgbar dokumentation og dermed reducere den mængde viden, som kun eksisterer i medarbejdernes hukommelse.

Bemærk, at ingen af disse eksempler afhænger af, at agenten er usædvanligt intelligent. Værdien ligger i dens evne til at udvide rækkevidden.

En udvikler behøver ikke længere manuelt at indsamle information fra en række forskellige systemer, før arbejdet kan begynde. Agenten kan samle denne kontekst automatisk.

I stedet for at erstatte tekniske vurderinger fjerner den en stor del af det mekaniske arbejde, der omgiver dem.

Bevar kontrollen

Jo længere AI’s rækkevidde strækker sig, desto vigtigere bliver governance.

En agent, der kun kan besvare spørgsmål, udgør en relativt begrænset risiko. En agent, der kan ændre kildekode, implementere infrastruktur eller interagere med produktionssystemer, kræver derimod nøje definerede rammer.

Disse rammer bør eksistere på flere niveauer. Agenter bør kun have adgang til de værktøjer, de reelt har brug for, operere efter princippet om mindst mulige rettigheder og kræve eksplicit menneskelig godkendelse, før irreversible handlinger som sammenfletning af kode eller softwareimplementering gennemføres. Alle handlinger bør kunne overvåges, være reproducerbare, hvor det er muligt, og logges med henblik på revision. Målet er ikke fuld autonomi, men ansvarlig automatisering.

Det afspejler det samme princip, som går igen gennem hele denne artikel. Hvert lag, fra kodeassistenter over domænebevidste systemer til autonome arbejdsgange, udvider, hvad en udvikler kan opnå. Men hver udvidelse af rækkevidden skal ledsages af en tilsvarende bevidst udvidelse af kontrollen. Teknologien skaber først reel værdi, når begge dele udvikler sig i takt.

Afrunding

Integrationen af AI i softwareudvikling giver et reelt produktivitetsløft, ikke fordi teknologien erstatter udviklere, men fordi den udvider deres rækkevidde: til viden, de ellers selv skulle opsøge, til kodebaser, de ellers skulle gennemgå linje for linje, og til gentagne opgaver, som tidligere stjal tid fra de mere komplekse udfordringer.

Det er den gennemgående tråd i alt, hvad vi har beskrevet, fra en kodeassistent, der besvarer et spørgsmål om syntaks, til en agent, der selv opretter en pull request.

Men rækkevidde uden kontrol forbliver ikke en fordel ret længe. Jo mere ingeniører bliver afhængige af AI, desto større er risikoen for, at deres fortrolighed med de værktøjer, de bruger, og den kode, de skriver, gradvist svækkes, ligesom en muskel, der bliver svagere, når den ikke længere trænes. Vi skal passe på ikke at bruge AI til alt eller stole blindt på dens svar og samtidig bevare tilstrækkelig praktisk erfaring med det egentlige arbejde til at kunne opdage, når noget er galt.

Der er en reel risiko for softwarevirksomheder, som overlader det meste af det tekniske arbejde til AI og lader udviklerne glide over i en rolle som rene arkitekter, der gennemgår kode og beskriver krav, men sjældent selv skriver eller debugger. Kompetencer forvitrer på den måde, og det samme gør den dømmekraft, der er nødvendig for at opdage fejl i AI’ens arbejde.

De værktøjer og arbejdsgange, der er beskrevet gennem denne artikel, er kun så gode som den disciplin, der ligger bag brugen af dem. Målet er ikke at lade AI erstatte teknisk dømmekraft, men at finde den rette balance, hvor teknologien overtager de gentagne og rutineprægede opgaver, så mennesker kan bruge mere tid på det arbejde, der kræver kreativitet, arkitekturforståelse og erfaring. Det er denne balance, hvor rækkevidde følges af kontrol, og ikke teknologien i sig selv, der afgør, om AI gør et team stærkere eller blot mere afhængigt.

Forfatter

Om Pierre Zabell

Pierre Zabell er konsulent hos Darize samt Principal Software Engineer & Architect med en bred teknisk baggrund, der spænder over softwareudvikling til enterprise-løsninger, systemarkitektur, DevOps, netværk og indlejrede systemer.

Han bringer et sjældent helhedsperspektiv til sit arbejde og bevæger sig mellem strategiske arkitekturbeslutninger og det praktiske arbejde med de lavniveau-systemer, som disse beslutninger i sidste ende bygger på.

Han har specialiseret sig i design og modernisering af storskala softwaresystemer, udvikling af effektive CI/CD-pipelines og i at bygge bro mellem infrastruktur- og applikationslag. Dette fulde overblik over teknologistakken, fra netværks- og hardwarebegrænsninger til levering af enterprise-software, præger hans syn på integrationen af AI i softwareudvikling. Ikke kun i forhold til, hvordan AI kan udvide udvikleres rækkevidde, men også hvor de underliggende systemer kræver den form for praktisk kontrol og forståelse, som kun opnås ved at arbejde på tværs af hele stakken.