CodeGym /Kursy /ChatGPT Apps /Monetyzacja, pricing i eksperymenty „koszt ↔ jakość”

Monetyzacja, pricing i eksperymenty „koszt ↔ jakość”

ChatGPT Apps
Poziom 19 , Lekcja 1
Dostępny

1. Dlaczego w ogóle myśleć o monetyzacji właśnie teraz

Do tego modułu główne pytanie brzmiało „czy to w ogóle działa?”. Teraz dokładamy kolejny poziom złożoności: „czy to się zwraca?”.

Dla aplikacji LLM to szczególnie bolesne: koszty zmienne (tokeny LLM, modele rerank, embeddingi) łatwo „wybijają z głowy” wasze dotychczasowe „serwer za $20 i Postgres za $15”. Ignorowanie tego — to prosta droga do rachunku od OpenAI pod koniec miesiąca, porównywalnego z kredytem hipotecznym.

Dlatego dziś trzy duże tematy:

  1. Jakie są modele monetyzacji dla ChatGPT App i konkretnie naszego GiftGenius.
  2. Jak powiązać pricing ↔ cost_per_task i nie sprzedawać „100 doborów prezentów za $1”, jeśli jeden dobór już kosztuje $0.15.
  3. Jak stawiać eksperymenty A/B „koszt ↔ jakość”: zmieniać model, prompty, UX i logować to tak, by za parę tygodni podejmować decyzje na podstawie danych, a nie przeczucia.

Przy okazji miękko przygotowujemy grunt pod kolejny moduł o LLM‑evals i quality_score, ale nie zanurzamy się tam jeszcze w kod.

2. Modele monetyzacji ChatGPT App: B2C, B2B, freemium i upsell

Jeśli odrzucić LLM‑magię, modele monetyzacji są tu bardzo podobne do tych z typowych aplikacji SaaS i mobilnych. Ale conversational‑interfejs ma niuanse: użytkownik często nie czuje „gdzie kończy się darmowe, a zaczyna płatne”, i trzeba to ostrożnie zaprojektować w UX.

Przeanalizujmy główne warianty na przykładzie GiftGenius.

B2C: zwykli użytkownicy i prezenty

Tutaj waszymi klientami są zwykli ludzie, którzy przychodzą do ChatGPT i proszą: „dobierz prezent dla fana kosmosu za 50 dolarów”. Możecie nie sprzedawać własnych produktów, a tylko dobierać prezenty dla użytkownika.

Typowe modele B2C:

  1. Zakup jednorazowy.
    Użytkownik płaci za konkretny scenariusz. Na przykład: 3 darmowe pomysły, dalej — płatny „pakiet” kolejnych 10 pomysłów dla jednego obdarowywanego.
  2. Subskrypcja.
    Miesięczna opłata za dostęp. W GiftGenius może to być „do 100 doborów miesięcznie” albo „nielimitowane doboru dla częstego darczyńcy”.
  3. Freemium (plany darmowe vs płatne).
    Bazowy scenariusz jest darmowy (do N doborów miesięcznie, okrojona funkcjonalność), a płatny daje większe limity, mocniejszy model, dodatkowe formaty doborów i historię. To najtypowszy model dla ChatGPT App: „w środku ChatGPT — podstawowo za darmo, a możliwości premium — za pieniądze”.
  4. Upsell w aplikacji.
    Użytkownik robi darmowy bazowy dobór, widzi niezły wynik i delikatnie proponujecie: „chcesz, za $X zrobię dogłębny dobór z uwzględnieniem wishlisty, sociali itp.?” albo „wykup od razu bon podarunkowy”.

B2B: zespoły, firmy i prezenty korporacyjne

Tu do gry wchodzą HR, działy marketingu i „osoby odpowiedzialne za prezenty dla pracowników/klientów”.

Tradycyjny zestaw:

  • Licencja per użytkownik (per seat).
    Na przykład plan „HR‑Team” na 10 osób, każdy ma dostęp do GiftGenius, raporty o prezentach i budżetach.
  • Licencja per firma (per company).
    „Do 500 pracowników, stała cena miesięczna, w środku — dowolna liczba doborów”.
  • Dodatkowe funkcje enterprise.
    Osobny panel admina, integracje z HRIS/CRM, raporty niestandardowe, SLA.

