Hoppa till innehållet
AI-grafen
E· Universitetai-produktutveckling· ca 60 min· utvecklande· verifierad 2026-09-20

Kostnad, kvoter och prissättning

Kunna sätta kvoter och priser som täcker inferenskostnaden.

Förkunskaper

Intuition

AI-produkter har en kostnadsstruktur som traditionell mjukvara inte har: varje användning kostar pengar.

Vanlig SaaSAI-produkt
Marginalkostnad per användarenära nollbetydande
Storanvändaregratis marknadsföringkan gå med förlust
Fast pris per månadfungerarfarligt utan kvoter

Det ändrar prissättningen i grunden. En obegränsad plan för 99 kr i månaden fungerar utmärkt tills en användare kör tio tusen anrop per dag.

Tre prismodeller:

ModellFördelNackdel
Fast pris + kvotförutsägbart för kundenkvoten måste vara rätt satt
Förbrukningföljer kostnaden exaktoförutsägbart för kunden — många ogillar det
Krediterkombinerar bådakräver förklaring

Den första är vanligast i konsumentprodukter, den andra i utvecklarverktyg.

Formellt

Räkna på fördelningen, inte medelvärdet. Användning av AI-produkter är extremt sned: ofta står några få procent av användarna för en stor del av förbrukningen.

Att sätta priset efter genomsnittsanvändaren ger förlust på svansen. Räkna i stället:

StegFråga
1Vad kostar mediananvändaren?
2Vad kostar p95-användaren?
3Vad kostar den dyraste procenten?
4Vilken kvot täcker 95 % av användarna utan att de märker den?
5Håller marginalen om alla använder upp kvoten?

Steg 5 är det kritiska. Kvoten definierar din maximala kostnad per användare, och den måste vara betald av priset. En kvot på 500 anrop à 0,15 kr är 75 kr — ett pris på 99 kr ger då 24 kr i bruttomarginal före allt annat, vilket är för tunt.

Gratisnivån är en marknadsföringskostnad och ska behandlas som en:

FrågaExempel
Vad kostar den per användare och månad?3 kr
Hur många gratisanvändare tål budgeten?5 000 → 15 000 kr/mån
Vad är konverteringsgraden?2 %
Vad är anskaffningskostnaden per betalande?15 000 / 100 = 150 kr

Är den sista siffran lägre än vad en betalande kund är värd över tid är gratisnivån lönsam. Annars är den en läcka.

Kvoter är också en säkerhetsmekanism, inte bara ekonomi. Utan tak kan en buggig klient, en loop eller ett missbruk bränna en månadsbudget på en natt. Tre lager behövs:

LagerSkyddar mot
Per användare och dagenskilt missbruk
Per organisation och månadbudgetöverskridande
Global kill-switchkatastrof

Fem sätt att sänka kostnaden innan man höjer priset:

  1. Prompt-caching — ofta nära halverad kostnad i RAG-system.
  2. Mindre modell för rutinsvar, eskalering vid behov.
  3. Kortare kontext — skicka bara det som behövs.
  4. Svarscache för återkommande frågor.
  5. Färre steg i kedjan.

Var öppen med kvoterna. En kvot som användaren inte visste om och slår i mitt i arbetet är en sämre upplevelse än ett något högre pris. Visa förbrukningen löpande.

Kod

import numpy as np

def kostnadsfordelning(anrop_per_anvandare, kr_per_anrop=0.15):
    a = np.asarray(anrop_per_anvandare)
    kr = a * kr_per_anrop
    return {
        "median": round(float(np.median(kr)), 2),
        "medel": round(float(kr.mean()), 2),
        "p95": round(float(np.percentile(kr, 95)), 2),
        "p99": round(float(np.percentile(kr, 99)), 2),
        "max": round(float(kr.max()), 2),
        "andel_fran_topp_5_procent": round(
            float(np.sort(kr)[-max(1, len(kr) // 20):].sum() / kr.sum()), 3),
    }

# Sned fördelning: några få står för det mesta
rng = np.random.default_rng(0)
anrop = rng.lognormal(mean=3.5, sigma=1.6, size=5000).astype(int)
f = kostnadsfordelning(anrop)
print(f)

def marginal(pris, kvot_anrop, kr_per_anrop=0.15, ovrig_kostnad=8.0):
    """Marginal i värsta fall — alla använder upp kvoten."""
    varsta = kvot_anrop * kr_per_anrop + ovrig_kostnad
    return {"pris": pris, "kostnad_varsta_fall": round(varsta, 2),
            "marginal_varsta_fall": round(pris - varsta, 2),
            "marginal_procent": round((pris - varsta) / pris, 3) if pris else 0.0}

for pris, kvot in ((99, 500), (149, 800), (249, 2000)):
    print(marginal(pris, kvot))
# {'pris': 99, 'kostnad_varsta_fall': 83.0, 'marginal_varsta_fall': 16.0, ...}
#  ↑ 16 % marginal i värsta fall är för tunt

def valj_kvot(anrop_per_anvandare, tackning=0.95):
    """Kvot som 95 % av användarna inte märker av."""
    return int(np.percentile(anrop_per_anvandare, tackning * 100))

print("kvot som täcker 95 %:", valj_kvot(anrop))

# Tre lager av skydd
class Budgetvakt:
    def __init__(self, dag_per_anvandare, manad_per_org, global_dag):
        self.tak = {"anvandare_dag": dag_per_anvandare,
                    "org_manad": manad_per_org, "global_dag": global_dag}
        self.forbrukning = {}

    def far_kora(self, anvandare, org, kostnad):
        f = self.forbrukning
        if f.get(("a", anvandare), 0) + kostnad > self.tak["anvandare_dag"]:
            return False, "dagskvoten är slut — den återställs i morgon"
        if f.get(("o", org), 0) + kostnad > self.tak["org_manad"]:
            return False, "organisationens månadsbudget är slut"
        if f.get(("g",), 0) + kostnad > self.tak["global_dag"]:
            return False, "tjänsten är tillfälligt begränsad"
        return True, "ok"

    def registrera(self, anvandare, org, kostnad):
        for nyckel in (("a", anvandare), ("o", org), ("g",)):
            self.forbrukning[nyckel] = self.forbrukning.get(nyckel, 0) + kostnad

Felmeddelandena i far_kora är medvetet olika. «Dagskvoten är slut — den återställs i morgon» är användbart; «fel 429» är det inte. Kvoter som användaren förstår upplevs som rimliga; kvoter som bara stoppar upplevs som trasiga.

Behärskning innebär

  • Räknar ut kostnad per användare
  • Sätter kvoter som skyddar marginalen
  • Väljer prismodell efter kostnadsstruktur

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser