Chatbot Architectuur
Overzicht van de end-to-end flow van de Sogyo Kennis Chatbot, van browser tot LLM en het indexeringsproces.
Globale Flow
flowchart LR
subgraph Client
Browser[🌐 Browser
jarvisje.com via Cloudflare]
end
subgraph Host["Server enterprise .15"]
CF[cloudflared]
HostPort[Poort 8080]
Container[Docker
sogyo-chatbot-app
Poort 8001]
App[FastAPI
Chat + Ingestion]
Embed[BGE-M3
embeddings CPU]
Chroma[(Chroma
persist volume)]
Ollama[Ollama
gemma3:4b GPU]
end
Browser -- HTTPS via Tunnel --> CF
CF --> HostPort
HostPort --> Container
Container --> App
App --> Embed
Embed --> Chroma
App -- Retrieval --> Chroma
App -- Chat completion --> Ollama
Ollama -- Streaming antwoord --> App --> Browser
Hoe de flow werkt (stap voor stap):
- Browser: Gebruiker opent jarvisje.com. Cloudflare Tunnel stuurt veilig door naar de host (poort 8080).
- Host & Container: Docker container sogyo-chatbot-app (8001). FastAPI serveert UI en API.
- Chat / Retrieval: Query wordt ge-embedded met BGE-M3 (CPU) en gezocht in Chroma.
- Lokaal LLM: Context + vraag naar Ollama gemma3:4b op de GPU van dezelfde server.
- Antwoord: Streaming tokens + bronnen terug naar de browser.
Alles draait op één host (.15): app, embeddings, vector store en LLM. Geen DGX nodig voor de productiechabot.
Visuele weergave – Stapsgewijze flow
🌐
1. Browser
jarvisje.com (Cloudflare Tunnel)
→
↓
🖥️
2. Server Host
Poort 8080 → Docker
→
↓
🐳
3. Container
FastAPI (8001)
Chat + Index
→
↓
🔍 / 🤖
4. Verwerking
BGE-M3 + Chroma
→ Ollama Gemma 4B
→
↓
💬
5. Antwoord
Stream via SSE
+ bronnen
Elke stap is traceerbaar: van vraag tot antwoord, volledig op de lokale server.
1. Chat Flow (Vraag → Antwoord)
- Gebruiker stelt vraag in de browser
- Request via Cloudflare Tunnel naar host:8080 → container:8001
- FastAPI ontvangt POST /chat
- Retrieval: Vraag → BGE-M3 embedding → Chroma similarity search
- Context + vraag → Ollama gemma3:4b (OpenAI-compatible, lokaal op GPU)
- LLM streamt tokens terug via SSE
- Browser toont antwoord met bronnen
Retrieval en LLM draaien lokaal op de productieserver.
2. Indexeringsproces (Kennisbank opbouwen)
flowchart TB
subgraph Ingestion
direction TB
Start[Admin klikt 'Start indexering']
Scrape[Scraper
sitemaps + trafilatura
+ fallback]
Chunk[Chunker
800 chars + overlap]
Embed2[BGE-M3 Embedder
lokaal CPU]
Store[Upsert in Chroma]
end
Start --> Scrape
Scrape --> Chunk
Chunk --> Embed2
Embed2 --> Store
- Start via UI →
POST /ingest/start spawnt een apart worker-proces (ADR-010)
- Worker: scrape → chunk → embed → upsert; chat-API blijft beschikbaar
- Status via gedeeld bestand op data-volume; UI pollt
GET /ingest/status
- Zelfde entrypoint voor CLI/cron:
python -m sogyo_chatbot.ingestion.worker
- Data blijft in persistente volume
/home/evdillen/sogyo-chatbot-data
Belangrijke componenten: FastAPI (backend), BGE-M3 (embeddings), Chroma (vector store), Ollama gemma3:4b (LLM op GPU), Cloudflare Tunnel (publieke exposure).