Adres
Utrecht, Veenendaal

Werktijden
Maandag tot en met vrijdag: 9.00 tot 17.00 uur
Weekend: 10.00 tot 17.00 uur

De tweede fase van QIntelligence bij Qfact: een geautomatiseerd systeem voor contentanalyse dat de documenten die gebruikers toch al uploaden omzet in projectaanbevelingen, gebouwd op de indexeringsbasis uit fase een.

  • OpdrachtgeverQfact, een SaaS-platform voor complexe analyses
  • Periode2023 tot 2025
  • RolHet initiatief van begin tot eind geleid
  • Gebouwd opDe indexeringsbasis van QIntelligence
  • Gebouwd binnen het platform, als een service tussen andere services, achter dezelfde API-laag als al het andere.
  • Minder administratieve last voor de gebruikers die dit leeswerk eerst zelf deden.
  • Aanbevelingen die niet veranderen naargelang wie die week het leeswerk deed.

Context

Fase een maakte de documenten doorzoekbaar. De waarde zat in wat ze zeggen. Gebruikers van Qfact lazen hun eigen uploads om te bepalen wat een project nodig had. Dat is nauwkeurig werk, traag werk, en werk dat een ander antwoord oplevert naargelang wie het die week doet.

De uitdaging

Een aanbeveling die de gebruiker niet vertrouwt is erger dan geen aanbeveling, want dan controleert die het met de hand en betaalt voor allebei. Het moest dus goed genoeg zijn op echte klantdocumenten, niet op een samengestelde steekproef. Het moest ook binnen het platform draaien, als een service tussen andere services, niet als een demonstratie ernaast.

Wat ik deed

  • Het initiatief van begin tot eind geleid, van de indexeringsbasis in fase een tot dit systeem, als één boog in plaats van twee projecten die elkaar toevallig opvolgden.
  • De analyseservice gebouwd in Python met Flask, binnen het bestaande microservices-landschap, lezend uit de geïndexeerde content die fase een beschikbaar had gemaakt.
  • De analyse-output omgezet in aanbevelingen, zodat wat het systeem oplevert een bruikbaar antwoord is voor de gebruiker die ervoor zit, niet een rapport over het document.
  • Het gevalideerd tegen echte documenten, itererend op wat klanten daadwerkelijk uploaden, want dat is de enige steekproef die uitmaakt of het werkt.
  • Het opgeleverd als platformfunctionaliteit, achter dezelfde API-laag als al het andere, zodat de rest van het platform het kon gebruiken zonder te weten wat erachter zit.

Het resultaat

  • Geautomatiseerde contentanalyse opgeleverd en in gebruik, geen proof of concept dat op een branch bleef liggen.
  • Het leeswerk aan documenten dat vroeger bij de gebruiker lag, doet nu het platform.
  • Betere projectaanbevelingen, en één boog van de indexeringsbasis naar de analyse daarbovenop.

Gebruikte technologieën

  • Python: De analyseservice.
  • Flask: Het framework voor de service.
  • Elasticsearch: De geïndexeerde documentcontent die de analyse leest.
  • Microservices: De architectuur waarin de service is gebouwd.
  • GraphQL: De API-laag over het platform.
  • OAuth 2.0: Autorisatie op de platform-API's waarlangs de analyseservice bereikbaar is.
  • Large language models: De modellen achter de contentanalyse.
  • OpenAI: Een van de gebruikte modelproviders.
  • Llama 2: Een van de gebruikte modellen.
  • RAG: Ophalen uit de geïndexeerde documenten die de analyse voeden.
  • Playwright: End-to-end-dekking van de analyseflows.
  • Jest: Geautomatiseerde tests rond de service.

De basis onder dit project is beschreven in het platform voor documentindexering en zoeken.