Naar inhoud

AI-generatie op aanvraag

$ 9.000/maand → $ 700/maand

Door persoonlijke contactberichten pas op verzoek van de gebruiker te genereren, daalde het aantal modelaanroepen met 96% en kon een verouderde batchpipeline worden verwijderd.

4 min. leestijdDoor

Vooraf berekend werk groeide mee met de productschaal

Een vastgoedzoekopdracht leverde 50 tot 500 kopers op. Het oude pad genereerde voor elk resultaat een contactbericht voordat de gebruiker iemand had gekozen om te benaderen.

Daardoor schaalden de kosten met de zoekresultaten. Ze hadden moeten schalen met het veel kleinere aantal personen dat daadwerkelijk een bericht ontving.

Voor elke koper draaiden vier agents

SendFlow maakte het eerste concept met maximaal drie nieuwe pogingen. Een Review Gate accepteerde of verwierp het, een Content Rewriter paste toon en details aan en een Message Humanizer maakte twee of drie varianten. Acht workerthreads voerden deze keten parallel uit en sloegen de uitvoer in de database op voordat iemand op Send klikte.

Zoekresultaat
  -> SendFlow (maximaal drie nieuwe pogingen)
  -> Review Gate
  -> Content Rewriter
  -> Message Humanizer (2-3 varianten)
  -> elk resultaat opslaan

De keten deed vier tot vijf modelaanroepen per koper. Voor een zoekopdracht met 500 kopers betekende dat ongeveer 2.500 modelaanroepen voordat de gebruiker een ontvanger koos.

Tachtig procent van het werk werd weggegooid

Gebruikers benaderden ongeveer 100 kopers uit het voorbeeld met 500 resultaten. Ongeveer 80% van de vooraf berekende berichten werd nooit gebruikt, zodat circa 2.000 aanroepen geen zichtbaar resultaat voor de gebruiker opleverden. Promptafstelling kon elke aanroep goedkoper maken, maar kon niet rechtvaardigen dat de ongebruikte aanroepen werden uitgevoerd.

Verplaats generatie naar het moment van intentie

De herziene zoekopdracht gaf kopers terug zonder contactberichten te genereren. Eén expliciete actie Regenerate with AI riep voor het geselecteerde contact één gespecialiseerde agent aan. De aanvraagcontext bevatte locatie, telefoonnummer, voornamen van koper en afzender, markt, koperactiviteit, opgemaakte gespreksgeschiedenis en koper-ID; het resultaat bleef vóór verzending bewerkbaar.

500 kopers zoeken -> 0 berichten genereren
Gebruiker kiest een koper -> contact- en gesprekscontext samenstellen
Regenerate with AI -> 1 modelaanroep
ProgressReporter -> elke twee seconden een WebSocket-update
Bewerkbaar resultaat -> gebruiker beslist of het wordt verstuurd

De implementatie ontwikkelde zich. Eén momentopname van de repository gebruikte een rechtstreekse REST-aanvraag wanneer het paneel voor het geselecteerde contact werd geopend; het latere proces uit de artikelbron plaatste de actie achter een expliciete beslissing van de gebruiker en streamde de voortgang via WebSocket. Dat zijn productfasen, geen gelijktijdig codepad.

Laat werk op aanvraag direct aanvoelen

Het product had ruim 25 gespecialiseerde agentconfiguraties op gpt-4.1-nano. Voor elke aanvraag werd één configuratie gekozen; dit was geen keten van 25 agents. ProgressReporter stuurde tijdens het genereren van het bericht elke twee seconden een WebSocket-update.

Door de generatie achter een klik te plaatsen werd de wachttijd zichtbaar. Ik hield het antwoord bewerkbaar, toonde de voortgang en genereerde alleen voor de ontvanger die de gebruiker had gekozen.

Schrap werk in plaats van verspilling te optimaliseren

In het gedocumenteerde voorbeeld met 500 kopers daalde het aantal aanroepen van ongeveer 2.500 naar ongeveer 100, een afname van 96%. De maandelijkse modelkosten daalden van ongeveer 9.000 naar ongeveer 700 dollar. Die afgeronde maandbedragen betekenen een jaarlijkse kostenverlaging van ongeveer 100.000 dollar.

De wijziging verwijderde ook 1.218 regels, waaronder de batchprocessor van 640 regels. Door dat pad te verwijderen verdwenen ook de nieuwe pogingen, workers, opslag en coördinatie van meerdere agents.

  • Meet hoeveel gegenereerde uitvoer gebruikers werkelijk gebruiken.
  • Voer kostbaar werk pas uit wanneer de productgebeurtenis die het nodig heeft plaatsvindt.
  • Toon zichtbare voortgang wanneer werk op aanvraag niet direct kan worden voltooid.
  • Verwijder de batcharchitectuur zodra het product er niet meer van afhankelijk is.