Gosoft Connect - AI-chatt förankrad i era dokument
Ett multi-tenant widget-SaaS vars AI-chatt svarar utifrån varje kunds egen kunskapsbas - hela sökstacken självhostad på en enda CPU-nod.
Vad det är
Gosoft Connect är ett multi-tenant SaaS som jag har designat och byggt på egen hand på GoSoft, mitt bolag: inbäddningsbara webbwidgetar - AI-chatt, livechatt, formulär, popuper - och en adminportal. Varje kundarbetsyta har en kunskapsbas som fylls på fyra sätt: klistra in text, hämta en URL, ladda upp filer eller crawla en hel sitemap. AI-chatten på kundens webbplats besvarar besökarnas frågor förankrat i den kunskapsbasen, strömmat token för token, med verktyg för att slå upp företagsuppgifter, fånga leads och lämna över till en människa. Runt chatten finns sammanfattningsmejl, AI-sammanfattningar av formulärsvar, kategorisering av konversationer, nattliga rapporter över frågor botten inte kunde svara på, och moderering av både input och output.
Sökpipelinen
Svaren förankras genom hybridsökning: täta vektorer och fulltextrankning sammanvägda med reciprocal rank fusion, därefter omrankade av en cross-encoder, med ett mångfaldstak per dokument och språkmedveten sökning över finskt, svenskt och engelskt innehåll. Chunkningen är styckesmedveten med kontextuella rubriker, och innehållshashning gör att oförändrade dokument aldrig bäddas in på nytt.
Stack & infrastruktur
Medvetet litet, igen: allt körs på en enda Linux-nod, enbart CPU. Embeddingmodellen (bge-m3) och omrankaren (bge-reranker-v2-m3) körs lokalt via ONNX - ingen GPU, inget embedding-API. Kunddokumenten lämnar maskinen för exakt en sak: själva LLM-anropet (OpenAI, modell valbar per arbetsyta). Vektorlagret är vanlig PostgreSQL med pgvector - en databas för allt. Bun och Hono i backend, en Solid.js-portal, nginx framför.
Ingenjörsarbetet
De siffror jag kan publicera är ingenjörssiffror. Kvantisering av omrankaren tog sökningen från 14 sekunder till 4,1 på CPU, själva omrankningssteget från 5,6 till 1,1. Ett tidigt belastningstest tappade 2 av 10 samtidiga chattar och dödade processen vid 10,4 GB minne; efter en inferenssemafor och batchindelning klarade samma test 10 av 10 med 6,8 GB som topp och noll omstarter. I produktion sedan juni 2026.