Gosoft Connect - AI-chatt förankrad i kundens 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 svarar på besökarnas frågor utifrån kunskapsbasen och strömmar svaren token för token.
Assistenten arbetar genom interna verktygsanrop: sökverktyg, en räknare och verktyg för att slå upp företagsuppgifter, fånga leads och lämna över till en människa. Vid varje meddelande med verkligt innehåll tvingas modellen anropa ett verktyg i den första rundan, så att svaren bygger på kundens data och inte på modellens antaganden.
Runt chatten finns sammanfattningsmejl, AI-sammanfattningar av formulärsvar, kategorisering av konversationer, nattliga rapporter över frågor boten inte kunde svara på, och moderering av både input och output.
Sökpipelinen
Svaren förankras genom hybridsökning: täta vektorer i pgvector 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: 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), som omfattas av ett personuppgiftsbiträdesavtal med leverantören. 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.
Modellerna väljs med en automatiserad utvärderingssvit. Den körs genom det verkliga chattflödet, samma kod som en besökares fråga passerar, och ligger kvar i kodbasen som regressionstest. På GoSoft använder vi också AI-agenter internt, i mjukvaruutvecklingen och i det dagliga arbetet.