Analiza przyczyn źródłowych promptów
Ustalaj, czy problem dotyczy kontekstu, instrukcji, formatu czy możliwości modelu.
Analiza przyczyn źródłowych promptów to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 2 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 Prompt Engineering, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Dlaczego analiza przyczyn źródłowych ma znaczenie
Gdy prompt zawodzi, istnieje wiele możliwych przyczyn. Losowe modyfikowanie sformułowań marnuje czas i może usunąć objaw bez usunięcia przyczyny źródłowej — co prowadzi do tego samego błędu przy nieco innych danych wejściowych.
Analiza przyczyn źródłowych (RCA) to systematyczny proces wyodrębniania konkretnego powodu, dla którego prompt zawodzi, tak aby poprawka rozwiązywała rzeczywisty problem.
Cztery kategorie przyczyn źródłowych
Każdy błąd promptu wynika z jednej z czterech przyczyn źródłowych:
- Problem z kontekstem: modelowi brakuje informacji potrzebnych do udzielenia poprawnej odpowiedzi
- Niejednoznaczność instrukcji: instrukcję można poprawnie zinterpretować na kilka sposobów, a model wybiera niewłaściwy
- Konflikt formatu: dwie części promptu zawierają sprzeczne instrukcje dotyczące formatu
- Ograniczenie możliwości modelu: zadanie wymaga rozumowania lub wiedzy wykraczających poza to, co ten model potrafi niezawodnie wykonać
Przyczyna źródłowa 1: Problem z kontekstem
Problem z kontekstem występuje, gdy model udziela niepoprawnej odpowiedzi, ponieważ prompt nie zawiera potrzebnych informacji. Model uzupełnia lukę danymi treningowymi — które mogą być nieaktualne, błędne lub zmyślone.
Test: należy bezpośrednio podać brakującą informację w prompcie i sprawdzić, czy odpowiedź się poprawi. Jeśli tak, rozwiązaniem jest dodanie kontekstu (np. za pomocą pobierania przez RAG).
# Failing prompt — no context
prompt_v1 = 'What is the current price of our Pro plan?'
# Context problem test: inject the information
prompt_v2 = '''
Our pricing (as of today):
- Free: $0/month
- Pro: $19/month
- Enterprise: $99/month
Question: What is the current price of our Pro plan?
'''
# If v2 succeeds and v1 fails -> root cause is context problemPrzyczyna źródłowa 2: Niejednoznaczność instrukcji
Niejednoznaczność instrukcji występuje, gdy prompt można rozsądnie zinterpretować na kilka sposobów, a model wybiera niewłaściwą interpretację.
Przykład: „Podsumuj krótko” — czy „krótko” oznacza jedno zdanie, jeden akapit czy trzy punkty? Model zgaduje. Test: należy zastąpić niejednoznaczne sformułowanie precyzyjną specyfikacją i sprawdzić, czy błąd ustąpi.
# Ambiguous
prompt_ambiguous = 'Summarize the following article briefly.'
# Precise — ambiguity removed
prompt_precise = (
'Summarize the following article in exactly 2 sentences. '
'Do not exceed 50 words. Output only the summary, nothing else.'
)
# Test: if precise version succeeds, root cause was ambiguity
# Fix: replace vague qualifiers with exact specificationsPrzyczyna źródłowa 3: Konflikt formatu
Konflikt formatu występuje, gdy dwie części promptu zawierają sprzeczne instrukcje. Model musi wybrać jedną z nich i zignorować drugą — zazwyczaj wybiera instrukcję nowszą lub bardziej wyeksponowaną.
Przykład: prompt systemowy mówi „odpowiadaj zwykłym tekstem”, a wiadomość użytkownika mówi „użyj markdownu”. Model może stosować jedną albo drugą instrukcję, niespójnie.
# Format conflict example
system_prompt = 'You are a helpful assistant. Always respond in plain text without any formatting.'
user_message = 'List the top 5 benefits of exercise. Use markdown bullet points.'
# The model faces a conflict: plain text vs markdown.
# Detection: if output format is inconsistent across runs, look for conflicting instructions.
# Fix: ensure all format instructions agree. Move format to system prompt only.
system_prompt_fixed = (
'You are a helpful assistant. '
'Always respond using markdown bullet points for lists.'
)Przyczyna źródłowa 4: ograniczenia możliwości modelu
Błąd wynikający z ograniczeń możliwości występuje, gdy zadanie rzeczywiście wykracza poza to, co model potrafi niezawodnie wykonać. Różni się to od pozostałych trzech przyczyn — żadna zmiana promptu nie rozwiąże tego problemu w pełni.
Oznaki: odsetek błędów pozostaje wysoki nawet przy jasnych instrukcjach i pełnym kontekście. Rozwiązania: użyć bardziej zaawansowanego modelu, podzielić zadanie na prostsze kroki albo dodać etap weryfikacji.
# Capability limit test: try the same task on different models
models = ['gpt-4o-mini', 'gpt-4o', 'gpt-4o-2024-11-20']
results = {}
for model in models:
resp = client.chat.completions.create(
model=model,
messages=[{'role': 'user', 'content': complex_reasoning_prompt}]
)
results[model] = evaluate(resp.choices[0].message.content)
# If accuracy improves with more capable models -> capability limit
for model, score in results.items():
print(f'{model}: {score:.0%} accuracy')Metoda izolacji
Aby ustalić, która przyczyna źródłowa występuje, należy zastosować systematyczną izolację:
- Uruchomić prompt powodujący błąd i sklasyfikować typ błędu (nieprawidłowa odpowiedź, format itp.)
- Dodać informacje → jeśli problem znika: problem z kontekstem
- Doprecyzować instrukcje → jeśli problem znika: niejednoznaczność
- Sprawdzić, czy nie występują sprzeczności → jeśli problem znika: konflikt formatowania
- Uaktualnić model → jeśli problem znika: ograniczenie możliwości modelu
Powinna wystarczyć tylko jedna poprawka. Jeśli potrzebnych jest kilka poprawek, występowało kilka przyczyn źródłowych.
def rca_test(base_prompt, test_input, expected_output):
results = {}
# Test 1: base (failing) prompt
results['base'] = run_and_evaluate(base_prompt, test_input, expected_output)
# Test 2: add context
results['with_context'] = run_and_evaluate(
base_prompt + '\nContext: ' + get_context(test_input),
test_input, expected_output
)
# Test 3: clarify instructions
results['clarified'] = run_and_evaluate(
clarify(base_prompt), test_input, expected_output
)
for name, passed in results.items():
print(f'{name}: {"PASS" if passed else "FAIL"}')Eliminacja a potwierdzenie
Analiza przyczyn źródłowych obejmuje dwa tryby:
- Eliminacja: wykluczanie przyczyn, które NIE odpowiadają za problem (testowanie każdej hipotezy i sprawdzanie, która z nich NIE zmienia wyniku)
- Potwierdzenie: wskazanie przyczyny, której usunięcie konsekwentnie rozwiązuje problem dla wielu danych testowych
Potwierdzenie wymaga co najmniej 3 danych testowych. Poprawka, która działa dla jednego przypadku, ale nie dla innych, nie usunęła przyczyny źródłowej — mogła jedynie usunąć objaw.
def confirm_root_cause(fix_fn, test_cases, threshold=0.9):
'''fix_fn: a function that takes a prompt and returns a fixed prompt'''
passed = 0
for case in test_cases:
fixed_prompt = fix_fn(case['prompt'])
result = run_and_evaluate(fixed_prompt, case['input'], case['expected'])
if result:
passed += 1
pass_rate = passed / len(test_cases)
print(f'Fix pass rate: {pass_rate:.0%}')
if pass_rate >= threshold:
print('Root cause CONFIRMED — fix is reliable.')
else:
print('Root cause NOT confirmed — failure has multiple causes.')Dokumentowanie przyczyny źródłowej
Po zidentyfikowaniu przyczyny źródłowej należy udokumentować ją w dzienniku zmian promptu. Należy uwzględnić:
- Zaobserwowany typ błędu
- Kategorię przyczyny źródłowej
- Testowaną hipotezę
- Dowody (który test zakończył się powodzeniem po wprowadzeniu poprawki)
- Dokładną zmianę wprowadzoną w prompcie
Zapobiega to ponownemu analizowaniu tego samego błędu przez kolejnych inżynierów i ułatwia rozpoznawanie wzorców w różnych promptach.
rca_record = {
'prompt_id': 'summarize_v3',
'failure_type': 'wrong_format',
'root_cause': 'format_conflict',
'hypothesis': 'System prompt said plain text, user message asked for markdown',
'evidence': 'Removing markdown instruction from user message resolved failure on 8/8 test cases',
'fix_applied': 'Moved all format instructions to system prompt; removed format instructions from user template',
'fix_date': '2024-11-15'
}Częsty błąd: naprawianie niewłaściwej przyczyny
Najczęstszym błędem podczas analizy przyczyn źródłowych jest naprawianie objawu zamiast przyczyny. Przykład:
- Objaw: model zwraca JSON z dodatkowym wstępem tekstowym
- Błędna poprawka: dodanie przetwarzania końcowego usuwającego wstęp z wyniku
- Rzeczywista przyczyna źródłowa: brak instrukcji dotyczącej formatu w prompcie + domyślny konwersacyjny styl modelu
- Prawidłowa poprawka: dodanie wyraźnej instrukcji „Zwracaj wyłącznie prawidłowy JSON. Żadnego innego tekstu.”
Prowizoryczne obejścia w postprocessingu narastają jako dług techniczny. Usunięcie przyczyny źródłowej daje trwałe rozwiązanie.
Analiza przyczyn źródłowych sporadycznych błędów
Niektóre błędy występują sporadycznie — prompt działa w 80% przypadków, ale zawodzi w 20%. Trudniej je zdiagnozować, ponieważ pojedyncze uruchomienie promptu może dać prawidłowy wynik.
Podejście: uruchomić prompt 10–20 razy dla tych samych danych wejściowych. Jeśli odsetek błędów jest większy od zera, prompt ma probabilistyczną przyczynę źródłową — zwykle jest nią niejednoznaczność instrukcji lub zbyt wysoka temperatura. Rozwiązanie: sprecyzować instrukcję albo zmniejszyć temperaturę.
def measure_failure_rate(prompt, test_input, expected, runs=20):
failures = 0
for _ in range(runs):
resp = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': prompt + '\n' + test_input}],
temperature=0.7
)
if not evaluate(resp.choices[0].message.content, expected):
failures += 1
print(f'Failure rate: {failures}/{runs} = {failures/runs:.0%}')Sprawdzenie wiedzy
Prompt wymaga odpowiedzi w formacie JSON, ale czasami zwraca JSON poprzedzony konwersacyjnym wstępem, takim jak „Jasne! Oto JSON:”. Po dodaniu instrukcji „Zwracaj wyłącznie prawidłowy JSON. Żadnego innego tekstu.” problem ustaje. Jaka była przyczyna źródłowa?
Podsumowanie: analiza przyczyn źródłowych
Cztery kategorie przyczyn źródłowych błędów promptów:
- Problem z kontekstem: model nie ma potrzebnych informacji — rozwiązanie: dodać kontekst za pomocą RAG lub bezpośredniego wstrzyknięcia
- Niejednoznaczność instrukcji: niejasna instrukcja dopuszczająca wiele interpretacji — rozwiązanie: zwiększyć precyzję
- Konflikt formatowania: sprzeczne instrukcje dotyczące formatowania — rozwiązanie: skonsolidować je w prompcie systemowym
- Ograniczenie możliwości modelu: zadanie przekracza możliwości modelu — rozwiązanie: uaktualnić model lub podzielić zadanie
Należy zastosować systematyczną izolację, aby przetestować każdą hipotezę. Potwierdzić poprawkę dla wielu przypadków testowych. Udokumentować ustalenia. Następna lekcja: systematyczne debugowanie za pomocą wyszukiwania binarnego.
Często zadawane pytania
Czy lekcja „Analiza przyczyn źródłowych promptów” jest bezpłatna?
Tak — pełny tekst „Analiza przyczyn źródłowych 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 Prompt Engineering, przejdź na CoddyKit PRO. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Co nauczysz się w „Analiza przyczyn źródłowych promptów”?
Ustalaj, czy problem dotyczy kontekstu, instrukcji, formatu czy możliwości modelu. Ćwiczysz AI Prompt Engineering 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 Prompt Engineering?
Nie wymagamy żadnego doświadczenia. AI Prompt Engineering 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 2 z 4.
Ile czasu zajmuje lekcja „Analiza przyczyn źródłowych 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 Prompt Engineering?
Tak. Każda lekcja AI Prompt Engineering 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
- Diagnozowanie nieoczekiwanych wyników
- Analiza przyczyn źródłowych promptów
- Systematyczne podejście do debugowania
- Strategie logowania i dokumentowania