Ellerin er en digital læringsplattform som tar i bruk kunstig intelligens, med formål om å maksimere de positive effektene og minimere potensielle negative kognitive virkninger av KI-bruk. Det gjøres ved å strukturere og koordinere hvordan KI-modellen opererer. Modellen identifiserer konseptene bak det brukeren ønsker å lære, vurderer hvilken relevant kunnskap brukeren allerede har, og bygger opp en læreplan bestående av flere forelesninger. Kompleksitet, progresjon og tilnærming tilpasses hver enkelt bruker. Mye av arbeidet bak Ellerin handler om håndtering av context-window og bruk av dynamiske system-prompter, for å sikre at hver forelesning tilpasses den individuelle brukeren og deres behov.
Ellerin bruker en REST API, som er skrevet i Node.js med Express.js, og følger en layer-based struktur med controllers, service-funksjoner og utility-funksjoner. Controlleren fungerer som orkestrator og delegerer business logic til relevante service-funksjoner. Hver rute bruker rate-limiting, og annet relevant middleware som sanitering og validering etter behov. Autentisering håndteres via JWT access-tokens, hvor ruter som krever innlogging verifiserer at tokenet samsvarer med en bruker og en aktiv session lagret i databasen. API-et håndterer også all kommunikasjon med KI-modellen, inkludert styring av system prompts og innholdet i context-window.
Dynamisk system-prompter
Her er en forenklet forklaring på hvordan dynamiske system-prompter og interaksjon med KI-modellen er håndtert i løpet av en digital forelesning. Før hver request til KI-modell-API’en settes system-prompten sammen dynamisk ved å hente statiske instruksjoner fra en JSON-fil, og kontekstuell informasjon fra databasen. Den statiske delen definerer rolle, oppgave og regler, mens den dynamiske delen inneholder informasjon spesifikk for gjeldende bruker og sekvens i forelesningen. Det blir formatert til Markdown før det sendes til modellen. Responsen fra KI-modellen inneholder en tekstrespons, en boolean som indikerer om brukeren har brutt retningslinjene, og en boolean som indikerer om brukeren har oppfylt kriteriet for gjeldende sekvens. Respons og indikator for oppfylte kriterier lagres i databasen før svaret sendes tilbake til klienten. Når progresjon indikeres, oppdateres gjeldende sekvens i databasen, som gjør at neste request automatisk henter kontekstuell informasjon for neste sekvens. Det spesifiserer informasjonen med i context-window til å kun holde informasjon relevant for gjeldende sekvens, samtidig som progresjonen håndteres automatisk av API’en. Ansvaret for struktur og koordinering ligger hos API-et, ikke modellen, for å garantere at riktig struktur blir fulgt.
Front-end
Frontend er bygget med React og React Router V7. Autentisering håndteres via en AuthContext provider som gjør access-token tilgjengelig globalt i applikasjonen, og brukes som Bearer token i requests til API-et. Ruter som krever innlogging er beskyttet via protected routes, som verifiserer tilstedeværelsen av en gyldig access-token. Layout-komponenten importeres per side fremfor å wrappe hele applikasjonen, da ikke alle sider bruker samme layout. Requests til API-et håndteres via composable funksjoner. Hver side har ansvar for egen state og bruker delte, gjenbrukbare komponenter.