W obu przypadkach liczycie nie „ile kosztuje jeden dobór”, tylko cost_per_user_per_month lub cost_per_tenant_per_month i porównujecie z ceną licencji.

Jak wybrać model dla GiftGenius

Aby nie grzęznąć w teorii, można wziąć prosty wariant na start:

  • B2C: freemium.
    3 doboru miesięcznie za darmo, dalej — subskrypcja za $5/miesiąc z nielimitowanymi doborami i modelem premium.
  • B2B: za firmę.
    Plan „HR‑zespół” za $99/miesiąc, obejmujący do 500 doborów dla pracowników, integrację z systemem HR i raportowanie.

Później, kiedy pojawią się realne dane o cost_per_task i konwersji, można to wszystko kręcić. Faktycznie te liczby są na razie „wzięte z sufitu”: wydają się rozsądne, ale jeszcze nie sprawdziliśmy, ile kosztuje nas jeden zakończony scenariusz. W kolejnym rozdziale będziemy wiązać takie taryfy z realnym kosztem własnym — cost_per_task.

3. Związek ceny i kosztu własnego: czym jest cost_per_task

Przechodzimy teraz do najważniejszego: jak nie urządzić sobie fundacji charytatywnej im. GPT‑5.

Intuicja: cena ≥ cost_per_task × marża

W poprzednim temacie widzieliście już pojęcie cost_per_task — to łączne koszty na jeden udany scenariusz: od „użytkownik zaczął dobór” do „otrzymał wynik” (i, być może, coś opłacił).

Wchodzą tu m.in.:

  • koszty LLM (tokens * price_per_token po wejściu/wyjściu, wliczając ewentualnie modele rerank, embeddingi itp.);
  • udział kosztów infrastruktury na jednego taska (serwery, bazy danych, kolejki, bramka MCP) — często liczony po danych zagregowanych;
  • opcjonalnie — koszty transakcyjne (opłaty Stripe, weryfikacje fraudowe), jeśli liczycie cost_per_task aż do „pieniędzy na rękę”.

Idea jest prosta: cena scenariusza lub subskrypcji powinna być wyższa od średniego kosztu własnego jednego scenariusza, pomnożonego przez „zapas marży”.

Jeśli mocno uprościć:

price_per_task >= cost_per_task * ( 1 + margin )

Nie będziemy zaśmiecać wykładu liczbami i procentową marżowością, ważna jest właśnie ta intuicyjna reguła.

Przykład dla GiftGenius

Załóżmy, że wdrożyliście już logowanie kosztów z poprzedniego wykładu i macie raport zagregowany:

  • średni cost_per_task (jeden zakończony dobór prezentu) = 0.15 USD;
  • w to wliczone są tokeny LLM (kilka wywołań suggest_gifts, rerank i finalny summary) oraz udział infrastruktury.

Dalej patrzycie na scenariusz:

  • użytkownik darmowy robi dobór, czasem kupuje bon za $50;
  • konwersja do zakupu wśród zakończonych doborów, powiedzmy, 5 %.

Nie wchodząc jeszcze w pełną unit‑ekonomikę, można oszacować, że z 100 doborów:

  • wydajecie 100 × $0.15 = $15;
  • z nich 5 kończy się checkoutem po $50;
  • przychód 5 × $50 = $250.

Wygląda dobrze: z grubsza ($250 – $15) plus prowizje Stripe, podatki i inne bóle. Ale warto rozumieć, że przy zbyt hojnej subskrypcji (powiedzmy, 100 doborów za $1) łatwo wyjdziecie na minus.

Mini‑przykład kodu: zapisywanie cost_per_task w TypeScript

Załóżmy, że macie MCP‑tool, który kończy workflow doboru i zna jego całkowity koszt:

