0Pricing
AI Prompt Engineering · Lekcja

Diagnozowanie nieoczekiwanych wyników

Klasyfikuj tryby awarii: błędna odpowiedź, błędny format, odejście od tematu i halucynacja.

Diagnozowanie nieoczekiwanych wyników to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 1 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.

Gdy prompty zawodzą

Nawet starannie przygotowane prompty mogą prowadzić do błędnych wyników. Diagnozowanie problemów wymaga taksonomii — klasyfikacji rodzaju występującego błędu. Bez takiej klasyfikacji debugowanie opiera się na zgadywaniu. Cztery główne kategorie błędów to: błędna odpowiedź, nieprawidłowy format, odpowiedź nie na temat i halucynacja.

Typ błędu 1: Błędna odpowiedź

Błędna odpowiedź to błąd faktyczny — model udzielił odpowiedzi w prawidłowym formacie i na właściwy temat, ale jej treść jest niepoprawna.

Przykłady: daty, statystyki, nazwiska, kod zawierający błąd logiczny. Jest to najtrudniejszy błąd do automatycznego wykrycia, ponieważ wynik na pierwszy rzut oka wygląda poprawnie.

  • Przyczyna: data graniczna danych treningowych, rzadki fakt lub błąd wieloetapowego rozumowania
  • Wykrywanie: porównanie z prawidłową odpowiedzią, weryfikacja przez człowieka lub wywołanie LLM weryfikujące
# Example: wrong answer failure
prompt = 'What year was Python first released?'
response = 'Python was first released in 1994.'  # Wrong — it was 1991

# Ground truth check
GROUND_TRUTH = '1991'
correct = GROUND_TRUTH in response
print(f'Correct: {correct}')  # False

Typ błędu 2: Nieprawidłowy format

Błąd nieprawidłowego formatu występuje, gdy model odpowiedział na właściwe pytanie, podając właściwe informacje, ale zignorował instrukcję dotyczącą formatowania.

Przykłady: zwrócenie zwykłego tekstu, gdy wymagany był JSON, dodanie markdownu, gdy wymagany był zwykły tekst, zwrócenie listy, gdy oczekiwano pojedynczej wartości.

  • Przyczyna: instrukcja dotycząca formatowania ukryta w długim prompcie, sprzeczne instrukcje, ignorowanie przez model instrukcji o niskim priorytecie
  • Wykrywanie: błąd parsowania JSON, niezgodność z wyrażeniem regularnym, niepowodzenie walidacji schematu
import json

response_text = 'Sure! Here is the result: {"name": "Alice", "age": 30}'

try:
    data = json.loads(response_text)
    print('Format OK:', data)
except json.JSONDecodeError as e:
    print(f'FORMAT FAILURE: {e}')
    # 'Sure! Here is the result:' prefix broke JSON parsing

Typ błędu 3: Odpowiedź nie na temat

Błąd odpowiedzi nie na temat oznacza, że model odpowiedział na inne pytanie niż zadane. Odpowiedź może być faktycznie poprawna i mieć właściwy format, ale nie odnosi się do rzeczywistej intencji użytkownika.

Przykłady: prośba o funkcję w Pythonie, a otrzymanie funkcji w JavaScript; prośba o odpowiedź w jednym wierszu, a otrzymanie pełnego eseju; prośba o naprawienie błędu, a otrzymanie wyjaśnienia błędu zamiast poprawki.

  • Przyczyna: niejednoznaczna instrukcja, sprzeczny kontekst, odejście od zadania w długich rozmowach
# Off-topic example
prompt = 'Write a Python function that reverses a list.'
response = '''
In JavaScript, you can reverse an array like this:
const reversed = arr.reverse();
'''

# Detection: check that output contains the correct language keyword
def check_language(response, expected_lang='def '):
    if expected_lang not in response:
        print(f'OFF-TOPIC FAILURE: expected {expected_lang} in response')
        return False
    return True

check_language(response)  # False — no Python def

Typ błędu 4: Halucynacja

Halucynacja to najniebezpieczniejszy błąd: model wymyśla fakty, które nie istnieją. Takie informacje wyglądają wiarygodnie i są przedstawiane z pewnością siebie, przez co trudno je zauważyć.

Przykłady: sfabrykowane cytowania (tytuł publikacji brzmi wiarygodnie, ale publikacja nie istnieje), wymyślone punkty końcowe API, fałszywe statystyki, nieistniejące osoby.

  • Przyczyna: model wypełnia luki w wiedzy wiarygodnym tekstem dopasowanym do wzorców
  • Wykrywanie: sprawdzenie faktów w wiarygodnych źródłach, porównanie cytowań z innymi źródłami, przetestowanie wywołań API
# Hallucination detection via external verification
import requests

def verify_doi(doi):
    url = f'https://doi.org/{doi}'
    resp = requests.head(url, allow_redirects=True, timeout=5)
    return resp.status_code == 200

# Model claimed this paper exists:
fabricated_doi = '10.1234/fake.paper.2023.99999'
if not verify_doi(fabricated_doi):
    print('HALLUCINATION DETECTED: DOI does not exist')

Taksonomia błędów w praktyce

Po zaobserwowaniu błędu należy najpierw go sklasyfikować, a dopiero potem próbować go naprawić. Typ błędu określa strategię naprawy:

  • Błędna odpowiedź: dodać kontekst, użyć wyszukiwania lub przełączyć się na bardziej zaawansowany model
  • Nieprawidłowy format: wzmocnić instrukcję dotyczącą formatu, dodać przykłady wyników, użyć ustrukturyzowanych danych wyjściowych / wywoływania funkcji
  • Odpowiedź nie na temat: przepisać instrukcję tak, aby była bardziej szczegółowa, uprościć prompt
  • Halucynacja: dodać kontekst oparty na źródłach, poinstruować model, aby odpowiadał „Nie wiem”, włączyć cytowania

Ustrukturyzowane rejestrowanie błędów

Każdy błąd należy rejestrować wraz z jego klasyfikacją. Z czasem pojawiają się wzorce: określona sekcja promptu powoduje większość błędów formatu albo konkretny temat wywołuje częste halucynacje. Ustrukturyzowane logi umożliwiają debugowanie oparte na danych.

import json
from datetime import datetime

def log_failure(prompt, response, failure_type, details=''):
    entry = {
        'timestamp': datetime.utcnow().isoformat(),
        'failure_type': failure_type,  # wrong_answer | wrong_format | off_topic | hallucination
        'prompt_hash': hash(prompt),
        'response_snippet': response[:200],
        'details': details
    }
    with open('prompt_failures.jsonl', 'a') as f:
        f.write(json.dumps(entry) + '\n')

log_failure(
    prompt=my_prompt,
    response=bad_response,
    failure_type='wrong_format',
    details='JSON prefix text broke parsing'
)

Automatyczna klasyfikacja błędów

W testach na dużą skalę można użyć wywołania LLM pełniącego funkcję klasyfikatora, aby automatycznie oznaczać każdą odpowiedź typem błędu. Umożliwia to wsadową ocenę setek przypadków testowych.

def classify_failure(prompt, expected, actual):
    classification_prompt = (
        f'You are a QA evaluator for LLM outputs.\n'
        f'Prompt: {prompt}\n'
        f'Expected behavior: {expected}\n'
        f'Actual output: {actual}\n\n'
        'Classify the failure as one of: CORRECT, WRONG_ANSWER, WRONG_FORMAT, OFF_TOPIC, HALLUCINATION.\n'
        'Reply with only the label.'
    )
    resp = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': classification_prompt}]
    )
    return resp.choices[0].message.content.strip()

Macierz ważności

Nie wszystkie błędy mają taki sam wpływ. Macierz ważności pomaga ustalać priorytety napraw:

  • Halucynacja w kontekście medycznym lub prawnym: krytyczna — naprawić natychmiast
  • Nieprawidłowy format w narzędziu wewnętrznym: wysoka — uniemożliwia dalsze parsowanie
  • Błędna odpowiedź w rzadkim przypadku brzegowym: średnia — monitorować częstotliwość
  • Odpowiedź nie na temat przy niejednoznacznym wejściu: niska — akceptowalna, jeśli występuje rzadko

Należy śledzić tygodniowe wskaźniki błędów każdego typu. Nagły wzrost w dowolnej kategorii sygnalizuje regresję wymagającą uwagi.

Tworzenie pulpitu błędów

Prosty pulpit błędów odczytuje dziennik błędów i przedstawia liczbę błędów według typu oraz sekcji promptu:

import json
from collections import Counter

def failure_report(log_path='prompt_failures.jsonl'):
    entries = []
    with open(log_path) as f:
        for line in f:
            entries.append(json.loads(line))

    counts = Counter(e['failure_type'] for e in entries)
    total = len(entries)

    print(f'Total failures: {total}')
    for ftype, count in counts.most_common():
        pct = 100 * count / total
        print(f'  {ftype}: {count} ({pct:.1f}%)')

failure_report()

Proaktywne zapobieganie błędom

Strategie proaktywne ograniczające występowanie poszczególnych typów błędów:

  • Błędna odpowiedź: podać w prompcie tekst źródłowy (RAG), poprosić model o wskazanie źródła
  • Nieprawidłowy format: użyć trybu JSON lub wywoływania funkcji, podać w prompcie przykład formatu
  • Odpowiedź nie na temat: umieścić zadanie w pierwszym zdaniu, unikać długich wstępów rozmywających intencję
  • Halucynacja: poinstruować model: „Korzystaj wyłącznie z informacji podanych poniżej”, dodać: „Jeśli nie masz pewności, powiedz: «Nie wiem»”

Sprawdzenie wiedzy

Jaki typ błędu występuje, gdy model wymyśla nieistniejące fakty, na przykład fabrykuje cytowanie lub nieistniejący punkt końcowy API?

Powtórzenie: diagnozowanie nieoczekiwanych wyników

Cztery typy błędów LLM i ich najważniejsze cechy:

  • Błędna odpowiedź: prawidłowy format, właściwy temat, niepoprawna treść — sprawdzić fakty względem prawidłowej odpowiedzi
  • Nieprawidłowy format: poprawna treść, zignorowana instrukcja dotycząca formatu — wykrywane przez walidację schematu
  • Odpowiedź nie na temat: prawidłowy format, odpowiedź na inne pytanie — sprawdzić zgodność języka i zadania
  • Halucynacja: wymyślone fakty — zweryfikować w zewnętrznych źródłach

Należy rejestrować i klasyfikować każdy błąd. Warto śledzić wskaźniki poszczególnych typów w czasie. Następna lekcja: analiza przyczyn źródłowych w celu ustalenia, która część promptu spowodowała błąd.

Często zadawane pytania

Czy lekcja „Diagnozowanie nieoczekiwanych wyników” jest bezpłatna?

Tak — pełny tekst „Diagnozowanie nieoczekiwanych wynikó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 „Diagnozowanie nieoczekiwanych wyników”?

Klasyfikuj tryby awarii: błędna odpowiedź, błędny format, odejście od tematu i halucynacja. Ć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 1 z 4.

Ile czasu zajmuje lekcja „Diagnozowanie nieoczekiwanych wynikó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

  1. Diagnozowanie nieoczekiwanych wyników
  2. Analiza przyczyn źródłowych promptów
  3. Systematyczne podejście do debugowania
  4. Strategie logowania i dokumentowania
← Powrót do AI Prompt Engineering