# Tekniker
## Språkmodeller
En språkmodell används i en chatbot för att kunna generera språkliga svar baserat på modellens förståelse av användares avsikt och sammanhang som frågan ställdes.
Språkmodellen tränas på stora mängder textdata detta gör det möjligt för modellen att generera svar som låter naturliga och flytande i konversationen.
Vi kommer att använda oss av någon av OpenAIs språkmodeller och i nuläget någon av dessa två:
[GPT-3.5 Modeller](https://platform.openai.com/docs/models/gpt-3-5)
- `text-davinci-003`
- Utgångspunkten, inte gjord för chat i grunden.
- `gpt-3.5-turbo`
- Vad ChatGPT är byggd på och som är gjord för att agera chatbot.
GPT-4, en nyare modell, finns som en beta och är som gpt-3.5-turbo opitmerad för chat.
## Databaser
### Vector Stores
Vektordatabaser används för att lagra flerdimentionella vektorer. De används inom maskininlärning och data science bl a för att hitta likheter mellan data. I projektet är det texter som chatbotten ska hitta information till svaren som vektoriserats och lagras i vektordatabasen. Det finns fler olika vektordatabaser som Weaviate, Redis+RediSearch och Qdrant. Vi kommer att till en början utforska [**Pinecone**](https://docs.pinecone.io/docs/overview) eftersom den har en hel del documentation tillsammans med OpenAI.
### Document Store
Eventuellt behövs en dokumentdatabas som MongoDB för att lagra data som skrapats och annan information innan den vektoriseras och sparas in till vektordatabas.
## Vektorisering
Kunskapsbanken som vi fått från kunden med de potentiella svaren kommer att vektoriseras med [OpenAI Embeddings](https://platform.openai.com/docs/guides/embeddings) (`text-embedding-ada-002`) innan lagringen i vektordatabasen.
Frågorna som kommer från användare vektoriseras också med embeddningsmetod. Om vektorerna från frågan och information i vektordatabasen är nära i cosinus distans har troligtvis svaret på frågan hittats. Det finns ett OpenAI Python paket med inbyggda funktion "distances_from_embeddings" som är användbar här.
Därefter skickas frågan vidare tillsammans med den bäst lämpade svarsmaterialet till en gpt-3.5 modell.
## Webbskrapa
En webbskrapa byggs för att automatiskt hämta och extrahera information från kundens kunskapsbank. Det som plockas ut med skrapan är grunden för svaren som chatboten kommer att använda när den ska ge svar. Kunskapsbanken kommer att skrapas med jämna mellanrum för att hålla chatbotens databas uppdaterad.
Utgångspunkten är att webbskrapan uppdaterar vektordatabasen i samband med skrapandet, men det är möjligt att en dokumentdatabas utnyttjas som mellansteg, se [document store](#Document-Store).
[En version av Webbskrapan](https://github.com/CoderSeb/AskitAPI) är implementerad i C#.
## Annat
All indata från systemets användare, samt all text som genereras av gpt-3.5 modellen, testas i Moderation API:et för att följa OpenAI:s regler.
- [OpenAI Moderation](https://platform.openai.com/docs/guides/moderation) (`text-moderation-latest`)
Vi avvaktar med att använda LangChain men kan komma att användas senare om det finns behov. LangChain är ett ramverk för LLM, large languange models och som kan användas för t ex chatbots. Grundtanken är att man kan "kedja" ihop olika komponenter (prompt-maller, LLMs, Agenter och Minne) för att skapa mer avancerade användningsområden runt LLM:er.
- [LangChain](https://langchain.readthedocs.io/en/latest/index.html)