Gdy asystent AI daje kilka odpowiedzi, trzeba umieć wybrać lepszą — i uzasadnić wybór. „Podoba mi się” nie wystarcza; potrzebne są kryteria. Najważniejsze jest, by wynik nie przesłaniał poprawności: odpowiedź błędna nie może wygrać dlatego, że ładnie wygląda. Na lekcji uczniowie oceniają trzy wymyślone odpowiedzi według tej samej karty, liczą wynik ważony, stosują regułę odrzucenia i sprawdzają, jak bardzo zgadzają się dwie osoby oceniające.
Scenariusz jest przeznaczony na 45 minut dla klasy znającej listy, krotki i słowniki w Pythonie; może następować po lekcji o halucynacjach. Oceny w programie są wymyślone. Wagi i skala (0–2) są propozycją dydaktyczną — klasa może je zmienić, byle uzasadnić zmianę.
Przygotowanie stanowisk
Potrzebny jest Python 3 i edytor lub IDLE. Rozpakuj pakiet z sekcji materiałów do osobnego folderu i uruchamiaj skrypty z tego folderu. Program uruchomisz przez Run → Run Module albo poleceniem python start.py, python3 start.py lub py start.py.
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- ocenić odpowiedź według kryteriów: poprawność, kompletność, zgodność z poleceniem, źródła, czytelność;
- obliczyć wynik ważony i zastosować regułę odrzucenia odpowiedzi błędnej;
- porównać oceny dwóch osób i obliczyć zgodność;
- uzasadnić wybór lepszej odpowiedzi.
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: dwie odpowiedzi AI, która lepsza? |
| 5–15 min | Kryteria, wagi i reguła odrzucenia |
| 15–22 min | Obliczenia w Pythonie |
| 22–37 min | Trzy zadania |
| 37–42 min | Ocena prawdziwych odpowiedzi |
| 42–45 min | Pytania kontrolne |
Karta kryteriów
| Kryterium | Waga | Pytanie |
|---|---|---|
| poprawność | 3 | czy informacje są prawdziwe (sprawdzone w źródłach)? |
| kompletność | 2 | czy odpowiedź obejmuje wszystko, o co pytano? |
| zgodność z poleceniem | 2 | czy odpowiada na zadane pytanie, w żądanej formie? |
| źródła | 2 | czy podano sprawdzalne źródła i czy są prawdziwe? |
| czytelność | 1 | czy tekst jest zrozumiały i dobrze zorganizowany? |
Każde kryterium oceniamy w skali 0–2 (0 — brak, 1 — częściowo, 2 — w pełni). Wynik ważony to suma ocena · waga; maksimum wynosi 20.
Reguła odrzucenia
Odpowiedź z poprawnością 0 jest odrzucona bez względu na pozostałe punkty — dobrze napisany błąd jest bardziej szkodliwy niż krótka poprawna odpowiedź. Dzięki temu wynik ważony nie zakryje ważnego problemu.
Zgodność oceniających
Dwie osoby mogą ocenić tę samą odpowiedź inaczej. Zgodność mierzymy jako odsetek kryteriów ocenionych identycznie. W przykładzie zgodnych jest 12 z 15 ocen (80%), ale rankingi różnią się: według pierwszej osoby lepsza jest odpowiedź B, według drugiej — A. Różnice warto omówić: gdzie leży niejasność kryterium (np. czy „źródło” wymaga adresu internetowego), i uzgodnić opis każdego stopnia.
Zasady dobrej oceny
Oceniaj według kryteriów, nie wrażenia; sprawdzaj fakty w źródłach; zapisuj uzasadnienie wyboru; zmieniając wagi, rób to przed oceną, a nie po zobaczeniu wyników.
Zadania
Zadanie 1. Wynik ważony. Oblicz maksymalny wynik oraz wynik każdej z trzech odpowiedzi według obu osób oceniających.
Zadanie 2. Decyzje i ranking. Dla każdej oceny zastosuj regułę odrzucenia (poprawność 0) i ułóż ranking odpowiedzi przyjętych.
Zadanie 3. Zgodność. Oblicz, w ilu z 15 ocen kryteriów obie osoby wystawiły ten sam stopień (procent zgodności).
Dla chętnych: zmień wagę poprawności na 5 i sprawdź, czy ranking się zmieni.
Rozwiązanie i wyniki
# Kryteria: (nazwa, waga). Skala ocen kazdego kryterium: 0, 1 lub 2.
KRYTERIA = [("poprawnosc", 3), ("kompletnosc", 2), ("zgodnosc z poleceniem", 2), ("zrodla", 2), ("czytelnosc", 1)]
MAKS = 2 * sum(w for _, w in KRYTERIA)
# Oceny dwoch oceniajacych dla trzech WYMYSLONYCH odpowiedzi (kolejnosc jak w KRYTERIA)
OCENY = {
"Odpowiedz A": {"Ocena 1": (2, 1, 2, 0, 2), "Ocena 2": (2, 1, 2, 1, 2)},
"Odpowiedz B": {"Ocena 1": (1, 2, 2, 2, 2), "Ocena 2": (1, 2, 1, 2, 2)},
"Odpowiedz C": {"Ocena 1": (0, 2, 2, 1, 2), "Ocena 2": (0, 2, 2, 1, 1)},
}
def suma(punkty):
return sum(p * w for p, (_, w) in zip(punkty, KRYTERIA))
def decyzja(punkty):
return "odrzucona (bledna)" if punkty[0] == 0 else "przyjeta"
# Zadanie 1: wynik wazony
print("Maksimum:", MAKS)
for nazwa, oceny in OCENY.items():
print(nazwa, "|", {k: suma(v) for k, v in oceny.items()})
# Zadanie 2: decyzje i ranking
for ocena in ("Ocena 1", "Ocena 2"):
przyjete = {n: suma(o[ocena]) for n, o in OCENY.items() if decyzja(o[ocena]) == "przyjeta"}
print(ocena + ":", {n: decyzja(o[ocena]) for n, o in OCENY.items()})
print(" ranking przyjetych:", sorted(przyjete, key=przyjete.get, reverse=True))
# Zadanie 3: zgodnosc oceniajacych
zgodne = sum(a == b for o in OCENY.values() for a, b in zip(o["Ocena 1"], o["Ocena 2"]))
razem = sum(len(o["Ocena 1"]) for o in OCENY.values())
print("Zgodnosc:", zgodne, "z", razem, "=", round(zgodne / razem * 100), "%")
Program wypisze:
Maksimum: 20
Odpowiedz A | {'Ocena 1': 14, 'Ocena 2': 16}
Odpowiedz B | {'Ocena 1': 17, 'Ocena 2': 15}
Odpowiedz C | {'Ocena 1': 12, 'Ocena 2': 11}
Ocena 1: {'Odpowiedz A': 'przyjeta', 'Odpowiedz B': 'przyjeta', 'Odpowiedz C': 'odrzucona (bledna)'}
ranking przyjetych: ['Odpowiedz B', 'Odpowiedz A']
Ocena 2: {'Odpowiedz A': 'przyjeta', 'Odpowiedz B': 'przyjeta', 'Odpowiedz C': 'odrzucona (bledna)'}
ranking przyjetych: ['Odpowiedz A', 'Odpowiedz B']
Zgodnosc: 12 z 15 = 80 %
Odpowiedź C ma poprawność 0 według obu osób, więc zostaje odrzucona niezależnie od punktów za pozostałe kryteria (12 i 11 z 20 zdobyła za kompletność, zgodność z poleceniem i czytelność). Ranking przyjętych różni się: według pierwszej osoby B (17) wyprzedza A (14), a według drugiej A (16) wyprzedza B (15). Różnica wynika z oceny źródeł w odpowiedzi A (0 i 1) oraz zgodności z poleceniem w B (2 i 1) — warto o tym porozmawiać i doprecyzować kryteria.
Plik rozszerzenie.py (zadanie dla chętnych) wypisze:
20
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
| Ocena po wrażeniu | Oceniaj według kryteriów i sprawdzonych faktów. |
| Wygrywa błędna, ale ładna odpowiedź | Zastosuj regułę odrzucenia dla poprawności 0. |
| Zmiana wag po zobaczeniu wyników | Uzgodnij wagi przed oceną. |
| Brak uzasadnienia oceny | Zapisz, dlaczego przyznano dany stopień. |
| Źródło „istnieje”, bo podał je asystent | Otwórz źródło i sprawdź, czy mówi to, co zapisano. |
| Ocena jednej odpowiedzi bez porównania | Porównaj co najmniej dwie odpowiedzi tego samego polecenia. |
Pytania kontrolne i punktacja
- Dlaczego odpowiedź z błędnymi informacjami odrzucamy niezależnie od wyniku ważonego?
- Co oznacza zgodność oceniających 80%?
- Dlaczego dwie osoby mogą ułożyć różny ranking?
Odpowiedzi: Bo błędna informacja podana w ładnej formie jest szkodliwa; wynik ważony nie powinien zasłaniać braku poprawności. Że w 80% kryteriów obie osoby wystawiły ten sam stopień. Bo inaczej interpretują niektóre kryteria lub inaczej oceniają szczegóły (np. wiarygodność źródeł).
Proponowana punktacja (razem 10 punktów): zadanie 1 — maksimum 1 pkt, sześć wyników 2 pkt; zadanie 2 — decyzje 2 pkt, rankingi 1 pkt; zadanie 3 — zgodność 1 pkt; uzasadnienie wyboru w pytaniach 3 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej?
Następny krok to pisanie poleceń do AI, praca z polskim tekstem i etyka korzystania z narzędzi AI. Ten materiał rozwija dział o odpowiedzialnym korzystaniu z AI w kursie AI w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: ocenianie kryterialne w Wikipedii oraz dokumentacja Pythona o krotkach. Zobacz też lekcję o halucynacjach AI.
Poprowadź kolejne lekcje AI
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu AI →