SkoleGPT Teknisk Dokumentation

Følgende dokument viser et teknisk overblik over struktur og opbygning af SkoleGPT samt uddybende forklaringer og visualiseringer/diagrammer af kerneområder.

System overblik

SkoleGPT består af 2 separate komponenter:

  • En webserver, der håndterer UI’et samt står for kald til og fra AI modellen. Denne er hosted på en virtuel maskine hos Microsoft (Azure) på deres datacenter i Holland (europe-west)
  • En (AI) Model der modtager prompts/queries fra webserveren og besvarer dem. Dette er hosted af Amazon (AWS) på deres datacentre i Irland. Modellen faciliteres af Hugging Face der har deres eget lag. 

Komponenterne fungerer separat fra hinanden og kan derfor modulært udskiftes. På skrivende tidspunkt anvendes LLama2-13b som AI-model, men denne kan nemt udskiftes, med andre sprogmodeller.
Løsningen anvender ingen form for login eller authentication. Logging er begrænset til fejlbeskeder, længde på sendte prompts samt svartider, men reelt spørgsmål og svar indhold gemmes ikke. Løsningen er udviklet med fokus på sikkerhed og (GDPR) compliance. Nedenstående diagram viser komponenternes sammensætning:

Begrænsninger og forudsætninger

Der er pt stor mangel på grafikkort og maskiner der kan udføre de tunge GPU beregninger der er nødvendige for at facilitere større sprogmodeller. Vores oprindelig målsætning var at hoste alt hos Azure da vi ved at Azure er GDPR compliant og da det letter processen kun at have 1 databehandler. Det har dog på udviklings tidspunktet været umuligt at få adgang til en tilstrækkelig kraftfuld GPU maskine inden for EU, hvilket er hvorfor vi har været nødt til at undersøge andre markeder. Vi besluttede os for at skifte til Hugging Face, da de havde GPU’er til rådighed (ikke nødvendigvis i en langtidsholdbar kaliber, men nok til at få os i gang). På længere sigt ønsker vi at løsningen skal ligge på et andet set-up.

Webserveren

Som tidligere nævnt står webserveren på en virtuel maskine hos Microsoft Azure på deres datacenter i Holland (europe-west). Det bliver hosted på en Linux server, nærmere specifikt Ubuntu 22.04 LTS. På serveren anvendes Nginx som reverse proxy.

Selve applikationen er skrevet i NodeJS+Typescript og anvender frameworket NextJS. Applicationen er udviklet udfra open source projektet Chatbot UI: https://github.com/mckaywrigley/chatbot-ui. Denne er udgivet under open source MIT licens så vi kan derfor frit anvende den til kommercielle formål. Webserveren står for det visuelle og for at præsentere informationen fra AI modellen. 

Når en bruger skriver en prompt og trykke send bliver denne omformateret til det format som den anvendte model (I dette tilfælde LLama 2) forventer. Webserveren er derudover ansvarlig for at sikre at den prompt der sendes afsted ikke overskrider den maksimum længde som modellen kræver. Som udgangspunkt sendes hele den nuværende chat med til modellen for at give bedre forståelse for kontekst, men er denne for lang vil de ændre beskeder blive skåret fra. Når der kommer et svar fra modellen streames dette et ord af gangen.

Udover prompt har brugeren også mulighed for at specificere 3 yderligere model parametre:

  • Systemprompt: Dette er startinstruktionen til modellen som den får ind før alt andet. Denne afgører de fundamentale aspekter af modellens opførsel.
  • Temperatur: Denne afgører modellens niveau af improvisation (lav temperatur = mere præcis, høj temperatur = mere kreativ)
  • Top P: Afgør hvor stor en procentdel af det sandsynlighedsmæssige udfaldsrum modellen udvælger sine ord fra (en Top P på 0.9 svarer til at modellen frasorterer den gruppe af ord med sammenlagt mindre end 10% sandsynlighed)

Modellen

Som nævnt tidligere anvender vi i skrivende stund Llama 2 13b som vores AI sprogmodel i SkoleGPT. Denne kan du læse mere om her:
https://huggingface.co/blog/llama2
https://ai.meta.com/llama/

Llama 2 er en open source sprogmodel (op til 700 millioner brugere), hvilket giver os (næsten) fuld frihed til at anvende den som vi ønsker. Da den er open source har vi mulighed for at sikre os at der ikke er nogle bagdøre eller skjult kommunikation til Meta. Vi er dog på ingen måde låst til hverken Llama eller Meta og kan sagtens udskifte denne model med en anden, såfremt en bedre kandidat skulle komme frem.

Modellen hostes igennem Hugging Face, som tilbyder et no-code deployment framework. At tilgå modellen kræves en token. Denne token er kendt af webserveren. Rent praktisk står modellen på en server i Irland (eu-west-1) hosted af Amazon (AWS) (Hugging Face garanterer GDPR compliance).

For hosting anvender vi Hugging Face’s service Inference Endpoints: https://huggingface.co/docs/inference-endpoints/index

Denne service giver mulighed for finjustering af modellens performance ved bl.a. at tillade et maksimum og minimum for hvor mange GPU instanser der kører på samme tid (så den i travle perioder kan skrue op for kapaciteten og ned i stille perioder).

Modellen hostes lige nu på en Nvidia A10G GPU til en pris af 1.3 USD i timen.

Flow

SkoleGPT har kun et enkelt flow/usecase som er når en bruger sender en prompt og modtager et svar fra AI modellen. Denne er illustreret i nedenstående diagram:

Når en bruger indtaster en prompt modtages denne i webserveren. Denne omformateres til det LLama 2 anvendte format (beskrevet nederst her: https://huggingface.co/blog/llama2) før det sendes afsted til Hugging Face modellen. Webserveren specificerer overfor Hugging Face at svar skal modtages som en text stream (altså ord for ord). Når modellen er klar til at give svar sender en den Readable Stream tilbage.

Denne åbnes af webserveren og beskeden fra modellen modtages nu ord for ord som streames direkte til brugerens chat vindue. Til slut sendes en speciel besked for at indikere at streamen skal afsluttes. 

Fremtidige Udvidelser

Projektet er på nuværende stadie stadig i en prototype og vi har mange ønsker til fremtiden. Disse er de mere betydningsfulde:

Bedre Model På dansk

Den nuværende model giver visse udfordringer, både mht konsistens men især på sine dansk-kundskaber. Den kan meget nemt skifte over til engelsk og laver mange gramatiske fejl på dansk. Det skal også siges at den anvendte model til sammenligning med f.eks. ChatGPTs 3.5 model er betydeligt mindre. Vores model har 13 milliarder parametre og ChatGPT 3.5 har 175 milliarder. Så problemet kan udbedre af flere veje. Enten ved blot at få sat en større model i spil, eller ved at træne en eksisterende model til at blive endnu skarpere på dansk. En alternativ løsning er at prompte sig ud af det, f.eks. ved at indsætte sætningen “answer in danish” efter hver enkelt prompt.