// Typ dla końcowych metryk scenariusza
type TaskMetrics = {
  taskId: string;
  userId: string;
  costPerTaskUsd: number;
  modelName: string;
  completedAt: string;
};

// Umowna funkcja logowania metryk
async function logTaskMetrics(metrics: TaskMetrics) {
  console.log(JSON.stringify({ 
    level: "info",
    event: "workflow_completed",
    ...metrics,
  }));
}

// Gdzieś w kodzie obsługującym zakończenie doboru:
await logTaskMetrics({
  taskId: context.taskId,
  userId: context.userId,
  costPerTaskUsd: context.costEstimateUsd, // policzony z tokenów
  modelName: context.modelName,
  completedAt: new Date().toISOString(),
});

Taki log łatwo potem zagnieździć w dashboardzie, aby widzieć rozkład cost_per_task po modelach, użytkownikach, scenariuszach.

4. Pricing: jak przełożyć cost_per_task na realne ceny

Skoro mamy już cost_per_task, trzeba zdecydować, za co i ile pobierać od użytkownika.

Prosta reguła dla B2C

Dla B2C można wybrać empiryczną zasadę:

„Jesteśmy gotowi wydawać na LLM+infrastrukturę nie więcej niż X % przychodu”.

Na przykład decydujecie, że nie chcecie przeznaczać więcej niż 20 % obrotu na koszty LLM. Wtedy:

  • jeśli cost_per_task = $0.15, to minimalna cena za jeden płatny scenariusz powinna wynosić ≈ $0.75, aby 0.15 stanowiło ~20 % z 0.75;
  • jeśli sprzedajecie subskrypcję, to oceniacie, ile uśrednionych scenariuszy przypadnie na jednego subskrybenta w miesiącu i mnożycie.

W pełni normalne jest zacząć „na oko”, a potem korygować ceny, gdy pojawią się realne dane (spoiler: nie pojawią się od razu).

Prosta reguła dla B2B

W B2B zwykle patrzy się na:

  • cost_per_user_per_month lub cost_per_tenant_per_month;
  • gotowość biznesu do płacenia (skala problemu, który rozwiązujecie).

Na przykład, jeśli zespół HR przez GiftGenius rozdysponowuje prezenty na dziesiątki tysięcy dolarów rocznie, subskrypcja za $99/miesiąc wygląda skromnie, nawet jeśli wasze koszty LLM dla tego zespołu to tylko $10/miesiąc. Najważniejsze — rozumieć, że nie chcecie znaleźć się w sytuacji, gdzie cost_per_tenant = $80, a subskrypcja — $50.

I tak, to się zdarza, jeśli „skoro jesteśmy AI, na razie wszystko za darmo, a potem się zobaczy”.

Mała funkcja‑„strażnik” na serwerze

Można mieć w kodzie prostego „guarda”, który podpowie, czy koszt nie wyszedł poza rozsądny zakres przy wyborze ceny:

function checkPricingSafety(params: {
  avgCostPerTaskUsd: number;
  plannedPricePerTaskUsd: number;
  maxCostShare: number; // np. 0.3 = 30%
}): boolean {
  const share = params.avgCostPerTaskUsd / params.plannedPricePerTaskUsd;
  return share <= params.maxCostShare;
}

// Przykład:
checkPricingSafety({
  avgCostPerTaskUsd: 0.15,
  plannedPricePerTaskUsd: 0.75,
  maxCostShare: 0.3,
}); // true — ok, 20% < 30%

To nie zastępuje modelu finansowego, ale daje szybką sanity‑check (sprawdzenie „na zdrowy rozsądek”), zwłaszcza gdy eksperymentujecie z cenami.

5. Eksperymenty „model/agent vs koszt i konwersja”

Przechodzimy do najciekawszego: eksperymentów A/B.

Intuicja jest prosta:

  • Wariant A — drogi model / bardziej złożony workflow;
  • Wariant B — tani model / uproszczony workflow;
  • chcemy zrozumieć, jak to jednocześnie wpływa na:
    • cost_per_task,
    • jakość rezultatu (według odczuć użytkownika i według przyszłych ocen LLM),
    • metryki biznesowe (konwersja, przychód).

