AI assistent experiment (dec 2025)
Op deze pagina leg ik uit hoe je eenvoudig en tegen minimale kosten een AI powered assistent kunt opzetten. Ik ben van mening dat een dergelijke
vraag en antwoord assistent op de website van elk MKB bedrijf een interessante meerwaarde kan bieden voor bezoekers die snel antwoord willen op hun vragen. De kosten zijn nihil en
de implementatie is, dankzij AI, relatief eenvoudig. Daarnaast is deze assistent 7x24 beschikbaar voor het beantwoorden van vragen van bezoekers en neemt hij geen pauzes.
Kom maar op met die vragen
Het idee is om een assistent met behulp van AI te bouwen die vragen kan beantwoorden over een specifieke dataset, in dit geval de informatie die te vinden is op mijn eigen website (daar ben je nu).
Ik heb gekozen voor een RAG-architectuur (Retrieval-Augmented Generation) om een kwalitatieve "Stel Still Have IT een vraag" functie te bouwen met een minimale footprint en lage kosten.
Hier is hoe de drie onderdelen van RAG samenwerken:
1. Retrieval (Ophalen)
In plaats van de hele website naar de AI te sturen, wat te duur en te groot is, zoekt het systeem eerst in de data.
Chunks: De websiteteksten zijn opgeslagen in kleine stukjes of "chunks".
Embeddings: Deze stukjes tekst zijn met de Gemini API omgezet in getallen (vectoren).
Zoeken: Wanneer een bezoeker een vraag stelt, berekent het programma welke tekststukkies (chunks) het meest lijken op de vraag.
2. Augmentation (Aanvullen)
De gevonden relevante tekststukjes worden als "context" toegevoegd aan de vraag van de gebruiker.
We sturen dus niet alleen de vraag naar GROQ, maar een pakketje: "Hier is wat extra informatie van de website (de context).
Dit wordt gebruikt om de vraag te beantwoorden".
3. Generation (Genereren)
Het AI-model (in mijn geval Llama-3.3-70b via GROQ) leest de meegestuurde context en de vraag.
Op basis van deze specifieke informatie genereert het model een zakelijk en accuraat antwoord (hoop ik) in het Nederlands.
Grote stappen
- Data verzamelen: Ik heb met een klein Python programmaatje de inhoud van mijn website opgeslagen zoals deze wordt getoond aan een bezoeker in txt bestand.
- Data voorbewerken: Ik heb met behulp van Gemini de opgeslagen tekst omgezet naar een JSON formaat, de CONTEXT.
- Een GROQ account aangemaakt: GROQ biedt gratis toegang tot hun AI-chips en API's, wat het ideaal maakt voor dit experiment.
- Een Google Gemini account aangemaakt: Gemini biedt gratis toegang tot hun embeddings API, wat we nodig hebben om de tekst om te zetten naar vectorrepresentaties.
- Ik heb met Python Flask een backend opgezet die op basis van de CONTEXT antwoorden op de gestelde vragen formuleert. De assistent zoekt naar relevante tekstsegmenten in de vector database en gebruikt deze om antwoorden te genereren met behulp van een taalmodel.
- De assistent JossAI kan vragen beantwoorden zoals "Waarom zou ik kiezen voor Still Have IT?", "Wat zijn de zwakke punten van Jos".
Het lijkt moeilijker dan het is
- Python (100 regels code inclusief uitleg)
- HTML, CSS en Javascript (enkele regels voor de frontend)
- Flask (Python webframework om snel webapplicaties te bouwen)
- Numpy (gebruikt voor het scoren van antwoorden bij vragen)
- de GROQ API (platform voor het Large Language Model (LLM))
- llama-3.3-70b-versatile model (LLM zeer krachtig en gratis op Groq)
- de Google Gemini Embeddings API (om tekst om te zetten naar vectorrepresentaties)
Een plaatje zegt meer dan 1000 woorden
Waarom deze keuzes?
Waarom GROQ? Ze hebben een zeer royale free tier. Daarnaast is GROQ de snelste AI-chip ter wereld.
JossAI antwoordt letterlijk voordat je met je ogen knippert. GROQ is ook zeer kostenefficiënt, wat het ideaal maakt voor toepassingen zoals deze chatbot.
Waarom het kleine LLM model llama-3.3-70b-versatile? Dit model is zeer capabel en kan prima antwoorden genereren op basis van de context die we aanleveren.
Door een kleiner model te gebruiken, kunnen we de kosten laag houden en toch goede prestaties leveren.
De totale kosten voor het draaien van deze assistent zijn minder dan $10 per maand, wat het zeer betaalbaar maakt voor MKB bedrijven die hun klanten een betere ervaring willen bieden.
Ik heb ervoor gekozen om alleen de relevante context naar het LLM model te sturen, in plaats van de hele website. Dit zorgt ervoor dat we binnen de token limieten blijven en
vermindert de kosten aanzienlijk. Het model hoeft alleen maar te werken met de informatie die relevant is voor de vraag die gesteld wordt.
De assistent is te benaderen via het chat icon rechtsonder op de pagina. Probeer het zelf uit door een vraag te stellen over Still Have IT en/of over mijzelf!
Ik heb de gebruikte code en uitleg van versie 2 op GitHub gezet, zodat je zelf ook aan de slag kunt met het bouwen van een AI assistent voor jouw website of bedrijf.
Natuurlijk kan ik je daar ook bij helpen als je dat wilt.
Je vindt de code en uitleg hier: GitHub.
Bugfix, versie 2!!
In de eerste versie bleek dat mijn productie omgeving in de cloud bij Pythonanywhere een stuk trager is dan mijn lokale omgeving.
Met name de embeddings (omzetting van zinnen naar vectoren) in mijn eigen cloud omgeving afhandelen geeft problemen.
Dit komt door de beperkte resources die Pythonanywhere toekent aan Hacker accounts.
In plaats van dure resources bij te kopen heb ik, in de tweede versie, ook het zoeken van relevante context uitbesteed aan een snelle maar goedkope API.
Ik heb nu ook de embeddings via een API opgevraagd bij Google Gemini.
Zodat zowel het denken (LLM) via GROQ als het zoeken (embeddings) via Gemini zijn nu uitbesteed aan goedkope API's (gratis bij beperkt gebruik).
Agentic Workflow, versie 3!!
Ja ik hype gewoon lekker mee 😉, de AI assistent biedt nu ook de mogelijkheid om via jouw website url te kijken of er een match is tussen ons.
Hiervoor worden de gegevens van jouw website gelezen en gebruikt om te matchen met mijn context en daarmee te bepalen of we wat raakvlakken hebben.
Zou ook wel eens een mooie oplossing voor een datingsite kunnen zijn 🤷♂️. Daarnaast is er een brainstorm buddy die jouw probleem en mijn context omzet
naar een oplossingsrichting voor jouw uitdaging.
Zelflerend, versie 4!!
JossAI voldoet nog niet helemaal aan het RSI principe (Recursive self-improvement) maar de context wordt periodiek uitgebreid op basis van de vragen
waarop geen of een minder antwoord gegeven wordt. De gebruiker bepaalt via feedback duimpjes of een antwoord goed is of niet.
Vraag, antwoord en feedback worden als historie vastgelegd en vervolgens gebruikt om de context aan te passen of uit te breiden.
Op deze manier leert JossAI continu bij en verbetert hij zijn antwoorden, oftewel JossAI realiseert steeds weer een betere versie van zichzelf.
De assistent bevat nu:
Chat : informatie gericht
Match : commercieel gericht
Brainstorm : oplossingsgericht
Feedback : kwaliteitsgericht
Zelflerend : verbeter gericht
Nog een werkend voorbeeld.
Enthousiast geworden over de mogelijkheden van Gemini embeddings heb ik een vraagbaak opgezet met kennis van de Vlaardingse Vaart
en de Broekpolder. De kennis bestaat bij de start uit 178 contextregels maar kan natuurlijk verder worden uitgebreid. Op basis van
eventuele feedback (+/-) kan de context verder worden uitgebreid of aangepast. Ook voor deze toepassing geldt dat er geen extra kosten
zijn gemaakt. Hier kan je de Vraagbaak uitproberen.
Ik ben benieuwd wat je van dit experiment vindt. Laat gerust een reactie achter hieronder of stuur me een bericht via de contactpagina.
Ik sta open voor suggesties en verbeteringen om JossAI nog beter te maken
Gebruik onderstaand formulier om commentaar te geven op dit item.