Vibe Coding: besparingsformules en drempelpunten

Met een uniforme variabele wordt een kostmodel opgezet voor drie soorten facturering: token, API-aanroepen en prompt-aantal, met formules voor drempelpunten en aanbevelingen voor werkwijzen.

De facturatiemodellen voor AI-coderingstools kunnen worden samengevat in drie categorieën:

  1. Per token facturering: inclusief diverse API’s, Claude Code (Claude Pro), Codex Cli (ChatGPT Plus), Zhipu Lite/Pro, Cursor nieuwe versie, enz. In essentie zijn het allemaal token-facturering, sommige producten bieden abonnementskortingen.
  2. Facturering per API-aanroep: zoals OpenRouter (gratis quota), ModelScope, Gemini Code Assistant (dagelijks 1000 gratis), Chutes, enz.
  3. Facturering per prompt-aantal: zoals Cursor oude versie (500 keer), Github Copilot (300 keer), enz.

Deze drie modellen betalen in wezen voor modelredenering en contextverwerking, het verschil ligt in de factureringsgranulariteit en de vorm van de limieten.

Dit artikel stelt een uniform kostmodel op, met bruikbare variabeledefinities en berekeningsformules, om de kritieke punten voor toolselectie te bepalen bij verschillende werkbelastingen en werkwijzen. De kostenoverwegingen omvatten kasuitgaven, tijdsverbruik en herwerkrisico.

Uniforme totale kostenfunctie

Voor willekeurige tool i kan de totale kosten in een factureringsperiode worden geschreven als:

Totali=Cashi+Timei+RiskiTimei=RHoursiRiski=RReworkHoursi\begin{aligned} \mathrm{Total}_i &= \mathrm{Cash}_i + \mathrm{Time}_i + \mathrm{Risk}_i \\ \mathrm{Time}_i &= R \cdot \mathrm{Hours}_i \\ \mathrm{Risk}_i &= R \cdot \mathrm{ReworkHours}_i \end{aligned}

Waarbij R je tijdprijs is (yuan/uur). Als je de tijd niet mee wilt rekenen, kun je R op 0 zetten, en de formule reduceert tot een pure kas kostenvergelijking.

Variabele afspraken

Om de drie factureringsmodellen te uniformeren, wordt de werkbelasting verdeeld over twee niveaus: ‘sessie (session)’ en ‘iteratie (iteration)’. Het scannen en indexeren bij het starten van een nieuw project is een eenmalige operatie, voortgezette gesprekken en codewijzigingen binnen dezelfde context zijn herhaalbare operaties.

Definieer variabelen:

  • S_i: vaste kosten voor tool i (abonnementskosten of maandelijkse minimumuitgave)
  • N_s: aantal nieuwe sessies in deze periode (wisselen van project, context leegmaken, nieuwe sessie starten tellen allemaal mee)
  • N_{it}: aantal effectieve iteraties in deze periode (vereisten verduidelijken, code wijzigen, fouten repareren, enz.)
  • R: tijdprijs (yuan/uur)
  • h0_i: koude starttijd per nieuwe sessie (uur)
  • h1_i: gemiddelde tijd per iteratie (uur)
  • p_{\mathrm{fail},i}: kans dat een iteratie mislukt en herwerk nodig is (0 tot 1)
  • h_{\mathrm{re},i}: gemiddelde tijd voor een herwerkactie (uur)

Dan kunnen de tijd- en risicotermen worden geschreven als:

Hoursi=Nsh0i+Nith1iReworkHoursi=Nitpfail,ihre,i\begin{aligned} \mathrm{Hours}_i &= N_s \cdot h0_i + N_{it} \cdot h1_i \\ \mathrm{ReworkHours}_i &= N_{it} \cdot p_{\mathrm{fail},i} \cdot h_{\mathrm{re},i} \end{aligned}

Vervolgens hoeven we alleen Cash_i te specificeren voor de drie factureringsmethoden.

Kas kosten per token facturering

Token-facturerende tools hebben doorgaans drie tarieven: invoer, invoer die in de invoercache raakt, en uitvoer. Een veelgemaakte fout is om dezelfde invoer-tokens zowel bij invoer als bij cache te tellen. Het is aan te raden eerst de totale invoer-tokens te schatten en dan op te splitsen op basis van de cache-hit ratio.

Definieer variabelen:

  • Tin0_i: totale invoer-tokens per nieuwe sessie
  • r0_i \in [0,1]: invoercache-hit ratio voor nieuwe sessies
  • Tin1_i: totale invoer-tokens per iteratie
  • r1_i \in [0,1]: invoercache-hit ratio voor iteraties
  • Tout0_i, Tout1_i: aantal uitvoer-tokens
  • Pin_i, Pcache_i, Pout_i: prijsparameters (yuan per miljoen tokens)

Voor tools die geen cache-prijzen ondersteunen, kan je r0_i=r1_i=0 zetten of Pcache_i=Pin_i.

Dan:

Cashi(token)=Si+1106[Ns(Pini(1r0i)Tin0i+Pcacheir0iTin0i+PoutiTout0i)+Nit(Pini(1r1i)Tin1i+Pcacheir1iTin1i+PoutiTout1i)]\begin{aligned} \mathrm{Cash}^{(\mathrm{token})}_i &= S_i + \frac{1}{10^6}\Bigl[ N_s \cdot \bigl(Pin_i \cdot (1-r0_i)\cdot Tin0_i + Pcache_i \cdot r0_i\cdot Tin0_i + Pout_i \cdot Tout0_i\bigr) \\ &\qquad + N_{it} \cdot \bigl(Pin_i \cdot (1-r1_i)\cdot Tin1_i + Pcache_i \cdot r1_i\cdot Tin1_i + Pout_i \cdot Tout1_i\bigr) \Bigr] \end{aligned}

Deze formule verklaart direct een ervaringsconclusie: bij ononderbroken, geïmmergeerde werkzaamheden in dezelfde sessie neemt N_{it} toe maar Tin0_i wordt maar één keer betaald, dus het gemiddelde kosten per iteratie dalen. Veelvuldig wisselen van projecten of vaak de context leegmaken zorgt ervoor dat Tin0_i herhaaldelijk wordt betaald.

Kas kosten per API-aanroep

De kern van facturering per API-aanroep is dat een ‘aanroep’ gesprekken, tool-aanroepen, bestandslezing, zoekopdrachten, commandouitvoering, enz. omvat. Je moet schatten:

  • A0_i: aantal API-aanroepen per nieuwe sessie
  • A1_i: aantal API-aanroepen per iteratie
  • Ccall_i: prijs per aanroep (yuan/aanroep)

Kas kostenformule:

Cashi(call)=Si+Ccalli(NsA0i+NitA1i)\mathrm{Cash}^{(\mathrm{call})}_i = S_i + Ccall_i \cdot (N_s \cdot A0_i + N_{it} \cdot A1_i)

Als de tool een gratis quota Q (aanroepen/periode) biedt en na overschrijding moet wachten in plaats van betalen, kun je de Wachttijd opnemen in de tijdkosten en de overtollige aanroepen omrekenen naar Hours_i, en nog steeds Total_i gebruiken voor vergelijking.

Kas kosten per prompt-aantal

Facturering per prompt-aantal beschouwt één ‘prompt’ als equivalent aan één taakindiening. Je moet schatten:

  • P0_i: aantal prompts per nieuwe sessie
  • P1_i: aantal prompts per iteratie
  • Cprompt_i: prijs per prompt (yuan/prompt)

Kas kostenformule:

Cashi(prompt)=Si+Cprompti(NsP0i+NitP1i)\mathrm{Cash}^{(\mathrm{prompt})}_i = S_i + Cprompt_i \cdot (N_s \cdot P0_i + N_{it} \cdot P1_i)

Voor producten met ‘maandelijkse abonnement met N keer’, kun je een schaduwprijs (shadow price) benaderen: als de periodieke abonnementskosten S_i zijn en de quota Q_i, dan is Cprompt_i \approx S_i / Q_i. Hoewel het niet de strikte marginale kas kosten is, transformeert het ‘quota schaarste’ in een berekenbare opportuniteitskost.

Drempelpunten: scheidslijnformules voor twee tools

Schrijf de bovenstaande formules in een uniforme vorm. Voor tool i:

Totali=Si+Ns(c0i+Rh0i)+Nit(c1i+Rh1i+Rpfail,ihre,i)\mathrm{Total}_i = S_i + N_s \cdot (c0_i + R \cdot h0_i) + N_{it} \cdot (c1_i + R \cdot h1_i + R \cdot p_{\mathrm{fail},i} \cdot h_{\mathrm{re},i})

Waarbij c0_i en c1_i respectievelijk de kas kosten voor koude start en een enkele iteratie vertegenwoordigen, overeenkomend met de verschillende ontplooiingen in de drie factureringsmethoden.

Gegeven twee tools A en B, met N_s vast, door Total_A = Total_B te stellen, kan je het iteratiedrempelpunt oplossen:

Nit=(SBSA)+Ns((c0Bc0A)+R(h0Bh0A))(c1Ac1B)+R(h1Ah1B)+R(pfail,Ahre,Apfail,Bhre,B)N_{it}^{\ast} = \frac{ (S_B - S_A) + N_s \cdot \bigl((c0_B - c0_A) + R \cdot (h0_B - h0_A)\bigr) }{ (c1_A - c1_B) + R \cdot (h1_A - h1_B) + R \cdot \bigl(p_{\mathrm{fail},A} \cdot h_{\mathrm{re},A} - p_{\mathrm{fail},B} \cdot h_{\mathrm{re},B}\bigr) }

Uitleg:

Als de noemer positief is, dan is A voordeliger als N_{it} > N_{it}^{\ast} en B voordeliger als N_{it} < N_{it}^{\ast}. Als de noemer negatief is, is de ongelijkheidsrichting omgekeerd. Als de noemer dicht bij 0 ligt, betekent dit dat de geïntegreerde marginale kosten per iteratie bijna gelijk zijn, en de keuze hangt vooral af van vaste kosten en koude-startkosten.

Je kunt deze formule gebruiken om drie typische drempelpunten te berekenen: token-facturerende tool vs prompt-facturerende tool, token-facturerende tool vs API-aanroep-facturerende tool, en API-aanroep-facturerende tool vs prompt-facturerende tool. Zet eenvoudigweg de respectievelijke c0, c1 uit zoals hierboven beschreven in tokens, aanroepen, of prompts.

Praktijkstrategieën: methoden om kosten te verlagen

1. Geïmmergeerde ontwikkeling: optimalisatiestrategie voor token-facturering

Voor tools die per token factureren (zoals Codex Cli), is de kernstrategie de werkcontext stabiel houden.

Principe: voorkom dat Tin0_i herhaaldelijk wordt betaald. Continu werken aan hetzelfde project verdeelt de initiële contextlaadkosten, en een hogere cache-hit ratio versnelt het antwoord aanzienlijk.

Praktijk: vermijd frequente projectwisselingen of het leegmaken van de context. Als je alleen een enkele bug fixeert en het project daarna sluit, is de waarde van de eerdere bestandslezing niet optimaal benut.

2. Vereisten combineren: optimalisatiestrategie voor API-aanroep-facturering

Voor tools die per aanroep factureren (zoals Gemini Code Assistant), is de kernstrategie om de aanroepen voor ‘context opbouwen’ maximaal te benutten.

Principe: verdeel de A0_i kosten. Tool-aanroepen, bestandslezing, enz. tellen allemaal mee als aanroepen.

Praktijk: verwerk meerdere verwante vereisten in één sessie, om de waardedichtheid van eerdere bestandslezing te verhogen. Vermijd om direct na een kleine taak de verbinding te verbreken.

3. Grote taken aanpakken: optimalisatiestrategie voor prompt-facturering

Voor tools die per prompt factureren (zoals Cursor oude versie), zijn ze geschikt voor grote taken of koude-startonderhoud.

Principe: marginale kosten vastzetten. Ongeacht hoe lang de context is, de kosten per prompt zijn vast.

Praktijk: ‘Grote taken’ verwijzen naar taken met enorme token-consumptie (veel bestandslezing, zeer lange context) maar beperkte uitvoer, of taken die een hoogwaardig model nodig hebben. Dergelijke taken zijn het meest kosteneffectief met per-keer-facturering. Kleine taken zijn minder kosteneffectief met per-keer-facturering.

Een berekenbare selectieproces

De onderstaande stroomdiagram mapt variabelen naar selectielogica. Schat de orde van grootte van N_s en N_{it}, gebruik dan de drempelpuntformules om te vergelijken en zo de optimale oplossing te bepalen.

flowchart TD
    A[Definieer werkbelasting voor deze periode] --> B[Schat N_s: aantal nieuwe sessies]
    B --> C[Schat N_it: iteraties per sessie]
    C --> D[Schat c0, c1 voor elke tool]
    D --> E[Plug in N_it* formule]
    E --> F{Belastingsprofiel?}
    F -->|N_s groot, N_it klein| G[Prioriteit: prompt- of aanroep-facturering]
    F -->|N_s klein, N_it groot| H[Prioriteit: token-facturering]
    F -->|beide groot| I[Split werkstroom: koude start met prompt/aanroep, diepgaande fase met token]

    classDef in fill:#2c3e50,stroke:#ecf0f1,stroke-width:2px,color:#ecf0f1
    classDef calc fill:#3498db,stroke:#2980b9,stroke-width:2px,color:#fff
    classDef decide fill:#f39c12,stroke:#d35400,stroke-width:2px,color:#fff
    classDef out fill:#27ae60,stroke:#229954,stroke-width:2px,color:#fff

    class A,B,C in
    class D,E calc
    class F decide
    class G,H,I out