0Pricing
AI Engineering Academy · Lekcja

Iteracyjne doskonalenie i debugowanie promptów

Uczestnicy zbudują systematyczny proces testowania i udoskonalania promptów, zidentyfikują tryby błędów oraz użyją OpenAI Playground do szybkiego wprowadzania zmian przed napisaniem kodu produkcyjnego.

Iteracyjne doskonalenie i debugowanie promptów to bezpłatna lekcja AI Engineering Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Engineering Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Engineering Academy zawiera 4 lekcji w sumie.

Tworzenie promptów to dyscyplina empiryczna

Skuteczne projektowanie promptów nie polega na znalezieniu magicznej formuły — jest empirycznym, iteracyjnym procesem, bardziej przypominającym debugowanie niż pisanie. Najpierw tworzą Państwo prompt, uruchamiają go na danych testowych, obserwują, gdzie zawodzi, formułują hipotezę dotyczącą przyczyny, a następnie modyfikują prompt, aby naprawić problem. Sama intuicja jest zawodna; potrzebne są dane.

Wielu deweloperów popełnia błąd, testując prompt na jednym lub dwóch ręcznie przygotowanych przykładach, uznając wyniki za dobre i wdrażając go na produkcję — po czym odkrywa, że prompt zawodzi w przypadku 30% rzeczywistych danych wejściowych. Systematyczny proces ewaluacji zapobiega temu, wystawiając prompt na różnorodne, reprezentatywne przykłady, zanim zostanie on uruchomiony produkcyjnie.

Najpierw należy zbudować zbiór testowy

Przed napisaniem promptu proszę zbudować złoty zbiór testowy: kolekcję od 20 do 100 reprezentatywnych przykładów danych wejściowych wraz z oczekiwanym wynikiem lub kryteriami zaliczenia. Zbiór ten będzie punktem odniesienia do oceny każdej zmiany promptu.

Dobre zbiory testowe obejmują: typowe dane wejściowe, sytuacje skrajne (puste ciągi znaków, bardzo długie dane wejściowe, niejednoznaczne przypadki), dane wejściowe przygotowane w celu złamania promptu oraz dane od użytkowników z różnych segmentów. Im bardziej różnorodny jest zbiór testowy, tym większą można mieć pewność, że zmiana promptu rzeczywiście stanowi ulepszenie, a nie jest wynikiem nadmiernego dopasowania do kilku przykładów, o których Państwo myśleli.

Prosty mechanizm ewaluacji

Napisanie prostego skryptu ewaluacyjnego zajmuje godzinę, a oszczędza całe dni debugowania problemów produkcyjnych. Skrypt uruchamia prompt dla każdego przypadku testowego, porównuje wynik z oczekiwanym rezultatem i podaje współczynnik zaliczeń. Następnie mogą Państwo iterować nad promptem i od razu sprawdzać, czy zmiany poprawiły ogólny wynik.

import openai

client = openai.OpenAI()

# Golden test set: (input, expected_output)
test_cases = [
    ('The product is excellent and very fast.', 'Positive'),
    ('Arrived damaged and customer service ignored me.', 'Negative'),
    ('Delivery was on time.', 'Neutral'),
    ('Worst purchase of my life. Never again!', 'Negative'),
    ('Good value for the price.', 'Positive'),
]

def evaluate_prompt(system_prompt):
    correct = 0
    for text, expected in test_cases:
        resp = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=[
                {'role': 'system', 'content': system_prompt},
                {'role': 'user', 'content': text}
            ],
            max_tokens=10
        )
        prediction = resp.choices[0].message.content.strip()
        if expected.lower() in prediction.lower():
            correct += 1
        else:
            print(f'FAIL: "{text}" -> got "{prediction}", expected "{expected}"')
    return correct / len(test_cases)

score = evaluate_prompt('Classify sentiment as Positive, Negative, or Neutral. Reply with one word only.')
print(f'Score: {score:.0%}')

Kategoryzowanie rodzajów błędów

Gdy prompt zawodzi w przypadkach testowych, proszę pogrupować błędy według typu, aby rozpoznać wzorce. Typowe rodzaje błędów to:

  • Błędy formatu: model generuje prawidłową odpowiedź, ale w niewłaściwym formacie
  • Błędy niejednoznaczności: model interpretuje zadanie inaczej, niż Państwo zamierzali
  • Błędy w sytuacjach skrajnych: model działa dla typowych danych wejściowych, ale zawodzi dla nietypowych
  • Błędy halucynacji: model z przekonaniem generuje nieprawdziwe informacje
  • Ignorowanie instrukcji: model częściowo stosuje się do instrukcji, ale pomija konkretne ograniczenia

Każdy rodzaj błędu wymaga innej poprawki. Błędy formatu wymagają bardziej jednoznacznych instrukcji dotyczących danych wyjściowych, a błędy niejednoznaczności — jaśniejszego zdefiniowania zadania lub przykładów.

OpenAI Playground do szybkiego iterowania

OpenAI Playground (platform.openai.com/playground) to najszybsze narzędzie do iterowania nad promptami bez pisania kodu. Umożliwia przełączanie modeli, dostosowywanie parametrów za pomocą suwaków, zapisywanie wersji promptów oraz porównywanie wyników obok siebie.

Proszę używać Playground na etapie eksploracji podczas tworzenia promptu: wypróbowywać różne sformułowania, interaktywnie testować sytuacje skrajne i wyrabiać sobie intuicję dotyczącą tego, co działa. Gdy uda się Państwu opracować obiecujący prompt, należy przenieść go do kodu i użyć mechanizmu ewaluacji, aby systematycznie zweryfikować go na pełnym zbiorze testowym przed wdrożeniem.

Wersjonowanie promptów

Prompty są kodem. Należy zarządzać ich wersjami, przeglądać je i wdrażać z taką samą starannością jak kod aplikacji. Najprostsze podejście polega na przechowywaniu szablonów promptów jako ciągów znaków w pliku stałych w repozytorium, dzięki czemu zmiany są śledzone w git i wymagają przeglądu kodu.

Bardziej zaawansowane podejścia obejmują przechowywanie promptów w dedykowanej bazie danych do zarządzania promptami (LangSmith, PromptLayer lub prosta tabela Supabase), oznaczanie wersji oraz przeprowadzanie testów A/B różnych wersji promptu na produkcji. Jest to szczególnie ważne, gdy nad tymi samymi promptami pracuje kilku członków zespołu lub gdy trzeba wycofać zmianę promptu, która pogorszyła jakość działania na produkcji.

# prompts/sentiment.py
# Version 2.1 - Added explicit tie-breaking rule for mixed reviews
SENTIMENT_V2_1 = '''You are a sentiment classification assistant.
Classify the customer review sentiment as exactly one of: Positive, Negative, or Neutral.

Rules:
- Positive: overall satisfaction, praise, or recommendation
- Negative: disappointment, complaint, or warning to others
- Neutral: factual statements without strong sentiment, or equal positive and negative content
- If the review contains both positive and negative elements, choose based on the DOMINANT tone

Respond with ONLY the single word classification. No explanation.'''

# Usage:
# from prompts.sentiment import SENTIMENT_V2_1

Systematyczne porównywanie wariantów promptów

Gdy mają Państwo dwie konkurencyjne wersje promptu, należy uruchomić obie na pełnym zbiorze testowym i porównać wyniki. Nawet poprawa dokładności o 5% w systemie produkcyjnym obsługującym tysiące żądań dziennie jest warta wysiłku związanego z ewaluacją. Nigdy nie należy wybierać promptu na podstawie jednego lub dwóch przykładów sprawdzonych ręcznie — zawsze należy porównywać je na pełnym zbiorze testowym.

W przypadku subiektywnych miar jakości, dla których nie ma jednej poprawnej odpowiedzi (takich jak ton, pomocność czy kreatywność), można użyć podejścia LLM-as-judge: należy poprosić zaawansowany model, taki jak GPT-4o, o ocenę tego, która z dwóch odpowiedzi lepiej spełnia kryteria jakości. Pozwala to rozszerzyć ewaluację poza możliwości ludzkiej weryfikacji.

Debugowanie niespójnych wyników

Wyniki LLM nie są domyślnie deterministyczne. Ustawienie temperature=0 sprawia, że wyniki są niemal deterministyczne (na każdym kroku wybierany jest token o największym prawdopodobieństwie), co ma kluczowe znaczenie podczas debugowania, ponieważ pozwala uruchomić ten sam prompt dwukrotnie i uzyskać ten sam wynik. Podczas debugowania należy zawsze ustawić temperaturę na 0, aby móc rozstrzygnąć, czy zmiana promptu spowodowała zmianę wyniku, czy wynikała ona jedynie z losowych różnic.

Po poprawieniu promptu należy ponownie włączyć pewien poziom temperatury w środowisku produkcyjnym, jeśli dane zastosowanie korzysta z różnorodności (np. kreatywne pisanie lub burza mózgów). Temperaturę należy jednak pozostawić na poziomie 0 w zadaniach związanych z ustrukturyzowanym wydobywaniem danych i klasyfikacją, gdy potrzebne są spójne i powtarzalne wyniki.

import openai

client = openai.OpenAI()

# Deterministic mode for debugging
response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {'role': 'system', 'content': 'Classify sentiment: Positive, Negative, or Neutral.'},
        {'role': 'user', 'content': 'The product looks nice but broke after two days.'}
    ],
    temperature=0,   # deterministic
    seed=42          # optional reproducibility seed
)
print(response.choices[0].message.content)

Debugowanie halucynacji

Jeśli prompt generuje zmyślone fakty, należy dodać ograniczenia, które utrudnią halucynowanie. Skuteczne techniki ograniczania halucynacji obejmują:

  • Cytowanie źródeł: „Odpowiadaj wyłącznie na podstawie podanego kontekstu. Jeśli odpowiedzi nie ma w kontekście, powiedz: Nie wiem.”
  • Określanie poziomu pewności: „Oceń swoją pewność w skali od 1 do 5. Jeśli jest niższa niż 3, nie odpowiadaj.”
  • Etap weryfikacji: „Przed udzieleniem odpowiedzi sprawdź, czy każdy fakt, którego zamierzasz użyć, znajduje się w podanym dokumencie.”

Żadna technika nie eliminuje halucynacji całkowicie, ale połączenie wyszukiwania (RAG) z silnymi ograniczeniami promptu znacznie je ogranicza w zastosowaniach wymagających dużej wiedzy.

Długość promptu i rozmieszczenie instrukcji

Badania wykazały, że LLM zwracają większą uwagę na instrukcje znajdujące się na początku i końcu promptu niż na te umieszczone w środku. Nazywa się to problemem „zagubienia w środku”. Jeśli długi prompt zawiera ważne instrukcje ukryte w środku i otoczone kontekstem, model może nie stosować się do nich w sposób niezawodny.

Najlepsza praktyka: najważniejsze instrukcje (definicję zadania i krytyczne ograniczenia) należy umieścić na samym początku promptu systemowego, a kluczowe ograniczenia powtórzyć na końcu. W przypadku długich dokumentów wstrzykiwanych jako kontekst pytanie użytkownika należy umieścić za dokumentem, a nie przed nim, ponieważ model przypisuje większą wagę najnowszej treści.

Od eksperymentowania do produkcji

Cykl życia tworzenia promptu składa się z trzech faz:

  • Eksploracja: należy swobodnie eksperymentować w Playground. Należy skupić się na zrozumieniu, co działa koncepcyjnie, a nie na uzyskaniu idealnego wyniku.
  • Ewaluacja: należy zbudować zbiór testowy i narzędzie do ewaluacji. Kandydackie prompty należy uruchamiać na pełnym zbiorze testowym i mierzyć odsetek zaliczeń. Należy iterować do osiągnięcia założonego progu jakości.
  • Produkcja: należy zarządzać ostatecznym promptem za pomocą kontroli wersji, dodać monitorowanie do śledzenia metryk jakości w środowisku produkcyjnym oraz skonfigurować alerty informujące o pogorszeniu jakości. Należy zaplanować przyszłe iteracje na wypadek zmiany wersji modelu.

Pominięcie fazy ewaluacji jest najczęstszą przyczyną regresji jakości promptów w środowisku produkcyjnym. Czas poświęcony na przygotowanie odpowiedniego zbioru testowego zwraca się wielokrotnie.

Szybki sprawdzian

Sprawdź swoją wiedzę na temat koncepcji inżynierii AI z tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyli się Państwo, że: inżynieria promptów wymaga wzorcowego zbioru testowego i narzędzia do ewaluacji, aby niezawodnie mierzyć ulepszenia, tryby awarii należy kategoryzować, aby identyfikować właściwą poprawkę dla każdego z nich, a także że temperatura 0 ma kluczowe znaczenie podczas debugowania, natomiast wersjonowanie promptów i monitorowanie środowiska produkcyjnego domykają pętlę jakości. Następnie omówimy sposób, w jaki LLM przetwarzają tekst za pomocą tokenów, oraz wyjaśnimy, dlaczego liczba tokenów ma znaczenie dla kosztów i kontekstu.

Często zadawane pytania

Czy lekcja „Iteracyjne doskonalenie i debugowanie promptów” jest bezpłatna?

Tak — pełny tekst „Iteracyjne doskonalenie i debugowanie promptów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Engineering Academy, przejdź na CoddyKit PRO. Kurs AI Engineering Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Iteracyjne doskonalenie i debugowanie promptów”?

Uczestnicy zbudują systematyczny proces testowania i udoskonalania promptów, zidentyfikują tryby błędów oraz użyją OpenAI Playground do szybkiego wprowadzania zmian przed napisaniem kodu produkcyjneg… Ćwiczysz AI Engineering Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Engineering Academy?

Nie wymagamy żadnego doświadczenia. AI Engineering Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Iteracyjne doskonalenie i debugowanie promptów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Engineering Academy?

Tak. Każda lekcja AI Engineering Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Prompting zero-shot i few-shot
  2. Chain-of-thought i rozumowanie krok po kroku
  3. Prompty systemowe i definiowanie persony
  4. Iteracyjne doskonalenie i debugowanie promptów
← Powrót do AI Engineering Academy