[{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"Welcome to my portfolio site.\n","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/","section":"Forside","summary":"","title":"Forside","type":"page"},{"content":" Praktikvurderings-opgave # Denne post vedrører en opgave om at lave en praktikvurderingsprogram ved hjælp af en LLM. Hvor jeg har benyttet OpenAIs API.\nBuzzwords/centrale begreber # System-prompt # En systemprompt er en instruktion til modellen, der definerer dens rolle og adfærd.\nI denne opgave brugte jeg systemprompten til at:\ndefinere modellen som en \u0026ldquo;bedømmer\u0026rdquo; forklare hvordan vurderingen skulle foregå sikre at output blev struktureret korrekt Den fungerer ved at:\nDefinere rollen (fx \u0026ldquo;du er en underviser\u0026rdquo;) Beskrive opgaven der skal vurderes Introducere rubric\u0026rsquo;en Bestemme formatet på output En god systemprompt gør, at modellen:\nsvarer mere præcist følger strukturen undgår irrelevante svar Userprompt # Userprompten er den konkrete input, som brugeren sender til modellen.\nHer indeholdt den:\nelevens besvarelse relevante oplysninger om opgaven eventuelle ekstra instruktioner LLM-API # Et LLM API gør det muligt at sende prompts til en sprogmodel via kode.\nDet betyder at man kan:\nautomatisere vurderinger integrere AI i egne systemer bygge egne værktøjer Jeg brugte OpenAI\u0026rsquo;s API til at sende prompts og modtage svar.\nDet fungerer ved at:\nMan opretter en request i sin kode Man sender systemprompt + userprompt API\u0026rsquo;en behandler inputtet Man modtager et struktureret svar Dette gør det muligt at integrere vurderingssystemet direkte i en applikation.\nRubric # En rubric er et vurderingsskema med kriterier og karakterer.\nI denne opgave blev rubric\u0026rsquo;en brugt til at:\nstrukturere vurderingen sikre ensartet bedømmelse gøre output mere forståeligt Hvad har vi lært # Hvordan man arbejder med prompts i kode Forskellen på systemprompt og userprompt, og hvordan de bruges sammen Hvordan man bruger en LLM gennem API i praksis (integrerer en LLM i en backend) Hvordan man strukturerer output fra en model Hvordan en rubric kan bruges sammen med AI Hvordan man tænker i systemdesign med AI Hvad var svært # Få en detaljeret systemprompt og userprompt, uden at gøre den enten for generisk eller detaljeret At skrive en god systemprompt uden at gøre den for kompleks At få modellen til at følge rubric\u0026rsquo;en korrekt At få konsistente svar fra modellen At balancere mellem fleksibilitet og struktur Teknologier og værktøjer # OpenAI LLM-API Claude code Java Springboot Opsummering # I denne opgave har vi arbejdet med at bygge et system, der kan vurdere praktikopgaver ved hjælp af en LLM.\nDet har givet indsigt i:\nhvordan man arbejder med prompts hvordan man bruger API\u0026rsquo;er hvordan man strukturerer AI-output Det vigtigste takeaway er, at kvaliteten af resultatet i høj grad afhænger af prompt-designet.\nAndre noter: # Ved flere \u0026ldquo;projekter\u0026rdquo; som agenten skal have adgang til - eventuelt brug\nSingle repo Submodule repo Overvejelser\nHvordan vil vi bruge LLM Brug javalin - jeg glemte at specificere dette, så claude brugte springboot Behøver vi database Rubric struktur:\nned ad: kriterier hen ad: karaktere Erfaringer # Problemer med Python versioner i starten Overvejede at bruge Render (men fravalgt) Endte med at bruge Spring Boot i stedet for Javalin - ren dovenskab, gad ikke ændre det Maven i VS var underlig, så åbnede projektet i IntelliJ for at køre Maven og så tilbage. Processen jeg havde # I forbindelse med processen, har jeg til sidst fået claude code, til at lave en opsummering af den process den og jeg havde i forbindelse med opgaven:\nPrompt-design og procesdokumentation # Dette dokument beskriver, hvordan system- og userprompt til praktikrapport-vurderingen blev designet, hvilke valg der blev truffet undervejs, og hvorfor.\nUdgangspunkt # Tre kildefiler dannede grundlaget for rubricen:\nFil Indhold reference/krav-til-rapport.md Formelle krav til rapporten (obligatoriske elementer, omfang på max 12.000 tegn inkl. mellemrum ekskl. bilag) reference/dare-share-care.md EKs tre kerneværdier: DARE (mod og initiativ), SHARE (videndeling og fællesskab), CARE (ansvar og omsorg) reference/laeringsmaal.md Studieordningens læringsmål opdelt i Viden, Færdigheder og Kompetencer Systemprompt – rubric-design # Rolle og tone # AI\u0026rsquo;en gives rollen som en erfaren underviser på EK. Vurderingen skal være faglig, konstruktiv og konkret — hvert punkt begrundes med direkte referencer til rapporten.\nDe 6 dimensioner # Rubricen dækker alle krav fra de tre kildefiler fordelt på seks dimensioner:\nFormelle krav — er alle obligatoriske elementer til stede, og er omfanget overholdt? Læringsmål: Viden — viser den studerende viden om virksomhedens daglige drift? Læringsmål: Færdigheder — er tekniske metoder, problemvurdering, planlægning og formidling dokumenteret? Læringsmål: Kompetencer — er der eksempler på selvstændig tilegnelse af ny viden og fagligt samarbejde? DARE / SHARE / CARE — afspejles EKs tre kerneværdier i rapporten? Refleksionsdybde — kobler rapporten praksis til teori, og rummer den ægte selvkritik? Niveauer og karakterer # Hvert niveau fik i en iteration tilknyttet en indikativ karakter på 7-trinsskalaen, så vurderingen er direkte anvendelig i en eksamenskontekst:\nNiveau Karakter Fremragende / Stærkt tilstede / Dyb / Opfyldt 10–12 Tilfredsstillende / Tilstede / Overfladisk 7 Under forventning / Fraværende / Beskrivende 02–4 Ikke opfyldt 00 Formelle krav behandles separat da det primært er et godkendt/ikke-godkendt-kriterium.\nOutputformat # Outputformatet blev fastlagt til at indeholde fem sektioner i fast rækkefølge:\nSamlet vurdering — 2–3 sætninger om rapportens overordnede styrker og svagheder Rubric-oversigt — tabel med Dimension / Niveau / Karakter / Begrundelse Stærke punkter — konkrete eksempler fra rapporten Udviklingsområder — konstruktive forslag til forbedring Spørgsmål til mundtlig eksamen — 3–5 spørgsmål der uddyber interessante eller uklare punkter Tilføjet undervejs: Konklusion # Efter den første testkørsel blev der tilføjet en sjette outputsektion:\nKonklusion — samler rubric-scoren i én samlet karakterindikation og forklarer konkret hvilke dimensioner der trækker op og ned, samt hvad der ville have løftet rapporten mest. Userprompt – skabelon # Design-principper # Userprompt\u0026rsquo;en er en skabelon der tilpasses per studerende. Den holder tre ting adskilt:\nReference til systemprompten via @prompts/system-prompt.md Eksaminator-noter — rapport-specifikke oplysninger (tegntælling, antal bilag, anonymisering) Selve rapporten via @data/studentX.md Instruktion om gemning — output gemmes i output/studentX-vurdering.md Brug i Claude Code # Filerne er designet til at bruges med Claude Codes @-syntaks, som automatisk indsætter filindholdet:\n@prompts/user-prompt.md Denne ene reference trækker automatisk både systemprompten og rapporten ind.\nBrug i andre interfaces # Kopier indholdet af system-prompt.md til system-feltet og user-prompt.md (med rapportindhold indsat) til bruger-feltet i fx Claude.ai eller ChatGPT.\nIterationer og begrundelser # Iteration Ændring Begrundelse 1 Grundlæggende rubric med 6 dimensioner og 3 niveauer Dækker alle formelle krav og EK-værdier 2 Tilføjet karakter på 7-trinsskalaen ved hvert niveau Direkte anvendelig til eksamenskarakter 3 Tilføjet Karakter-kolonne i outputtabellen Giver hurtig overblik under eksamination 4 Tilføjet Konklusion-sektion i output Samler vurderingen i én handlingsrettet opsummering 5 Rapportindhold erstattet med @-filreference i userprompt Undgår at kopiere hele rapporten manuelt 6 Instruktion om at gemme output i output/studentX-vurdering.md Sikrer sporbarhed og nem genfinding Teknisk rejse – fra idé til kørende applikation # Udover prompt-designet blev der udviklet en webapplikation til at køre vurderingerne. Processen var ikke ligetil.\nFørste plan: Python + FastAPI med deploy på Render # Den oprindelige plan var en Python-backend (FastAPI) med en React-frontend, deployeret på Render.com (backend) og GitHub Pages (frontend). API-nøglen skulle gemmes som GitHub Secret og sendes automatisk til Render via GitHub Actions ved hvert push til main.\nProblemer der opstod:\nPython 3.14 for ny: Den installerede Python-version (3.14) var for ny til at OpenAI SDK\u0026rsquo;et (v1.51) fungerede korrekt. Fejlen var TypeError: Client.__init__() got an unexpected keyword argument 'proxies' — et inkompatibilitetsproblem mellem OpenAI SDK og den version af httpx der fulgte med Python 3.14.\nRender Blueprint fandt ikke render.yaml: Render kræver at render.yaml ligger i roden af repo\u0026rsquo;et. Filen lå fejlagtigt i app/backend/, og Render kunne derfor ikke finde den og afviste Blueprint-oprettelsen.\nRender-dashboardet var forvirrende: Forsøg på at navigere direkte til service-URL\u0026rsquo;er i Render resulterede i \u0026ldquo;Page not found\u0026rdquo;-fejl, fordi services endnu ikke var oprettet. Blueprint-flowet er det korrekte indgangspunkt, ikke manuel oprettelse af enkeltservices.\nAPI-nøgle eksponeret i chat: Under opsætningen blev en Render API-nøgle ved en fejl delt direkte i chatten. Nøglen blev straks invalideret og erstattet med en ny. Læring: API-nøgler må aldrig deles i chat, terminal-output eller andre usikrede kanaler — de gemmes udelukkende i .env-filer (lokalt) eller secrets-systemer (GitHub Secrets, Render environment).\nLøsning: Skift til Java + Spring Boot, kør lokalt # Da Python-versionsproblemet viste sig svært at løse hurtigt, og Render-opsætningen drillede, blev beslutningen taget om at:\nSkifte backend til Java + Spring Boot — Java er mere stabilt på Windows, og IntelliJ IDEA håndterer Maven-projekter uden at kræve separat installation af byggeværktøjer.\nDroppe cloud-deployment og køre lokalt — Kompleksiteten ved Render + GitHub Actions + secrets-pipeline var uforholdsmæssig stor for et internt undervisningsværktøj. Applikationen kører i stedet lokalt med mvn spring-boot:run (backend) og npm run dev (frontend).\nYderligere tekniske udfordringer undervejs:\nArbejdsmappen var forkert: IntelliJ kørte Spring Boot fra projektroden (praktikvurdering/) i stedet for app/backend/. Det betød at relative stier til data/, prompts/ og output/ pegede forkert. Løsningen var at gøre stierne konfigurerbare via application.properties med niveauer tilpasset IntelliJs arbejdsmappe.\n.env-filen blev ikke fundet: dotenv-java-biblioteket ledte efter .env i arbejdsmappen (praktikvurdering/), men filen lå i app/backend/. Stien til dotenv-opslaget blev hardkodet til app/backend/ relativt til arbejdsmappen.\nReferencefiler dukkede op i dropdown: laeringsmaal.md, dare-share-care.md og krav-til-rapport.md lå i data/-mappen og blev vist som valgbare rapporter. De blev flyttet til en separat reference/-mappe.\nFrontend crashede ved backend-fejl: Når backenden returnerede HTTP 500, parsede frontenden fejlsvaret som JSON og satte reports-state til undefined, hvilket crashede ReportSelector-komponenten. Fejlen blev rettet ved at tjekke response.ok inden JSON-parsing og anvende ?? [] som fallback.\nHvad der ville have gjort det nemmere # Installere Python 3.12 (LTS) frem for 3.14 fra start Placere render.yaml i roden af repo\u0026rsquo;et fra begyndelsen Afklare IntelliJs arbejdsmappe-konvention inden stier blev hardkodet Filer # prompts/ ├── system-prompt.md ← Rubric og instruktioner til AI\u0026#39;en ├── user-prompt.md ← Skabelon til vurdering af én rapport └── PROCES.md ← Dette dokument Referencematerialet der dannede grundlag for rubricen ligger i:\nreference/ ├── krav-til-rapport.md ├── dare-share-care.md └── laeringsmaal.md ","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/posts/internship-evaluation/","section":"Posts","summary":"","title":"Internship-evaluation","type":"posts"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/categories/llm-api/","section":"Categories","summary":"","title":"LLM-API","type":"categories"},{"content":" Introduktion til LLM API-integration # Denne post vedrører den femte undervisningsgang i AIDA vi havde den 24/4-\u0026lsquo;26.\nDet her var introduktion til LLM-API integration og kodeagenter, hvor vi går fra at bruge det i et chat vindue og sender frem og tilbage fra forskellige vinduer, til direkte i vores IDE/editor. Denne blogpost er nok meget kort da det fortsætter i posten om praktikvurderingsopgaven.\nBuzzwords/centrale begreber # LLM-API integration # At integrere en LLM betyder, at man:\nsender en request til en model via API modtager et svar bruger svaret i sin egen applikation Det fungerer ved at:\nBackend sender system + user prompt API’en behandler input Man modtager et svar Svaret bruges i frontend eller videre logik Promptstruktur # En god prompt består typisk af:\nSystemprompt → definerer rolle og regler Userprompt → selve inputtet Struktur er vigtigt, fordi:\ndet giver mere stabile svar det gør output lettere at bruge i kode Struktureret output # I stedet for fri tekst kan man få modellen til at returnere:\nJSON Markdown faste formater bestemte felter Fordele:\nlettere at parse kan bruges direkte i kode mindre risiko for fejl Asynkron programmering # Når man kalder et API, tager det tid.\nDerfor arbejder man ofte asynkront:\nundgår at blokere systemet bedre performance bedre brugeroplevelse ETL (Extract, Transform, Load) # LLM-integration minder meget om ETL:\nExtract → hent data (user input / database) Transform → send til LLM og få svar Load → brug resultatet i systemet Mental model og beslutningstræ # For at arbejde effektivt med LLM’er, er det vigtigt at have en mental model:\nHvornår skal LLM’en bruges? Hvornår skal klassisk kode bruges? Man kan tænke det som et beslutningstræ:\nEr opgaven deterministisk? → brug kode Er opgaven sproglig/fortolkende? → brug LLM Digital forestillingsevne # En vigtig del af arbejdet er at udvikle sin “digitale forestillingsevne”:\nForestille sig hvad systemet kan gøre Bruge snusfornuft og sjusning Eksperimentere med prompts Det handler ikke kun om korrekthed, men også om at kunne tænke i muligheder.\nHvad har vi lavet # Vi er blevet introduceret til det at bruge en LLM-API en i vores applikation.\nFormålet var at forstå hele flowet fra: bruger → backend → LLM → backend → bruger\nPerspektivering # LLM-integration åbner op for:\nintelligente systemer automatisering bedre brugeroplevelser Men det kræver:\ngod struktur kritisk tænkning forståelse for begrænsninger Hvad har vi lært # ETL Relevansen bag den digitale forestillingsevne hvad et Beslutningstræ er Opsummering # Vi nåede ikke at påbegynde dagens opgave, men fik en introduktion til Jespers emailprogram, og Jons hjemmeside med AI vurdering for undervisere, og det at lave programmer ved hjælp af LLM\u0026rsquo;er og LLM-Api.\nDet vigtigste takeaway er, at:\nLLM’er ikke bare er chatbots de kan bruges som en del af et system ","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/posts/llm-api/","section":"Posts","summary":"","title":"LLM-API","type":"posts"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/categories/llm-api-internship-evaluation/","section":"Categories","summary":"","title":"LLM-API, Internship-Evaluation","type":"categories"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/tags/llm-api/","section":"Tags","summary":"","title":"LLM, API","type":"tags"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/tags/llm-api-tasks/","section":"Tags","summary":"","title":"LLM, API, Tasks","type":"tags"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/authors/rikke/","section":"Authors","summary":"","title":"Rikke","type":"authors"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/AIDA/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":" Introduktion til Kodeagenter # Denne post vedrører den fjerde undervisningsgang i AIDA vi havde den 20/4-\u0026lsquo;26.\nBuzzwords/centrale begreber # Assistent vs. agent # Assistent:\nKan blive spurgt om ting Giver svar, forslag og forklaringer Du styrer hele processen Agent:\nKan gøre ting (tage handling) Kan selv planlægge og udføre opgaver Har en grad af autonomi Control flow\nAssistent: You control the loop Agent: It controls the loop Time horizon\nAssistent: One-shot (eller korte samtaler) Agent: Long-running tasks State management\nAssistent: Context -\u0026gt; prompt window Agent: Context -\u0026gt; environment (files, memory, logs) Kode agenter # Codex Claude code I forbindelse med forløbet blev vi bedt om at vælge at bruge en af disse og jeg valgte claude code. En kode agent kan godt finde på at lyve, for at gøre dig glad.\nTips fra Jesper\n90 % i Plan mode og 10 % lad den kode Husk at få den til at lave en readme så når man efter fire måneder kommer tilbage, at man kan se hvordan det er sat op, hvad det kan og hvordan man kører programmet. Lav en todo fil - hvad mangler programmet En kodeagent er en AI, der ikke kun kan foreslå kode, men også:\nskrive og ændre filer navigere i projekter debugge kode tage beslutninger baseret på kontekst Horizontal agents vs. Vertical agents:\nHorizontal:\nBred funktionalitet Kan bruges på tværs af mange domæner Eksempel: ChatGPT Vertical:\nSpecialiseret til ét domæne Ofte mere præcise inden for deres område Eksempel: en kodeagent eller en kundeservice-bot Hvad er en kodeagent: # En kodeagent er en AI-drevet agent, der kan:\nanalysere kodebaser planlægge ændringer implementere funktionalitet teste og justere løsninger Hvordan vælger man det rigtige værktøj\nNår man vælger en kodeagent, bør man overveje:\nKompleksitet af opgaven\n→ Skal den bare hjælpe, eller arbejde selvstændigt?\nKontrol vs. automation\n→ Vil du selv styre alt, eller lade agenten tage over?\nPålidelighed\n→ Hvor kritisk er det, at koden er korrekt?\nIntegrationer\n→ Skal den kunne arbejde med filer, GitHub, API’er osv.?\nI mit tilfælde valgte jeg Claude Code, fordi:\nSkriv noget her Hvordan arbejder en kodeagent\nDet fungerer typisk sådan:\nDu giver en opgave (prompt) Agenten laver en plan Den udfører handlinger (skriver kode, ændrer filer) Den evaluerer resultatet og itererer Dette minder meget om en udviklers arbejdsproces.\nHvad har vi lært # Forskellen mellem en assistent og en agent Hvordan kodeagenter kan automatisere udviklingsopgaver Vigtigheden af planlægning før eksekvering Hvordan man skriver bedre prompts til agenter Hvad var svært # At stole på agenten uden at miste kontrol At skrive præcise nok prompts Fejlfinding kan være svært hvis man ikke tjekker koden igennem Teknologier og værktøjer # Claude Code Codex LLM’er Prompt engineering Mine \u0026ldquo;første\u0026rdquo; oplevelser # Skriv noget her\u0026hellip;\nOpsummering # Denne undervisningslektion har vi arbejdet med kodeagenter og brugen af dem til udvikling. Jeg benyttede lidt mere udførelige prompts, og planning. Min side har nogle små ting der kan fikses, men den er live: https://rikkemariussen.github.io/AGENTPROJECT/\n","date":"20 April 2026","externalUrl":null,"permalink":"/AIDA/posts/codeagents/","section":"Posts","summary":"","title":"Code agents","type":"posts"},{"content":"","date":"20 April 2026","externalUrl":null,"permalink":"/AIDA/categories/code-agents/","section":"Categories","summary":"","title":"Code Agents","type":"categories"},{"content":"","date":"20 April 2026","externalUrl":null,"permalink":"/AIDA/tags/code-agents/","section":"Tags","summary":"","title":"Code Agents","type":"tags"},{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/AIDA/categories/rag/","section":"Categories","summary":"","title":"RAG","type":"categories"},{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/AIDA/tags/rag/","section":"Tags","summary":"","title":"RAG","type":"tags"},{"content":" Introduktion til RAG og DIFY # Denne post vedrører de to undervisningslektioner vi havde den 13/4-\u0026lsquo;26 og den 17/4-\u0026lsquo;26.\nBuzzwords/centrale begreber # Chatbot # Er et program der kan føre en samtale mellem en bruger og en \u0026ldquo;agent\u0026rdquo;. De bliver ofte brugt som assistener/opslagsværktøjer, kundeservice og FAQ\u0026rsquo;er.\nLLM (Large language models) # En LLM er en AI-model der er trænet på \u0026ldquo;mange\u0026rdquo; tekster. En LLM kan:\nLæse og forstå tekst Generere svar med forklaringer Da den er trænet på specifikke tekster, kan der opstå mangel i dens viden.\nRAG (Retrieval-Augmented Generation) # RAG er en metode til at forbedre en chatbot, da man giver den adgang til ekstra viden. RAG kan også bruges til at afgrænse viden, hvis man gør så botten KUN kan benytte viden fra den viden man selv fodrer den med.\nDet fungerer ved at:\nBrugeren stiller et spørgsmål Programmet søger i en database (med den viden man har opsat) Information bliver sendt til LLM\u0026rsquo;en LLM\u0026rsquo;en bruger den information den er givet til at lave et svar til brugeren. Vektordatabase # En vektor database er en database med 3 akser, hvor viden (tekst) bliver omformuleret til tal og indsat på denne. Der grupperes efter kontekst, f.eks. hund og kat er placeret relativt tæt på hinanden fordi de begge er dyr, men langt væk fra en banan.\nMan kan således i stedet for at finde ord/tekst der betyder præcist det samme, lede efter noget der minder om hinanden.\nSemantisk søgning # Semantisk søgning er en søgning hvor man søger på betydningen af ord, i stedet for deres præcision. Denne type søgning er noget af det RAG benytter sig af, da kontekst kan være mere ledende og korrekt end antal matchende ord.\nEmbeddings # I en vektordatabase benytter man embeddings, som er den måde teksten bliver lavet om til tal på.\nDette gør at der kan sammenlignes på indhold og tekst.\nReranking # Reranking betyder, som ordet lægger op til, at man omrangerer noget, og dette er søgeresultaterne fra f.eks. vektordatabasen, så man ser de svar der er mest relevante (højere relevansscore) kommer først.\nHvad har vi lært # Hvad RAG er, og hvordan det gør svar mere præcise Opbygning af en simpel chatbot med Dify Hvordan man benytter sine egne dokumenter som vidensbase (på Dify) Hvad embeddings og vektordatabase er, og hvordan de fungerer En smule om test og forbedring af svar fra en chatbot, ved at rykke på svar parametrene Hvad var svært # Dette \u0026ldquo;afsnit\u0026rdquo; for mig er kort, da jeg i min praktik var blevet introduceret til RAG og vektordatabaser.\nAt få gode svar At få dify sat ordentligt op At få dify/scripts sat op så vidensbasen bliver opdateret Teknologier og værktøjer # Dify LLM Vektordatabase Embeddings API (openAI) Opsummering # I denne uge har vi arbejdet med RAG, opbygning af vores egen chatbot og justering af chatbottens LLM.\n","date":"19 April 2026","externalUrl":null,"permalink":"/AIDA/posts/rag-introduction/","section":"Posts","summary":"","title":"RAG og DIFY","type":"posts"},{"content":" RAG workflow automatisering # Denne post bygger videre på min post om introduktion til RAG og Dify. Heri fokusere jeg på at lave en automatiseret opdateringen af vidensbasen til min chatbot.\nFormål # Målet for denne problemstilling var at vidensbasen til min chatbot ikke skulle blive forældet ELLER \u0026ldquo;overcrowded\u0026rdquo;. Dette gøre automatisere opdatering af vidensbasen, så den opdateres når der skubbes noget nyt til github, samtidig med at renser det gamle indhold på dify så der ikke forekommer duplikanter.\nLøsningen # Det automatiseret workflow som er bygget med Github Actions:\nBygger og deployer porteføljen, via hugo og github pages, ligesom før. Samler indholdet fra porteføljen, så der kun skal læses et dokument Sender dette til Dify som ny vidensbase Slette det gamle data i Dify Punkt 2-4 er tilføjet til processen for at automatisere opdateringen af chatbottens vidensbase.\nJeg har valgt at benytte github pages frem for et sekundært program med script i, da dette er en simpel og samlet måde. Endvidere behøves der ikke ske opdateringer til vidensbasen på nuværende tidspunkt uden der skubbes nyt indhold til github.\nHvis der i fremtiden skal benyttes anden viden i min vidensbase såsom enkelt stående dokumenter jeg uploader, skal processen omskrives, således de ikke bare bliver slettet ved næste opdatering. Der kan også i sådanne tilfælde argumenteres for at et sekundært program med sit eget script vil være fordel agtigt. På nuværende tidspunkt kan jeg dog ikke se hvorfor denne specifikke chatbot kunne have behov for en anden viden end mine posts.\nWorkflowets struktur # Består således af tre jobs:\n1. Build # Installere dependencies Bygger den statiske side (porteføljen) Gemmer resultatet som en artefakt 2. Deploy # Udgiver siden via Github pages 3. Sync-dify # I forbindelse med automatisering af opdateringen for min vidensbase, er dette det vigtigeste punkt.\nKører efter deploy Opdatere min RAGs vidensbase Hvad har jeg lært? # Automatisering af opdateringsworkflowet med github pages Opdatering af RAG vidensdatabase og hvorfor Dify API Hvad har været svært? # At få automatiseringen til at virke ved sekundært program, hvorfor jeg overgik til github pages måden Benyttelsen af den korrekte Dify API (knowledge ikke studio) Teknologier og værktøjer # Github actions Hugo Github pages Dify API Bash scripting (i min Hugo.yaml) RAG Opsummering # Jeg har fået min automatisering til at virke i forhold til opdatering af indhold i min vidensdatabase. Den bliver opdateret når der skubbes nyt til github actions. Dog kan dette være et problem hvis vidensdatabasen skal udvides til at indeholde dokumenter fra andre steder end min portefølje, da den på nuværende tidspunkt sletter alt der i vidensdatabasen og uploader det nye (opdateret) dokument til vidensdatabasen.\n","date":"19 April 2026","externalUrl":null,"permalink":"/AIDA/posts/rag-workflow/","section":"Posts","summary":"","title":"RAG workflow","type":"posts"},{"content":" My test run for a post # This is just a test run - trying to figure out how hugo works.\n","date":"10 April 2026","externalUrl":null,"permalink":"/AIDA/posts/first-post/","section":"Posts","summary":"","title":"Test post","type":"posts"},{"content":"","date":"10 April 2026","externalUrl":null,"permalink":"/AIDA/tags/tutorial/","section":"Tags","summary":"","title":"Tutorial","type":"tags"},{"content":"","date":"10 April 2026","externalUrl":null,"permalink":"/AIDA/categories/tutorials/","section":"Categories","summary":"","title":"Tutorials","type":"categories"},{"content":"Welcome to my play ground. This is where I share my projects, blog posts, and more about my work as a AP graduate computer science student.\nMost of my posts will be written in danish, as it is a project for my elective course AI driven applications, where the posts will be the basis for my examination.\n","date":"4 February 2026","externalUrl":null,"permalink":"/AIDA/about/","section":"Forside","summary":"","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/AIDA/series/","section":"Series","summary":"","title":"Series","type":"series"}]