← Blog

Chat agents

Product-Q&A chat agent kiezen: de mkb-stack-methode

Hoe een Nederlandse shop met minder dan €20M omzet kiest tussen Shopify-native AI, self-hosted Inkeep en een custom Claude Agent SDK-build als er maandelijks 9.400 productvragen binnenkomen.

Jacob Molkenboer· Oprichter · A Brand New Company· 15 jun 2026· 9 min
Drie messing weegschalen op ivoren bureau, groen lint om kleinste, linnen lap, zacht raamlicht.

Dinsdagmiddag. Je doet de operatie voor een Nederlandse webshop die vorig jaar €8M omzette in specialistisch kookgerei. De CS-inbox is net door de 9.400 productvragen per maand gegaan, en je twee reps zijn de hele dag bezig met dezelfde zes dingen: inductie-compatibiliteit, pandiameter, of jullie naar België verzenden, de retourtermijn, cadeauverpakking, en of de nieuwe deksels op de oudere serie passen. De CEO las afgelopen weekend een LinkedIn-post over Shopify Sidekick. Je CTO stuurde een Inkeep-demo door. Een Slack-DM van je bureau stelde voor: 'bouw 'm gewoon op de Claude Agent SDK'. Piek Q3 begint over drie weken, en de board wil een chat agent live voor het zover is.

Drie weken is genoeg om er één te leveren. De verkeerde kiezen is genoeg om het seizoen te verliezen. Dit is de methode die we gebruiken als een Nederlandse shop onder €20M moet kiezen tussen een Shopify-native stack, een self-hosted Inkeep-deployment, en een custom build op de Claude Agent SDK.

De drie opties die een eerste schifting overleven

Je kunt een chat agent uit honderd app stores plukken. Het zijn meestal dunne wrappers rond een vector store en een vaste prompt. Voor een echte product-Q&A workload van 9.400 threads per maand zijn er drie architecturen die serieus meedoen.

Shopify-native AI. Sidekick doet merchant-automatisering binnen de admin. Op de storefront dekken het Shop Channel en de Inbox AI-laag klantvragen af. Setup is uren, geen weken. De trade-offs zijn reëel: je kunt het model niet kiezen, je kunt geen Nederlandse tone-of-voice schrijven die jou écht bevalt, en je conversation trace zit achter de UI van Shopify.

Inkeep + Postgres, self-hosted. Inkeep is uit de doos gebouwd voor product-Q&A: retrieval, citations, fallback naar mensen. Self-hosted draaien op een kleine EU-VPS met Postgres voor traces en pgvector voor de index houdt de data binnen de unie. Setup duurt twee tot drie weken als je productcatalogus al schoon is, langer als dat niet zo is.

Custom Claude Agent SDK-build. Je schrijft de loop zelf. Je definieert de tools: prijsopvraging, voorraad, retourbeleid, verzendcalculator, inductie-compatibiliteit. Je bezit de trace store en de viewer. Het plafond ligt hoog; time-to-live is vier tot acht weken. Hier grijp je naar als product-redenering het lastige onderdeel is, niet retrieval.

De rekensom per gesprek bij 9.400 threads

Pitch decks noemen altijd kosten per gesprek. Die decks kloppen niet, want ze laten infra weg, plus de piek in maand één als de bot overal naast zit.

Eerlijke steady-state cijfers voor 9.400 gesprekken per maand, gemiddelde tracelengte van zes tot acht beurten, één of twee tool calls per gesprek:

  • Shopify-native: zit in je plan. Marginale kosten per gesprek zijn feitelijk nul. De echte kostenpost is de Shopify Plus-upgrade als je huidige tier de AI-laag niet bevat, en dat is een vast bedrag dat niet meegroeit met conversatievolume.
  • Inkeep self-hosted: infra ligt rond €250 tot €400 per maand voor een kleine VPS, managed Postgres en de vector index. Modelkosten, met prompt caching en een mix van een goedkope classifier en Claude Sonnet 4.5 voor het antwoord, komen op ongeveer €0,03 per gesprek. Totaal: ruwweg €0,06 per gesprek op dit volume.
  • Custom Claude Agent SDK: infra €150 tot €300 per maand. Modelkosten €0,04 tot €0,07 per gesprek, afhankelijk van hoeveel tool calls je toestaat. Het getal dat niemand opschrijft, is engineering-tijd. Smeer acht weken senior bouwwerk uit over twaalf maanden en je zit op €1,50 tot €3 per gesprek in jaar één. Daarna valt het in jaar twee in een diep gat.

