Om Chatbotten
Chatbotten är en AI-baserad assistent som hjälper dig att navigera och söka i Smart Built Toolbox.
Funktioner
- Intelligent sökning - Chatbotten kan söka igenom projektdatabasen och hitta relevant information baserat på dina frågor.
- Naturligt språk - Du kan ställa frågor på svenska eller engelska i naturligt språk.
- Kontextmedveten - Chatbotten förstår sammanhanget i din fråga och kan ge relevanta svar.
Hur använder jag chatbotten?
- Klicka på chatbubble-ikonen i nedre högra hörnet
- Skriv din fråga i textfältet
- Tryck på Enter eller klicka på skicka-knappen
- Vänta på svar från chatbotten
Chattsidan och sparade chattar
Chatten finns också som en egen sida på /chat. Öppna den med knappen uppe i chattfönstret eller från användarmenyn.
- Sparade chattar - Till vänster finns dina tidigare chattar, sorterade efter när de senast användes. Klicka på en för att fortsätta den, eller starta en ny med Ny chatt.
- Rubriker - En ny chatt får en kort rubrik av AI strax efter den första frågan.
- Byt namn och ta bort - Varje chatt har en meny med Byt namn och Ta bort. Längst ner i listan finns Ta bort alla chattar.
- Bredare lista - Dra i listans högra kant för att göra den bredare eller smalare. Dubbelklicka på kanten för att återställa.
- Var chattarna sparas - Är du inloggad sparas de på ditt konto och följer med mellan webbläsare och enheter. Är du inte inloggad sparas de bara i webbläsaren du använder.
- Flytta chattar till kontot - Har du chattat i webbläsaren innan du loggade in frågar chattsidan om chattarna ska flyttas till ditt konto. Väljer du Inte nu ligger de kvar i webbläsaren och du får inte frågan igen för de chattarna.
- När du loggar ut - Det du har lämnat efter dig av chattarna i webbläsaren tas bort.
- Vem som ser dem - Sparade chattar visas bara för dig. Andra användare och administratörer i verktygslådan kan inte öppna dem. Tas ditt konto bort ur verktygslådan tas dina chattar där också bort.
- Vad som sparas - Texten i dina frågor och i svaren.
- Chattfönstret i hörnet - Det du frågar där sparas som en chatt på samma sätt och syns i listan på chattsidan. Fönstret fortsätter på samma chatt tills du startar en ny med knappen Ny chatt. Knappen bredvid öppnar chatten på chattsidan.
Tips för bästa resultat
- Var specifik i dina frågor
- Använd relevanta nyckelord
- Om du inte får det svar du förväntar dig, försök omformulera din fråga
Begränsningar
Chatbotten kan hjälpa dig med information som finns i systemet, men har begränsningar:
- Den kan inte utföra ändringar i databasen
- Den kan inte ge råd utanför sitt kunskapsområde
- Svaren baseras på tillgänglig data i systemet
Teknisk Arkitektur
Här beskriver vi hur chatbotten faktiskt fungerar under huven. Den bygger på en RAG-arkitektur (Retrieval-Augmented Generation).
1. Datainsamling
Vi hämtar information från flera källor automatiskt:
- Webbsidor: Vi skrapar HTML-sidor och plockar ut texten (tar bort scripts, CSS och taggar). PDF-länkar på sidorna hittas automatiskt.
- PDF:er: Vi försöker först läsa texten direkt. Om det är en skannad PDF utan text läser vi den med OCR (Mistral).
All text sparas på projektnoden i Neo4j (websiteText, pdfText).
2. Chunking och Embedding
Texten delas upp i mindre bitar (chunks) med lite överlapp så att sammanhanget bevaras:
- Chunk-storlek: 2000 tecken
- Överlapp: 200 tecken
Varje chunk görs om till en vektor (en lista med 3072 tal) med en embedding-modell. Matematiskt:
där är texten och resultatet är en 3072-dimensionell vektor. Dessa vektorer sparas i PostgreSQL med pgvector.
3. Sökning
När en användare skickar ett meddelande i chatten görs frågan också om till en vektor . Sen hittar vi liknande dokument genom att räkna ut avståndet mellan vektorerna (L2-distans):
Vi filtrerar bort resultat med avstånd över 1.2 och tar max 3 chunks per projekt för att få en bra mix.
4. Kontext till AI:n
De bästa matchningarna skickas med som kontext i prompten till AI-modellen. På så sätt kan den svara baserat på riktig projektdata istället för att gissa.
5. Tool Calling
AI-modellen kan också anropa verktyg för att hämta mer data:
| Verktyg | Vad den gör |
|---|---|
searchProjects | Söker projekt med vektorsökning |
searchNodes | Textsökning via Meilisearch (projekt, organisationer, personer etc.) |
getNodeDetails | Hämtar detaljer och relationer från Neo4j |
getCurrentViewNodes | Hämtar info om noderna användaren tittar på just nu |
6. Svar
Till slut sätter AI-modellen ihop ett svar baserat på:
- Användarens fråga
- Matchade chunks från vektorsökningen
- Data från tool calls
- Tidigare meddelanden i konversationen
Svaret streamas tillbaka med markdown-formatering och länkar till projekten. När modellen hänvisar till en källa i sökresultaten blir hänvisningen en länk till projektet, inom parentes efter meningen.
Vart länkarna leder väljer administratören under Inställningar, AI-assistent: till noden i grafen, eller till nodens egen webbsida. Med webbsidor nämns en nod som saknar webbsida utan länk.
Systemdiagram
┌─────────────────────────────────────────────────────────────────┐
│ INDEXERINGSFLÖDE (Batch) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ Webbsidor │────▶│ Chunking │────▶│ Embedding │ │
│ │ PDF-filer │ │ 2000 tecken │ │ Embedding │ │
│ │ (Mistral OCR) │ 200 overlap │ │ (3072-dim) │ │
│ └─────────────┘ └──────────────┘ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ pgvector │ │
│ │ (PostgreSQL) │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ FRÅGEFLÖDE (Runtime) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ Användar- │────▶│ Embedding │────▶│ L2-distans │ │
│ │ fråga (q) │ │ Embedding │ │ sökning │ │
│ └─────────────┘ └──────────────┘ └────────┬────────┘ │
│ │ │
│ ┌──────────────┐ │ │
│ │ Tool Calling │◀──────────────┤ │
│ │ - searchNodes│ │ │
│ │ - getDetails │ │ │
│ └──────┬───────┘ │ │
│ │ ▼ │
│ │ ┌─────────────────┐ │
│ └─────────────▶│ AI-modell │ │
│ │ + Streaming │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Formaterat │ │
│ │ Markdown-svar │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