Z czym dokładnie eksperymentować

Są trzy główne osie eksperymentów:

  1. Model.
    Na przykład GPT‑5 vs GPT‑5‑mini lub w ogóle inna linia. Zwykle drogi model daje lepszą jakość i wyższy cost_per_task, a tani — odwrotnie.
  2. Logika agenta / prompty.
    Bardziej szczegółowe kroki, długie prompty, złożony reasoning — jakość wyższa, ale drożej; minimalistyczna logika — taniej i czasem prawie tak samo dobrze.
  3. Format UX.
    Długi kreator z mnóstwem pól i podpowiedzi vs szybki tryb inline. Nawet jeśli model jest ten sam, liczba tokenów i kroków może różnić się wielokrotnie.

Wszystkie te wariacje możecie wdrażać już teraz, ważne tylko ubrać je w eksperymenty z logowaniem.

Jakie pola logować dla eksperymentów

Ponad polami logowanymi dla kosztu (tokens, model, cost_estimate, user_id, request_id itd.) dodajemy pola eksperymentu:

  • experiment_id — unikalny identyfikator eksperymentu (np. "gift_model_ab_2025_11").
  • variant — która gałąź dla konkretnego użytkownika: "A", "B", "control", "treatment" itp.
  • model_name lub agent_version — aby później nie pamiętać, jaka konfiguracja była ustawiona.
  • wynik scenariusza:
    • czy był workflow_completed;
    • czy był checkout_success;
    • końcowy cost_per_task.
  • opcjonalnie — quality_score (o nim za chwilę, to most do modułu o LLM‑evals).

Przykład JSON‑loga zdarzenia eksperymentu

Typowy event logu może wyglądać tak:

{
  "level": "info",
  "timestamp": "2025-11-21T20:15:03.123Z",
  "event": "experiment_task_result",
  "experiment_id": "gift_model_ab_2025_11",
  "variant": "A",
  "user_id": "user_123",
  "task_id": "task_456",
  "model_name": "gpt-5.2",
  "workflow_completed": true,
  "checkout_success": false,
  "cost_per_task_usd": 0.18,
  "quality_score": null,
  "request_id": "req_abc",
  "trace_id": "trace_xyz"
}

Takie wpisy świetnie agregują się w dowolnej analityce: można budować tabele typu „wariant A vs B po koszt/konwersja/przychód”.

Przykład kodu: logowanie eksperymentu w MCP‑tool

Załóżmy, że wasz serwer MCP policzył już koszt scenariusza (cost_per_task) i wie, w której gałęzi eksperymentu znajduje się użytkownik:

type ExperimentContext = {
  experimentId: string;
  variant: "A" | "B";
};

async function logExperimentResult(params: {
  ctx: ExperimentContext;
  userId: string;
  taskId: string;
  modelName: string;
  costPerTaskUsd: number;
  workflowCompleted: boolean;
  checkoutSuccess: boolean;
}) {
  const event = {
    level: "info" as const,
    event: "experiment_task_result",
    timestamp: new Date().toISOString(),
    experiment_id: params.ctx.experimentId,
    variant: params.ctx.variant,
    user_id: params.userId,
    task_id: params.taskId,
    model_name: params.modelName,
    cost_per_task_usd: params.costPerTaskUsd,
    workflow_completed: params.workflowCompleted,
    checkout_success: params.checkoutSuccess,
  };

  console.log(JSON.stringify(event));
}

Wyżej decydujecie, do którego wariantu należy użytkownik (po user_id, tenant_id lub losowo) i przekazujecie ExperimentContext do obsługi workflow. Na tym poziomie ustaliliśmy, co i jak logować dla eksperymentów: jakie pola są potrzebne i gdzie je zapisywać. Dalej porozmawiamy o tym, jak zamieniać takie eksperymenty w zrozumiałe hipotezy produktowe i decyzje o pricingu, a nie tylko w zestaw logów.

6. Teraz trochę o quality_score i LLM‑evals

