# Design
## Arkitektur
**Övergripande diagram med tekniker som används och/eller testats**

**Förenklad bild av delarna i systemet och informationsflöde**

### Identifierade tjänster
*Obs! Nedanstående beskrivning av tjänsterna kommer ifrån en sammanställning av systemet riktad åt beställande kund.*
*För mer teknisk beskrivning med uppdaterade beslut, se [teknikdokumentation](https://hackmd.io/@verksamhetsprojekt/H1XnJ1Bk2) och [implementation](https://hackmd.io/@verksamhetsprojekt/Sk8rjylTi)*
#### Kunskapsbanken
Här kommer chattbottens faktiska kunskap att bo, sådant som ex. artiklar ifrån serviceportalen. Ett vanligt problem med chatGPT-modellerna är att de är fantastiskt bra på att drömma ihop svar på sådant som den faktiskt inte vet, och att den gör det på ett så trovärdigt sätt att man blir lurad. Lösningen på det här problemet är att "förbjuda" botten från att svara på sådant den inte vet, och istället försöka ta reda på svaret utifrån en kunskapsdatabas. Denna delen av systemet kan jämföras med att "träna" botten, fast med den fina bonusen att man kan byta ut/uppdatera individuell kunskap utan att träna upp den från grunden.
Mer konkret kommer databasen att implementeras i formen av en vektordatabas, vilket kommer att gå hand i hand med en annan del av systemet för att hitta den "bästa biten av kunskap" för att besvara användarens fråga till chattbotten. Vi har utforskat lite olika alternativ för tekniker, men inte bestämt oss för någon specifik ännu. Teknikerna liknar varandra väldigt mycket och bör vara utbytbara mot varann.
#### Datakällor
För att befolka databasen med kunskap har vi tittat på potentiella källor av kunskap. Spåret vi har utforskat mest är att skrapa artiklar från serviceportalen, men här kan sådant som kunskapsartiklar eller ärendehanteringshistoriken också tänkas vara effektiva alternativ eller parallellspår.
#### Frågemottagaren
Denna delen av systemet ansvarar för att ta emot den ursprungliga frågan från användaren. Frågan kommer att brytas ned i olika vektorer, för att kunna jämföras med kunskapsartiklarna i vektordatabasen. Utifrån den här jämförelsen kan den bäst lämpade kunskapen för att besvara frågan hittas. Den ursprungliga frågan skickas sedan vidare, tillsammans med den bäst lämpade kunskapen, till den "faktiska" chattbotten som får ansvaret att besvara frågan.
För frågemottagaren har vi utforskat två primära implementationsspår:
- OpenAI embeddings, ett verktyg för att jämföra "släktskapet" mellan två texter.
- LangChain, ett verktyg för att koppla samman språkmodeller med externa verktyg. I detta systemets fall kan det tänkas som en mer kapabel, men mer komplex variant av OpenAI embeddings.
#### Frågebesvararen
Denna delen av systemet är den "faktiska" chattbotten. Den innehåller "intelligensen" i konversationen, och har ansvar för att lista ut och formulera svaret till användarens fråga. Den hittar svaret utifrån att förstå den kunskapen som frågemottagaren har skickat tillsammans med frågan, och kan därför inte drömma ihop ett eget (och felaktigt) svar.
Här är vi helt bestämda på att en språkmodell ifrån OpenAI kommer att användas, men beslutet mellan specifika språkmodeller är fortfarande lite uppe i luften.
#### Kommentar
Förhoppningen är att systemet i helhet kommer likna ChatGPT, med skillnaden att den besvarar frågor utifrån den kunskap som finns i databasen, samt att den inte ljuger lika mycket
## Flödet
Flödesdiagram av hur en konversation påbörjas mot chattboten, de konkreta steg som måste tas.
