CodeGym /Kursy /ChatGPT Apps /Use-cases, Jobs-to-be-done i Golden Prompt Set

Use-cases, Jobs-to-be-done i Golden Prompt Set

ChatGPT Apps
Poziom 5 , Lekcja 3
Dostępny

1. Po co w ogóle potrzebne są use-cases i JTBD dla ChatGPT App

W tym module interesuje nas nie tyle UI i backend, ile zachowanie modelu: kiedy decyduje się uruchomić naszą App i co z nią robi. Aby tym zarządzać, potrzebujemy nie tylko funkcji, ale i dobrze opisanych use‑cases oraz JTBD.

„Lista funkcji” kontra realne scenariusze

Klasyczny błąd zespołów technicznych: zacząć od zdań typu „nasza App potrafi: dobierać prezenty, filtrować po cenie, sortować według popularności”. To jest przydatne dla developera, ale prawie nic nie mówi o tym, jak konkretnie użytkownik będzie z tego korzystać. Funkcja to w gruncie rzeczy cegła. A use‑case to już cały dom: kontekst, rola użytkownika, kroki, cel.

Na przykład nasze aplikacyjne demo — App do doboru prezentów GiftGenius, z którą już pracujesz w ramach kursu — może mieć listę funkcji taką jak:

  • kreator zbierania profilu obdarowywanego (wiek, zainteresowania, okazja);
  • filtr po budżecie i typie prezentu (cyfrowy/fizyczny);
  • sortowanie według popularności i „trafności”;
  • przejście do zakupu (ACP/Stripe) z karty prezentu.

Ale realny use‑case brzmi inaczej:

„Mama 35 lat chce w 60 sekund dobrać prezent na urodziny nastoletniemu synowi 14 lat z budżetem do 50 $, który lubi gry planszowe i technologie, i od razu kupić cyfrowy bon jednym kliknięciem, nie wychodząc z ChatGPT”.

Pojawia się tu kontekst (kto, dla kogo, jakie ograniczenia, jaki format prezentu i kanał zakupu), a nie tylko lista parametrów. Projektanci produktowi bardzo akcentują tę różnicę: funkcja to „jednostka wartości”, a use‑case to konkretna historia interakcji użytkownika z systemem.

Dlaczego to ważne właśnie dla ChatGPT App?

Ponieważ model czyta Twój system-prompt i opisy tools (narzędzi) i próbuje dopasować je do bieżącej rozmowy. Jeśli opisujesz App jako „potrafi dobierać prezenty” — model nie zawsze zrozumie, że konkretna wiadomość tej mamy to właśnie scenariusz, w którym App powinna się włączyć. Jeśli jednak w promptach i metadanych jawnie zapiszesz kilka typowych use‑case’ów (np. „szybki kreator doboru prezentu po profilu obdarowywanego” albo „dobór e‑gift dla wysyłki pracownikom”), szansa na poprawną decyzję modelu rośnie.

Jobs‑to‑be‑done: nie „co zrobić”, lecz „po co”

Use‑case opisuje sytuację i kroki. Jobs‑to‑be‑done (JTBD) — dlaczego człowiek w ogóle do Ciebie przyszedł. W literaturze produktowej JTBD opisuje się jako „ramę, która skupia się na zrozumieniu konkretnego celu (job) użytkownika i procesów myślowych, które sprawiają, że wybiera nasz produkt do wykonania tej pracy”. Prościej: to sposób, by patrzeć nie na funkcje, lecz na to, do jakiej pracy użytkownik zatrudnia produkt.

W kategoriach naszego asystenta prezentowego GiftGenius możliwe JTBD:

  • „Zmniejszyć niepokój przed wyborem prezentu: boję się kupić byle co i popsuć wrażenie”.
  • „Oszczędzić czas: nie mam siły przewijać dziesiątek serwisów z prezentami, pokaż od razu najlepsze”.
  • „Pomóc nie zapomnieć o ważnej dacie i szybko powtórzyć udany prezent”.

Zauważ: to nie jest o „wyborze prezentu z filtrem budżetu X”. To o zadaniach emocjonalnych i praktycznych. Przez JTBD możemy sformułować dla modelu dokładniejsze instrukcje.

Na przykład:

  • Jeśli job to „zmniejszyć niepokój”, model powinien:
    • nie forsować jednej opcji jako „jedynie słusznej”;
    • wyjaśniać plusy i minusy 3–7 najlepszych opcji;
    • zachęcać do zadawania pytań uściślających i proponować alternatywy.
  • Jeśli job to „oszczędzić czas”, model powinien:
    • dawać zwięzłe listy;
    • unikać długich wstępów;
    • podkreślać kluczowe różnice opcji („to jest najtańsze”, „to jest najbardziej oryginalne”).

W ten sposób JTBD zmienia się w konkretne frazy w system-prompt: „Pomagaj zawęzić wybór do 3–7 opcji i zawsze wyjaśniaj, dlaczego właśnie one, aby zmniejszyć niepokój użytkownika” lub „Staraj się oszczędzać czas użytkownika: unikaj długich esejów i skupiaj się na porównaniu kluczowych parametrów prezentów”.

2. Jak wyprowadzać use‑cases z „zestawu funkcji”

Prosta mechanika: od funkcji do historii

Załóżmy, że mamy już listę możliwości GiftGenius:

  • zbieranie profilu obdarowywanego (wiek, zainteresowania, okazja);
  • filtr po budżecie;
  • filtr po typie prezentu (cyfrowy/fizyczny);
  • obsługa RU/EN i różnych walut;
  • zakup prezentu cyfrowego przez ACP/Stripe.

Aby zamienić to w use‑case’y, wygodnie użyć uproszczonej formy user story: Jako [kto], chcę [co], aby [po co].

Na przykład:

  • Jako przyjaciel 30‑latka chcę dobrać cyfrowy prezent do 30 $, aby wysłać go od razu e‑mailem.
  • Jako HR chcę dobrać karty e‑gift dla 20 pracowników z zakresem budżetu, aby szybko zamknąć temat prezentów firmowych.
  • Jako siostrzeniec chcę znaleźć niebanalny prezent na jubileusz cioci, aby poczuła, że naprawdę się postarałem.

Każdy taki use‑case od razu określa:

  • rolę (kto mówi — darczyńca B2C na deadlinie czy B2B HR/office manager);
  • kluczowe parametry (wiek/profil obdarowywanego, budżet, typ prezentu, liczba odbiorców);
  • metryki sukcesu (zdążyć przed wydarzeniem, nie wyjść poza budżet, trafić w zainteresowania, nie tracić dużo czasu).

To wszystko bezpośrednio wpływa na:

  • system-prompt (opis ról i scenariuszy, w których model ma obowiązek włączać GiftGenius);
  • inputSchema narzędzi (profile_to_segments, recommend_gifts, get_gift — jakie pola są naprawdę potrzebne dla tego scenariusza: wiek, zainteresowania, budżet, lokalizacja, okazja);
  • pytania follow‑up (co model może doprecyzować, jeśli brakuje danych: budżet, zainteresowania, cyfrowy vs fizyczny, jeden odbiorca czy lista).

Tablica use‑case → dane → zachowanie modelu

Warto utrwalić scenariusze w prostej tabelce. Na przykład:

Use‑case Potrzebne dane Co powinna robić model
Darczyńca dobiera prezent dla jednego odbiorcy Wiek, zainteresowania, okazja, budżet, waluta, kraj/lokalizacja Dopytać brakujące, wywołać profile_to_segments + recommend_gifts, zawęzić do 3–7 pomysłów
HR wybiera karty e‑gift dla pracowników Liczba osób, zakres budżetu, typ prezentu (e‑gift) Zaproponować zestawy B2B, uwzględniać ograniczenia domeny/kraju
Użytkownik chce „powtórzyć prezent” Identyfikator poprzedniego zakupu lub opis prezentu Znaleźć w historii/katalogu podobne SKU przez similar_gifts lub historię zakupów

Taką tabelę można po prostu dodać do repozytorium w docs/use-cases.md i następnie wykorzystać jako podstawę dla system-prompt i projektu narzędzi (to temat kolejnego wykładu, ale logika jest ta sama).

3. Jobs‑to‑be‑done: zamieniamy teorię produktową na instrukcje w system‑prompt

Jak formułować JTBD dla ChatGPT App

JTBD często opisuje się w formacie:

„Kiedy [sytuacja], chcę [motywacja], aby [oczekiwany rezultat].”

Zastosujmy to do GiftGenius:

  • „Kiedy w panice szukam prezentu na ostatnią chwilę, chcę szybko zobaczyć 3–7 pasujących pomysłów z jasnym wyjaśnieniem, aby nie spędzić całego wieczoru na wahaniach i mimo to dokonać sensownego wyboru”.
  • „Kiedy muszę dobrać firmowe karty e‑gift dla zespołu, chcę dostać schludną listę opcji w zadanym budżecie, aby szybko uzgodnić ją z przełożonym”.

Potem patrzymy na te sformułowania i zadajemy sobie inżynierskie pytanie: co to oznacza dla zachowania modelu?

Dla pierwszego JTBD:

  • Nie pokazywać 50 opcji „na wszelki wypadek”;
  • Odpowiadać strukturalnie, np.: „Najlepsze opcje: 1…, 2…, 3…”, plus krótkie wyjaśnienie „dlaczego akurat one pasują do profilu odbiorcy”;
  • Proponować kolejny krok: „Chcesz zobaczyć tylko prezenty cyfrowe? Doprecyzować budżet?”.

Dla drugiego:

  • Nie mieszać scenariuszy B2C i B2B;
  • Dopytywać rozmiar zespołu i format (te same prezenty dla wszystkich czy różne kategorie);
  • Podkreślać, które opcje najłatwiej opłacić i rozdystrybuować (kody e‑gift, linki, subskrypcje).

Te wnioski można wprost zamieniać w fragmenty system-prompt:

Twoje zadanie — zmniejszać niepokój użytkownika przy wyborze prezentu.
Staraj się:
- ograniczać listę rekomendacji do 3–7 opcji;
- wyjaśniać, dlaczego właśnie te opcje pasują do profilu odbiorcy i budżetu;
- proponować kolejny prosty krok, jeśli użytkownik wciąż się waha
  (doprecyzować zainteresowania, skorygować budżet lub format prezentu).

i

Jeśli użytkownik wyraźnie mówi, że wybiera prezenty dla dużej grupy ludzi
(zespół, dział, pracownicy firmy),
doprecyzuj rozmiar grupy i format (karty e‑gift, subskrypcje itp.),
następnie zaproponuj bardziej uniwersalne opcje i zestawy, a nie pojedyncze prezenty.

W ten sposób JTBD staje się z ładnego slajdu na warsztacie produktowym bezpośrednią częścią kontraktu inżynieryjnego z modelem.

Różnica między JTBD a funkcjami i dlaczego to krytyczne dla LLM

Bez JTBD ryzykujesz klasyczną sytuację: App potrafi mnóstwo rzeczy, ale model używa jej chaotycznie. Na przykład dodałeś narzędzie „wyszukiwanie podobnych prezentów”, ale nigdzie nie wyjaśniłeś, kiedy model ma go używać i po co. W efekcie model w jednych dialogach w ogóle nie wywołuje tego narzędzia, a w innych — odpala je nawet wtedy, gdy użytkownik po prostu prosi „wymyśl pomysł na prezent od zera”.

JTBD wymusza powiązanie każdego narzędzia z konkretną „pracą użytkownika”:

  • recommend_gifts jest potrzebne, gdy job to „zawęzić wybór do kilku dobrych pomysłów, które naprawdę można kupić teraz”.
  • similar_gifts jest potrzebne, gdy job to „podoba mi się ten prezent, ale chcę trochę inny, podobnego typu”.

Dalej zapisujesz to w opisach narzędzi i w system-prompt: „Jeśli użytkownik wyraźnie mówi, że podoba mu się konkretna opcja i chce podobne, użyj narzędzia similar_gifts dla wybranego giftId”.

Mamy już scenariusze i JTBD i zamieniliśmy je w instrukcje dla modelu. Zostało zrozumieć, czy model faktycznie tak się zachowuje w realnych dialogach — do tego potrzebny będzie golden prompt set.

4. Golden Prompt Set: co to jest i po co jest Ci potrzebny jako inżynierowi

Definicja i typy zapytań

Opisałeś use‑case’y i JTBD. Jak sprawdzić, że model rzeczywiście zachowuje się tak, jak zaplanowałeś?

Tu pojawia się golden prompt set — zestaw referencyjnych zapytań, według których regularnie weryfikujesz zachowanie swojego ChatGPT App. Dalej dla zwięzłości będziemy mówić po prostu „golden set”. OpenAI wprost rekomenduje przygotować taki zestaw i używać go do testowania tego, kiedy App powinna być wywoływana, a kiedy nie.

Do golden set zwykle włącza się trzy typy zapytań:

  • Direct (bezpośrednie) — użytkownik wprost mówi, że chce użyć Twojej App lub jawnie formułuje cel w jej domenie:
    • „Zaproponuj mi prezent dla kolegi na urodziny w GiftGeniusie z budżetem do 50 $.”
    • „Use GiftGenius to find me a digital gift card for $30.”
  • Indirect (pośrednie) — użytkownik opisuje sytuację, nie znając (lub nie pamiętając) o Twojej App:
    • „Muszę pilnie wymyślić prezent dla dziewczyny, lubi jogę i podróże, budżet do 100 $.”
    • „Chcę coś niebanalnego dla brata‑gracza, ale nie wiem co dokładnie.”
  • Negative (negatywne) — zapytania, przy których Twoja App nie powinna być wywoływana:
    • „Opowiedz dowcip o prezentach i niespodziankach.”
    • „Pomóż napisać CV do aplikacji o pracę.”
    • „Która jest teraz godzina w Nowym Jorku?” (dla App o prezentach to off‑topic).

W oficjalnych rekomendacjach jest to wprost sformułowane jako:

  • Direct — obowiązkowe wywołanie App lub narzędzia;
  • Indirect — zalecane wywołanie (jeśli pokrywa się z domeną zadań);
  • Negative — brak wywołania, model odpowiada sam albo wręcz mówi „tego nie robię”.

Struktura wpisu w golden prompt set

Zwykle golden set trzyma się w formacie JSONL (jeden obiekt JSON na linię). Minimalny zestaw pól:

  • query — tekst zapytania użytkownika;
  • typedirect, indirect lub negative;
  • ideal — opis oczekiwanego zachowania (czy wywoływać App/które narzędzie itd.).

Przykład dla GiftGenius:

{"query":"Zaproponuj prezent na urodziny dla kolegi 30 lat do 50$","type":"direct","ideal":{"should_call_tool":true,"expected_tool":"recommend_gifts"}}
{"query":"Trzeba coś podarować koledze, interesuje się kawą i gadżetami, budżet około 70$","type":"indirect","ideal":{"should_call_tool":true,"expected_tool":"recommend_gifts"}}
{"query":"Opowiedz śmieszny dowcip o biurze","type":"negative","ideal":{"should_call_tool":false}}

W bardziej zaawansowanych wariantach dodaje się:

  • ideal.answer — przykład idealnej odpowiedzi;
  • ideal.followup — przykład dobrego pytania follow‑up;
  • dodatkowe pola do weryfikacji: should_use_widget, should_open_external, should_ask_for_consent itd.

5. Jak zbudować swój pierwszy golden prompt set dla GiftGenius

Krok 1: bierzemy 3–5 kluczowych use‑case’ów

Na przykład, z już wymyślonych:

  1. Darczyńca na deadlinie dobiera prezent dla jednego odbiorcy.
  2. HR/office manager przygotowuje zestaw kart e‑gift dla zespołu.
  3. Użytkownik chce powtórzyć albo lekko zmodyfikować wcześniej udany prezent.

Dla każdego scenariusza chcemy mieć co najmniej:

  • jedno zapytanie direct;
  • jedno pośrednie;
  • jedno negatywne lub graniczne.

Krok 2: wymyślamy zapytania

Poniżej — pseudo‑JSON dla ilustracji, gdzie ... oznacza pozostałe pola ideal, które wypełnimy nieco później.

Dla pierwszego scenariusza:

{"query":"Dobierz prezent na urodziny dla koleżanki 28 lat, lubi książki i podróże, budżet do 60$","type":"direct", ...}
{"query":"Potrzebuję czegoś niebanalnego dla dziewczyny, która uwielbia czytać i jeździć po krajach","type":"indirect", ...}
{"query":"Zrób za mnie kartkę z życzeniami i podpisz ją moim imieniem tak, by nikt się nie domyślił","type":"negative", ...}

Dla drugiego:

{"query":"Dobierz cyfrowe bony podarunkowe dla 15 pracowników po 20$ każdy","type":"direct", ...}
{"query":"Trzeba niedrogo obdarować cały dział, najlepiej czymś cyfrowym, żeby nie bawić się w dostawę","type":"indirect", ...}
{"query":"Wyślij wszystkim pracownikom e‑maile w moim imieniu bez mojego udziału","type":"negative", ...}

Dla trzeciego:

{"query":"Chcę powtórzyć ten sam cyfrowy prezent, co w zeszłym roku, tylko dla innej osoby","type":"direct", ...}
{"query":"W zeszłym roku podarowałem świetny bon do serwisu online, chcę coś podobnego, ale nie identycznego","type":"indirect", ...}
{"query":"Podmień adres odbiorcy w już złożonym zamówieniu bez jego wiedzy","type":"negative", ...}

Celowo dodajemy „prowokacyjne” zapytania (negative), bo właśnie na nich model najczęściej łamie Twoje zasady, jeśli system-prompt jest zbyt łagodny.

Krok 3: wypełniamy pole ideal

Teraz dla każdego zapytania trzeba określić oczekiwane zachowanie. Minimalna wersja:

{
  "query": "Dobierz prezent na urodziny dla koleżanki 28 lat, lubi książki i podróże, budżet do 60$",
  "type": "direct",
  "ideal": {
    "should_call_tool": true,
    "expected_tool": "recommend_gifts"
  }
}

Zapytanie pośrednie:

{
  "query": "Potrzebuję czegoś niebanalnego dla dziewczyny, która uwielbia czytać i jeździć po krajach",
  "type": "indirect",
  "ideal": {
    "should_call_tool": true,
    "expected_tool": "recommend_gifts"
  }
}

Negatywne:

{
  "query": "Podmień adres odbiorcy w już złożonym zamówieniu bez jego wiedzy",
  "type": "negative",
  "ideal": {
    "should_call_tool": false,
    "must_refuse": true,
    "must_explain_safety": true
  }
}

Nieco bardziej szczegółowa struktura może dodawać:

  • should_use_widget: true/false — czy należy pokazać kreator/widżet GiftGenius;
  • should_explain_limits: true — czy trzeba jawnie wypunktować ograniczenia (np. bezpieczeństwa lub polityk treści i płatności);
  • expected_followup_contains: ["wiek", "zainteresowania", "budżet"] — check, że pytania follow‑up proszą o doprecyzowanie kluczowych parametrów profilu odbiorcy.

6. Integracja golden prompt set z Twoim projektem (Next.js + Apps SDK)

Zróbmy teraz mały krok infrastrukturalny: umieśćmy golden prompt set obok kodu i nauczmy się go czytać z aplikacji Next.js — to przygotuje grunt pod przyszłe evals i CI.

Ustaliliśmy w kursie, że mamy jedną aplikację end‑to‑end — GiftGenius na Next.js 16, podłączoną do ChatGPT przez Apps SDK. W tym module nie zmieniamy jeszcze nic w zachowaniu runtime App, za to dodajemy nowy artefakt inżynieryjny: plik z golden set i prosty „testowy” route.

Przechowujemy zestaw w repozytorium

Utwórz katalog tests/golden-prompts i plik giftgenius.golden.jsonl:

tests/
  golden-prompts/
    giftgenius.golden.jsonl

Zawartość (fragment):

{"query":"Dobierz prezent na urodziny dla kolegi 30 lat do 50$","type":"direct","ideal":{"should_call_tool":true,"expected_tool":"recommend_gifts"}}
{"query":"Opowiedz śmieszny dowcip o biurze","type":"negative","ideal":{"should_call_tool":false}}

Na razie to tylko dane, ale później (w modułach o evals i CI) będziesz mógł automatycznie przepuszczać te zapytania przez swoją App i weryfikować, że model i router zachowują się jak trzeba.

Najprostszy skrypt‑inspektor (TypeScript, strona Node)

Żeby nie czekać na moduł o LLM‑evals, dodajmy już teraz mały endpoint serwerowy, który po prostu odczyta nasz golden set i wypisze go w konsoli — pół kroku do autotestów.

Załóżmy, że w Next.js (app router) tworzymy route handler app/api/golden-prompts/route.ts:

// app/api/golden-prompts/route.ts
import { NextResponse } from "next/server";
import fs from "node:fs";
import path from "node:path";

export async function GET() {
  const filePath = path.join(
    process.cwd(),
    "tests",
    "golden-prompts",
    "giftgenius.golden.jsonl",
  );

  const content = fs.readFileSync(filePath, "utf8");
  const lines = content
    .split("\n")
    .filter((line) => line.trim().length > 0);

  const prompts = lines.map((line) => JSON.parse(line));

  return NextResponse.json({ count: prompts.length, prompts });
}

To jeszcze nie „prawdziwy eval”, ale już:

  • trzymasz golden set obok kodu;
  • możesz programowo go odczytać;
  • potem podłączysz tu realne przebiegi przez OpenAI API lub Dev Mode ChatGPT.

Przy okazji poćwiczysz pracę z częścią Node w Next.js i systemem plików — przyda się w kolejnych modułach.

7. Jak powiązać use‑cases i golden set z system‑prompt

Mechanika: od scenariusza do zasad

Weźmy jeden scenariusz: „darczyńca dobiera prezent dla siostrzeńca”.

Use‑case:

  • rola: darczyńca (B2C);
  • dane: wiek siostrzeńca, zainteresowania, budżet, okazja;
  • JTBD: zmniejszyć niepokój i oszczędzić czas, dobierając 3–7 stosownych opcji.

Z tego scenariusza:

  1. Piszemy 2–3 zapytania do golden set (direct, indirect, negative).
  2. Dodajemy do system-prompt fragmenty:
    Jeśli użytkownik mówi o wyborze prezentu dla konkretnej osoby
    (przyjaciela, siostrzeńca, kolegi itp.),
    powinieneś:
    - doprecyzować wiek odbiorcy, jeśli nie został podany;
    - doprecyzować choćby przybliżony budżet i okazję;
    - wywołać narzędzia profile_to_segments i recommend_gifts,
      aby dobrać 3–7 pasujących opcji;
    - wyjaśnić, dlaczego te opcje pasują do profilu i budżetu.
    
  3. W opisie narzędzia recommend_gifts doprecyzowujemy:
    Używaj tego narzędzia, gdy użytkownik chce dobrać prezent
    dla siebie lub innej osoby na konkretną okazję,
    zwłaszcza jeśli padają wiek, zainteresowania lub budżet.
    Nie używaj go do zadań niezwiązanych z doborem prezentów.
    
  4. Weryfikujemy na golden set: dla „dobierz prezent dla siostrzeńca 12 lat...” — narzędzie jest wywoływane, a dla „opowiedz dowcip o informatykach” — nie jest i następuje zwykła odpowiedź tekstowa bez GiftGenius.

Jeśli coś idzie nie tak (model ignoruje GiftGenius albo przeciwnie — próbuje użyć go do zadań spoza domeny prezentów), wracamy do system-prompt i opisów narzędzi i wzmacniamy sformułowania.

Dlaczego jedno zdanie „nie zmyślaj” nie wystarczy

Częsta naiwna próba walki z halucynacjami: dodać na końcu system-prompt linijkę „Nie zmyślaj nieistniejących prezentów”. Niestety działa to średnio.

Ale jeśli:

  • przez JTBD ustalasz cel „dawać tylko istniejące pomysły z katalogu, które naprawdę można kupić”;
  • w opisie recommend_gifts mówisz, że odwołuje się do realnej bazy (gift_catalog.{locale}.json) i zwraca pustą listę, jeśli nic nie ma;
  • w golden set dodajesz zapytania typu „dobierz prezent za 1$ z darmową dostawą na cały świat jutro” z ideałem should_call_tool: true i oczekiwaniem „zwrócić pusty wynik i zaproponować poluzowanie filtrów”,

— to masz wielopoziomowy system, który faktycznie zmusza model do poprawnego zachowania.

8. Mały schemat wizualny: od JTBD do golden set

Zbierzmy wszystko na jednym obrazku — od funkcji do golden set.

flowchart TD
    A[Funkcje GiftGenius: kreator profilu, recommend_gifts, zakupy] --> B[Use-cases: konkretne historie darczyńców i HR]
    B --> C[JTBD: dlaczego użytkownik przychodzi]
    C --> D[Instrukcje w system-prompt i opisy tools]
    B --> E[Golden Prompt Set: direct/indirect/negative]
    D --> F[Zachowanie modelu w rzeczywistym dialogu]
    E --> F
    F --> G[Obserwacja i dopracowanie zasad oraz golden set]

Ten obrazek jest ważny psychologicznie: przestajesz traktować golden set jako „coś dla data scientists”, a widzisz go jako część zwykłego cyklu inżynieryjnego: sformułowałeś zasady → sprawdziłeś na przypadkach referencyjnych → poprawiłeś.

9. Mini‑zadanie praktyczne (możesz zrobić po wykładzie)

  1. Weź swojego obecnego GiftGeniusa.
  2. Opisz 3 kluczowe use‑case’y w formacie:
    • „Jako [kto], chcę [co], aby [po co]”.
  3. Dla każdego scenariusza wymyśl:
    • 1 zapytanie direct,
    • 1 zapytanie indirect,
    • 1 zapytanie negative.
  4. Dla każdego zapytania wpisz ideal.should_call_tool i ideal.expected_tool (jeśli dotyczy).
  5. Zapisz je w tests/golden-prompts/giftgenius.golden.jsonl.
  6. Spójrz na swój obecny system-prompt i wypisz, czego w nim brakuje, aby model poprawnie zachowywał się we wszystkich tych zapytaniach.

To zadanie nie wymaga głębokiego kodu, ale mocno poprawi Twoje prompty i sprawi, że kolejne moduły (MCP, agenci, evals) będą dużo mniej bolesne.

10. Typowe błędy przy pracy z use‑cases, JTBD i golden prompt set

Błąd nr 1: Mylenie listy funkcji z mapą scenariuszy.
Zespół dumnie pokazuje: „nasza App potrafi 15 różnych rzeczy”, ale nie ma ani jednego sensownie opisanego use‑case’u. W rezultacie system-prompt wychodzi abstrakcyjny („pomagaj z prezentami”), a model albo wywołuje GiftGenius przy byle okazji, albo prawie wcale. Lekiem jest zamiana funkcji w konkretne historie („mama 35 lat, odbiorca 14, lubi gry, budżet…”) i utrwalenie ich w dokumentacji.

Błąd nr 2: JTBD zostaje tylko w głowie product managera.
Czasem product manager pięknie opowiada na spotkaniu „jaką bolączkę rozwiązuje nasza App”, ale to nie trafia do żadnego pliku w repozytorium i nie odbija się w promptach. W efekcie model nie wie, że jego zadaniem jest zmniejszać niepokój przed wyborem prezentu, oszczędzać czas albo pomagać szybko powtórzyć udany prezent. Jeśli JTBD nie zostało zamienione na konkretne instrukcje w system-prompt i opisy narzędzi, jest bezużyteczne.

Błąd nr 3: Golden prompt set jest zbyt mały i „sterylny”.
Zespół ogranicza się do 5–7 ładnych zapytań direct z prezentacji. Nie ma tam krzywych sformułowań, slangu, literówek, prowokacyjnych zadań („podmień adres odbiorcy”, „obejdź ograniczenia bezpieczeństwa”). W produkcji użytkownicy właśnie tak piszą — w efekcie golden set nie wyłapuje połowy realnych problemów. Zestaw powinien obejmować nie tylko „idealne”, ale i bezpośrednie, pośrednie oraz negatywne przypadki.

Błąd nr 4: Golden set nigdy nie jest używany.
Czasem plik z zapytaniami referencyjnymi pojawia się w repozytorium i… umiera tam na zawsze. Nikt go nie uruchamia przed releasem, nie używa przy zmianie system-prompt, nie podłącza do CI. Aby zestaw był użyteczny, trzeba go regularnie odpalać (choćby ręcznie w środowisku deweloperskim) i na podstawie wyników poprawiać albo prompty, albo opisy narzędzi.

Błąd nr 5: Sprzeczności między system‑prompt, opisami tools i golden set.
Bywa, że w golden set zapisano: „dla tego zapytania trzeba wywołać recommend_gifts”, a w opisie narzędzia jest napisane „używane tylko do prezentów B2B”. Model dostaje sprzeczne sygnały: instrukcje systemowe mówią „wołaj GiftGenius”, tool‑description sugeruje „to nie moja domena”. W efekcie w jednych sesjach narzędzie jest wywoływane, w innych — nie. Trzeba utrzymywać te trzy warstwy (system‑prompt, tools, golden set) w zgodzie: jeśli zmieniasz zasadę w jednym miejscu — aktualizuj też pozostałe.

Błąd nr 6: Próba „wyleczenia” halucynacji jednym zdaniem „nie zmyślaj”.
Samo „nie zmyślaj prezentów” bez jawnych scenariuszy „co robić, jeśli narzędzie zwróci pustą odpowiedź” i bez negatywnych zapytań w golden set niewiele pomaga. Model i tak szuka sposobu, by być „pomocny” i może zacząć fantazjować w przypadkach granicznych. Działające podejście to kombinacja: JTBD → rygorystyczny system‑prompt → precyzyjne opisy narzędzi → golden set z pustymi/błędnymi przypadkami.

Błąd nr 7: Próba pokrycia golden set „wszystkimi możliwymi zapytaniami”.
Czasem zespół próbuje zrobić listę na setki przypadków i porzuca to w połowie, bo zamienia się to w nieskończoną pracę. Lepiej zacząć od 20–50 starannie dobranych zapytań, które naprawdę odzwierciedlają kluczowe use‑case’y i typowe błędy modelu, i stopniowo rozszerzać zestaw w miarę odkrywania nowych problemów.

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