AI для початківцівПосібник
Перевірте свій промпт на 20 випадках: оцінювання за точною відповідністю в Python
Побудуйте тестовий набір із 20 випадків, оцініть промпт за точною відповідністю коротким скриптом Python і побачте, чи справді допомогла зміна промпту.

На цій сторінці
Ваш промпт спрацював на двох повідомленнях, які ви спробували. Чи означає це, що він працює? Ще ні. Запустіть його на 20 реальних повідомленнях із відомими відповідями, порахуйте, скільки він вгадав, і прочитайте ті, які він пропустив. Короткий скрипт Python виконує підрахунок, і коли ви змінюєте промпт, той самий скрипт підказує, чи допомогла зміна, замість того щоб покладатися на інтуїцію.
Документація Anthropic щодо визначення критеріїв успіху та побудови оцінювань (перевірено 7 листопада 2026 року) формулює це своїми словами: зробіть тести специфічними для вашого завдання, включіть незручні випадки та віддавайте перевагу багатьом автоматично оціненим питанням над кількома оціненими вручну. Нижче наведено найменшу версію цього, яку ви можете запустити вже сьогодні.

Побудуйте тестовий набір: 20 повідомлень і очікувана відповідь#
Припустімо, ви сортуєте повідомлення клієнтів у три категорії: позитивні, негативні або змішані. Відкрийте файл під назвою cases.csv і запишіть 20 повідомлень, які ви справді можете отримати, кожне з міткою, яку ви б йому дали. Запишіть мітки до того, як щось запускати. Якщо ви скопіюєте відповіді моделі як «правильні», тест зможе лише погодитися з моделлю.
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.",mixedПодивіться на суміш: 6 позитивних, 7 негативних, 7 змішаних. Саркастичні рядки («О, чудово, ще одне оновлення…», «Дякую за ніщо.») і прикордонний («Нормально. Не дивовижно, не жахливо.») присутні навмисно. Набір, складений лише з очевидних повідомлень, набирає 100% і нічого вас не вчить. Візьміть реальні зі своєї скриньки, тікетів або експорту чату; крайні випадки — це ті, які ви вже знаєте як дратівливі.
Чому 20? Це початковий розмір, а не число з документації (у їхньому прикладі використовується 1000 твітів). Двадцять достатньо мало, щоб написати вручну за пів години, і достатньо багато, щоб одна щаслива відповідь не визначила оцінку.
Скрипт: надішліть кожен випадок, порівняйте, надрукуйте пропущені#
План має чотири кроки, і код слідує йому рядок за рядком.
Розставте по порядку
Упорядкуйте цикл оцінювання
Перетягніть елементи або скористайтеся стрілками
- Завантажте 20 випадків із CSV
- Надішліть кожне повідомлення моделі з вашим промптом
- Порівняйте відповідь із вашою міткою
- Надрукуйте точність і випадки, які не вдалися
Цикл працює лише тоді, коли мітки існують до першого виклику моделі, а невдачі йдуть останніми, бо саме їх ви читаєте й на них реагуєте.
Встановіть SDK за допомогою pip install openai і зберігайте ключ у змінній середовища під назвою CHEAPTOKENS_. Будь-який API, сумісний з OpenAI, працює так само; тут скрипт вказує на CheapTokens і GLM-5.3-Flash (деталі налаштування — у документації).
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}')Три деталі варті другого погляду.
temperature=0зберігає відповіді якомога стабільнішими, щоб зміна оцінки походила від вашого промпту, а не від випадковості.max_tokens=100значно більше, ніж потрібно для мітки з одного слова. Якщо відповідь колись повернеться порожньою або обрізаною, перевіртеfinish_reason; посібник щодо finish_reason "length" показує, що збільшити.- Рядок оцінювання — це рецепт із документації,
strip().lower()порівнюється з правильною відповіддю, плюс одне доповнення: він також відкидає кінцеву крапку, бо «Negative.» і «negative» — це та сама відповідь для вас.
Що ви бачите під час запуску? Один рядок точності, потім один рядок на кожен пропущений випадок. Припустімо, перший запуск друкує це:
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'
…(Числа тут — припущення, щоб показати форму виводу; ваші відрізнятимуться.) Сарказм і прикордонні формулювання — це тип повідомлень, які короткий промпт схильний пропускати. Сенс у тому, що ви більше не вгадуєте: у вас є список.
Змініть одну річ, запустіть знову#
Тепер корисна частина. Прочитайте пропущені, виберіть причину, змініть промпт в одному місці та перезапустіть. По одній зміні за раз, інакше ви не знатимете, яка правка змінила оцінку.
Порівняйте
Промпт v1 → v2: додайте правило та два приклади
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: negativeДва приклади вигадані, і це навмисно. Ніколи не вставляйте повідомлення з cases.csv у промпт як приклад: тоді модель оцінюватиметься на відповіді, яку ви їй дали, і оцінка буде завищена. Це техніка few-shot; тестовий набір — це те, що підказує, чи вона окупилася. Якщо ваш промпт v1 усе ще розпливчастий, як написати хороший промпт — це місце, з якого варто почати перед вимірюванням.
Вставте v2 у PROMPT (потрійні лапки працюють для кількох рядків) і запустіть скрипт знову. Припустімо, він друкує Accuracy: 17/. Ще три випадки правильні, тож v2 виглядає краще. Наскільки цьому довіряти? Кожен випадок вартий 5 балів у наборі з 20 випадків, тож 70% → 85% — це три повідомлення. Це хороша підказка, а не доказ. Якщо оцінка падає, ви дізналися щось так само цінне і врятували себе від випуску гіршого промпту.
Той самий набір, інша модель: чи втримує вона оцінку?#
Той самий файл відповідає на друге питання: чи платите ви за більшу модель, ніж потребує це завдання? Змініть один рядок і запустіть знову:
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'Якщо точність на ваших 20 випадках збігається, ви маєте відповідь для цього завдання, з ваших власних даних, а не з таблиці лідерів. Якщо вона падає, подивіться, які повідомлення зламалися, перш ніж щось вирішувати.
Скільки все це коштує? Припустімо, близько 150 вхідних токенів на випадок (інструкція плюс повідомлення) і близько 5 вихідних токенів для мітки з одного слова. Це 3000 вхідних і 100 вихідних токенів на запуск 20 випадків, що становить $0.000064 на GLM-5.3-Flash. Десять повторних запусків набору — це 200 запитів; таблиця нижче показує це навантаження для кожної моделі, з OpenRouter поруч. За такого навантаження, з урахуванням вхідних і вихідних разом, кожна модель у таблиці коштує менше за довідкову ціну OpenRouter.
| Модель | Вхід $/1М | Вихід $/1М | За запит | 200 запитів | OpenRouter, 200 запитів |
|---|---|---|---|---|---|
| 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 вхідних і 5 вихідних токенів на запит. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.
Дві з них використовуються в цій статті: GLM-5.3-Flash має контекст 390K і до 8192 вихідних токенів на відповідь; DeepSeek-V4-Flash має контекст 380K і до 32768 вихідних токенів, одну ціну в будь-яку годину дня та той самий баланс, що й кожна інша модель. Актуальні ціни на сторінці цін, повний список у моделях.
Де точна відповідність перестає працювати#
Точна відповідність працює, бо правильна відповідь — це одне слово з фіксованого списку. Для відкритого виводу, такого як резюме, переписування чи пояснення, немає єдиного рядка для порівняння. Документація описує інший шлях — оцінювання моделлю — і рекомендує використовувати як оцінювача іншу модель, ніж ту, що написала відповідь. Почніть усе одно з точної відповідності: де ви можете змусити до короткої фіксованої відповіді, це найдешевший і найясніший тест, який ви можете запустити. Правило документації: більше автоматично оцінених питань краще за менше оцінених вручну.
Ще одна звичка: коли v2 перестає покращуватися, не продовжуйте полірувати на тих самих 20 повідомленнях. Додайте 5–10 нових, ідеально — реальні пропущені з продакшену, і запустіть знову.
Швидка перевірка
v2 набирає 17/20, а v1 набрав 15/20 на тих самих випадках. Який найбезпечніший висновок?
Показати відповідь
Відповідь: v2 виглядає краще, але два випадки з 20 — це малий розрив: додайте нові випадки та перезапустіть
Кожен випадок — це 5 балів, тож розрив у два випадки — це сигнал придивитися уважніше, а не вирок. Нові випадки, яких v2 ніколи не бачив, — наступна перевірка.