Szerzej opowiem o tym w module 20, a teraz tylko idea: quality_score — to ocena jakości odpowiedzi/rozwiązania w skali np. 0–10, często od osobnego modelu LLM‑„sędziego”. Więcej o LLM‑as‑judge opowiem w module 20.

Szczegóły implementacji nie są nam teraz potrzebne — to temat następnego modułu — ale ważne jest zrozumienie koncepcji:

  • oprócz pieniędzy chcemy mierzyć także jakość;
  • możemy poprosić człowieka lub drugi model o ocenę: „na ile dobrze GiftGenius dobrał prezent w skali 10‑punktowej?”;
  • dalej możemy patrzeć, jak quality_score koreluje z:
    • konwersją do zakupu;
    • utrzymaniem użytkowników;
    • willingness‑to‑pay (gotowością do płacenia).

Z punktu widzenia logów to po prostu kolejne pole:

type ExperimentResultEvent = {
  experiment_id: string;
  variant: string;
  user_id: string;
  task_id: string;
  cost_per_task_usd: number;
  quality_score?: number; // 0-10, może być undefined
};

Na tym w ramach dzisiejszej lekcji zakończymy: detale LLM‑evals, golden‑cases i „LLM‑as‑judge” będą dalej w kursie, teraz wystarczy rozumieć, gdzie ten score wpiąć potem w eksperymenty. To właśnie quality_score chroni przed klasycznym błędem optymalizacji „tylko pod koszt”: pozwala liczbowo zobaczyć, gdzie już zbytnio potaniliśmy scenariusz, zaczęliśmy tracić jakość, a wraz z nią — konwersję i przychód.

7. Jak używać eksperymentów do pricingu i monetyzacji

Teraz nie tylko logujemy eksperymenty, ale formułujemy je jako zrozumiałe hipotezy biznesowe z metrykami sukcesu i wpływem na monetyzację. Samo logowanie experiment_id nie wystarczy: ważne jest spisywać zmiany produktu jako hipotezy z jasną metryką sukcesu.

Przykład hipotezy: drogi model vs tani

Wyobraźmy sobie taki eksperyment dla GiftGenius:

  • Wariant A — drogi model (GPT‑5), bogaty reasoning, długi kreator.
  • Wariant B — tani model (GPT‑5‑mini), nieco prostszy prompt i krótsza rozmowa.

Hipoteza: zamiana modelu na tańszy obniży cost_per_task co najmniej o 50 %. Jednocześnie jakość według użytkownika i oceny LLM (nasz quality_score) spadnie nie więcej niż o 5–10 %, a konwersja do zakupu nie ucierpi.

Technicznie dla każdego taska logujecie te same pola, co w rozdziale 5.2:

  • experiment_id = "gift_model_ab_2025_11";
  • variant = "A" lub "B";
  • model_name;
  • cost_per_task_usd;
  • workflow_completed;
  • checkout_success;
  • quality_score (gdy pojawi się LLM‑evals).

Po tygodniu–dwóch możecie:

  • zbudować średni cost_per_task dla A i B;
  • porównać odsetek checkoutu (udział scenariuszy z udaną płatnością);
  • porównać średni quality_score, jeśli jest.

Jeśli B prawie nie przegrywa na jakości, a jest dwa razy tańszy, możecie albo:

  • przejść na B i podnieść marżę;
  • albo utrzymać cenę, lecz obniżyć koszt subskrypcji dla użytkownika (i tym samym wzmacniać wzrost).

Przykład hipotezy: jakościowy upsell

Inna hipoteza: jeśli po 3 darmowych pomysłach pokazywać premium upsell „pełny raport o prezentach + rekomendacje do tekstu kartki” za $4.99, konwersja do zakupu wzrośnie o co najmniej 2 punkty procentowe (2 p.p.). Jednocześnie cost_per_task zwiększy się nie więcej niż o $0.05.

Tutaj eksperyment dotyczy bardziej UX i logiki produktu niż samego modelu. Technicznie jednak wszystko to samo:

  • różne warianty UX po variant;
  • logowanie kosztu i przychodu na scenariusz;
  • analiza upliftu (na ile nowa logika dała więcej pieniędzy i nie wysadziła kosztów).

Przykład kodu: zapis prostego przychodu per zadanie

Czasem wygodnie obok kosztu zapisywać też przychód per scenariusz:

type RevenueEvent = {
  taskId: string;
  userId: string;
  experimentId?: string;
  variant?: string;
  revenueUsd: number;
  checkoutSuccess: boolean;
};

async function logRevenue(event: RevenueEvent) {
  console.log(JSON.stringify({
    level: "info",
    event: "task_revenue",
    timestamp: new Date().toISOString(),
    ...event,
  }));
}

Łącząc potem task_revenue i experiment_task_result po taskId, można liczyć dla każdej gałęzi:

  • średni revenue_per_task;
  • średni cost_per_task;
  • i budować najprostszy ROI.

8. Ćwiczenie praktyczne: eksperyment A/B dla GiftGenius

Żeby mieć się czego trzymać i powiązać teorię z praktyką, przejdźmy krok po kroku przez to, jak wyglądałby eksperyment „drogi vs tani model” dla GiftGenius — w formacie ćwiczenia praktycznego.

Co zmieniamy

  • Wariant A:
    • model gpt-5;
    • bardziej szczegółowy system‑prompt i kroki agenta;
    • być może więcej wywołań intermediate reasoning.
  • Wariant B:
    • model gpt-5-mini;
    • nieco bardziej zwarty prompt;
    • mniej pomocniczych wywołań narzędzi, uproszczony flow.

Jak rozdzielamy użytkowników na gałęzie

Najprościej — po hash od user_id:

function assignVariant(userId: string): "A" | "B" {
  const hash = Array.from(userId).reduce((acc, ch) => acc + ch.charCodeAt(0), 0);
  return hash % 2 === 0 ? "A" : "B";
}

W ten sposób gwarantujemy w miarę równomierny rozkład i jeden user zawsze trafia do tej samej gałęzi.

Co logujemy

Przy zakończeniu workflow doboru logujecie ten sam zestaw pól, co w poprzednich rozdziałach (5.2 i 7.1), i dodajecie przychód:

  • experiment_id = "gift_model_ab_2025_11";
  • variant z funkcji powyżej;
  • model_name, faktycznie użyty model;
  • cost_per_task_usd, łączny koszt tokenów i infrastruktury;
  • workflow_completed (true/false);
  • checkout_success (true/false);
  • revenue_usd (0 lub kwota zakupu).

Opcjonalnie (nieco później w kursie) dojdzie quality_score.

I te dane trafiają do waszego logu/analityki, gdzie można je rozłożyć na tabelki:

experiment_id variant avg_cost_per_task checkout_rate avg_revenue_per_task
gift_model_ab_2025_11 A $0.22 6.0 % $3.50
gift_model_ab_2025_11 B $0.09 5.8 % $3.40

Z takiej tabeli widać, że B daje prawie tyle samo pieniędzy przy dwukrotnie mniejszym koszcie, i to mocny argument za nim.

9. Schemat wizualny: jak wygląda pętla „koszt ↔ jakość ↔ monetyzacja”

Aby wszystko ułożyć w głowie, narysujmy mały schemat w duchu „dane krążą tam i z powrotem”:

flowchart TD
    U[Użytkownik w ChatGPT] --> A["ChatGPT App (GiftGenius)"]
    A --> E[Moduł eksperymentów
przypisuje wariant A/B] E --> AG[Agent / narzędzia MCP
z różnymi modelami] AG -->|wywołania LLM| L[Logi użycia i kosztów] AG -->|Wyniki doboru| UI[Widget / odpowiedź czatu] UI -->|zachowanie: kliknięcia, zakupy| BE[Commerce backend] L --> M[Metryki: cost_per_task,
cost_per_user] BE --> M M --> D[Dashboard pricingu i eksperymentów] subgraph "Przyszły moduł 20" J[Sędzia LLM
quality_score] J --> M end

Teraz jesteście dokładnie w środku tego schematu: umiecie logować koszt i przychód oraz dokładacie do tego eksperymenty i pricing. W następnym module wleci temat Sędzia Dredd (Sędzia LLM).

10. Typowe błędy przy pracy z monetyzacją i eksperymentami

Gdy w głowie jest ogólny schemat, łatwiej zobaczyć, gdzie zwykle wszystko się sypie. Poniżej — zestaw typowych błędów, które warto mieć pod ręką jako check‑listę przy pracy z monetyzacją i eksperymentami kosztowymi.

Błąd nr 1: optymalizować tylko pod koszt, zapominając o jakości.
Częsty scenariusz: przechodzicie na tańszy model, widzicie, że rachunek od OpenAI przyjemniejszy, i ogłaszacie zwycięstwo. A potem po miesiącu zauważacie, że użytkownicy rzadziej kupują bony podarunkowe, gorzej wracają, rośnie wsparcie „zaproponowano mi jakieś bzdury”. Jeśli nie logować ani quality_score, ani choćby metryk pośrednich (kliki w pomysły, zapisy, konwersje), łatwo wejść w tryb „tanie, ale bezużyteczne”.

Błąd nr 2: liczyć cost_per_task tylko po LLM, ignorując infrastrukturę i płatności.
Czasem developerzy skrupulatnie liczą tokeny, ale zapominają o Redisie, kolejkach, zewnętrznych API, prowizjach Stripe i reszcie. W efekcie cost_per_task wychodzi mocno zaniżony, a ceny wydają się bardziej komfortowe, niż są w rzeczywistości. Infrastruktura zwykle liczona jest po danych zagregowanych, ale jej udział trzeba i tak doliczyć do kosztu scenariusza.

Błąd nr 3: zmieniać modele/UX bez jawnych experiment_id i variant.
„Trochę przepisaliśmy prompt, chyba jest lepiej” — po miesiącu nikt nie pamięta, kiedy dokładnie zmieniono, na jakich danych to oparte i do czego doprowadziło. Bez jawnego oznaczania eksperymentów w logach (experiment_id, variant) i powiązania z konkretnymi releasami trudno analizować retrospektywę i dowodzić, że ulepszenia nie są przypadkowe.

Błąd nr 4: podejmować decyzje na zbyt małych danych lub zbyt wcześnie.
Jeśli eksperyment działa dwa dni i na podstawie dziesięciu płatności stwierdzacie, że model B „znacznie bardziej się opłaca”, to klasyczny przykład wniosku ze szumu statystycznego. Potrzebny jest co najmniej minimalny horyzont — tydzień, najlepiej dłużej — i odpowiednia liczba scenariuszy, aby porównywać średnie i konwersje. W wykładzie nie wchodzimy w statystykę, ale regułę „nie wyciągaj wniosków po 5 zdarzeniach” warto mieć z tyłu głowy.

Błąd nr 5: używać skomplikowanego cennika bez prostej reguły mentalnej.
Można narysować trójpoziomowy plan taryfowy, ceny w różnych walutach i zniżki po kodach referencyjnych, ale nie mieć prostego w firmie prawa typu „na LLM‑cost jesteśmy gotowi wydawać nie więcej niż X % przychodu” lub „cena scenariusza nie powinna spadać poniżej 3× średni cost_per_task”. Bez takich ograniczników łatwo zgubić marżę i nie zauważyć tego do końca miesiąca.

Błąd nr 6: zapominać o związku monetyzacji z marketingiem i wzrostem.
Monetyzacja i pricing nie żyją w próżni: im droższa subskrypcja, tym wyższy churn i niższa konwersja; im niższa cena, tym większe wymagania co do optymalizacji kosztów. Błędem jest patrzeć tylko na „ile teraz zarabiamy” i nie łączyć tego z metrykami acquisition/activation/retention, o których będzie mowa w kolejnym temacie modułu. Eksperymenty pricingowe najlepiej od razu logować w tym samym kluczu, co eksperymenty jakości i kosztów, aby widzieć pełny obraz.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION