Van data naar conversaties: hoe bouw ik een eigen AI zonder dat mijn data op straat ligt?

Als experiment hebben wij een maatwerk AI-chatbot ontwikkeld die getraind is op een grote dataset met financiële informatie, waaronder 67.358 facturen, 80.418 transacties en 3.915 leveranciers. Hierdoor kunnen gebruikers communiceren met deze informatie zonder complexe formules, scripts of queries. De data zelf wordt niet gedeeld met het AI-model; alleen een wiskundige samenvatting hiervan. Hierdoor kan een grote hoeveelheid kennis op een veilige manier toegankelijk worden gemaakt via een chatbot.

Voordelen van AI-chatbots
AI-chatbots zijn een interessante ontwikkeling die de mens-computer interactie eenvoudiger maakt. Mensen weten niet altijd precies waar ze naar op zoek zijn en stellen daardoor soms onlogische vragen. Computers en data zijn logisch opgebouwd en bevinden zich in gestructureerde tabellen. Chatbots overbruggen dit probleem door menselijke vragen te vergelijken met veel informatie waarop een AI-LLM (Large Language Model) is getraind. Op basis hiervan stelt de chatbot een waarschijnlijk antwoord voor.

Naarmate de ontwikkeling en het aantal gebruikers van chatbots toeneemt, worden deze verbeterd door de bedrijven erachter. De hoeveelheid informatie waarop het model is getraind wordt groter, de reacties sneller en ze kunnen meerdere redenatiemethoden combineren of afwisselen. Er bestaan chatbot-modellen die zich richten op tekst, beeld, audio, of een combinatie hiervan. Dit laatste noemt men multimodaliteit: het toepassen van meerdere modellen om antwoord te geven op een vraag.

Nadelen van AI-chatbots
Het nadeel van chatbots is dat de taalmodellen getraind zijn op datasets van soms terabytes groot. Niet al deze broninformatie is nodig bij het beantwoorden van een vraag. Hierdoor kan een chatbot minder effectief zijn dan een specifiek algoritme, ontstaat er soms ruis en verbruikt een AI-chatbot veel energie. Deze ruis kan er ook voor zorgen dat een AI-chatbot gaat hallucineren of gokken bij een antwoord. Dat is onwenselijk en beïnvloedt de betrouwbaarheid van het voorgestelde antwoord. Vaak wordt de vraag opgeslagen op een server zonder dat je weet wat het bedrijf achter de chatbot met deze informatie doet. Dit zou gebruikt kunnen worden om een nieuwe versie van de chatbot te maken of je informatie zou verkocht kunnen worden aan andere bedrijven, bijvoorbeeld om advertenties te tonen op social media.

Een veilige AI-oplossing: gebruik van Retrieval-Augmented Generation (RAG)
Om het hallucineren en de energieconsumptie terug te brengen en de informatie niet met de buitenwereld te delen, bijvoorbeeld om redenen zoals wet- en regelgeving of bedrijfsgevoeligheid, kan een maatwerk AI-chatbot een oplossing bieden. Deze chatbot wordt getraind op specifieke informatie of geïnstrueerd om zich binnen de aangegeven kaders en protocollen te gedragen. Momenteel worden wereldwijd meerdere mogelijke oplossingen bedacht, zoals RAG (Retrieval-Augmented Generation) of het gericht trainen van een AI-model met specifieke informatie. Onderstaande illustratie (Afbeelding 1) geeft de werking aan van het RAG-proces.

Werking van het RAG-proces, waarbij AI en een subset van data gebruikt wordt.

Bedrijven zoals NVIDIA en OpenAI zijn sinds 2023 actief bezig met de ontwikkeling en toepassing van Retrieval-Augmented Generation (RAG) technieken om de nauwkeurigheid en betrouwbaarheid van generatieve AI-modellen te verbeteren. Mooie voorbeelden hiervan zijn de ontwikkeling van NVIDIA’s NeMo Megatron en OpenAI’s Assistants Codex. NVIDIA heeft in hun NeMo Megatron model RAG toegepast om feiten uit externe bronnen op te halen en te integreren in hun AI-modellen. OpenAI’s Codex, bekend van GitHub Copilot, maakt gebruik van vergelijkbare technieken om code suggesties te geven die gebaseerd zijn op een uitgebreide dataset van openbare code repositories.

Deze aanpak heeft vergelijkbare kenmerken met federated learning principe: in plaats van data naar het algoritme te brengen, breng je het algoritme naar de data.

Hoe zou je een RAG chatbot kunnen maken?
Het principe van onze oplossing bestaat uit het creëren van een centrale plek waar informatie wordt opgeslagen, gestructureerd en maximaal verrijkt met relevante informatie. In ons geval hebben wij 67.358 facturen ge-OCR’d (Optical Character Recognition in Python), geïndexeerd met AI en een algoritme, deze opgesplitst naar 188.470 factuurregels en de gegevens van 3.915 relaties uitgebreid met publieke informatie zoals websitegegevens en de producten die het bedrijf levert. Wij hebben als fundering gekozen voor een Laravel-omgeving met een MySQL-database en Python-pipelines om externe data op te halen en op de juiste manier te verwerken in de database. Voor een volgend project zouden wij het opslaan en verrijken van deze informatie mogelijk eerder in een datapipelinemodel verwerken, omdat er nu veel handwerk bij komt kijken.

Vervolgens hebben wij ervoor gekozen om een willekeurig sample van tien records uit onze dataset te selecteren. Hiervoor zou ook gesynthetiseerde data gebruikt kunnen worden, mits deze niet te veel bias bevat. Daarna hebben we via een dictionary in menselijke taal de structuur van de dataset beschreven. Zie dit als een schema waarin de relatie tussen de databasetabellen, de betekenis van alle kolommen en de te verwachten waarden per tabel beschreven worden. Hierna hebben wij LLM-modellen getraind (OpenAI GPT-4o API en Llama 2.0) met een set instructies en informatie uit de dictionaries. Dit is gebaseerd op een data retrieval-principe, ook bekend als vectorized informatiestructuren, zoals we kennen uit vectordatabases, vectoropslag of vectorzoekmachines: een database die vectoren samen met andere gegevensitems kan opslaan. De brondata zelf is dus niet gedeeld met de modellen, voornamelijk vanwege de omvang van deze dataset en omwille van wet- en regelgeving en bedrijfsveiligheid. Ook hebben wij duidelijke instructies geschreven over de context, de wijze waarop informatie geïnterpreteerd moet worden en de beoogde uitkomst van de chatbot.

Testen in de praktijk
Ons idee hebben we verder uitgewerkt en getest met het innovatieve Nederlandse bedrijf Schadenberg Groep. Schadenberg, met vele dochterbedrijven en business units, heeft een diverse leveranciers- en klantbasis, met complexe inkoop- en verkoopkanalen verspreid over de organisatie. Dit leidt tot een decentraal inzicht in data, waardoor kansen voor kostenbesparingen nog onbenut blijven. Door het centraliseren van inkoopdata en de toepassing van AI, beogen we een kostenreductie van 3-4%.

Via interviews en demo-sessies hebben we de inzichten van stakeholders geïntegreerd in Fusion AI (Afbeelding 2) – een fusie tussen AI en eigen bedrijfsdata. Deze moderne digitale oplossing, ontworpen en ontwikkeld binnen een Proof of Concept-project, richt zich op het verbeteren van inzicht en begrip van financiële data-analyse binnen Schadenberg Groep en haar dochterondernemingen. Het systeem maakt daarnaast gebruik van geavanceerde AI-technologieën om facturen te analyseren, te categoriseren en relevante bedrijfsinformatie te verrijken. Dit resulteert in een beter begrip door het AI-model en levert betere antwoorden op gestelde vragen. Denk daarbij aan ‘Welke leveranciers van grondwerken hebben hun prijzen het meest verhoogd in het afgelopen jaar?’ of ‘Wat hebben wij uitgegeven aan isolatiemateriaal in 2023?’. Redelijk simpele vragen waarbij de financiële afdeling normaal flink moet zoeken in draaitabellen, Microsoft Power BI-rapportages of grootboeknummers. Het gegeven antwoord is nog niet perfect en wordt beïnvloed door de kwaliteit van input-data, maar biedt veel potentie voor de toekomst.

Bovendien hebben we standaardvragen voorbereid op basis van de kostendragers, zodat relevante informatie direct inzichtelijk is. Dit maakt het voor gebruikers nog eenvoudiger om snel toegang te krijgen tot de belangrijkste gegevens en analyses.

De oplossing is ontworpen om inzicht te geven in de inkoopdata, wat leidt tot betere strategische beslissingen en kostenbesparingen. Dit helpt Schadenberg om niet alleen operationeel efficiënter te worden, maar ook om strategische inkoopvoordelen te realiseren op de korte termijn. Op de lange termijn legt deze aanpak een solide basis voor verdere innovaties en verbeteringen, wat bijdraagt aan de duurzame groei en marktpositie van Schadenberg Groep.

“Bij Schadenberg geloven we dat strategische inkoop en innovatie sterk bijdragen aan onze groei. Door gebruik te maken van geavanceerde AI-oplossingen, kunnen we onze inkoopprocessen optimaliseren en waardevolle inzichten verkrijgen die ons helpen om efficiënter en effectiever te opereren. Dit stelt ons in staat om niet alleen kosten te besparen, maar ook om strategische beslissingen te nemen die bijdragen aan onze voortdurende groei en marktpositie.”

– Ted Kieft, Commercieel Directeur bij Schadenberg


Technische details

De oplossing is ontworpen om gebruikers in staat te stellen vragen te stellen via een chat-interface in Laravel. Wanneer een gebruiker een vraag stelt, wordt deze gefilterd om onwenselijke vragen, zoals het verwijderen of manipuleren van data, te elimineren en vervolgens omgezet in een gestructureerd JSON-formaat. Deze gestructureerde vraag wordt via een API naar de chatbot gezonden. De OpenAI-assistent heeft duidelijke instructies en een goed begrip van de data via eerder gemaakte dictionaries en is verantwoordelijk voor het interpreteren van de vraag (zie afbeelding 3).

Het proces van ophalen externe data naar het veilig communiceren via AI.

De AI-assistent wordt gestart zonder voor elke vraag een nieuwe thread aan te maken. We blijven binnen één enkele thread communiceren om de context van het gesprek te behouden. Momenteel experimenteren we met verschillende benaderingen om het geheugen van de AI te verbeteren. Een van deze benaderingen omvat het gebruik van een geheugen per vraag en het implementeren van een multithreaded systeem. Dit zou gebruikers in staat stellen om meerdere vragen tegelijkertijd te stellen en door te gaan op individuele onderwerpen zonder dat de context verloren gaat. Dit experiment is gericht op het verbeteren van de flexibiliteit en efficiëntie van de AI-assistent bij het afhandelen van complexe en doorlopende gesprekken.

De chatbot genereert een antwoord in de vorm van een voorgestelde zoekopdracht (SQL-query) in JSON. Deze zoekopdracht wordt opnieuw gefilterd op ongewenst gedrag en vervolgens omgezet in een eloquente of SQL-query in de Laravel-view. De data wordt vervolgens opgehaald uit de MySQL-database en weergegeven op basis van de vraag. De Laravel-controller zet deze vraag om naar een antwoord in PHP en HTML voor de view. Fouten en afwijkingen in de data worden zo veel mogelijk voorkomen, maar zijn niet volledig uit te sluiten. Vragen en antwoorden worden opgeslagen in een logbestand, waarvan de informatie periodiek wordt gebruikt om de instructies en het model te verbeteren.

Leerpunten uit de praktijk
Tijdens het ontwikkelingsproces van deze AI-oplossing hebben we waardevolle inzichten opgedaan en verschillende uitdagingen overwonnen.

  1. Het creëren van vectorized databases was complex en tijdrovend. Het trainen van modellen met TensorFlow en Transformers duurde dagen. Deze processen vereisten veel experimenteren en fine-tuning om optimale prestaties te bereiken.
  2. Het gebruik van GPU-ondersteuning op een M1 Pro MacBook bracht aanzienlijke prestatiewinsten, maar het gaf ook beperkingen. De specificaties van de M1 Pro bleken niet altijd voldoende voor intensieve trainingssessies, waardoor we vaak terugvielen op externe cloudoplossingen.
  3. Het Llama-model presteerde lokaal traag bij het verwerken van onze dataset, ook op zwaardere M2 hardware. Dit zorgde voor frustratie en noodzaakte ons om verschillende optimalisaties en infrastructuuraanpassingen door te voeren om de verwerkingsduur te verkorten.
  4. Het classificeren van 188.470 factuurregels kostte ons ongeveer 5.500 euro aan rekenkracht. Dit proces duurde drie dagen, wat aanzienlijke financiële en tijdsinvesteringen vereiste.

Ideeën voor de toekomst
Onze toekomstige plannen omvatten het uitbreiden van integraties met diverse gegevensbronnen, waardoor de AI rijkere context en nauwkeurigere antwoorden kan genereren. We experimenteren met geavanceerde machine learning technieken om de modellen te verfijnen voor betere classificaties en contextueel begrip. Daarnaast onderzoeken we de implementatie van interactieve grafieken en multimodale interfaces om gebruikers een rijkere ervaring te bieden. Dit omvat zowel tekst- als spraakinteractie en visuele hulpmiddelen.

