Zo bouw je jouw eigen AI-chatbot om veel bedrijfsinformatie snel te doorzoeken

Veel bedrijven beschikken over grote hoeveelheden documenten en informatiebronnen. Maar zoek je daar iets specifieks in, dan ben je al gauw veel tijd kwijt. Kan dat niet slimmer?

Zeker wel, dacht data engineer Janko Chavannes. Daarom bouwde hij een AI-chatbot op basis van GenAI. In dit blog legt hij uit hoe dat werkt en waar je rekening mee moet houden.

Stel je eens voor dat jouw bedrijf een kennisbank heeft die vol staat met informatie, cases en ervaringen over jouw werk. En dat je een persoonlijke digitale assistent een vraagt stelt over die informatie. Om vervolgens een panklaar antwoord te krijgen. Binnen seconden.

Hoeveel opzoekwerk zou dat schelen? En in welke mate zou dat jouw werk beter en sneller maken? De vraag stellen, is ’m beantwoorden.

Natuurlijk zou je Microsoft Copilot alle documenten in je Microsoft 365-ecosysteem kunnen laten doorzoeken. Maar wat als je niet telkens ál je bronnen wilt raadplegen? Of als je een chatbot voor klanten wilt inzetten?

Dan wil je niet dat die klanten door jouw interne Microsoft-omgeving struinen. Gelukkig is er een flexibelere oplossing.

Chatbot op basis van een RAG-systeem

Met een chatbot maak je informatie toegankelijk via natuurlijke taal, op basis van een Retrieval-Augmented Generation-systeem met een Large Language Model (LLM), zoals Microsoft Copilot, Google Gemini of ChatGPT.
Dat is dan ook precies wat ik heb gedaan. Ik bouwde een chatbot waarmee mijn collega’s eenvoudig onze interne kennisbank kunnen bevragen.

Hoe dat werkt? Een RAG-systeem is een pipeline waarin ieder onderdeel informatie doorgeeft aan het volgende onderdeel.

Als ik het platsla, zit dat zo:

1. Verzamel je informatiebronnen

Het eerste onderdeel is het verzamelen van alle informatiebronnen die je wilt ontsluiten. Dat kunnen gestructureerde bronnen zijn, zoals databases en API’s.
Maar ook ongestructureerde bronnen, waaronder e-mails, pdf’s, afbeeldingen of Teams-chatberichten. Deze verzamel je in bijvoorbeeld een data lake.

2. Verwerk je informatiebronnen

Om de informatie straks op een geschikte manier aan een embedding model te kunnen presenteren, moet je de informatie verwerken en structureren. Voor iedere informatiebron geldt een andere aanpak.

Grote documenten knip je bijvoorbeeld op in stukken, zoals per hoofdstuk of alinea. Kleine documenten bundel je juist. Dat doe je allebei met een document processor.

Afbeeldingen laat je bijvoorbeeld herkennen door een OCR-toepassing. Bij het verwerken en structureren van de informatie zoek je steeds de juiste balans tussen het meegeven van voldoende context en het beperken van het aantal verschillende onderwerpen.

3. Voed een embedding model

Een embedding model schat zo goed mogelijk in waar een stuk informatie over gaat. Zit er veel verschillende informatie in één stuk? Of zijn de stukken heel groot? Dan kan het model de informatie moeilijk interpreteren. Vandaar ook stap 2, het opknippen van de informatie.

Het model zet elk stuk informatie om in een zogeheten embedding: een vector die de betekenis van de tekst vastlegt in een reeks getallen. Zo maak je semantisch zoeken mogelijk.
Dus niet op exacte termen, maar op inhoudelijke betekenis. Dat leidt straks tot een zo goed mogelijke match tussen jouw vraag en de informatie die je zoekt. De embeddings sla je vervolgens op in een vector database.

Als voorbeeld onderstaande architectuur waarop onze chatbot is gebaseerd, lees data platform obv Azure Databricks:

Architectuur chatbot databricks

4. Zet een retriever aan het werk

Het volgende onderdeel is de retriever. Dit onderdeel gebruikt hetzelfde embedding model om de gebruikersvraag te vertalen naar een embedding.
Vervolgens haalt het de meest vergelijkbare stukken uit de vector database. Hier is finetuning mogelijk in de strategie die je toepast.

Bijvoorbeeld de vijf meest vergelijkbare stukken ophalen, een drempelwaarde gebruiken voor de vergelijkingsscore, of een combinatie van beide.

Dat betekent dus ook dat je in deze stap kunt filteren op het aantal bronnen dat je wilt doorzoeken of zorgen dat een gebruiker alleen de informatie terugkrijgt waarvoor diegene is geautoriseerd.

5. Voed een Large Language Model

Nu komt het LLM in beeld. Uiteraard kies je eerst een LLM. Vervolgens wordt de context die door de retriever is opgehaald, samen met de gebruikersvraag, aan de LLM gegeven.

Je bepaalt zelf hoe het model moet reageren: formeel of informeel, kort of uitgebreid, wat je wilt. Ook kun je op dit moment voorkomen dat je LLM gaat ‘hallucineren’.
Dat houdt in dat het LLM zelf informatie erbij gaat verzinnen, bijvoorbeeld met informatie van het internet. Dit regel je allemaal via een prompt template die je kunt blijven bijschaven op basis van het gedrag van het model.

6. Bouw of integreer een frontend

Tot slot zorg je voor een gebruiksvriendelijke interface. Dat kan via een eenvoudige frontend in bijvoorbeeld StreamLit, waarmee je snel apps in Python ontwikkelt.
Of door de chatbot te integreren in Teams of Slack. Op die manier kun je op een natuurlijke manier met de chatbot communiceren.

Meer van dit in je mailbox?

We sturen je circa 6x per jaar een email met handpicked cases, blogs en tips.

Een paar aandachtspunten

Nu heb je een chatbot waarmee je kunt ‘praten’ om gemakkelijk antwoorden te krijgen die normaal gesproken verscholen zitten in een enorme berg informatie.

Voordat je zelf aan de slag gaat, heb ik nog wel een paar punten om rekening mee te houden:

1 Doe alles in Databricks

Er zijn veel verschillende tools om een chatbot te bouwen, maar met Databricks heb je alles onder één dak. Waaronder het hosten van een eigen vector database en LLM. Wel zo handig.

Bovendien ben je zo sneller opgestart, dan wanneer je alles zelf nog aan elkaar moet koppelen. En door de mogelijkheden van Unity Catalog in Databricks kun je ook meteen je data governance goed regelen.

2 Denk aan je security

Veel interne informatie is gevoelig. Denk aan gegevens van medewerkers of aantekeningen over hoe je een specifieke opdracht bij een klant hebt afgerond. Je wilt voorkomen dat die informatie lekt.

Dat ondervang je door voor een LLM een premium abonnement af te sluiten. Jouw informatie wordt dan versleuteld. Maar let wel, het verplaatst zich dan nog steeds via internet.
Door zelf een LLM te hosten, bijvoorbeeld met Databricks, werk je binnen een eigen, volledig afgesloten omgeving. Nóg veiliger.

3 Begin simpel

Maak je chatbotproject niet te groot, start klein en simpel. Kies bijvoorbeeld een standaard document processor. Test vervolgens hoe het werkt met allerlei verschillende vragen. Werkt het nog niet goed genoeg?

Probeer het dan pas te verbeteren. Datzelfde geldt voor je instructies aan het LLM. Start met een minimale en duidelijke prompt, test deze uitvoerig en wijzig of vul vervolgens aan. Zo krijg je steeds betere iteraties van de chatbot.

Hieronder een demo van Cochat waarbij we intern ons eigen kennissysteem eenvoudig kunnen doorzoeken:

Aan de slag?

Een chatbot waarmee je kunt communiceren om informatie snel te doorzoeken, bespaart je flink wat zoektijd.

Wil je er zelf mee aan de slag?

Of heb je vragen over hoe ik het heb aangepakt? Neem gerust contact met ons op, ik help je graag!

Janko Chavannes

Geschreven door

Janko Chavannes

Data engineer

Op de hoogte blijven van de laatste ontwikkelingen en webinars?

Schrijf je dan in voor de nieuwsbrief en ontvang circa 6x per jaar een selectie van blogs, cases, webinars en nieuws in je mailbox.

Meer over dit onderwerp