Kijk je alleen naar de steady-state kolom, dan is het antwoord altijd 'Shopify-native, het is gratis'. Kijk je naar jaar één, dan wint Inkeep met grote voorsprong. Kijk je naar de klanttevredenheid-kolom, dan wint custom vaak, omdat de agent daadwerkelijk over je catalogus kan redeneren in plaats van uit een snippet te gokken. Kies de kolom die je CEO gaat meten.

Effect op retourpercentages in de eerste 90 dagen

Product-Q&A agents drukken retouren omlaag zoals goede stationsbewegwijzering treinvertragingen omlaag drukt: door verwachtingen te zetten voordat iemand zich vastlegt. Het mechanisme is saai. Een klant vraagt 'werkt deze pan op inductie?', de bot zegt ja of nee met een verwijzing naar het specsheet, de klant koopt de juiste pan of koopt niet, en je verstuurt geen verkeerde pan naar Maastricht en weer terug.

Bij een kleine N van NL e-com klanten zien we dat pre-purchase Q&A-verkeer dat een correct, onderbouwd antwoord krijgt correleert met een daling van 6% tot 12% in het retourpercentage op de SKU's die de bot afdekt, gemeten over 90 dagen tegen een baseline van het voorgaande kwartaal. De eerste twee weken zijn meestal rommelig en soms negatief, omdat de bot stellig fout zit over één specifiek ding en klanten op die verkeerde informatie handelen. Reken daarop.

Waarschuwing

Zit je bot in de eerste maand fout over retourbeleid of verzendkosten, dan stijgen retouren, ze dalen niet. Zet die twee onderwerpen achter een human handoff totdat je 200 traces hebt gelogd en een CS-lead ze gelezen heeft.

De 90-daagse verbetering van het retourpercentage is de metric waar je CEO naar vraagt. De metric waar je finance-lead naar vraagt, is brutomarge-herstel: een daling van 6% in retouren op een SKU met €40 retour-shipping en handling is €2,40 per voorkomen retour, maal elke retour die je vermijdt.

Wie leest de trace als een klant gratis verzending claimt

Dit is de vraag die de meeste architectuur-verhalen overslaan. Het is ook de vraag die bepaalt of je legal team het project laat live gaan.

Onder het Nederlandse consumentenrecht kunnen uitspraken die je agent tegen een koper doet je binden aan de offerte, op dezelfde manier waarop een verkoper die een telefoonkorting belooft het bedrijf bindt. Als een klant in Antwerpen een chat screenshot waarin de bot zei 'verzending naar België is gratis', moet iemand de trace lezen, beslissen of de screenshot echt is, en beslissen of je hem honoreert. Voor vrijdag. Vaak voordat de klant een chargeback indient bij zijn cardissuer.

Dat is een workflow-vraag, geen model-vraag. Scoor elke optie hierop.

  • Shopify-native: de trace leeft in de Shopify-admin. CS-reps zien hem. Export is beperkt. Moet je een trace aan je advocaat overhandigen, dan maak je een screenshot.
  • Inkeep self-hosted: de trace leeft in je Postgres. Jij bepaalt wie er SELECT op mag doen. Je CS-lead krijgt een klein intern dashboard met read-only toegang, en je vindt elke trace die 'shipping' of 'verzending' noemt binnen een seconde.
  • Custom Claude Agent SDK: jij bouwde de trace store, dus jij bouwt de viewer. Dat klinkt als een nadeel, maar dit is vaak waar custom wint: je CS-lead opent een Linear-achtige inbox met gevlagde traces, geen generieke chat log.

Hou je de trace data zelf, dan komt AVG mee, en AVG betekent een retentiebeleid. Het goedkoopste beleid om op dit volume te onderhouden, is maandelijkse partities in Postgres die op schema gedropt worden. Er liep deze week een populaire thread op Hacker News met het argument dat de enige schaalbare delete in Postgres DROP TABLE is, en dat is precies de hefboom die je wilt voor een chat-trace store: hou drie maanden warm, drop de rest atomair met een partition swap. De Postgres-partitioneringsdocumentatie is de juiste startplek.

CREATE TABLE chat_trace (
  id          bigserial,
  thread_id   uuid        NOT NULL,
  created_at  timestamptz NOT NULL,
  role        text        NOT NULL,
  content     text        NOT NULL,
  tool_name   text,
  tool_args   jsonb,
  PRIMARY KEY (id, created_at)
) PARTITION BY RANGE (created_at);

CREATE TABLE chat_trace_2026_06 PARTITION OF chat_trace
  FOR VALUES FROM ('2026-06-01') TO ('2026-07-01');

CREATE INDEX ON chat_trace_2026_06 (thread_id);
CREATE INDEX ON chat_trace_2026_06 USING gin (to_tsvector('dutch', content));

-- Drie maanden later, drop de hele maand in O(1):
DROP TABLE chat_trace_2026_03;

Vijf regels SQL. Het verschil tussen een blije DBA en een incident om 4 uur 's nachts in maand dertien.

De beslismatrix die we echt gebruiken

Scoor op vijf dimensies, gewogen naar jouw situatie.

  1. Tijd tot eerste bruikbare trace (dagen). Shopify-native wint dit met een week voorsprong.
  2. Steady-state kosten per gesprek (euro). Alle drie komen in jaar twee bij elkaar; alleen de cap-ex verschilt.
  3. Plafond voor catalogus-redenering (hoe gek je productvragen worden). Custom wint dit voor alles met specs, compatibiliteit of configuratie. Generieke agents werken prima voor mode en cadeaus; ze lopen vast bij kookgerei, elektronica en B2B-onderdelen.
  4. Trace-toegankelijkheid (wie kan op vrijdag om 15:00 lezen wat de bot heeft gezegd). Inkeep en Custom winnen, met grote voorsprong.
  5. Compliance-positie (waar de data staat, wie er gedagvaard kan worden). Self-hosted EU wint, met een papieren spoor dat je een toezichthouder kunt overhandigen.

Vermenigvuldig elke score met hoeveel jouw CEO daadwerkelijk om die regel geeft. Voor de meeste NL-shops onder €20M waar we mee hebben gewerkt, eindigt de volgorde: Inkeep op een kleine VPS als eerste, custom Claude Agent SDK als de catalogus-redenering niet-triviaal is, Shopify-native als je echt drie weken hebt en een catalogus die past bij een generieke agent. We kiezen die laatste zelden voor shops boven €5M. Kies op wie er vrijdag om 15:00 de trace leest, niet op wie er dinsdag de strakste demo heeft.

De vijfminutenaudit die je vandaag kunt doen

Open je CS-inbox. Tag de laatste 200 vragen op onderwerp. Zijn 60% ervan te beantwoorden uit je product-specsheets en je verzendpagina, dan verdient een agent zichzelf in week zes terug. Zijn 60% ervan 'waar is mijn bestelling' achter PostNL aan, dan lost een agent je probleem niet op; een betere order-statuspagina wel.

Toen we afgelopen kwartaal de product-Q&A agent voor een Nederlandse kookgerei-shop bouwden, was het probleem dat de catalogus elf verschillende deksel-tot-pan compatibiliteitsregels had die op drie plekken verstopt zaten, en geen mens had ze ooit als één lijst gezien. We hebben ze uiteindelijk geëxtraheerd naar een kleine Postgres-tabel die de agent als tool kon bevragen. Dat is het soort loodgieterswerk dat bepaalt of het bouwen van AI-agents voor shops van deze omvang iemand daadwerkelijk tijd bespaart.

Kern

Kies je product-Q&A chat-agent stack op wie er vrijdag om 15:00 de trace leest, niet op wiens demo er dinsdag het strakst uitziet.

FAQ

Hoe lang duurt het om elke chat-agent stack live te krijgen?

Shopify-native is uren tot dagen. Een self-hosted Inkeep-deployment duurt twee tot drie weken als je catalogus schoon is. Een custom Claude Agent SDK-build kost meestal vier tot acht weken voor een zorgvuldige eerste versie.

Wat kost een product-Q&A-gesprek bij 9.400 threads per maand?

Ruwweg €0 marginaal voor Shopify-native, rond €0,06 voor Inkeep self-hosted inclusief infra, en €0,04 tot €0,07 voor een custom Claude Agent SDK-build, voordat je engineering-tijd uitsmeert.

Moeten we elke chat-trace voor altijd bewaren?

Nee. Zet een retentievenster (90 of 180 dagen is gangbaar voor product-Q&A), partitioneer de tabel per maand en drop oude partities op schema. Lange retentie is een AVG-risico, geen bezit.

Wanneer loopt Shopify-native AI tegen zijn plafond aan?

Zodra je producten compatibiliteitsregels, configuraties of specs hebben waar de koper om geeft. Kookgerei, elektronica en B2B-onderdelen raken het plafond snel; mode en cadeaus zelden.

ai agentschat agentse-commercearchitectureragstrategy

Iets bouwen?

Start een project