Gå til indholdet
Michell Cronberg

Fil: ai-som-udvikler.md


created: 2025-05-21 modified: 2025-05-21 author: Michell Cronberg


Når AI bliver udvikler

AI kan skrive kode -- og det gør den faktisk ret godt. Ikke kun små snippets, men hele applikationer. Men hvordan fungerer det egentlig? Og hvad betyder det for dig -- uanset om du selv udvikler eller bare er nysgerrig? I denne artikel får du et kort overblik over, hvordan AI kan hjælpe med at skrive kode, og hvor det hele bevæger sig hen.

Warning

Bemærk venligst hvornår denne artikel er skrevet. AI-teknologi udvikler sig hurtigt, og det, der er sandt i dag, kan være forældet i morgen.

Har du styr på de forskellige begreber?

Selvom AI teknologien er ret ny, vælter det med akronymer og begreber - så måske er det på sin plads at sætte et par af dem på tavlen.

Først begrebet Vibe Coding som blev introduceret af Andrej Karpathy (tidligere chef for AI hos Tesla og medstifter af OpenAI). "Vibe" kan oversættes til en særlig stemning eller fornemmelse, og idéen handler om at skabe kode i samarbejde med en stor sprogmodel (LLM) -- som om man har en medudvikler ved siden af sig. Det gælder både små scripts og hele applikationer -- skabt gennem samtale frem for klassisk kodning.

Begrebet bliver i dag brugt lidt i flæng -- både om generering af kode med AI, men også i forbindelse med no-code og low-code platforme. Disse platforme gør det muligt at bygge avancerede løsninger via et brugervenligt interface, ofte helt uden at skrive traditionel kode.

Og netop i maj 2025 eksploderede interessen (igen), da to nye såkaldte "selvstændige AI-kodeassistenter" (agentic AI coding assistants) blev lanceret. Det særlige ved disse er, at de ikke bare skriver kode -- de kan tage selvstændige initiativer og styre hele udviklingsforløb. Denne type AI-assistenter vil uden tvivl ændre vores forståelse af, hvad det vil sige at være udvikler -- og det sker ikke i en fjern fremtid, men lige nu.

Så hvis du bare tager én ting med herfra, så lad det være de fire grundbegreber: vibe coding, no-code, low-code og selvstændige AI-kodeassistenter.

Vibe coding

Vibe coding dækker over et bredt område. De fleste større chatbots som ChatGPT, Claude og Gemini kan generere kode ud fra simple prompts -- alt fra små Python- eller PowerShell-scripts til dele af applikationer i Java, C#, JavaScript, Rust og mange andre sprog. De forstår også formater og standarder som HTML, CSS, XML og JSON.

De store sprogmodeller er trænet på millioner af linjer kode og metadata fra offentlige kodebaser på blandt andet GitHub, suppleret med dokumentation for en lang række sprog og teknologier. Det betyder, at de ikke kun kan hjælpe med at skrive kode, men også forklare og forbedre eksisterende kode -- og den evne er kun blevet stærkere over tid. Nogle chatbots har endda indbyggede funktioner til at køre og analysere kode direkte i brugerfladen.

Vibe coding og udviklingsmiljøer

Allerede kort efter ChatGPT blev lanceret i 2022 (tænk lige over, hvor hurtigt det er gået siden da), begyndte AI at finde vej ind i en række af de mest udbredte udviklingsmiljøer. Visual Studio og Visual Studio Code (Microsoft), IntelliJ IDEA, PyCharm og Rider (JetBrains), WebStorm og Eclipse -- alle har i dag AI-funktioner, hvor GitHub Copilot er det mest kendte eksempel.

Sideløbende er der også kommet nye udviklingsmiljøer, som er bygget op omkring AI fra bunden -- fx Cursor og WindSurf. Selv browserbaserede miljøer som Replit og GitHub Codespaces har fået AI-understøttelse, hvilket gør det lettere end nogensinde at komme i gang -- uanset om du sidder ved din egen pc eller arbejder direkte i skyen.

Sammenlignet med en traditionel chatbot er AI-assistenter i udviklingsmiljøer langt mere effektive fordi de har adgang til hele projektets kontekst: filstruktur, afhængigheder, eksterne pakker og andre relevante referencer. I de nyeste versioner af f.eks. GitHub Copilot tilbydes tre centrale AI-funktioner: Du kan stille spørgsmål om kode og teknologi (ask-mode), du kan få AI til at rette og tilføje kode (edit-mode), og endelig kan AI'en tage helt over og selv navigere i kodebasen, køre kommandoer, bygge projektet, fejlfinde og teste (agent-mode). Sidstnævnte ændrer (igen) fundamentalt den måde, udviklere arbejder på.

MCP

Endnu et akronym har udvidet mulighederne for AI i udviklingsmiljøer: MCP -- Model Context Protocol . Det er en ny, spirende standard (oprindeligt foreslået af Anthropic), der beskriver, hvordan AI kan kommunikere med andre systemer og tjenester.

Centralt i MCP-konceptet er MCP-servere. De stiller funktioner til rådighed via nettet, som AI kan bruge direkte. Eksempler kan være en GitHub-MCP-server, som giver GitHub Copilot adgang til at arbejde direkte med repositories, eller en Google-MCP-server, som muliggør afsendelse af mails via Gmail. I udviklingssammenhæng er en særlig interessant anvendelse af MCP-servere funktioner, der kan returnere databaseskemaer og data så en AI-agent ved præcis, hvilke tabeller og felter der findes. Det gør det markant lettere at generere brugbar kode, da AI'en har kendskab til den konkrete struktur.

Hvis MCP bliver en officiel standard, kan det få lige så stor betydning for AI-udviklingsværktøjer, som trylledrikken har for Asterix -- det vil give dem kræfter langt ud over det sædvanlige.

Selvstændige AI kode-assistenter

Selvstændige AI-kodeassistenter repræsenterer (også) et markant skift i softwareudvikling.

I stedet for blot at foreslå kode, kan disse assistenter forstå en overordnet opgave, planlægge løsningen, implementere ændringer på tværs af flere filer, køre tests og rette fejl. Disse agenter assisterer som AI-medudviklere, der anvender ræsonnering og iterativ planlægning til at tackle komplekse, flertrins kodningsopgaver. De kan fortolke mål i naturligt sprog, opdele dem i implementeringsplaner, skrive eller refaktorere kode, køre og teste koden samt debugge fejl og iterere -- alt sammen med minimal menneskelig indgriben (som navnet antyder). De arbejder simpelthen 24/7, og udviklerens rolle bliver her review og godkendelse af rettelser.

Eksempler på sådanne assistenter inkluderer OpenAI Codex og GitHub Copilot Coding Agent -- begge lanceret i maj 2025. Måske har du også hørt om Devin, den første virtuelle kodekollega, der dukkede op i 2024. Flere lignende assistenter vil uden tvivl følge i kølvandet, men både OpenAI og GitHub (Microsoft) er helt fremme i feltet lige nu.

Alle disse "virtuelle udviklere" repræsenterer en ny type AI-værktøj, der ikke blot assisterer, men tager aktivt del i hele udviklingsprocessen. Ved at automatisere gentagende og tekniske opgaver frigiver de tid og energi, så udviklere kan fokusere mere på arkitektur, design og forretningslogik. Det er en fundamental ændring i måden, vi tænker og udfører softwareudvikling.

No-Code/Low-Code

For at få det fulde overblik bør man heller ikke overse de nye no-code og low-code værktøjer. Platforme som Lovable, Bolt og Codev gør det muligt at udvikle komplette webapplikationer udelukkende ved hjælp af naturlige prompts -- altså uden at skrive klassisk kode. Især den nyeste version af Lovable (2.0) er værd at fremhæve, da den viser, hvor langt teknologien allerede er kommet.

Men også de mange flow-platforme -- som Zapier, Make, Power Automate, den gode gamle IFTTT og især n8n -- har gjort det muligt at bygge avancerede applikationer med meget lidt eller helt uden kode. Ved første øjekast har det måske ikke så meget med AI at gøre, men netop n8n gør det utrolig nemt at udvikle og automatisere egne AI-agenter til alverdens formål -- uden at skrive en eneste linje kode. Og som bonus: det hele er open source.

Hvad så med "os"

Som udvikler kan man godt få lidt sved på panden, når man ser den udvikling, der er sket det seneste år -- og forestiller sig, hvor vi står om bare ét år mere. Der er ingen tvivl om, at udviklerrollen er under forandring. De udviklere og virksomheder, der forstår og udnytter AI's fulde potentiale, vil være langt mere effektive -- og det vil formentlig betyde, at færre hænder kan løse de samme opgaver. De store techfirmaer ved det allerede og handler derefter -- bare se Microsofts nylige fyring af 6.000 medarbejdere.

Men vi skal også lige trække vejret og bevare jordforbindelsen. På trods af AI's muligheder er det ikke sådan, at hvem som helst pludselig kan udvikle komplette applikationer - selvom platforme som Lovable lover det. Det kræver stadig en solid forståelse af arkitektur, teknologi, cloud, sikkerhed og meget mere -- og det har de færreste uden teknisk baggrund.

Men det er svært at forestille sig en udvikler, der ikke bliver mere produktiv med AI ved hånden. At bruge AI som en slags "supervidende assistent" har allerede ændret måden mange udviklere arbejder på. Det udvisker grænserne for, hvilke sprog man føler sig hjemme i, og gør det muligt at være langt mere effektiv -- især hvis man lærer at stille de rigtige spørgsmål.

Så behovet for udviklere i markedet vil ændre sig -- hvor meget, hvornår og hvordan er svært at spå om. Men allerede nu kan man se konsekvenserne af AI i jobmarkedet - og de bliver ikke mindre med tiden.

Udfordring(erne)

Som i de tidligere indlæg slutter vi af med en udfordring (eller rettere en opfordring) rettet mod udviklere: Dyk ned i det her felt. Lær så meget du kan, og eksperimentér selv. Hvis du ikke kan gøre det som en del af dit arbejde på grund af firmapolitik, så gør det privat. Det er nu, du skal i gang.

Prøv at eksperimentere med edit- og agent-mode i et moderne udviklingsmiljø, test en MCP-server i praksis, og se demoer eller hands-on eksempler på de nyeste selvstændige AI-kodeassistenter, så du forstår deres potentiale. Du kan også prøve at bygge noget selv med værktøjer som Lovable eller n8n -- det kræver ikke nødvendigvis kode, men giver stor indsigt i, hvad der er muligt.

Lær alt det, du kan -- der er masser af viden at hente, især via LLM'er, blogs og YouTube. Nu ved du lidt om, hvad du skal lede efter. YouTube er ofte en guldgrube, fordi indholdet er opdateret -- men husk, at der også er meget skrammel, og mange laver videoer for at tjene penge. LLM'er som ChatGPT er trænet på ældre materiale og kan derfor gætte forkert, især om nye begreber som MCP-servere. Derfor: vær kritisk, men nysgerrig -- og brug flere kilder, når du lærer.

En klog mand (Richard Baldwin) sagde i 2023: "AI won't take your job, it's somebody using AI that will take your job." Så lær, hvad du kan, og forstå hvordan AI kan blive en del af dit værktøjssæt -- frem for at stikke hovedet i busken.


Fil: contextengenering.md


created: 2025-07-13 modified: 2025-07-13 author: Michell Cronberg


Context Engineering – AI’s nye superkraft

AI-verdenen har i flere år talt om “prompt engineering” – kunsten at skrive gode beskeder til chatbots som ChatGPT. Men nu er der kommet et nyt buzzword: Context Engineering. Det handler ikke kun om, hvad du spørger om, men om alt det, AI’en får at vide, før den svarer.

Hvad er "context"?

“Context” er alt det, modellen ser, inden den svarer. Det er ikke bare én besked, men kan være:

  • Instruktioner: Regler og eksempler, der styrer AI’ens opførsel.
  • Brugerens spørgsmål: Det aktuelle, du vil have svar på.
  • Samtalehistorik: Tidligere beskeder i samtalen.
  • Langtidshukommelse: Fakta og præferencer, AI’en har lært om dig.
  • Ekstern viden: F.eks. dokumenter, databaser eller web-søgninger.
  • Værktøjer: Funktioner AI’en kan bruge, som fx at sende mails eller tjekke kalenderen.

Hvorfor er det vigtigt?

Tidligere handlede det om at finde den perfekte “prompt”. Nu handler det om at give AI’en det rigtige samlede billede – altså den rette kontekst. Hvis AI’en mangler vigtig information, misforstår den opgaven, uanset hvor smart den ellers er.

Et simpelt eksempel: Forestil dig en AI, der skal hjælpe dig med at booke et møde. Hvis den kun ser din besked (“Kan vi mødes i morgen?”), svarer den måske neutralt. Men hvis den også får adgang til din kalender (som er fuld), tidligere mails (venlig tone) og kontaktoplysninger (det er din chef), kan den svare meget mere menneskeligt og relevant.

Fra “prompt” til “context engineering”

Context engineering handler om at bygge systemer, der samler og præsenterer den rigtige information, på det rigtige tidspunkt, i det rigtige format – så AI’en kan løse opgaven bedst muligt. Det er ikke bare én tekst, men en hel proces, der kører, før AI’en svarer.

  • Det er dynamisk: Hver opgave kræver sin egen kontekst.
  • Det handler om kvalitet: For meget eller for lidt information kan forvirre AI’en.
  • Formatet betyder noget: En kort opsummering er bedre end en lang rå dataliste.

Konklusion

Fremtidens AI handler ikke kun om at skrive gode beskeder, men om at designe den rigtige kontekst. Det gør forskellen på en “robotagtig” assistent og en, der føles virkelig hjælpsom og “magisk”.

Artiklen er inspireret af Phil Schmid: The New Skill in AI is Not Prompting, It's Context Engineering.


Fil: embeddings.md


created: 2025-07-01 modified: 2025-07-02 author: Michell Cronberg


Embedding og vektorer - for begyndere

Du kan ikke arbejde med AI uden at støde på begreberne embedding og vektorer. Disse er grundlæggende for, hvordan AI-modeller repræsenterer og forstår data – og selvom det er frygteligt komplekst og matematisk, behøver du kun at forstå det på et overordnet niveau. Resten kan du trygt overlade til de studerende på matematik- og datalogiuddannelserne.

Hvad er embedding

Embedding er i bund og grund en smart måde at sammenligne betydning og indhold på tværs af data – ikke kun tekst, men også eksempelvis billeder, lyd og video og nogle gange en kombination af fx et billede og tilhørende billedtekst. "Embedding" kunne måske oversættes til "meningsrepræsentationer" på dansk, men det lyder ret kunstigt – derfor bruger alle bare ordet "embedding".

Eksempelvis vil en søgning efter "hund" i en traditionel database kun returnere resultater, hvor "hund" indgår. I en lidt mere avanceret database kan der tages højde for bøjningsformer, så "hund", "hunde" og "hundene" behandles som varianter af samme ord. Embedding går et skridt videre og fanger selve meningen – så den kan relatere "hund" til "vovse" eller "labrador", selvom ordene ikke har samme rod.

Embedding
Embedding

At få "vovse" til at betyde "hund" kræver naturligvis en model, som forstår meningen, og der findes mange forskellige slags modeller til forskellige formål og sprog – endda modeller der kan forbinde betydning på tværs af sprog. Det er derfor helt logisk, at en traditionel database ikke kan se nogen relation mellem "det styrtregner" (dansk) og "it's raining cats and dogs" (engelsk) – men det kan en embedding-model, hvis den er trænet til det.

Visualisering

Der findes en del muligheder for at visualisere embedding og vektorer, som kan hjælpe med at forstå, hvordan de fungerer. Et eksempel er TensorFlow Embedding Projector, hvor du kan uploade dine egne data og se, hvordan de er fordelt i et flerdimensionelt rum. Det kan give en intuitiv forståelse af, hvordan lignende data grupperes sammen. Jeg har skabt to filer to kan lege med - embeddings.tsv og metadata.tsv. De består af en række vektorer, der repræsenterer ordene "hund", "vovse", "labrador" og "bil". Du kan uploade dem til projektoren og se, hvordan de relaterer sig til hinanden i et flerdimensionelt rum.

Data i embeddings.tsv er vektorer, der repræsenterer betydningen af ordene, mens metadata.tsv indeholder de faktiske ord. Når du uploader dem til projektoren, kan du se, hvordan "hund", "vovse" og "labrador" ligger tættere på hinanden i det flerdimensionelle rum end "bil", hvilket illustrerer deres semantiske lighed. Der ligger ikke nogen model bagved beregning af afstanden mellem vektorerne - eller - jeg er modellen - og har blot opfundet vektorerne, så de passer til det, jeg gerne vil vise.

Ser man på embedding af billeder, er det også meget udbredt. Google har fx en funktion, der finder "lignende billeder", efterretningstjenester kan lave ansigtsgenkendelse (disse to ansigter minder om hinanden) eller analysere et gerningssted (hvad skiller sig ud på billedet). Og hvad med algoritmerne hos Spotify, som på magisk vis synes, at danske Alberte faktisk minder lidt om amerikanske Jack Johnson? De har musik, der minder om hinanden.

Så den korte forklaring på embedding hen over spisebordet til middagen: embedding gør det muligt at finde data, der minder om hinanden.

Hvad er vektorer

Embedding er det overordnede begreb for at sammenligne betydning. I sidste ende er det jo matematik og binære funktioner, der bruges til at returnere et resultat som "vovse" minder om "hund". Så på en eller anden måde skal fx tekst, der minder om hinanden, repræsenteres af tal, som kan sammenlignes.

Disse tal kaldes vektorer (som er det, embeddings består af) og kan fx se sådan ud:

[0.12, -0.88, 1.05, 0.33, ...]

I praksis er der ofte tusinder eller millioner af tal i mange dimensioner i sådan en liste. Hver vektor repræsenterer et stykke data, fx en sætning, et billede eller en lydfil, og hvert tal i vektoren er et mål for, hvordan det pågældende data relaterer sig til forskellige egenskaber eller betydninger.

Disse vektorer skabes af embedding-modeller, som konverterer data til tal baseret på deres mening. Nogle modeller er superkomplekse og returnerer mange tal i mange dimensioner, mens andre er mere simple og dermed hurtigere og billigere. Hvis man fx kun arbejder med tekst på dansk, er der ingen grund til at bruge en embedding-model, der forstår mange sprog, og hvis man arbejder med juridiske tekster, er der ingen grund til, at modellen kender noget til Peter Pedal.

Vektorerne gemmes i en database som kan håndtere den specielle datatype og indeholder funktioner der kan sammenligne vektorer med hinanden. Det kunne eksempelvis være en PostgreSQL-database eller en online database som Pinecone. Men der er mange forskellige muligheder.

Et eksempel

Lad os tage et konkret eksempel med Ernest Hemingways "Den gamle mand og havet" (du ved - den om den gamle fisker som aldrig giver op - og som mange af os skulle analysere i skolen) for at illustrere, hvordan embedding fungerer i praksis.

Først opdeler vi bogen i mindre afsnit (også kaldet "chunking") – måske hver paragraf eller hver side bliver til et separat stykke. Et af afsnitene kunne være: "Santiago havde ikke fanget en fisk i 84 dage. De første 40 dage havde en dreng været med ham, men efter 40 dage uden fisk havde drengens forældre sagt, at den gamle mand nu helt sikkert var salao, den værste form for uheld."

Dette afsnit bliver så omdannet til en embedding-vektor ved hjælp af en sprogmodel – en lang række tal, der repræsenterer afsnittets betydning og indhold. Denne vektor gemmes i en database sammen med alle de andre afsnit fra bogen.

Når en bruger så søger efter "sult og fiasko", bliver deres søgning også omdannet til en vektor med den samme model. Systemet sammenligner derefter søgevektoren med alle afsnittene i databasen og finder dem, der ligner mest. I dette tilfælde vil afsnittet om Santiago's 84 dage uden fisk score højt, selvom ordet "sult" eller "fiasko" aldrig optræder i teksten. Modellen forstår den semantiske forbindelse mellem "84 dage uden fisk", "uheld" og brugerens søgning om sult og fiasko.

På samme måde kunne en søgning efter "kamp mod naturen" finde afsnit om Santiago's kamp med den store fisk, selvom de eksakte ord ikke står der. Embedding fanger meningen bag ordene frem for kun at matche bogstaver og ord.

Terminologi

Her er nogle centrale begreber, der ofte bruges i forbindelse med embedding og vektorer:

Embedding Processen hvor data (tekst, billeder, lyd) konverteres til numeriske repræsentationer, der fanger deres betydning og mening. Gør det muligt at sammenligne og finde ligheder mellem forskellige data baseret på semantik frem for eksakte matches.

Embeddings De faktiske numeriske repræsentationer (vektorer) som embedding-processen producerer. Hver embedding er en liste af tal, der repræsenterer et stykke datas betydning i et flerdimensionelt rum.

Vektorer Matematiske objekter bestående af en liste af tal (fx [0.12, -0.88, 1.05, ...]). I AI-sammenhæng er embeddings netop vektorer - typisk med hundredvis eller tusinder af dimensioner, hvor hver dimension repræsenterer forskellige semantiske egenskaber.

Chunks Mindre dele af større dokumenter eller datasæt. Når man arbejder med lange tekster, opdeles de i chunks (fx afsnit eller sider) for at gøre dem mere håndterbare for embedding-modeller og søgning.

Embedding-model En AI-model der er trænet til at konvertere data til embeddings/vektorer. Forskellige modeller er optimeret til forskellige opgaver, sprog eller datatyper. Eksempler inkluderer OpenAI's text-embedding-ada-002 eller open source-modeller som Sentence-BERT.

Kommende artikel

Dette er en teoretisk introduktion til embedding og vektorer. I en kommende artikel vil vi se på, hvordan man praktisk kan implementere embedding i et søgesystem - for det er faktisk ret nemt at gøre, da mange af modellerne er tilgængelige som open source og kan bruges gratis ligesom mange af databaserne. Det kræver ikke meget mere end en smule programmeringserfaring og en god forståelse for, hvordan embedding-modeller fungerer. Selve matematikken kan vi overlade til andre.


Fil: embeddings2.md


created: 2025-07-01 modified: 2025-07-02 author: Michell Cronberg


Embedding - i praksis

Dette er anden del af introduktionen til embedding og vektorer. Hvis du ikke allerede har læst den første artikel, "Embedding og vektorer - for begyndere", så start dér. Her ser vi på, hvordan du helt konkret kan bruge embedding til at bygge et lokalt søgesystem — for eksempel til at søge i en PDF-manual eller en bog.

Forestil dig, at du har en PDF med en teknisk manual til et gammelt produkt, og gerne vil lave et søgesystem, hvor brugere kan stille spørgsmål til manualen. Målet er, at systemet skal forstå betydningen af spørgsmålene og finde de relevante dele af manualen, også selvom brugerne ikke bruger præcis de samme ord som står i teksten.

Brug eksisterende chat-bots

Den nemmeste løsning er selvfølgelig at bruge et eksisterende chat-bot system som fx ChatGPT, Gemini eller Claude som backend. De har allerede indbygget funktionalitet til at håndtere embedding og kan bruges direkte til at søge i dokumenter. Det kan ovenikøbet gøres helt gratis og uden at skulle forstå eller kode noget som helst.

Men idéen med denne artikel er at vise, hvordan du kan lave dit eget system, hvor du har fuld kontrol over dataene og kan tilpasse alt præcist til dine behov. Det kræver lidt mere hands-on, men som min gamle elektroniklærer sagde: "Hvis du ikke kan lave det selv, så forstår du det ikke ordentligt." Det var også ham, der mente, at man ikke kunne komme gennem livet uden at have brændt sig godt og grundigt på en loddekolbe og mindst én gang lugtet til en kortsluttet transistor.

Så væk med de nemme løsninger — lad os se, hvordan du kan bygge dit eget søgesystem med embedding.

Din helt egen AI agent

Lad os sige, at du gerne vil lave et lokalt søgesystem, hvor du kan søge i en gammel PDF-manual. Jeg lærte i sin tid at programmere på en HP-34C lommeregner og har faktisk stadig en eller to liggende.

HP-34C
HP-34C (fra https://en.wikipedia.org/wiki/HP-34C)

Hvis jeg skulle puste liv i den igen (og det kunne være sjovt), ville jeg starte med at finde manualen. Den ligger nemt tilgængelig på nettet som en 2-300 siders PDF. Og så ville jeg hurtigt få lyst til at kunne søge i den og finde svar på spørgsmål som:
"Hvordan virker Solve-funktionen?", "Hvilke statistiske funktioner har den?" eller "Hvordan laver man betingelser og forgreninger?"

Man kunne næsten kalde det for en lille AI agent, som kan svare på alt om HP-34C — men det er nok mere retvisende at sige, at det er en simpel AI app, der bruger LLM og embeddings til at forstå og finde svar. En “rigtig” AI agent ville typisk også kunne handle, tage egne beslutninger og lære af sin omverden - eksempelvis ved at lade LLM få adgang til en HP-34C emulator, så den kan afprøve funktionerne i praksis.

Flowet

Typisk følger du et flow som dette:

  1. Konverter tekstkilden.
    Det starter ofte med en PDF, som du laver om til ren tekst. Er PDF’en kun billeder, må du bruge OCR.

  2. Del teksten op i mindre bidder.
    Du splitter teksten i små chunks, fx på 500 tegn med lidt overlap. Det gør det lettere at gemme, indeksere og søge præcist.

  3. Lav embeddings af alle chunks.
    Hver chunk bliver omdannet til en vektor ved hjælp af en sprogmodel, så du fanger meningen — ikke kun ordene. (Se første artikel for grundlæggende teori).

  4. Få en LLM til at opsummere brugerens spørgsmål.
    Hvis en bruger stiller et langt eller rodet spørgsmål, beder du en LLM koge det ned til en kort, søgevenlig engelsk sætning. Det gør søgningen skarpere, fordi dine chunks også er på engelsk.

  5. Opret embedding af spørgsmålet.
    Den korte søgetekst bliver også lavet til en embedding. Så kan du måle, hvilke chunks der ligger tættest på i betydning.

  6. Søg i dine chunks.
    Du laver en similarity search i din vektor-database og finder de chunks, der matcher bedst.

  7. Brug de mest relevante chunks som kontekst.
    Du sender de relevante tekstuddrag sammen med det originale spørgsmål til LLM’en, som kan formulere et præcist svar. Den bliver også bedt om at svare på samme sprog som spørgsmålet.

  8. Gem samtalehistorikken.
    Så kan brugeren stille opfølgende spørgsmål, og LLM’en husker stadig, hvad I har snakket om.

Her er et eksempel på, hvordan det kan se ud i praksis, når du kører det i et PowerShell-vindue med Python-koden bagved. Loggen viser tydeligt hvordan:

  • spørgsmålet bliver kogt ned til en kort søgetekst,
  • systemet finder de mest relevante chunks,
  • og LLM’en bruger dem til at generere et svar, baseret både på konteksten og det oprindelige spørgsmål.
(.venv) PS C:\git\ai-artikler\embeddings> py .\06_summarize_search_generate.py
📚 Loading embeddings and text snippets...
✅ Loaded 897 chunks.

🔍 What would you like to ask? (or 'exit'): jeg kunne godt tænkte mig at vide noget om betingelser
📝 Optimized English summary for search: "HP-34C calculator conditional instructions"  

*(Short, technical, and optimized for searches about HP-34C conditionals.)*
  - chunk_340.txt (similarity: 0.754)
    ✂️ ') End of Program. Conditionals and Conditional Branches Often there are times when you want a program to make a decisi
on. The conditional operations on your HP-34C keyboard are program instruc- tions ...'
  - chunk_046.txt (similarity: 0.732)
    ✂️ 'Section 1 Meet the HP-34C Congratulations! Your HP-34C Programmable Scientific Calculator with Continuous Memory is a 
truly unique and versatile calculating instrument. Using the Hewlett-Packard RPN l...'
  - chunk_139.txt (similarity: 0.732)
    ✂️ 'calculator, you may be sure that the calculator will execute your commands faithfully, without the slips you might mak
e if you had to manually press the keys over and over again. The calculator perfor...'
  - chunk_005.txt (similarity: 0.725)
    ✂️ 'HEWLETT |’!fi,| PACKARD The HP-34C Programmable Scientific Calculator Owner’s Handbook and Programming Guide May 1979 
00034-90001 Printed in U.S.A. © Hewlett-Packard Company 1979...'
  - chunk_890.txt (similarity: 0.691)
    ✂️ 'HP-34C Owner’s Handbook and Programming Guide Addendum This addendum contains updating information for the HP-34C Owne
r’'s Handbook and Programming Guide, manual part number 00034-90001, printed May 1...'

💬 Answer from LLM:
Her er et svar på dit spørgsmål om betingelser på HP-34C i dansk:

På HP-34C kan du bruge betingede kommandoer til at lave beslutninger i dine programmer. Manualen nævner følgende vigtige funktioner:

1. **Betingede tests**:
   - Lommeregneren kan sammenligne værdier i X- og Y-registrene.
   - F.eks. "x≤y?" tester om X er mindre end eller lig med Y.

2. **Betingede forgreninger**:
   - Disse gør det muligt at springe til forskellige dele af programmet baseret på testresultater.

3. **Programmering**:
   - Du kan bruge op til 12 etiketter til at markere forskellige programdele.
   - Logikken i programmeringssproget er designet til at være let at forstå.

Hvis du har brug for mere specifik information om, hvordan du implementerer disse betingelser i et konkret program, kan jeg præcisere yderligere baseret på manualen.

🔍 What would you like to ask? (or 'exit'): exit
(.venv) PS C:\git\ai-artikler\embeddings> 

Alt er pinnet ret grundigt ud her med logs, og det er helt bevidst — den bagvedliggende Python-kode skal kunne bruges i undervisningen på forskellige uddannelser.

Men koden er egentlig ikke det vigtigste. Det centrale er, at du forstår flowet og hvordan embedding fungerer. Hvis du ikke er interesseret i selve koden eller implementeringen, kan du roligt stoppe her 😊

Værktøjer og kode

Hele flowet ovenfor kan implementeres i stort set hvilket som helst sprog. Jeg har valgt Python, fordi der findes mange gode biblioteker til at arbejde med embedding og vektorer. Eller måske rettere: vi har valgt Python, for koden er i høj grad skrevet af Gemini CLI og ChatGPT (alle de emojis i eksemplet er et ret tydeligt fingeraftryk på, at det er en LLM, der har været i gang). Jeg har bare hjulpet den lidt på vej med at definere flowet og tilføjet lidt pædagogik.

Flowet benytter en række biblioteker, som skjuler de tunge tekniske detaljer. Fx genereres vektorerne ved hjælp af SentenceTransformer, der bygger på Hugging Face’s transformers. Det gør det let at lave embeddings af tekst og giver adgang til mange forskellige sprogmodeller — og det er gratis at bruge. Alle vektorer gemmes lokalt som JSON-filer, så det er nemt at håndtere og søge i dem. Har du brug for mere performance eller avancerede funktioner, kan det udvides til at bruge en database som Pinecone eller PostgreSQL via eksempelvis Supabase.

Den eneste eksterne komponent i mit eksempel er OpenRouter, som bruges til at generere svar fra en LLM. Det er en nem måde at få adgang til kraftige sprogmodeller uden selv at hoste dem — og der findes masser af gratis modeller. Koden her bruger fx deepseek. Du kunne også vælge at holde alt lokalt, fx med Llama eller en anden model, men det kræver lidt mere opsætning og ressourcer.

Koden er opdelt i flere filer, som du kan finde på GitHub.

Warning

Koden er hverken perfekt eller færdig. Den er tænkt som et eksempel på selve flowet og kan helt sikkert forbedres. Den er ikke optimeret til performance eller skalerbarhed — der er masser af muligheder for at gøre den bedre.

  • 01_extract_txt_from_pdf.py
    Indeholder koden til at konvertere en PDF til ren tekst. Den bruger pdfplumber til at udtrække tekst fra PDF’en. Det er ikke perfekt, men fungerer fint på de fleste PDF’er. Gemmer den udtrukne tekst i en fil i samme mappe.

  • 02_split_txt_to_chunks.py
    Opdeler teksten i mindre chunks på ca. 500 tegn med lidt overlap. Det gør det nemmere at håndtere og søge i. Bruger langchain.text_splitter og gemmer filerne i en chunks/-mappe.

  • 03_create_embeddings.py
    Laver embeddings af alle chunks med SentenceTransformer og all-MiniLM-L6-v2 modellen fra Hugging Face, som genererer vektorerne. Gemmer dem også i chunks/-mappen.

  • 04_local_search.py
    Implementerer en lokal søgefunktion, der bruger de genererede embeddings til at finde relevante chunks ud fra brugerens spørgsmål.

  • 05_local_search_hybrid.py
    En udvidelse af 04_local_search.py, som først filtrerer chunks ved at tjekke om søgeordet optræder direkte i teksten, og derefter laver en vektorsøgning på kun disse. Det giver hurtigere og ofte mere præcise resultater, fordi irrelevant tekst sorteres fra allerede inden similarity search.

  • 06_summarize_search_generate.py
    Indeholder hele flowet, hvor brugeren kan stille spørgsmål, og systemet finder relevante chunks og genererer et svar. Bruger llm_utils.py til at håndtere LLM-kald.

Har du lyst, så tag et kig på koden og leg med den. Det er en fremragende måde at lære på — og du kan nemt tilpasse den til dine egne behov.


Fil: faktura-mojo.md


created: 2025-06-17 modified: 2005-06-17 author: Michell Cronberg


Faktura Mojo -- en AI-app til at udtrække data fra PDF-fakturaer

Jeg har fået flere spørgsmål om, hvordan man selv kan bygge (gratis) AI-løsninger/automatiseringer, så jeg besluttede at vise det med noget konkret.

Warning

Bemærk venligst hvornår denne artikel er skrevet. AI-teknologi udvikler sig hurtigt, og det, der er sandt i dag, kan være forældet i morgen.

Faktura Mojo -- en lille lokal browser-app, der bruger AI til at udtrække information fra PDF-fakturaer som FI-nummer, dato, beløb, tekst, bankkonto mv., så informationer er nemme at kopiere til en webbank til betaling. Det burde jo være en standardfunktion i enhver netbank (upload en PDF og få felter forudfyldt), men indtil min egen bank tager skridtet over det teknologiske dørtrin, mangler jeg en lille app. Og hvis det virker for én faktura, kan det hurtigt udvides til flere -- og måske endda eksportere til CSV til videre brug i regnskab eller webbank.

Helt ærligt -- idéen er ikke revolutionerende og heller ikke super brugbar -- men måske kan den være en inspiration til, hvordan du selv nemt kan bygge en AI-app.

Appen blev bygget af os (GitHub Copilot og jeg) på nogle timer lørdag samtidig med, at Jonas fik tæsk i Criterium du Dauphiné.

Rent praktisk fungerer den ved, at:

  • brugeren "uploader" (lokal til browseren) en PDF
  • et JavaScript-bibliotek udtrækker al tekst
  • teksten sendes til en LLM-model hos OpenRouter med en prompt, der anmoder om at finde forskellige data
  • data vises i en tabel

Prøv den selv på:

https://devcronberg.github.io/fakturamojo/

Og læs om den på GitHub:

https://github.com/devcronberg/fakturamojo?tab=readme-ov-file#faktura-mojo

Husk at læse afsnittet om datasikkerhed!!!

Hvis du har lyst, kan du selv se koden på ovennævnte repo (læs readme), men mest interessant er nok brugen af gratis LLM-modeller hos OpenRouter (https://openrouter.ai/), som gør det supernemt at komme i gang med at tale med mange forskellige LLM-modeller. OpenRouter fungerer som en proxy for alle mulige forskellige udbydere af modeller -- fra OpenAI til DeepSeek og alt det imellem -- og flere af dem er gratis. Det eneste, det kræver, er en gratis konto og en API-nøgle.

Der er en del udvidelsesmuligheder, som kunne være interessante -- mest oplagt vil være at arbejde 100 % lokalt, support for billeder (OCR), batch-processering mv. (igen se readme). Men så er der lidt til de lange tour-etaper til sommer.

I øvrigt er appen skrevet med GitHub Copilot, og jeg bliver mere og mere imponeret over, hvor effektiv den er, hvis den bliver styret rigtigt. Jeg tror -- hånden på hjertet -- at jeg har skrevet 5 % af koden, og design (HTML og CSS) har jeg slet ikke rørt. Men jeg har også vidst, hvad jeg ville have den til at bygge -- det skal være denne type app, den skal bruge dette PDF-bibliotek, dette CSS bibliotek, den skal bruge OpenRouter osv.

Så jeg (og ChatGPT) har brugt lidt tid på at skrive den fil, du finder i .github-mappen, som er direkte instruktioner til Copilot. Når den først er på plads, skriver koden sig selv. Jeg har klart haft en fordel ved at være udvikler, men hvis en ikke-udvikler bruger noget tid på at finde den rigtig tech stack og stuktur kan man godt nok komme langt. Prøv det selv!


Fil: gemini-cli.md


created: 2025-06-30 modified: 2025-06-30 author: Michell Cronberg


Kom i gang med Gemini CLI

Googles seneste tilføjelse til udviklingsværktøjskassen, Gemini CLI (Command Line Interface), er endnu et spændende skridt i AI udviklingen. Dette værktøj giver mulighed for at arbejde med lokale filer, udføre lokale kommandoer og generere kode direkte fra kommandolinjen ved hjælp af AI. Det er typisk et værktøj, der er designet til at hjælpe udviklere med at automatisere og effektivisere deres arbejdsprocesser, men det kan også være nyttigt for alle, der ønsker at udnytte AI til at forbedre deres produktivitet på den lokale computer.

Unikke fordele ved Gemini CLI

Selvom markedet allerede byder på flere AI-værktøjer til kommandolinjen, herunder Claude Code og OpenAI Codex, adskiller Gemini CLI sig på væsentlige punkter:

  • Open Source: Det er den eneste større løsning på markedet, der er fuldstændig open source. Dette giver transparens og mulighed for fællesskabsdrevet udvikling.
  • Omkostningseffektivitet: Værktøjet er gratis at anvende med yderst generøse forbrugsgrænser. Der tilbydes tusind gratis modelanmodninger per dag, hvilket er en betydelig mængde.

Funktionalitet og anvendelsesområder

Gemini CLI er primært designet til at understøtte udviklere ved at automatisere og assistere med forskellige opgaver. Værktøjet kan:

  • Generere kode.
  • Oprette filer.
  • Udføre kommandoer automatisk.

Helt generelt varetager den mange af de opgaver, som traditionelt har krævet manuel programmeringsindsats.

Det kan således betragtes som en intelligent assistent, der er klar til at hjælpe med alt fra opbygning af projekter til installation af afhængigheder eller fejlfinding af kode.

Gemini CLI
Gemini CLI

Arbejdsflow og brugerkontrol

Når Gemini CLI får en opgave, vil den først udvikle en plan for, hvordan opgaven skal løses. Herefter vil værktøjet anmode om brugerens tilladelse til at udføre de foreslåede handlinger på maskinen, eksempelvis at installere nødvendige afhængigheder eller oprette nye mapper. Dette sikrer, at brugeren bevarer fuld kontrol og skal godkende hvert skridt, som AI'en foreslår.

Installering

Installationen af Gemini CLI er relativt ligetil og foretages via npm (Node Package Manager), og det er således nødvendigt at have Node.js installeret på din maskine. Følg readme-filen i GitHub-repositoriet for at få de præcise installationsinstruktioner. Jeg bøvlede faktisk lidt med at få det til at spille fsva. authentication men det er muligvis vores Google Workspace der drillede - læs readme-filen grundigt igennem for at sikre, at du ikke overser vigtige trin.

Efter installationen kan værktøjet aktiveres ved at køre kommandoen Gemini. Dette vil åbne et prompt-felt i terminalen, hvor det er muligt at begynde at instruere AI'en i at udføre opgaver på den lokale maskine.

Nuværende status og fremtidsudsigter

På trods af at være et relativt nyt værktøj, og i øjeblikket muligvis virkende en smule "ru i kanten" sammenlignet med mere etablerede løsninger som Claude Code, demonstrerer Gemini CLI et stort potentiale. Det har allerede vist sig i stand til at producere kode af god kvalitet og endda fejlfinde egen kode for at få en applikation til at køre. Forventningen er, at Google over tid vil forbedre værktøjet betydeligt.

Og så er det "gratis" og open source. Prøv det!


Fil: gpu.md

CPU/GPU og AI

Når man taler om kunstig intelligens og machine learning, dukker begreber som CPU og GPU ofte op. Men hvad er egentlig forskellen? Og hvorfor hører vi hele tiden, at AI kræver GPU'er?

Denne artikel er skrevet som en kort introduktion for begyndere, fx datamatiker-studerende eller andre IT-interesserede, der vil forstå de grundlæggende forskelle — og hvorfor AI typisk ikke nøjes med en CPU.

Info

Hvis du vil nøjes med den helt korte forklaring og ikke har overskud til at læse hele artiklen, så er en GPU (Graphics Processing Unit) hurtigere en CPU (Central Processing Unit) til at håndtere store mængder data og komplekse beregninger, som er almindelige i AI.

Hvad er en CPU?

CPU står for Central Processing Unit og er den del af computeren, der udfører de fleste almindelige beregninger og styrer flowet i programmer. En CPU er designet til at være fleksibel og kunne håndtere mange forskellige typer opgaver.

Den har typisk få men meget avancerede kerner (cores), som kan skifte hurtigt mellem forskellige instruktioner. CPU'er opererer ofte med højere clockhastigheder, typisk mellem 3-5 GHz.  

CPU’en er derfor super god til:

  • generel programkørsel
  • logik og beslutninger (if/else, loops)
  • arbejde med små mængder data ad gangen
  • opgaver, der kræver lav forsinkelse (latency)  

Hvad er en GPU?

GPU står for Graphics Processing Unit og blev oprindeligt opfundet for at tegne grafik (billeder og 3D). En GPU har ikke bare 4 eller 8 kerner som en CPU — den har tusindvis af små kerner, der kan regne på mange data på én gang.

GPU'er kører typisk med lavere clockhastigheder (1-2 GHz), men de tilbyder markant højere hukommelsesbåndbredde og flere FLOPS (Floating-Point Operations per Second), hvilket er afgørende for AI og videnskabelige beregninger.  

Det gør en GPU fantastisk til opgaver, hvor man skal lave den samme beregning på rigtigt mange data fx matrix-multiplikationer (som bruges i neural netværk) eller billedberegning, som jo i bund og grund er farver i store datatabeller.

I mange moderne computersystemer arbejder CPU'er og GPU'er ofte sammen for at maksimere effektiviteten. CPU'en håndterer generelle computeropgaver og systemoperationer, mens GPU'en tager sig af specialiserede opgaver, der kan udføres parallelt, såsom grafikbehandling og komplekse databeregninger.  

Hvorfor GPU og AI?

De fleste moderne AI-modeller — især deep learning — er bygget på store matricer og vektorer, som ganget og lagt sammen på kryds og tværs. Det minder i struktur om at manipulere billeder (pixels i et grid), og det er derfor, GPU’er er så velegnede.  

Faktisk var det spilindustrien (og dermed grafikkortene) der ved et tilfælde skabte grundlaget for hurtig deep learning. Da forskere begyndte at eksperimentere med at køre deres matrixberegninger på GPU'er (i stedet for CPU'er), gik træningstiden for store netværk fra uger til timer. Siden er GPU'er blevet en standard i machine learning.  

Moderne GPU'er inkluderer også specialiserede processorenheder, som NVIDIA's Tensor Cores. Disse er specifikt optimeret til tensor-operationer (en måde at organisere, beregne og repræsentere komplekse data på i flere dimensioner) og matrixberegninger, der er udbredte i deep learning, og giver et betydeligt ydelsesløft for både AI-træning og -inference (brug af modellen). Desuden er GPU'er udstyret med en hurtig hukommelse og avancerede arkitekturer, der sikrer hurtigere dataoverførsel og minimerer flaskehalse, hvilket er afgørende for AI-modellernes dataintensive natur.  

Derfor ser du ofte datacentre til AI fyldt med Nvidia GPU'er, fordi deres CUDA-platform og deres hardware er markedsførende og klart det bedste valg, hvis du vil arbejde med machine learning.

Info

GPU'er bruges ikke kun til AI og grafik, men også til Bitcoin mining (og andre kryptovalutaer).
Det skyldes, at mining er ekstremt velegnet til GPU'ens mange tusinde små kerner, som kan udføre de samme matematiske hash-beregninger parallelt igen og igen. Jo flere parallelt kørende kerner, desto hurtigere kan systemet gennemsøge mulige løsninger og finde det "gyldne hash" — og dermed tjene bitcoins.

Lokale LLM’er som LLaMA

Mange har efterhånden prøvet at køre store sprogmodeller (LLM’er) lokalt på deres egen PC. Et kendt eksempel er LLaMA (fra Meta), som findes i mange varianter. Disse modeller kan godt køre på en CPU, men det går meget langsomt, især med større modeller.

Har du et Nvidia-kort med mange CUDA-kerner og nok VRAM (typisk 12 GB eller mere), kan du til gengæld køre selv store modeller hurtigt.

Så vil du lege med LLaMA eller andre open source LLM’er på din egen maskine, er et godt Nvidia-kort næsten et krav for at få det til at køre glat, men husk at VRAM-mængden er afgørende, og at en smart fordeling mellem CPU og GPU kan redde ydelsen.


Fil: index.md

Forside

Velkommen til! Jeg hedder Michell Cronberg og har i 2025 skrevet en række artikler og indlæg om AI. De er primært udgivet på LinkedIn, men jeg er blevet kontaktet af flere uddannelsesinstitutioner og virksomheder, som gerne vil have dem samlet ét sted – og derfor er dette site oprettet.

Nogle indlæg er skrevet med undervisning eller formidling i tankerne. Andre er mere personlige refleksioner eller tekniske guides, som måske også kan hjælpe dig, hvis du sidder med lignende udfordringer.

Artikler

Her er listen over de artikler, der er udgivet:

Oprettet Titel
2025-05-07 Kort introduktion til AI modeller
2025-05-12 Kunsten at stille det rigtige spørgsmål – en introduktion til promptgenerering
2025-05-19 Når chatbots husker
2025-05-21 Når AI bliver udvikler
2025-06-06 Kom i gang med "Vibe" coding
2025-06-17 Faktura Mojo -- en AI-app til at udtrække data fra PDF-fakturaer
2025-06-20 Tal med en LLM via HTTP
2025-06-21 Tal med en LLM via kode
2025-06-24 Tal med en LLM via kode – nu med hukommelse
2025-06-30 Kom i gang med Gemini CLI
2025-07-01 Embedding - i praksis
2025-07-01 Embedding og vektorer - for begyndere
2025-07-07 Se mig... jeg kører Linux!
2025-07-12 Perplexity.ai – en ny slags AI-søgemaskine
2025-07-12 CPU/GPU og AI
2025-07-13 Context Engineering – AI’s nye superkraft

Alt indhold må frit benyttes, så længe der gives en tydelig reference med link tilbage til denne side. Del endelig videre – det er hele pointen!

Har du spørgsmål, kommentarer er du meget velkommen til at kontakte mig via LinkedIn eller på mail: michell@cronberg.dk

Om mig

Image title

Jeg er instruktør, konsulent og forfatter med speciale i Microsofts .NET-teknologier – særligt C#, ASP.NET MVC og relaterede webteknologier. Jeg har en bred teknisk profil og solid erfaring med både backend- og frontend-udvikling, herunder TypeScript, moderne frontend-frameworks samt HTML, CSS og JavaScript. Desuden arbejder jeg aktivt med integration af kunstig intelligens (AI) i softwareløsninger.

Som konsulent har jeg arbejdet med udvikling og styring af både Windows- og webapplikationer for en række danske og udenlandske virksomheder. Min faglige indsigt omfatter også regnskab, bogføring og ERP-systemer, hvor jeg har opbygget en dyb forståelse for virksomheders administrative behov.

Derudover har jeg omfattende erfaring med automatisering på Windows-platformen ved hjælp af Python, .NET og PowerShell – og tidligere i karrieren med systemudvikling i Assembler og COBOL (ja, det var dengang man stadig havde disketter og kaffe i papkopper).

Gennem mere end 20 år har jeg undervist professionelle udviklere som freelance instruktør hos Teknologisk Institut, hvor jeg har specialiseret mig i at omsætte komplekse teknologier til praksisnær og letforståelig viden. Jeg holder jævnligt foredrag og workshops, hvor jeg deler indsigt i softwareudvikling, teknologitrends, best practices og effektiv anvendelse af moderne udviklingsværktøjer.

Som forfatter har jeg udgivet mere end 10 bøger om programmering – blandt andet Bogen om C# (bogenomcsharp.dk). Desuden har jeg gennem en årrække bidraget med artikler og vejledninger som fast skribent i forskellige teknologimagasiner.

Om sitet

Denne blog er bygget med MkDocs Material, et populært værktøj til at generere dokumentation og blogs i Markdown-format. Det giver en enkel og effektiv måde at præsentere indhold på – samtidig med at det er nemt at vedligeholde og opdatere.

Her er de plugins, der er brugt:

requirements.txt
mkdocs-material
mkdocs-awesome-pages-plugin
mkdocs-video
mkdocs-document-dates
pymdown-extensions

Hvis du ønsker en samlet fil med alle artiklerne til AI, kan du finde den her.


Fil: intro-ai-modeller.md


created: 2025-05-07 modified: 2005-05-07 author: Michell Cronberg


Kort introduktion til AI modeller

Vi har i flere år haft LLM'er med en chatbot ovenpå som ChatGPT (OpenAI), Claude (Anthropic), og Gemini (Google), som vi uden tvivl alle har eksperimenteret med på kryds og tværs. Jeg er sikker på, at du -- ligesom mig -- både er begejstret for mulighederne og frustreret (eller måske endda bekymret) over, hvor galt det kan gå, når en chatbot og dens underliggende LLM hallucinerer (forklaring fra ChatGPT) og svarer helt forkert.

Warning

Bemærk venligst hvornår denne artikel er skrevet. AI-teknologi udvikler sig hurtigt, og det, der er sandt i dag, kan være forældet i morgen.

Indgangen for mange til AI er netop ChatGPT, men det er jo absolut ikke den eneste spiller på markedet, og skal vi til at bygge vores egen "AI App", skal der en del mere til. Men nu kan vi starte serien med at sætte et par grundlæggende begreber på plads inden de efterfølgende indlæg.

GPT

Man taler ofte om GPT som en generel AI-teknologi, men det er faktisk ikke korrekt. GPT står for Generative Pre-trained Transformer og er en type sprogmodel (Large Language Model eller LLM) udviklet af OpenAI. Disse modeller er trænet på enorme mængder tekstdata og kan generere menneskelignende tekst baseret på de input, de modtager. ChatGPT er en applikation bygget oven på GPT-modellen. Den er finjusteret til at føre samtaler og er designet til at være mere interaktiv og brugervenlig. ChatGPT inkluderer også funktioner som indholdsfiltrering og kontekststyring for at forbedre brugeroplevelsen.

Der er andre spillere på banen

Det er vigtigt at bemærke, at GPT ikke er den eneste teknologi inden for LLM'er. Flere andre virksomheder har udviklet deres egne modeller, og disse modeller viser, at AI-feltet er mangfoldigt, og at der findes flere forskellige tilgange og teknologier ud over GPT. GPT er blot OpenAI's måde at designe en model.

Eksempelvis har Gemini (Google), Claude (Anthropic), LLaMA (Meta), Mistral (et europæisk AI-firma - måske burde man kigge mere her i disse tider?), DeepSeek (kinesisk), Phi (Microsoft) med videre forskellige typer af modeller, både med og uden open source-licens, der er effektive og tilgængelige for private og virksomheder. Disse alternativer adskiller sig fra GPT ved deres træningsdata, modelarkitektur og licensstrategier -- og giver brugerne mulighed for at vælge en model, der passer til deres behov og værdier.

Dagens udfordring

Nok teori - udfordringen til dette indlæg kunne være: Opret (eller tilknyt) en konto hos OpenAI, Anthropic og/eller Google, og bed den om at forklare begreberne - start med en prompt som eksempelvis:

Du er en AI-instruktør: Definer forskellen mellem LLM, GPT, ChatGPT, Claude, 
LLaMA og Gemini med 1–2 sætninger hver, efterfulgt af en klar 
sammenligningstabel med ejer, træningsdata, åben/kommerciel status og 
nøglefunktioner, dernæst beskriver du kort deres historiske og tekniske 
relationer, og du afrunder med én enkel analogi eller huskeregel, 
så svaret både er let at forstå og huske.

Prøv prompten i de forskellige modeller hos den enkelte udbyder og hos forskellige udbydere. Læg mærke til, at nogle modeller er deciderede "chat"-modeller og andre er "tænke"-modeller (reasoning) - prøv at se forskellen i svar mellem de to typer.

Promptgenerering -- øv dig på det. Jo bedre du er til det, jo større bliver udbyttet, når du "taler" med en model. Fremtidens IT‑medarbejdere kunne meget vel bestå af ansatte, som forstår, hvordan de kan få det rette udbytte fra en model. Udover den tekniske indstilling af parametre mv. handler det primært om at kunne skrive en god prompt.

Og er du mere interesseret, så prøv:

En chat-model er som en venlig receptionist: god til samtale og hurtig
til at svare. En 'tænke'-model minder om en specialist, der kan analysere
komplekse problemer. Mange AI-modeller kombinerer nu begge egenskaber:
samtale og avanceret problemløsning. Udviklingen går mod alsidige
modeller, der kan håndtere både dialog og svære opgaver.

Du kunne også i de forskellige modeller og udbydere, prøve den klassiske:

Hjælp mig lige med denne gåde: Lene har 5 brødre og 3 søstre. 

Hvor mange søstre har Lenes bror?

Fil: linux.md


created: 2025-07-07 modified: 2025-07-09 author: Michell Cronberg


Se mig... jeg kører Linux!

Som så mange andre i IT branchen er jeg "go-to guy" når venner og familie har noget IT fnidder, og indtil nu har jeg kunne holde dem alle på en Windows platform. Dels fordi det er nemmest (de kender nok operativsystemet fra tidligere) og del pga MS Office (som de også kender fra tidligere). Men nu nærmer tiden sig hvor MS dropper support for Windows 10 - herunder sikkerhedsopdateringer - og det gør pludseligt mit liv lidt mere besværligt og kræver et valg:

  • 1 De kan bare fortsætte på Windows 10 og ignorere risikoen for de manglende sikkerhedsopdateringer
  • 2 Jeg kan sige de skal købe en ny maskine der overholder minimums specifikationerne og installere Windows 11 på den, hvilket de ikke vil gøre, da der typisk ikke er noget galt med deres nuværende maskine
  • 3 Jeg kan hack'e mig igennem en tvungen opdatering til Windows 11 med de problemer de uden tvivl giver, og er i øvrigt nødt til at sige at MS ikke garanterer opdateringer på en "hack'et" maskine
  • 4 Jeg kan overbevise dem om at skifte til Linux, hvilket vil give dem et sikkert og opdateret system uden de samme begrænsninger som Windows - men med en læringskurve der kan være svær at overvinde for ikke-tekniske brugere
  • 5 Jeg kan overbevise dem om at skifte til Mac, hvilket vil give dem et sikkert og opdateret system - men til en pris der er langt over hvad de er villige til at betale.
  • 6 Jeg kan bede dem finde en anden "go-to guy" som kan hjælpe dem med deres IT fnidder.

Og helt ærligt - 1, 2, 3, 5 og 6 er ikke en mulighed. Jeg kan ikke leve med at vide at de har et usikkert system, og jeg kan ikke leve med at de skal betale for en ny maskine eller et nyt operativsystem, når der er en gratis løsning der virker. Men problemet med 4 er, at de ikke kender Linux, og det kan være en udfordring at få dem til at skifte og efterfølgende lære at bruge det. Men jeg tror jeg har fundet en løsning efter lidt test og eksperimenter - lære dem at bruge AI.

AI og Linux

Så her er planen: Jeg installerer Linux Mint (som er meget tæt på Windows og relativt nemt at bruge) med Chrome, Edge og LibreOffice på deres maskine, og så lærer jeg dem at bruge AI til at løse deres IT problemer. Alle store LLMs har fuldt styr på Linux og Linux Mint, og de kan hjælpe med at finde løsninger på problemer, som de ellers ville have brug for mig til at løse. Det betyder, at de kan få hjælp til deres IT fnidder uden at skulle kontakte mig hele tiden.

Det er en win-win situation - de får et sikkert og opdateret system, og jeg slipper for at skulle hjælpe dem så meget med deres IT fnidder.

Linux Mint
Linux Mint - En brugervenlig Linux-distribution

Og det er ikke så svært at lære dem at bruge AI. De bliver instrueret i, hvordan de kan bruge AI (eksempelvis ChatGPT eller Gemini gennem en browser) til at søge efter løsninger på deres problemer - herunder at sørge for, at AI'en forstår deres specifikke IT-niveau, behov og kontekst. Samtidig skal de lære at tage screenshots af deres skærm og uploade dem til AI'en, så den kan se, hvad de ser. Det er en god måde at få AI'en til at forstå deres specifikke problemstilling, og det gør det nemmere for dem at få hjælp.

Der er også en del andre fordele ved at bruge AI til at løse IT-problemer:

  • Hurtigere løsninger: AI kan hurtigt finde løsninger på problemer, som ellers ville tage lang tid at finde manuelt (kontakte mig, vente på svar, osv.).
  • Bedre forståelse: AI kan hjælpe med at forklare komplekse problemer på en måde, som er nemmere at forstå for ikke-tekniske brugere.
  • Selvstændighed: Brugerne bliver mere selvstændige og lærer at løse deres egne problemer, hvilket mindsker behovet for at kontakte mig som "go-to guy".
  • AI kendskab: Brugerne lærer at bruge AI som et værktøj, hvilket er en vigtig færdighed i fremtidens IT-verden.

Nu prøver vi med en enkelt person og ser, hvordan det går. Der dukker sikkert nogle udfordringer op (kan allerede se noget omkring OneDrive, som enkelte brugere har).

Det sjove er - de fleste er super motiverede for at komme ud af klørerne på Microsoft og være uafhængige af USA, og de er åbne for at lære noget nyt.

Prompt

Her er et eksempel på en prompt, som brugerne kan bruge til at få hjælp fra AI'en:

Du er Viggo, en hjælpsom Linux-vejleder for en almindelig bruger, der kun kender Windows 10 og nu bruger dansk Linux Mint Cinnamon. Giv meget simple, trin-for-trin instruktioner med punktlister og konkrete eksempler (fx “Menu > Tilbehør > Terminal”), hjælp med at åbne programmer, installere, ændre sprog og finde filer, og advar hvis noget kan være usikkert. Hvis noget er uklart, så stil opklarende spørgsmål eller bed om et screenshot ved hvert step, så du kan guide videre. Svar gerne med et glimt i øjet og lidt humor, men hold tonen altid tålmodig, uformel og undgå unødig teknik. Hvis du selv er i tvivl, kan du finde information på https://linuxmint.com, https://linuxmint.com/faq.php og https://linuxmint-installation-guide.readthedocs.io/_/downloads/en/latest/pdf/. Svar altid på dansk.

Praktiske overvejelser

Der er selvfølgelig nogle praktiske ting at tænke over ved denne tilgang:

  • Backup af data: Inden skiftet skal alle vigtige data sikres ordentligt
  • Kompatibilitet: Ikke alle Windows-programmer kan køre på Linux, så dette skal checkes på forhånd
  • Læringskurve: Selvom Linux Mint ligner Windows, er der stadig forskel på arbejdsgange
  • AI-afhængighed: Brugerne skal lære at stille de rigtige spørgsmål til AI'en

Konklusion

Kombinationen af Linux og AI-assistance kan være vejen frem for mange, der står over for Windows 10's ophørende support. Det kræver mod at prøve noget nyt, men belønningen kan være stor - både økonomisk og sikkerhedsmæssigt.

Info

Gu' ve' hvor lang tid der går før "nogen" skaber MCP klient til Linux, så AI selv kan tage de screenshots der skal til for at forstå problemet.

Opfølgning/opdatering - 9/7-25

Efter artiklen blev publiceret, har jeg fået flere henvendelser om mulighederne efter Windows 10’s ophørende support. Det er tydeligt, at mange er interesserede i at finde alternativer. Her er en opsummering af spørgsmål og svar:

Læste jeg rigtigt – supporterer Microsoft ikke længere Windows 10?

Ja, det er korrekt. Microsoft har annonceret, at de stopper med at udgive sikkerhedsopdateringer til Windows 10 pr. 14. oktober 2025. Det betyder, at brugere af Windows 10 vil være sårbare over for sikkerhedstrusler efter denne dato. Det betyder dog ikke, at man ikke kan bruge Windows 10 herefter – men det er en risiko, da der ikke længere kommer opdateringer, som beskytter mod nye trusler. Og det ved hackerne godt, så de vil helt sikkert udnytte det. Jeg kan måske selv leve med risikoen, fordi jeg er ret bevidst om phishing og malware, men jeg tør ikke anbefale farfar og mormor at fortsætte med Windows 10 efter oktober 2025. Læs mere på Microsofts officielle side.

Kan jeg købe ekstra support fra Microsoft, så jeg kan fortsætte med at bruge Windows 10?

Ja – Microsoft tilbyder en betalt udvidet supportaftale for Windows 10 kaldet ESU (Extended Security Updates). Denne aftale giver mulighed for at fortsætte med at modtage sikkerhedsopdateringer i en begrænset periode (1 år) efter den officielle slutdato. Det koster $30 eller 1.000 Microsoft Rewards-point (hvad det så ellers er) – men se næste spørgsmål hvor der også er links til den officielle side.

Er der nogen måde at få Windows 10-opdateringer gratis efter oktober 2025?

Ja – faktisk (eller... intet er jo gratis i denne verden) har Microsoft sidste måned offentliggjort, at du kan blive inkluderet i ESU-programmet gratis, hvis du bruger Windows Backup til at tage backup af dine data til skyen. Du kan læse mere om det på Microsofts officielle side – scroll ned til “Windows 10 Extended Security Updates: A bridge to your Windows 11 experience”. Hvorfor Microsoft gerne vil have dig til at tage backup af dine data til OneDrive (antager jeg), er ikke helt klart - men måske er det er mulighed for at få lidt goodwill fra brugerne, inden de tvinger alle over på Windows 11. Så er der jo allerede backup af data, og dermed endnu nemmere at konvertere - eller? Det må du selv vurdere, men det tyder på at det er en mulighed for at få gratis sikkerhedsopdateringer i en udvidet periode.

Kan jeg ikke bare installere Windows 11 Lite (LTSC) på min nuværende maskine?

Microsoft har en officiel version af Windows 11 kaldet LTSC (Long Term Servicing Channel), som faktisk er ret tillokkende, da den ikke har de samme begrænsninger som den almindelige Windows 11-version. Den har udvidet support, er designet til at køre på maskiner med lavere specifikationer, og den er ikke fyldt med unødvendige apps og funktioner. Du behøver ikke lede længe på YouTube for at finde videoer, hvor LTSC bliver anbefalet som det bedste valg for almindelige brugere. Men det er ikke så simpelt – LTSC er kun tilgængelig for erhvervslivet og kræver en særlig licens. Det betyder, at du ikke kan installere det på din nuværende maskine uden at købe en erhvervslisens. Det er derfor ikke en mulighed for private brugere. Så selvom det kan være fristende at installere LTSC, er det uden tvivl et brud på Microsofts licensbetingelser og kan føre til problemer senere. Derfor er det ikke en anbefalet løsning.


Fil: llm-via-http.md


created: 2025-06-20 modified: 2005-06-20 author: Michell Cronberg


Tal med en LLM via HTTP

Info

Denne tekst er kopieret fra et LinkedIn-opslag fra juni 2025 - derfor den lidt anderledes tone.

Men... hvordan virker det egentlig? Det her med at tale med en LLM (Large Language Model). Glad for at du spørger, for det er faktisk ret nemt, og den bedste måde at lære det på er ved at prøve det af selv- Vi kan jo starte uden kode overhovedet:

Warning

Bemærk venligst hvornår denne artikel er skrevet. AI-teknologi udvikler sig hurtigt, og det, der er sandt i dag, kan være forældet i morgen.

  • Start med at installere Visual Studio Code (VSC) (https://code.visualstudio.com/) og find og installer den extension, der hedder REST Client. Det gør det nemt at sende HTTP-forespørgsler direkte fra editoren.
  • Opret en gratis konto hos OpenRouter (https://openrouter.ai/) og skab en API-nøgle.
  • I VSC opretter du en ny fil med endelsen .http og skriver følgende:

POST https://openrouter.ai/api/v1/chat/completions
Authorization: Bearer sk-or...\
Content-Type: application/json

{
    "model": "deepseek/deepseek-chat-v3-0324:free",\
    "messages": 
    [
        {
            "role": "user",
            "content": "Hvorfor er himlen blå?"
        }
    ]
}
- Ret linjen med Authorization til at indeholde din API-nøgle, f.eks.: Authorization: Bearer \ - Gem filen og klik på "Send Request"-knappen, der vises over forespørgslen.

Du vil se et svar fra modellen i panelet ved siden af.

Det, der kommer retur, er i JSON-format, som du nogenlunde kan læse og forstå. Du kan ændre forespørgslen for at stille andre spørgsmål eller ændre modellen. Prøv f.eks. at ændre "deepseek/deepseek-chat-v3-0324:free" til "deepseek/deepseek-r1-0528:free" eller "mistralai/devstral-small:free" for at se, hvordan svaret ændrer sig. Nogle af modellerne er hurtigere end andre, og nogle er bedre til at forstå komplekse spørgsmål. Prøv dig frem!

Du kan finde flere modeller på OpenRouter's hjemmeside -- søg efter "free" for at finde dem, der er gratis at bruge.

Og hvis du er helt blank på nogle af de tekniske termer, så brug din favorit-chatbot til at spørge om det -- eksempelvis:

Jeg skal i gang med at tale med en LLM over HTTP og har nogle spørgsmål. 
Svar kort og præcist: Hvad er VS Code og extensions? Hvad er HTTP og de 
forskellige HTTP-kommandoer? Hvad er en HTTP-header? Hvad er et REST API, 
og hvordan fungerer det? Hvad er en API-nøgle, og hvordan bruger jeg den? 
Hvad er JSON-format?"

God fornøjelse ;)


Fil: llm-via-kode.md


created: 2025-06-21 modified: 2005-06-21 author: Michell Cronberg


Tal med en LLM via kode

Info

Denne tekst er kopieret fra et LinkedIn-opslag fra juni 2025 - derfor den lidt anderledes tone.

Så.... Jeg fik prøvet at tale med en LLM over HTTP, og det var nemt! Kan man også køre det i kode? Godt spørgsmål – og svaret er ja. Det er faktisk super nemt.

Warning

Bemærk venligst hvornår denne artikel er skrevet. AI-teknologi udvikler sig hurtigt, og det, der er sandt i dag, kan være forældet i morgen.

Sådan kommer du i gang:

  • Vælg et programmeringssprog, du kender eller gerne vil lære. Python eller JavaScript/NodeJS er et godt valg. Her kører vi med Python.
  • Installer Python fra https://python.org
  • Opret en gratis konto hos OpenRouter (https://openrouter.ai) og skab en API-nøgle
  • Gem nedenstående kode (find den evt også her) i en fil, fx talk_to_llm.py:
import requests

url = "https://openrouter.ai/api/v1/chat/completions"
api_key = "din nøgle her"  # Erstat med din OpenRouter API-nøgle
headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json"
}
system_prompt = "Du er en erfaren fysiklærer. Svar kort og præcist, målrettet børn fra 10-15 år."

print("Jeg er en erfaren fysiklærer og kan hjælpe dig med at forstå verden omkring dig.")
print("Spørg mig om noget, du undrer dig over!\n")

spm = input("Hvad vil du spørge om? ")

data = {
    "model": "google/gemma-3-27b-it:free",
    "messages": [
        { "role": "system", "content": system_prompt },
        { "role": "user", "content": spm }
    ]
}

response = requests.post(url, headers=headers, json=data)
print("\nSvar fra modellen:\n")
print(response.json()["choices"][0]["message"]["content"]) 

Åbn en kommandoprompt (eller terminal) og kør koden med:

python talk_to_llm.py

Du får nu svar direkte fra modellen – i tekstformat.

Ligesom i det tidligere eksempel kan du ændre modellen i data-variablen for at prøve forskellige modeller – prøv dig frem!

Og hvis du er helt ny i programmering og har spørgsmål, så prøv at spørge din chatbot noget i stil med:

Jeg prøver mig lidt frem med noget kode og LLM og har ikke nogen erfaring - 
hjælp mig lige med følgende spørgsmål: 

- Hvad er Python, og hvad kan jeg bruge det til?
- Hvordan installerer jeg Python på min computer?
- Hvad er en terminal, og hvordan bruger jeg den?
- Jeg fatter ikke koden og har ingen erfaring med programmering – 
forklar mig den linje for linje. Her er koden ... (indsæt din kode)
- Hvad hvis der sker en fejl i min Python-kode – hvordan kan jeg finde ud af, 
hvad der er galt?
- Jeg synes, jeg har læst et sted, at man aldrig må gemme sin API-nøgle i 
koden - hvorfor er det? Og hvad kan jeg gøre i stedet?
- Hvad er NodeJS, og kan jeg bruge det i stedet for Python til at tale med 
en LLM?

God fornøjelse ;)


Fil: llm-via-kode2.md


created: 2025-06-24 modified: 2025-06-24 author: Michell Cronberg


Tal med en LLM via kode – nu med hukommelse

Info

Denne artikel bygger videre på Tal med en LLM via kode og viser, hvordan du kan føre en sammenhængende samtale – hvor modellen husker, hvad I allerede har talt om.

Det er rigtig smart at kunne få et svar fra en LLM i terminalen – men endnu smartere er det, når du kan føre en samtale med den. Det betyder, at du kan stille opfølgende spørgsmål og få svar, der bygger videre på tidligere svar. Men det sker ikke automatisk - en LLM har ikke hukommelse. Den kan ikke huske, hvad I talte om før, medmindre du fortæller den det.

Her er et eksempel på, hvordan det kan se ud uden hukommelse:

Spørgsmål til modellen:
Hvad er tyngdekraft?
Svar fra modellen:
Tyngdekraft er den kraft, som trækker alle ting mod Jorden...
Spørgsmål til modellen:
Hvad på månen?
Svar fra modellen:
Jeg forstår ikke spørgsmålet. Kan du uddybe?

Med hukommelse bliver samtalen mere naturlig, fordi modellen får hele historikken med.

Eksempel:

Spørgsmål til modellen:
Hvad er tyngdekraft?
Svar fra modellen:
Tyngdekraft er den kraft, som trækker alle ting mod Jorden...
Spørgsmål til modellen:
Hvad på månen?
Svar fra modellen:
På Månen er tyngdekraften cirka 1/6 af Jordens, så du vejer mindre...

Så de tidligere svar er ikke glemt, og modellen kan give et relevant svar på det nye spørgsmål.

Det er ret simpelt at implementere hukommelse i din kode, og det kræver ikke, at du bruger en database eller noget avanceret. Det handler om at gemme samtalens historik i en liste, som du så sender med hver gang, du spørger modellen. Der er dog nogle udfordringer:

  • Modellens hukommelse er begrænset. Hvis samtalen bliver meget lang, mister modellen kontekst fra starten.
  • Du skal selv styre hukommelsen. Det giver fleksibilitet, men kræver lidt ekstra kodearbejde.
  • Gem konteksten, hvis du vil kunne fortsætte samtalen senere. Du kan fx gemme messages i en fil.

Her er eksemplet fra tidligere, udbygget med hukommelse.

Først lidt praktisk

Vi bruger stadig Python og OpenRouter, men denne gang:

  • Gemmer vi din API-nøgle i en .env-fil (så den ikke ligger i koden)
  • Udbygger samtalen løbende med en messages-liste
  • Gør det muligt at afslutte med :quit

Installer først Python-pakken python-dotenv:

pip install python-dotenv

Opret derefter en .env-fil i samme mappe som din Python-kode:

OPENROUTER_API_KEY=sk-abc123...din nøgle her...
  • Gem følgende som talk_to_llm_with_memory.py:
import requests
import os
from dotenv import load_dotenv

load_dotenv()
api_key = os.getenv("OPENROUTER_API_KEY")

url = "https://openrouter.ai/api/v1/chat/completions"
headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json"
}

system_prompt = "Du er en erfaren fysiklærer. Svar kort og præcist, målrettet børn fra 10-15 år."

messages = [
    { "role": "system", "content": system_prompt }
]

print("Jeg er en erfaren fysiklærer og kan hjælpe dig med at forstå verden omkring dig.")
print("Skriv ':quit' for at afslutte.\n")

while True:
    spm = input("Hvad vil du spørge om? ")

    if spm.strip().lower() == ":quit":
        print("Tak for samtalen!")
        break

    messages.append({ "role": "user", "content": spm })

    response = requests.post(url, headers=headers, json={
        "model": "google/gemma-3-27b-it:free",
        "messages": messages
    })

    svar = response.json()["choices"][0]["message"]["content"]
    print("\nSvar fra modellen:\n", svar, "\n")

    messages.append({ "role": "assistant", "content": svar })
  • Kør koden:
python talk_to_llm_with_memory.py

Forklaring af koden

Husk at bruge din favorit-chatbot til at stille spørgsmål om koden, hvis du er i tvivl. Det gælder også, hvis du hellere vil kode i et andet sprog som JavaScript, C# eller Go.

God fornøjelse!


Fil: memory.md


created: 2025-05-19 modified: 2025-05-19 author: Michell Cronberg


Når chatbots husker

Når vi taler om chatbots i en professionel IT-kontekst, handler det efterhånden om meget mere end at få gode svar på enkeltstående spørgsmål. Moderne chatbots kan både huske, kalde eksterne systemer og slå op i virksomhedens dokumenter -- alt sammen for at levere præcise og tilpassede svar.

Warning

Bemærk venligst hvornår denne artikel er skrevet. AI-teknologi udvikler sig hurtigt, og det, der er sandt i dag, kan være forældet i morgen.

Tilpassede instruktioner

De fleste chatbots -- herunder eksempelvis både Claude og ChatGPT -- giver dig mulighed for at tilpasse deres opførsel via prædefinerede instruktioner. Du kan typisk fortælle dem både hvad de skal vide om dig, og hvordan du ønsker svar. Instruktionerne kan være globale for alle samtaler eller knyttes til specifikke projekter (samlinger af relaterede chats og dokumenter).

Her er et eksempel på en instruktion, der kan gøre svar langt bedre:

Du er min hjælpsomme, professionelle og tilgængelige chatbot-assistent.

Jeg er en yngre kvindelig program manager i IT-branchen med teknisk 
forståelse, men jeg er ikke udvikler.

Jeg foretrækker korte, klare og venlige svar -- og altid på dansk. Du må 
gerne bruge en let og uformel tone, uden at være fladpandet eller overfladisk.

Jeg interesserer mig især for:

* samarbejde i softwareudvikling (scrum, agil metode, produktledelse)
* UX og brugerrejser
* AI og automatisering i praksis
* værktøjer som Notion, Slack, Jira og GitHub
* hvordan man får teams til at fungere bedre

Når du svarer:

* vær konkret og brug gerne eksempler eller analogier
* gør tekniske ting nemme at forstå og relater dem til min rolle
* hold det kort, men giv mig gerne mulighed for at spørge ind

og vigtigst: vær ikke medløber. Hvis mit spørgsmål er upræcist, mangler viden 
eller virker forkert, så sig det -- venligt men ærligt -- og hjælp 
mig på rette spor.

Bemærk især ønsket om, at chatbotten ikke skal være medløber. Det strider typisk mod, hvordan mange modeller er trænet, men det gør svarene langt mere brugbare.

Det kan se avanceret ud, men du kan sagtens få chatbotten til at hjælpe dig med at skrive den perfekte system prompt. Prøv fx at skrive:

Jeg vil gerne have en system prompt til en AI-assistent, der passer til 
mig. Stil mig nogle spørgsmål, så du kan forme prompten rigtigt. Spørg 
fx ind til min rolle, hvilket sprog og tone jeg foretrækker, hvilke 
emner jeg arbejder med, og hvordan jeg gerne vil have, at assistenten 
svarer (fx kort, kritisk, teknisk, pædagogisk osv.). Vær konkret og 
hjælp mig med at få det hele med.

Langtidshukommelse og sammenhængende kontekst

Ud over instruktioner kan mange chatbots gemme data fra tidligere samtaler via en indbygget hukommelsesfunktion. Denne hukommelse kan normalt slås til og fra -- og du kan slette den, hvis du vil starte forfra.

Det åbner for en helt ny type samarbejde med din chatbot. I stedet for at starte forfra hver gang, kan du opbygge et længerevarende samarbejde, hvor assistenten lærer dine præferencer, projekter og arbejdsmetoder at kende. Du kan fx bruge det til idéudvikling over tid, til at planlægge et større projekt i faser, eller til at få sparring på dine arbejdsrutiner og vaner. Jo mere kontekst chatbotten har, jo mere målrettede og relevante bliver dens forslag.

Iøvrigt - og bare for sjov - hvis du har brugt en chatbot over længere tid med hukommelsen aktiveret, kan du prøve noget i stil med dette:

Baseret på alt du ved om mig: Beskriv brutalt ærligt, hvem jeg er - mine 
styrker, svagheder, mønstre og blinde vinkler. Hvor udmærker jeg mig? Hvor 
spilder jeg tid? Hvad holder mig tilbage? Giv konkrete og ærlige råd til 
forbedring -- også dem, der kan være svære at høre.

Hvis chatbotten har nok baggrundsviden om dig, kan den overraske dig med dyb indsigt. Husk dog, at den stadig gætter - især ved en kort hukommelse - så brug svarene som pejlemærker, ikke som sandheder.

Ekstra kontekst og eksterne kilder

Ud over instruktioner og hukommelse kan du også berige din chatbot med ekstra materiale -- fx dokumenter, billeder, videoer eller lydfiler. Mange platforme understøtter integration med tjenester som Google Drive, OneDrive og GitHub, så chatbotten kan hente og forstå dit indhold direkte.

Et godt eksempel er Google NoteBookLM, som bygger på ideen om at trække viden fra filer -- fx websider, dokumenter og videoer -- og bruge det som udgangspunkt for svar. NoteBookLM er netop lanceret på dansk og kan endda generere podcastlignende samtaler mellem to virtuelle værter (på dansk), der diskuterer dine materialer.

Nogle ChatBots er designet til primært at arbejde med data - eksempelvis Googles Workspace som nu inkluderer Gemini med adgang til alle dine mails og kalender informationer. Det er ret effektivt at foretage en søgning som "Find alle mails fra og til Lars i 2025 omkring køb af virksomheden xxx, og skab et overblik over det samlede indhold i punktform".

Kort om embeddings og RAG

Til slut, og mest for at forberede kommende artikler: Når man arbejder med avancerede chatbots, støder man på begreber som embeddings, vektorer og RAG.

Embeddings er en metode til at omsætte tekst til tal -- nærmere bestemt vektorer, som fanger tekstens betydning. Sætninger med lignende mening får vektorer, der ligner hinanden. Det betyder, at man kan søge i tekst baseret på mening frem for blot ord. Hele dokumenter kan oversættes til embeddings og gemmes i en database, så chatbotten kan finde de mest relevante dele, når du stiller et spørgsmål.

RAG, som står for Retrieval-Augmented Generation, bygger ovenpå denne teknik. Først hentes relevante tekstuddrag baseret på semantisk lighed -- og derefter bruges de som kontekst for det svar, chatbotten genererer. Det giver mere præcise og faktabaserede svar -- og reducerer risikoen for, at modellen "hallucinerer", altså finder på noget.

Udfordring(er)

Her er et par udfordringer, du kan overveje:

Start med at tilpasse din foretrukne chatbot med dine egne præferencer og din arbejdsstil. Brug eksemplet ovenfor som skabelon -- eller lad chatbotten stille dig spørgsmål, så den selv kan hjælpe med at skræddersy en god system prompt. Du vil hurtigt opleve, at svarene bliver mere præcise og relevante.

Dernæst kan du (bør du?) prøve Google's NoteBookLM: Upload et par dokumenter eller YouTube videoer om et konkret emne, og få modellen til at lave en opsummering, en mindmap eller en samtale i podcastformat. Det giver et spændende indblik i, hvordan indlæring og forståelse kan se ud i fremtiden (eller... det er jo allerede nu).


Fil: perplexity.md


created: 2025-07-12 modified: 2025-07-12 author: Michell Cronberg


Perplexity.ai – en ny slags AI-søgemaskine

Perplexity.ai er blevet et af de meget omtalte AI-værktøjer på nettet. Her får du en samlet introduktion til, hvad Perplexity.ai er, hvordan den adskiller sig fra andre AI-assistenter som ChatGPT og Claude, hvorfor den måske er vigtig for dig.

Hvad er Perplexity.ai?

Perplexity.ai er en avanceret AI-assistent, der kombinerer egenskaberne fra en chatbot og en søgemaskine. Du kan stille spørgsmål om alt fra forskning til sport, og få et sammenfattet, kildebaseret svar – ofte med links, så du selv kan tjekke fakta. I modsætning til klassiske søgemaskiner, hvor du selv skal klikke dig gennem flere sider, får du her svaret serveret direkte.

Den er anderledes end andre AI-assistenter, fordi den:

  • Live web-søgning: Perplexity.ai søger løbende på nettet og kan derfor give svar på helt aktuelle emner – fx breaking news, teknologi eller forskning.
  • Kildehenvisninger: Svarene er næsten altid ledsaget af kilder, så du kan vurdere troværdigheden og dykke dybere.
  • Brugervenlighed: Du får et klart, sammenfattet svar, og kan stille opfølgende spørgsmål direkte i chatten.
  • Transparens: Perplexity.ai er designet til at minimere misinformation og gøre det tydeligt, hvor informationen stammer fra.

Perplexity.ai gør det nemt og effektivt at finde troværdig information, uanset om du er studerende, journalist, forsker eller blot nysgerrig. I stedet for at bruge tid på at lede efter svar på mange forskellige hjemmesider, får du hurtigt et sammenfattet svar med dokumentation og kilder samlet ét sted. Denne tilgang sparer tid og gør research mere overskuelig.

Samtidig repræsenterer Perplexity.ai en ny måde at søge viden på, hvor dialog og gennemsigtighed omkring kilder er i centrum. Det gør det lettere at vurdere informationens troværdighed og giver mulighed for at dykke dybere ned i emner gennem opfølgende spørgsmål.

Her er et eksempel på et typisk spørgsmål, du kan stille Perplexity.ai som vil give et noget anderledes svar end en traditionel chatbot:

Perplexity
Perplexity

Læg mærke til linkene i svarene, som giver dig mulighed for at tjekke kilderne direkte. Dette er en af de store styrker ved Perplexity.ai, da det hjælper med at sikre, at informationen er korrekt og opdateret.

Warning

Perplexity.ai er ikke altid korrekt. Den kan finde på information eller give forkerte svar, så det er vigtigt at dobbelttjekke kritiske oplysninger. Se afsnittet om udfordringer og begrænsninger nedenfor.

Omkostninger og abonnement

Du kan bruge Perplexity.ai gratis med de fleste basisfunktioner, hvilket gør det let at komme i gang uden at skulle betale. For avancerede funktioner, hurtigere svartider, flere søgninger pr. dag og adgang til de nyeste og stærkeste AI-modeller, tilbyder Perplexity.ai et betalt Pro-abonnement. Prisen ligger typisk på niveau med andre AI-tjenester (pt. 20 USD om måneden), men kan variere afhængigt af kampagner.

Funktioner og værktøjer

Udover den grundlæggende søgemaskine har Perplexity.ai udviklet flere nye værktøjer, der gør den endnu mere alsidig:

  • Søgning i flere områder: Perplexity kan søge i både almindelige webkilder, akademiske artikler, sociale medier og mere.
  • Perplexity Assistant: Dette er en AI-assistent til din telefon (Android og iOS), der blev lanceret i januar 2025. Den kan hjælpe dig med mange ting via stemmekommandoer – fra at svare på simple spørgsmål til at sætte påmindelser i din kalender. Den kan endda bruge din telefons kamera til at give dig svar om det, du ser omkring dig.
  • Comet Browser: I juni 2025 lancerede Perplexity en helt ny AI-drevet webbrowser kaldet Comet. Den er designet til at gøre din browsing smartere ved at integrere Perplexity's AI direkte i browseren. Du kan bede den om at opsummere websider, sammenligne information eller oversætte tekst, uden at skulle skifte faneblad. Den har også en indbygget reklameblokering og er bygget på Chromium, så den virker med dine eksisterende Chrome-udvidelser.
  • API-løsninger for udviklere: Perplexity tilbyder også en 'Sonar API', som gør det muligt for udviklere at indbygge Perplexity's AI-funktioner i deres egne apps og tjenester.
  • Samarbejdsfunktioner (Spaces): Med 'Spaces' kan teams arbejde sammen om projekter. Her kan I organisere research, dele spørgsmål og endda uploade filer, som Perplexity så kan analysere for hele teamet.

Ejerkreds og historie

Perplexity.ai blev grundlagt i 2022 af tidligere ingeniører fra OpenAI, Google og Meta. Virksomheden har hovedkontor i San Francisco og er finansieret af investorer som NEA, Nvidia og Jeff Bezos gennem Bezos Expeditions. Fra begyndelsen har visionen været at udvikle en AI, der forener det bedste fra søgemaskiner og chatbots, samtidig med at der lægges vægt på gennemsigtighed omkring kilder.

Udfordringer og begrænsninger

Selvom Perplexity.ai er et kraftfuldt værktøj, er det vigtigt at være opmærksom på nogle udfordringer og begrænsninger.

Perplexity.ai står over for juridiske og etiske spørgsmål, herunder anklager fra store medievirksomheder som BBC og The New York Times for at bruge deres indhold uden tilladelse til at træne AI-modeller og generere svar. Derudover har undersøgelser vist, at Perplexity ikke altid respekterer regler for indsamling af indhold fra hjemmesider, og de er også blevet sagsøgt for varemærkekrænkelse.  

Ligesom andre AI-værktøjer kan Perplexity.ai nogle gange 'hallucinere' – det vil sige, den kan finde på information eller kilder, der ikke findes, eller give forkerte citater. Den bruger også nogle gange få kilder, og kvaliteten af disse kilder bliver ikke altid tjekket grundigt. Der er også rapporteret om en sikkerhedsbrist i forbindelse med uploadede billeder, og nogle virksomheder forbyder brugen af Perplexity AI i deres netværk.  

Disse punkter viser, at selvom AI-teknologi er spændende, er der stadig vigtige spørgsmål om etik, lovgivning og nøjagtighed, som AI-virksomheder arbejder med.


Fil: prompt.md


created: 2025-05-12 modified: 2005-05-12 author: Michell Cronberg


Kunsten at stille det rigtige spørgsmål – en introduktion til promptgenerering

Vi har alle prøvet det. Man stiller et spørgsmål til en AI-model, og svaret er enten for vagt, for langt, uden struktur -- eller bare ikke det, man havde brug for. Ofte er løsningen ikke en bedre model, men en bedre prompt.

Warning

Bemærk venligst hvornår denne artikel er skrevet. AI-teknologi udvikler sig hurtigt, og det, der er sandt i dag, kan være forældet i morgen.

Og hvad er en prompt så? Det er ganske enkelt det input, du skriver til en AI-model -- spørgsmålet, opgaven, anvisningen. Jo mere præcis, struktureret og kontekstbevidst den er, jo bedre bliver svaret. Lidt som med Google: Du får noget andet ud af at søge på

skatteregler

end på

hvordan beskattes aktieudbytte for privatpersoner i Danmark i 2025?

Men med AI er forskellen endnu større -- og effekten endnu mere kraftfuld.

Prompt Engineering

Det engelske begreb prompt engineering lyder lidt teknisk, men det dækker over noget helt lavpraktisk: At formulere et input, der får modellen til at give det bedst mulige svar. Det kaldes "engineering", fordi det ofte er en proces med at eksperimentere, justere og lære undervejs. Du starter måske med en simpel prompt, men justerer den, når du ser resultatet. Det er en slags trial-and-error, hvor man iterativt forbedrer sin formulering for at få præcise, brugbare eller kreative svar. I nogle situationer består de første interaktioner med modellen ikke i at stille selve opgaven, men i at diskutere og afklare, hvordan man bedst formulerer prompten. Det kan være nødvendigt at starte med at beskrive sin intention, forklare konteksten eller bede modellen om at hjælpe med at skrive den rigtige prompt, før man overhovedet går i gang med den egentlige opgave. Det er en nyttig tilgang, især i mere komplekse eller åbne problemstillinger, hvor en simpel prompt ikke er nok.

Token og kontekst

En prompt består af noget, der kaldes tokens. En token er en lille bid tekst -- det kan være et helt ord, et delord eller blot et tegn, afhængigt af sproget og modellen. AI-modeller som GPT arbejder ikke med hele sætninger, men med disse tokens én ad gangen.

Det betyder også, at længden og indholdet af din prompt har stor betydning. Skriver du for lidt, mangler modellen kontekst -- altså baggrund og retning til at forstå, hvad du vil opnå. Den svarer så ud fra generelle antagelser, som ikke altid rammer plet. Omvendt, hvis du skriver for meget, kan du risikere at overvælde modellen -- eller forvirre den med for mange modsatrettede signaler.

Modellens svar kan også være påvirket af konteksten fra tidligere samtaler. Moderne modeller har et langt større kontekstvindue end tidligere, hvilket betyder, at de kan huske og anvende mere information fra tidligere interaktioner. Det er super smart, fordi modellen dermed kan "huske" relevant baggrundsinformation og skabe mere sammenhængende svar. Men det kan også være en ulempe: Hvis der ligger fejl, misforståelser eller irrelevante oplysninger tidligere i samtalen, kan det farve og forvride det svar, du får senere. Det er derfor en god idé at være opmærksom på, hvad modellen "tror den ved" fra tidligere -- især i længere samtaler.

En god prompt rammer balancen: nok information til at give modellen en klar ramme og rolle, men ikke så meget, at den mister fokus.

Når en prompt er for simpel

Man kan godt være fristet til at skrive en helt simpel prompt og bare antage, at modellen forstår præcis, hvad der menes. Men det kan være en stor fejl. Modellen er ikke en tankelæser -- den er en slags kollega, der ved enormt meget, men som ikke nødvendigvis kender formålet med det, du beder om. Den gætter ud fra dine ord, og hvis din prompt er for vag eller uklar, kan svaret blive misvisende eller irrelevant. Det er derfor vigtigt at være eksplicit: fortæl modellen, hvilken rolle den har, hvad formålet er, og hvordan du ønsker svaret præsenteret.

Et sjovt og lærerigt eksempel på vigtigheden af præcise instruktioner findes i en video, hvor en far forsøger at smøre en peanutbutter-mad ud fra sine børns mundtlige anvisninger. Hver gang børnene ikke er helt præcise -- f.eks. glemmer at sige, at låget skal skrues af, eller at brødet skal pakkes ud -- følger faren deres instruktioner bogstaveligt og ender med absurde resultater. Jeg bruger ofte klippet i undervisningen som introduktion til programmering, men det passer mindst lige så godt som metafor for promptgenerering: AI-modeller gør ikke det, du mener, men det, du siger.

AI-modeller er lidt på samme måde: de gør præcis det, du siger -- ikke nødvendigvis det, du mente. AI-modeller er dog meget bedre end en traditionel CPU, som kun kan følge helt faste og entydige instruktioner. En AI-model har en vis evne til at fortolke, sammenligne og ræsonnere -- men kun inden for rammerne af det, du giver den. Den kan ikke læse dine tanker eller forstå den opgave, du vil løse, medmindre du forklarer det tydeligt. Det kræver stadig, at du er præcis og struktureret i din prompt.

Råd til at skrive (bedre) prompts

Så en prompt kræver præcision og du kan forbedre dine prompts markant med nogle få teknikker. Vi kan tage udgangspunkt i denne prompt:

Forklar forskellen mellem LLM og GPT.

Den virker umiddelbart tydelig -- men den giver ikke modellen nogen retning, rolle eller information om målgruppen. Den specificerer heller ikke, hvordan svaret skal struktureres. Resultatet kan blive for generelt, for teknisk eller ganske enkelt ikke brugbart i den kontekst, du havde tænkt dig.

Brug roller

AI'en spiller gerne en rolle -- og det er en af de mest effektive teknikker, når du vil have bedre og mere målrettede svar. Ved at sætte modellen i en bestemt rolle, fx som "AI-instruktør", "erfaren udvikler" eller "juridisk rådgiver", hjælper du den med at finde den rette vinkel, sprogbrug og fokus. Det gør prompten mere kontekstuel, og modellen kan bedre prioritere informationer og formulere svar, der matcher det forventede niveau og formål.

Du er en erfaren AI-instruktør: Forklar forskellen mellem LLM og GPT.

Bed om struktur

AI'er arbejder bedst, når de får en tydelig ramme for, hvordan de skal strukturere deres svar. Hvis du blot skriver et spørgsmål uden at angive ønsket svarform, kan du få noget langt, kringlet eller upræcist tilbage. Men hvis du beder om punktform, tabel, opsummering eller fx en analogi, så former AI'en automatisk sit svar efter det ønskede format -- og det gør det både nemmere at læse og hurtigere at bruge svaret.

Du er en erfaren AI-instruktør: Forklar forskellen 
mellem LLM og GPT. Skriv svaret i punktform.

Målgruppe

Det er vigtigt at tænke over, hvem svaret er tiltænkt -- altså målgruppen. En AI-model kan formulere sig som en professor, en pædagog, en tekniker eller en storyteller, men det afhænger helt af, hvordan du instruerer den. Hvis du f.eks. skal forklare et begreb til en person uden teknisk baggrund, skal du bede modellen bruge et enkelt sprog, undgå fagudtryk og eventuelt bruge en analogi. Jo mere præcis du er omkring målgruppen, jo bedre rammer svaret.

Du er en erfaren AI-instruktør: Forklar forskellen mellem LLM 
og GPT for en leder uden det store kendskab til AI. Skriv 
svaret i punktform.

Eksempler og analogier

Nogle gange kan det være en fordel at bede om eksempler og analogier. Det hjælper med at gøre komplekse emner mere forståelige og relaterbare, især hvis målgruppen ikke er teknisk. En analogi fungerer som en slags mental genvej -- den forbinder noget nyt og abstrakt med noget velkendt. Eksempler gør desuden svaret mere konkret og anvendeligt -- og AI-modeller er gode til at generere relevante og illustrative eksempler, når de bliver bedt om det.

Du er en erfaren AI-instruktør: Forklar forskellen mellem LLM 
og GPT for en leder uden det store kendskab til AI. Skriv svaret
i punktform og afslut med en huskeregel, og afslut gerne med en 
metafor til at forklare forskellen.

Et generelt råd man hører flere og flere steder er, at forsøge så vidt det er muligt at undgå stave- og formateringsfejl i sin prompt. Jo mere klar man er i sin kommunikation jo bedre. Det gælder også brugen af store bogstaver og udråbstegn. Nogle modeller reagerer ret tydeligt på eksempelvis "HUSK!!! ...".

Kan man bruge AI til at tale med AI?

Man kunne vel ikke forestille sig at bruge AI til at hjælpe med at skrive prompts til AI? Faktisk er det en rigtig god idé! En model som ChatGPT kan hjælpe dig med at forbedre dine egne prompts. Du kan fx skrive:

Du er en avanceret prompt ingeniør. Hjælp mig med at forbedre denne 
prompt: 'Forklar forskellen mellem LLM og GPT'. Stil mig spørgsmål 
hvis du mangler mere information til at gøre prompten så effektiv 
som muligt.

På den måde bliver AI'en ikke bare en, du taler til, men også en aktiv sparringspartner, der hjælper dig med at formulere dig bedre -- både teknisk og pædagogisk. Svaret kunne se således ud (MS CoPilot - men prøv selv i andre modeller):


God idé! En effektiv prompt bør være klar, specifik og målrettet, så AI'en kan levere et præcist og brugbart svar. For at forbedre din prompt, har jeg et par spørgsmål:

1 Målgruppe: Skal svaret være teknisk detaljeret (til eksperter) eller simpelt og forståeligt (til ledere eller begyndere)?

2 Format: Foretrækker du et svar i punktform, en kort opsummering eller en længere forklaring?

3 Anvendelse: Skal svaret være generelt informativt, eller skal det relatere til en specifik kontekst (f.eks. AI i virksomheder, akademiske miljøer eller softwareudvikling)?

4 Metaforer eller analogier: Vil du gerne have en letforståelig metafor, der gør forskellen mere intuitiv?

5 Eksempler: Ønsker du praktiske eksempler på anvendelse af LLM og GPT?

6 Længde: Skal svaret være kort (2-3 sætninger), mellem (1-2 afsnit) eller dybdegående (flere afsnit med detaljer)?

Når du besvarer disse spørgsmål, kan jeg hjælpe dig med at formulere den mest effektive prompt for dit behov! 😃


Det er en lidt meta-agtig øvelse, men ekstremt nyttig - og god til at lære fra. Man kalder også denne type prompt for en meta- eller template prompt.

Husk at en prompt kan blive opfattet på meget forskellig måde af forskellige modeller -- også inden for samme udbyder. En prompt, der virker perfekt i én model, kan give et helt andet (og måske dårligere) svar i en anden. Det skyldes forskel i træningsdata, arkitektur og hvordan den enkelte model vægter signaler som tone, struktur og intention. Nogle modeller forstår bedre kontekst i lange prompts, mens andre er mere præcise i korte, direkte instruktioner.

Brugerdefinerede instruktioner

Nogle chatbots giver dig mulighed for at gemme eller anvende prædefinerede instruktioner. Det gør det meget nemmere at prompte effektivt, især hvis du ofte arbejder med samme type opgaver eller har særlige præferencer for tone, format eller målgruppe.

Eksempel på en brugerdefineret instruktion kunne være:

Jeg arbejder med dokumentation i en e-commerce virksomhed og 
skriver altid på engelsk. Jeg foretrækker korte og klare svar 
med teknisk præcision, og jeg har brug for, at alle forklaringer 
kan genbruges i onboardingmateriale og vidensdatabaser. Svar skal 
være struktureret i punktform, og undgå lange afsnit eller 
unødvendige metaforer. Brug gerne terminologi fra softwareudvikling 
og digital handel.

Med en sådan brugerdefineret instruktion forstår modellen straks, hvem du er, hvad du skal bruge svaret til, og hvordan det skal præsenteres. Uden en prædefineret instruktion skal du muligvis gentage de samme oplysninger i hver prompt, hvilket både er ineffektivt og øger risikoen for variationer i svarene. Ved at gemme instruktionerne ét sted sikrer du en mere ensartet og målrettet respons. Det svarer lidt til at give din AI-assistent et fast onboarding-dokument, så du ikke skal starte forfra hver gang.

Fremtid og udvikling

Prompt engineering er en vigtig færdighed lige nu, fordi det hjælper os med at få bedre, mere relevante svar fra generative AI-modeller. Men området udvikler sig super hurtigt, og modellerne bliver stadig bedre til at forstå, hvad vi mener -- selv hvis vi ikke formulerer os helt præcist. I fremtiden vil modellerne sandsynligvis kunne hjælpe endnu mere aktivt med at skrive prompts eller afkode vores intentioner, uden at vi skal specificere alting manuelt. Det betyder, at fokus gradvist rykker: Fra at bruge tid på at finjustere den perfekte formulering til i stedet at blive skarpe på at definere selve problemet -- altså hvad vi vil opnå, og hvorfor. Allerede i dag kan AI som nævnt assistere os i promptarbejdet ved at stille opklarende spørgsmål eller komme med forslag til forbedringer.

Udfordring

Du skal skrive en (meta) prompt til en AI-model som skal hjælpe med at skrive en prompt til at skrive artikler om det nye T-shirt-brand til et blad til kommende konferencer, blade, website mv. Du har modtaget følgende fra salgsafdelingen:

Vi har lanceret et nyt T-shirt-brand med fokus på bæredygtighed og urban stil. Det er tænkt som et moderne brand med et unikt visuelt udtryk, der taler til unge voksne i byerne -- både modebevidste og miljøbevidste. Produktet er lavet af genanvendte materialer, og dele af overskuddet går til grønne initiativer.

Skriv en prompt som for AI modellen til at hjælpe med at skrive den endelige prompt ved at stille spørgsmål.

Her er et eksempel men prøv selv at lege med det:

Du er en professionel tekstforfatter med særlig erfaring inden for 
markedsføring. Din opgave er at hjælpe mig med at udforme en præcis 
prompt til en AI-model, der skal skrive en artikel til et magasin i 
forbindelse med en kommende konference om vores nye T-shirt-brand.

Her er salgsafdelingens input:

Vi har lanceret et nyt T-shirt-brand med fokus på bæredygtighed og urban stil. 
Det er tænkt som et moderne brand med et unikt visuelt udtryk, der taler til 
unge voksne i byerne -- både modebevidste og miljøbevidste. Produktet er lavet 
af genanvendte materialer, og dele af overskuddet går til grønne initiativer.

Start med at stille mig opklarende spørgsmål, så vi sammen kan definere:

- tone
- sprog
- ønsket artikelstruktur
- online / trykt artikel
- målgruppepræferencer
- specielle fokusområder
- eventuel begivenhed relateret til artiklen
- længde
- eventuelle visuelle eller stilistiske elementer
- andet du mener er vigtigt

Stil mig et spørgsmål af gangen og vent på svaret. Når du har alle oplysninger, 
skal du generere en færdig prompt, som jeg kan indsætte direkte i en AI-model 
for at få skrevet artikeludkastet.

Prøv det i forskellige modeller og læg mærke til hvordan flowet og resultatet er forskelligt.

I den virkelige verden vil en model allerede (sikkert gennem predefinerede instruktioner eller en agent) vide noget om virksomheden, dens tilgang til bæredygtighed, produktion og andre informationer. Har den ikke det begynder den at gætte når den skriver artiklen.


Fil: vibe-coding.md


created: 2025-06-06 modified: 2005-06-06 author: Michell Cronberg


Kom i gang med "Vibe" coding

I de forrige artikler har vi set på en del teoretiske aspekter af AI, og dækket begreber som LLM'er, prompt engineering, RAG, MCP, kontekst og meget mere. Jeg tænkte, at det nu var tid til at se på, hvordan man kan bruge AI i praksis og afprøve "Vide" coding.

Warning

Bemærk venligst hvornår denne artikel er skrevet. AI-teknologi udvikler sig hurtigt, og det, der er sandt i dag, kan være forældet i morgen.

Du kan både læse artiklen uden at have den store erfaring med udvikling bare for at få en forståelse af emnet, eller du kan læse den som en udvikler, der gerne vil have nogle konkrete eksempler på, hvordan AI kan bruges i hverdagen.

Bemærk, artiklen er skrevet i juni 2025, og der kan være sket ændringer i de værktøjer, der nævnes.

Valg af værktøjer

Der findes mange forskellige udviklingsmiljøer, og det er nærmest en religion, hvilket der er bedst -- men vi er nødt til at begrænse os til en enkelt platform for at kunne vise nogle konkrete eksempler. Nogle nyere værktøjer er designet til at integrere AI direkte i udviklingsprocessen, herunder Windsurf (for nylig købt af OpenAI), Cursor, Void (open source-alternativ), mens andre kan udvides med plugins eller extensions.

Visual Studio Code

De fleste er dog bygget på Visual Studio Code (VSC), som er et open source-udviklingsmiljø fra Microsoft. VSC har et væld af udvidelser, der gør det muligt at integrere AI i din udviklingsproces. Så det er her, vi vil fokusere i denne artikel. Det er gratis at bruge og tilgængeligt på alle platforme (Windows, Mac og Linux).

Github Copilot

Efter installation af CSV er næste skridt er at integrere AI i udviklingsmiljøet -- og her er flere muligheder. Det nemmeste er at oprette en gratis konto hos Github, som tilbyder en AI-funktion kaldet Copilot, der kan hjælpe med at skrive kode. Copilot har en gratis version, som inkluderer en del forespørgsler pr. måned til modeller fra OpenAI, Anthropic, OpenRouter (en "model portal" med mange modeller -- herunder DeepSeek) og lokale modeller (via Llama), og det er en god måde at komme i gang på.

Hvis du skal bruge Copilot i et professionelt miljø, kan du opgradere til en betalt version, der giver dig flere forespørgsler og adgang til flere modeller. I skrivende stund koster det $10 pr. måned, og det er en god investering, hvis du arbejder med kode. Med en konto på Github og Copilot installeret i VSC mangler du blot at installere en extension i VSC, der hedder "GitHub Copilot".

Mere skal der ikke til for at prøve det af, og det er gratis og nemt at installere. Når du bliver lidt mere erfaren, kan du også overveje at installere andre extensions, der kan hjælpe dig med at skrive bedre kode -- herunder den superpopulære "Cline", der kan hjælpe dig med at skrive kode hurtigere og mere effektivt.

Brug af Github Copilot

I VSC er der i skrivende stund flere måder at bruge Copilot på:

  • Automatisk: Når du skriver kode, kan Copilot foreslå linjer eller blokke af kode, der passer til det, du skriver.
  • Kommentar: Skriv en kommentar som fx // Skriv en funktion, der beregner summen af to tal, og Copilot genererer koden.
  • Inline: Højreklik og brug Copilot til at generere kode via en prompt.
  • Ask/Edit/Agent: Et separat vindue, hvor du kan stille spørgsmål, rette kode og få AI'en til at oprette eller ændre filer.

Det er især den sidste funktion, der er mest brugt, fordi den for nylig har integreret en Agent-mode.

Eksempel "app"

For at illustrere, hvordan du kan bruge Copilot i praksis, kan du lave et eksempel på en simpel web app, der kan hente og vise data fra en API -- her alle kommuner i Danmark.

  • Opret en ny mappe til dit projekt, og åbn den i VSC.
  • Åbn Copilot Chat-funktionen og vælg Agent-mode og skriv:
Opret en simpel HTML-applikation med følgende krav:
- Brug en separat CSS-fil (style.css) til styling
- Brug en separat JavaScript-fil (app.js) til funktionalitet
- Siden skal indeholde en knap med teksten "Hent data"
- Når man klikker på knappen, skal der hentes data fra https://api.dataforsyningen.dk/kommuner
- Data skal vises i en tabel med to kolonner: "Kode" og "Navn"
- Kommunerne skal være sorteret alfabetisk efter navn
- Brug professionel styling med CSS
  • Copilot vil nu generere en HTML-fil, en CSS-fil og en JavaScript-fil, der opfylder kravene. Når den er færdig, kan du trykke på "keep" for at beholde og gemme dem. Herefter kan du åbne HTML-filen i din browser for at se resultatet.

Min første version af app'en ser således ud:

Artikelindhold

En simple "vibe" code applikation

Hvis du vil se koden kan du finde den her

https://github.com/devcronberg/vsc-copilot-test/

og hvis du vil prøve applikationen kan du finde den her

https://devcronberg.github.io/vsc-copilot-test/

Jeg har ikke ændret noget i den kode, Copilot genererede, og hvis du prøver får du helt sikkert ikke det samme resultat som mig. Men hvis du opretter din egen applikation kan du kan fx prøve at tilrette den med:

  • Medtag regionskode i tabellen (det vil både tilrette html og js)
  • Ret farveskemaet til en moderne farvepalet baseret på Material Design (det vil tilrette css og html)
  • Gør det muligt at søge i tabellen (html og js)
  • Hvis du er udvikler, kan du bede Copilot om at optimere koden eller tilføje ny avanceret funktionalitet (måske skabe en web component af tabellen).

Det er et meget godt eksempel på "vibe coding" -- men spørgsmålet er, om en ikke-udvikler selv ville kunne skrive den oprindelige prompt (Hvad er HTML, CSS, JS, API, struktur mv.)? Jo mindre information prompten indeholder, jo mere skal Copilot gætte -- og jo mere skal du selv rette bagefter.

Jeg skrev min prompt med henblik på at få koden så tæt på det ønskede resultat som muligt. Havde den været mere uklar, kunne Copilot have genereret en Python-, React- eller C#-applikation i stedet for en simpel HTML-app.

Tricket -- især for en ikke-udvikler -- er at få hjælp til at finde ud af, hvad der egentlig skal laves, og derefter formulere en præcis prompt. Brug 10 minutter i Chat-mode med Copilot (eller Claude, ChatGPT eller en anden AI) for at finde frem til en god prompt. Det er blandt andet derfor, Cline-extensionen er så populær -- den hjælper dig med at skrive bedre prompts i Plan-mode, så du og AI'en er enige om, hvad der skal laves, inden der kodes.

MCP

Vi har før dækket begrebet MCP (Multi Context Protocol), som fx GitHub Copilot kan bruge til at integrere eksterne tjenester i sine svar. Der findes fx:

  • en GitHub MCP-server til versionsstyring
  • en Puppeteer MCP-server til web-sider og screenshots
  • en Cloudflare MCP-server til DNS og IP-adresser
  • en MCP-server til databaser
  • en MCP-server til Docker-containere
  • en MCP-server til det lokale filsystem

Hvis du vil prøve det, så start med Python MCP-serveren "mcp-server-time". Den returnerer aktuel tid (og kan konvertere mellem tidszoner). Prøv fx at spørge "Hvad er klokken i New York?".

Den er nem at installere og en god måde at komme i gang med MCP på. Herefter kan du installere andre MCP-servere, der passer til dine projekter.

James Montemagno har lavet en god introduktion:

Det er i øvrigt ret nemt at kode sine egne MCP-servere. Jeg er selv i gang med at lægge sidste hånd på en MCP-server, der kan hente data fra E-Conomics API -- så oplysninger om regnskaber, debitorer og kreditorer bliver tilgængelige direkte i en chat. MCP er en åben (og endnu ikke låst) standard, som kan integreres i mange forskellige klienter -- ikke kun GitHub Copilot.