AI dla początkującychPrzewodnik
Przetestuj swój prompt na 20 przypadkach: ocenianie przez dokładne dopasowanie w Pythonie
Zbuduj zestaw testowy 20 przypadków, oceń prompt przez dokładne dopasowanie za pomocą krótkiego skryptu w Pythonie i sprawdź, czy zmiana promptu naprawdę pomogła.

Na tej stronie
Twój prompt zadziałał na dwóch wiadomościach, które wypróbowałeś. Czy to znaczy, że działa? Jeszcze nie. Uruchom go na 20 prawdziwych wiadomościach ze znanymi odpowiedziami, policz, ile poprawnie rozpoznaje, i przeczytaj te, które pomija. Krótki skrypt w Pythonie wykonuje liczenie, a gdy zmienisz prompt, ten sam skrypt powie ci, czy zmiana pomogła, zamiast zostawiać to twojej intuicji.
Dokumentacja Anthropic na temat definiowania kryteriów sukcesu i budowania ewaluacji (sprawdzona 7 listopada 2026) ujmuje to własnymi słowami: twórz testy specyficzne dla swojego zadania, uwzględniaj trudne przypadki i preferuj wiele automatycznie ocenianych pytań zamiast kilku ocenianych ręcznie. Poniżej znajduje się najmniejsza wersja tego, co możesz uruchomić już dziś.

Zbuduj zestaw testowy: 20 wiadomości i oczekiwana odpowiedź#
Załóżmy, że sortujesz wiadomości klientów do trzech stosów: pozytywne, negatywne lub mieszane. Otwórz plik o nazwie cases.csv i zapisz 20 wiadomości, które naprawdę możesz otrzymać, każdą z etykietą, którą ty byś jej nadał. Zapisz etykiety, zanim cokolwiek uruchomisz. Jeśli skopiujesz odpowiedzi modelu jako "poprawne", test może tylko zgodzić się z modelem.
text,label
"Arrived a day early and works perfectly. Thank you!",positive
"The charger stopped working after two days.",negative
"Great screen, but the battery barely lasts until lunch.",mixed
"Support answered in five minutes and fixed it.",positive
"I waited three weeks and nobody replied.",negative
"Oh great, another update that deletes my settings.",negative
"Nice design. Pity about the price.",mixed
"Exactly what I ordered.",positive
"The box was crushed, but the headphones inside are fine and sound great.",mixed
"Refund took 10 days. Never again.",negative
"Love it!!",positive
"Cheaply made, but honestly it does the job for the price.",mixed
"Worst purchase of the year.",negative
"Five stars. Would buy again.",positive
"Fast delivery, wrong colour.",mixed
"It's fine. Not amazing, not terrible.",mixed
"Zero issues in six months of daily use.",positive
"The app crashes every time I open the camera.",negative
"Thanks for nothing.",negative
"Setup was a pain, but once it ran, it's been rock solid.",mixedSpójrz na mieszankę: 6 pozytywnych, 7 negatywnych, 7 mieszanych. Sarkastyczne wersy ("Oh great, another update…", "Thanks for nothing.") i ten graniczny ("It's fine. Not amazing, not terrible.") są tam celowo. Zestaw złożony tylko z oczywistych wiadomości daje 100% i niczego cię nie uczy. Weź prawdziwe wiadomości ze swojej skrzynki odbiorczej, zgłoszeń lub eksportu czatu; przypadki brzegowe to te, o których już wiesz, że są irytujące.
Dlaczego 20? To rozmiar początkowy, a nie liczba z dokumentacji (ich przykład używa 1000 tweetów). Dwadzieścia jest wystarczająco małe, by napisać ręcznie w pół godziny, i wystarczająco duże, by jedna szczęśliwa odpowiedź nie decydowała o wyniku.
Skrypt: wyślij każdy przypadek, porównaj, wypisz pominięcia#
Plan ma cztery kroki, a kod podąża za nim linia po linii.
Ustaw w kolejności
Ułóż pętlę ewaluacji w kolejności
Przeciągnij elementy lub użyj strzałek
- Wczytaj 20 przypadków z pliku CSV
- Wyślij każdą wiadomość do modelu z twoim promptem
- Porównaj odpowiedź z twoją etykietą
- Wypisz dokładność i przypadki, które zawiodły
Pętla działa tylko wtedy, gdy etykiety istnieją przed pierwszym wywołaniem modelu, a niepowodzenia pojawiają się na końcu, ponieważ to one są tym, co czytasz i na czym działasz.
Zainstaluj SDK za pomocą pip install openai i trzymaj klucz w zmiennej środowiskowej o nazwie CHEAPTOKENS_. Każde API zgodne z OpenAI działa w ten sam sposób; tutaj skrypt wskazuje na CheapTokens i GLM-5.3-Flash (szczegóły konfiguracji są w dokumentacji).
import csv
import os
from openai import OpenAI
client = OpenAI(
base_url='https://api.cheaptokens.dev/v1',
api_key=os.environ['CHEAPTOKENS_API_KEY'],
)
MODEL = 'zai-org/GLM-5.3-Flash'
PROMPT = (
'Classify the customer message as positive, negative or mixed. '
'Answer with one word only.'
)
def ask(text):
r = client.chat.completions.create(
model=MODEL,
temperature=0,
max_tokens=100,
messages=[
{'role': 'system', 'content': PROMPT},
{'role': 'user', 'content': text},
],
)
return r.choices[0].message.content or ''
with open('cases.csv', newline='', encoding='utf-8') as f:
cases = list(csv.DictReader(f))
correct, failed = 0, []
for case in cases:
got = ask(case['text'])
ok = got.strip().strip('.').lower() == case['label']
correct += ok
if not ok:
failed.append((case['text'], case['label'], got.strip()))
print(f'Accuracy: {correct}/{len(cases)} = {correct / len(cases):.0%}')
for text, want, got in failed:
print(f'- {text!r}: expected {want}, got {got!r}')Trzy szczegóły są warte drugiego spojrzenia.
temperature=0utrzymuje odpowiedzi tak stabilne, jak to możliwe, więc zmiana wyniku pochodzi z twojego promptu, a nie z przypadku.max_tokens=100to znacznie więcej, niż potrzebuje etykieta jednowyrazowa. Jeśli odpowiedź kiedykolwiek wróci pusta lub ucięta, sprawdźfinish_reason; przewodnik po finish_reason "length" pokazuje, co zwiększyć.- Linia oceniania to przepis z dokumentacji,
strip().lower()porównane z poprawną odpowiedzią, plus jeden dodatek: usuwa też końcową kropkę, ponieważ "Negative." i "negative" to dla ciebie ta sama odpowiedź.
Co widzisz, gdy się uruchomi? Jedną linię dokładności, potem jedną linię na każde pominięcie. Powiedzmy, że pierwsze uruchomienie wypisuje to:
Accuracy: 14/20 = 70%
- 'Oh great, another update that deletes my settings.': expected negative, got 'positive'
- "It's fine. Not amazing, not terrible.": expected mixed, got 'positive'
…(Liczby tutaj są założeniem, aby pokazać kształt wyjścia; twoje będą inne.) Sarkazm i graniczne sformułowania to rodzaj wiadomości, które krótki prompt ma tendencję do pomijania. Chodzi o to, że już nie zgadujesz: masz listę.
Zmień jedną rzecz, uruchom ponownie#
Teraz użyteczna część. Przeczytaj pominięcia, wybierz przyczynę, zmień prompt w jednym miejscu i uruchom ponownie. Jedna zmiana na raz, inaczej nie będziesz wiedział, która edycja przesunęła wynik.
Porównaj
Prompt v1 → v2: dodaj regułę i dwa przykłady
v1
Classify the customer message as positive, negative or mixed.
Answer with one word only.v2
Classify the customer message as positive, negative or mixed.
Sarcasm counts as negative. Praise plus a complaint is mixed.
Answer with one word only.
Message: Lovely colour, but it arrived with a scratch.
Answer: mixed
Message: Sure, thanks a lot. Now my order is lost.
Answer: negativeDwa przykłady są wymyślone i to jest celowe. Nigdy nie umieszczaj wiadomości z cases.csv w prompcie jako przykładu: model byłby wtedy oceniany na podstawie odpowiedzi, którą mu podałeś, a wynik byłby zawyżony. To jest technika few-shot; zestaw testowy mówi ci, czy się opłaciła. Jeśli twój prompt v1 jest nadal niejasny, jak napisać dobry prompt to miejsce, od którego zacząć, zanim zaczniesz mierzyć.
Wklej v2 do PROMPT (potrójne cudzysłowy działają dla kilku linii) i uruchom skrypt ponownie. Powiedzmy, że wypisuje Accuracy: 17/. Trzy dodatkowe przypadki są poprawne, więc v2 wygląda lepiej. Jak bardzo temu ufać? Każdy przypadek jest wart 5 punktów w zestawie 20 przypadków, więc 70% → 85% to trzy wiadomości. To dobra wskazówka, nie dowód. Jeśli wynik spadnie, nauczyłeś się czegoś równie cennego i uchroniłeś się przed wdrożeniem gorszego promptu.
Ten sam zestaw, inny model: czy utrzymuje wynik?#
Ten sam plik odpowiada na drugie pytanie: czy płacisz za więcej modelu, niż to zadanie wymaga? Zmień jedną linię i uruchom ponownie:
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'Jeśli dokładność na twoich 20 przypadkach się zgadza, masz odpowiedź dla tego zadania, z własnych danych, a nie z rankingu. Jeśli spadnie, spójrz, które wiadomości się zepsuły, zanim cokolwiek zdecydujesz.
Ile to wszystko kosztuje? Załóżmy około 150 tokenów wejściowych na przypadek (instrukcja plus wiadomość) i około 5 tokenów wyjściowych na jednowyrazową etykietę. To daje 3000 tokenów wejściowych i 100 wyjściowych na przebieg 20 przypadków, co daje $0.000064 na GLM-5.3-Flash. Dziesięć ponownych uruchomień zestawu to 200 żądań; poniższa tabela pokazuje to obciążenie dla każdego modelu, z OpenRouter obok. Przy tym obciążeniu, licząc wejście i wyjście razem, każdy model w tabeli kosztuje mniej niż cena referencyjna OpenRouter.
| Model | Wejście $/1M | Wyjście $/1M | Za żądanie | 200 żądań | OpenRouter, 200 żądań |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0000032 | $0.00064 | $0.0011 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0000028 | $0.00055 | $0.0022 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0000083 | $0.0017 | $0.0198 |
150 tokenów wejściowych i 5 tokenów wyjściowych na żądanie. Ceny za 1 mln tokenów są aktualne i zmieniają się wraz z naszymi taryfami; kolumna OpenRouter pokazuje ceny referencyjne dla tego samego obciążenia.
Dwa z nich są używane w tym artykule: GLM-5.3-Flash ma kontekst 390K i do 8192 tokenów wyjściowych na odpowiedź; DeepSeek-V4-Flash ma kontekst 380K i do 32768 tokenów wyjściowych, jedną cenę o każdej porze dnia i to samo saldo co każdy inny model. Aktualne ceny są na stronie cenowej, pełna lista jest w modelach.
Gdzie dokładne dopasowanie przestaje działać#
Dokładne dopasowanie działa, ponieważ poprawna odpowiedź to jedno słowo z ustalonej listy. W przypadku otwartego wyjścia, takiego jak podsumowania, przepisania lub wyjaśnienia, nie ma jednego ciągu do porównania. Dokumentacja opisuje inną drogę, ocenianie przez model, i zaleca używanie innego modelu jako oceniającego niż ten, który napisał odpowiedź. Zacznij mimo to od dokładnego dopasowania: gdziekolwiek możesz wymusić krótką, ustaloną odpowiedź, jest to najtańszy i najczystszy test, jaki możesz przeprowadzić. Zasada z dokumentacji mówi, że więcej automatycznie ocenianych pytań bije mniej ocenianych ręcznie.
Jeszcze jeden nawyk: gdy v2 przestaje się poprawiać, nie poleruj dalej na tych samych 20 wiadomościach. Dodaj 5–10 nowych, najlepiej prawdziwych pominięć z produkcji, i uruchom ponownie.
Szybkie sprawdzenie
v2 uzyskuje 17/20, a v1 uzyskał 15/20 na tych samych przypadkach. Jaki jest najbezpieczniejszy wniosek?
Pokaż odpowiedź
Odpowiedź: v2 wygląda lepiej, ale dwa przypadki na 20 to mała różnica: dodaj nowe przypadki i uruchom ponownie
Każdy przypadek to 5 punktów, więc różnica dwóch przypadków to sygnał, by przyjrzeć się bliżej, a nie werdykt. Nowe przypadki, których v2 nigdy nie widział, są następnym sprawdzeniem.