De gebruikte technologieën in ons voorbeeld:

  • Laravel: voor de webinterface en routing.
  • Laravel Sanctum: voor authenticatie.
  • Laravel Tinker: voor interactief gebruik van de Laravel applicatie.
  • Laravel Breeze: voor een eenvoudige authenticatie starter kit.
  • Laravel Sail: voor het opzetten van de ontwikkelomgeving met Docker.
  • MySQL: voor de opslag van data.
  • Python-pipelines: voor het ophalen en verwerken van externe data.
  • OpenAI GPT-4 API en Llama 3.0: voor het trainen van de AI-modellen.
  • GuzzleHTTP: voor het maken van HTTP-verzoeken.
  • Doctrine DBAL: voor geavanceerd databasebeheer.
  • OpenAI-PHP Client: voor interactie met de OpenAI API.
  • PHPOffice/PhpSpreadsheet: voor het verwerken van spreadsheet-bestanden.
  • Spatie Simple Excel: voor eenvoudige Excel-import en -export.
  • FakerPHP/Faker: voor het genereren van testdata.
  • PHPUnit: voor het testen van de applicatie.
  • Spatie Laravel Ignition: voor het debuggen van fouten in Laravel.
  • Docker Compose: voor het orkestreren van verschillende services zoals MySQL, Redis, MeiliSearch, PHPMyAdmin, en Selenium.
    • MySQL docker image: mysql/mysql-server:8.0
    • Redis docker image: redis
    • MeiliSearch docker image: getmeili/meilisearch
    • PHPMyAdmin docker image: phpmyadmin/phpmyadmin
    • Mailpit docker image: axllent/mailpit
    • Selenium docker image: seleniarm/standalone-chromium
  • Python-bibliotheken: voor dataverwerking, visualisatie en interactie met externe API’s.
    • h11: versie ~0.14.0, voor HTTP/1.1 implementatie.
    • pip: versie ~22.3.1, voor pakketbeheer.
    • distro: versie ~1.9.0, voor het detecteren van Linux-distributies.
    • pillow: versie ~10.2.0, voor beeldverwerking.
    • pandas: versie ~2.2.0, voor data-analyse en -manipulatie.
    • matplotlib: versie ~3.8.3, voor datavisualisatie.
    • seaborn: versie ~0.13.2, voor statistische datavisualisatie.
    • requests: versie ~2.31.0, voor HTTP-verzoeken.
    • python-dotenv: versie ~1.0.1, voor het laden van omgevingsvariabelen uit een .env-bestand.
    • openpyxl: versie ~3.2.0b1, voor het lezen en schrijven van Excel-bestanden.
    • openai: versie ~1.12.0, voor interactie met de OpenAI API.
    • ocrmypdf: voor het toevoegen van OCR-tekstlagen aan PDF-bestanden.
    • pdfplumber: voor het extraheren en manipuleren van tekst en metadata uit PDF-bestanden.

Handige links en bronnen
Onderstaand een selectie van bronnen die nuttig kunnen zijn voor verdere verdieping in de technologieën en methodologieën die we hebben toegepast in ons project. 

Met deze aanpak hopen we dat meer bedrijven zoals Schadenberg Groep de voordelen van AI en data-analyse kunnen benutten zonder compromissen op het gebied van veiligheid en privacy. Deze technologie biedt niet alleen praktische voordelen op de korte termijn, maar vormt ook een solide basis voor verdere technologische vooruitgang en duurzame groei.

Conclusie
De implementatie van AI-chatbots en RAG-technologieën zoals toegepast bij Schadenberg Groep, toont aan dat bedrijven aanzienlijke voordelen kunnen behalen door beter gebruik te maken van hun data. De verbeterde efficiëntie en nauwkeurigheid in financiële processen, gecombineerd met de mogelijkheid om snel en eenvoudig toegang te krijgen tot waardevolle inzichten, stellen organisaties in staat om strategische beslissingen te nemen die hun groei en marktpositie versterken. Met de voortdurende evolutie van AI-technologieën en de integratie van nieuwe data-bronnen, ligt de toekomst van bedrijfsdata-analyse en -optimalisatie binnen handbereik.

Meer nieuws

Alle artikelen

Mogen wij jouw digitale product ontwikkelen?

Probeer je levens van mensen makkelijker of efficiënter te maken, maar loop je vast op de ontwikkeling van een digitaal product? Bij Active Collective ontwikkelen we software voor verschillende sectoren. Wel hebben we specialistische ervaring binnen het Life Sciences & Health Care domein. Welke behoefte je ook hebt; Wij denken met je mee en komen samen tot de perfecte digitale oplossing voor jouw menselijke vraagstuk.

Guido

Neem contact op

Heb je vragen over een digitaal product? We helpen je graag verder. Neem contact met op met Guido voor meer informatie.

Active Collective B.V.
Noorderweg 42-44
1948 PK Beverwijk

0251-29 33 70
[email protected]