Bumalik sa blog

AI para sa mga baguhanGabay

Subukan ang iyong prompt sa 20 kaso: exact-match grading sa Python

Bumuo ng 20-kasong test set, i-grado ang prompt sa exact match gamit ang maikling Python script, at tingnan kung talagang nakatulong ang pagbabago sa prompt.

Ni CheapTokens TeamNai-publish noong 7 min na pagbabasa

Cover: isang code snippet na naghahambing ng sagot ng modelo sa inaasahang label, pinamagatang Subukan ang iyong prompt sa 20 kaso
Sa pahinang ito
  1. Buuin ang test set: 20 mensahe at ang inaasahan mong sagot
  2. Ang script: ipadala ang bawat kaso, ihambing, i-print ang mga namiss
  3. Baguhin ang isang bagay, patakbuhin muli
  4. Parehong set, ibang modelo: hinahawakan ba nito ang score?
  5. Saan tumitigil ang exact match

Gumana ang prompt mo sa dalawang mensaheng sinubukan mo. Ibig bang sabihin nito ay gumagana na ito? Hindi pa. Patakbuhin ito sa 20 totoong mensahe na may alam na sagot, bilangin kung ilan ang tama, at basahin ang mga namiss. Isang maikling Python script ang magbibilang, at kapag binago mo ang prompt, sasabihin ng parehong script kung nakatulong ang pagbabago sa halip na ipaubaya sa pakiramdam mo.

Ang dokumentasyon ng Anthropic tungkol sa pagtukoy ng success criteria at pagbuo ng evaluations (sinuri noong 7 Nobyembre 2026) ay inilalahad ito sa sariling salita: gawing partikular sa iyong gawain ang mga test, isama ang mga awkward na kaso, at mas mainam ang maraming awtomatikong gradong tanong kaysa sa kakaunting gradong kamay. Nasa ibaba ang pinakamaliit na bersyon nito na maaari mong patakbuhin ngayon.

Apat na hakbang: 20 kaso ang ipapadala sa modelo, ihahambing ang mga sagot sa exact match, at makakakuha ka ng accuracy score at listahan ng mga namiss
Ang buong pamamaraan: mga kaso pumasok, isang numero at listahan ng mga namiss lumabas

Buuin ang test set: 20 mensahe at ang inaasahan mong sagot#

Sabihin nating pinagpapangkat mo ang mga mensahe ng customer sa tatlong grupo: positive, negative o mixed. Buksan ang file na tinatawag na cases.csv at isulat ang 20 mensaheng maaari mong aktuwal na matanggap, bawat isa may label na ikaw ang magbibigay. Isulat ang mga label bago ka magpatakbo ng kahit ano. Kung kokopyahin mo ang mga sagot ng modelo bilang "tama", ang test ay makakasang-ayon lamang sa modelo.

csv
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

Tingnan ang halo: 6 positive, 7 negative, 7 mixed. Ang mga sarcastic na linya ("Oh great, another update…", "Thanks for nothing.") at ang borderline ("It's fine. Not amazing, not terrible.") ay sadyang naroon. Ang set na puro halatang mensahe ay makakakuha ng 100% at wala kang matututunan. Kunin ang mga totoong mensahe mula sa sarili mong inbox, tickets o chat export; ang mga edge case ang mga alam mo nang nakakainis.

Bakit 20? Panimulang laki ito, hindi numero mula sa docs (ang halimbawa nila ay gumagamit ng 1,000 tweets). Ang dalawampu ay sapat na maliit para isulat sa kamay sa kalahating oras at sapat na malaki para hindi mapagpasyahan ng isang swerteng sagot ang score.

Ang script: ipadala ang bawat kaso, ihambing, i-print ang mga namiss#

Apat ang hakbang ng plano, at sinusundan ito ng code linya por linya.

Ilagay sa tamang pagkakasunod-sunod

Ayusin ang eval loop

  1. I-load ang 20 kaso mula sa CSV
  2. Ipadala ang bawat mensahe sa modelo kasama ang prompt mo
  3. Ihambing ang sagot sa label mo
  4. I-print ang accuracy at ang mga kasong nabigo

Gumagana lang ang loop kapag umiiral na ang mga label bago ang unang tawag sa modelo, at huli ang mga failure dahil iyon ang binabasa at ginagawan mo ng aksyon.

I-install ang SDK gamit ang pip install openai at itago ang key sa environment variable na tinatawag na CHEAPTOKENS_API_KEY. Gumagana rin ang anumang OpenAI-compatible API sa parehong paraan; dito nakaturo ang script sa CheapTokens at GLM-5.3-Flash (nasa docs ang mga detalye ng setup).

python
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}')

Tatlong detalye ang dapat tingnan muli.

  • temperature=0 pinapanatili ang mga sagot na kasing-steady hangga't maaari, para ang pagbabago sa score ay mula sa prompt mo at hindi sa dice.
  • max_tokens=100 ay higit pa sa kailangan ng isang salitang label. Kung may sagot na bumalik na walang laman o putol, tingnan ang finish_reason; ipinapakita ng gabay sa finish_reason "length" kung ano ang itataas.
  • Ang grading line ay ang recipe ng docs, strip().lower() ihinambing sa tamang sagot, kasama ang isang dagdag: tinatanggal din nito ang trailing full stop, dahil ang "Negative." at "negative" ay parehong sagot para sa iyo.

Ano ang nakikita mo kapag tumakbo ito? Isang linya ng accuracy, tapos isang linya bawat miss. Sabihin nating ganito ang unang run:

text
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'
…

(Ang mga numero dito ay assumption para ipakita ang hugis ng output; mag-iiba ang sa iyo.) Ang sarcasm at borderline na pananalita ang mga uri ng mensaheng madalas namimiss ng maikling prompt. Ang punto ay hindi ka na nanghuhula: may listahan ka na.

Baguhin ang isang bagay, patakbuhin muli#

Ngayon ang kapaki-pakinabang na bahagi. Basahin ang mga miss, pumili ng dahilan, baguhin ang prompt sa isang lugar at patakbuhin muli. Isang pagbabago sa isang pagkakataon, kung hindi hindi mo malalaman kung aling edit ang nagpabago ng score.

Ihambing

Prompt v1 → v2: magdagdag ng panuntunan at dalawang halimbawa

v1

text
Classify the customer message as positive, negative or mixed.
Answer with one word only.

v2

text
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

Ang dalawang halimbawa ay gawa-gawa, at sinasadya iyon. Huwag kailanman maglagay ng mensahe mula sa cases.csv sa prompt bilang halimbawa: gagradohan ang modelo sa sagot na ibinigay mo, at lalaki ang score. Ito ang few-shot technique; ang test set ang magsasabi kung sulit ito. Kung malabo pa rin ang v1 prompt mo, ang paano magsulat ng magandang prompt ang simulan bago ka magsukat.

I-paste ang v2 sa PROMPT (gumagana ang triple quotes para sa maraming linya) at patakbuhin muli ang script. Sabihin nating ini-print nito ang Accuracy: 17/20 = 85%. Tatlong karagdagang kaso ang tama, kaya mukhang mas maganda ang v2. Gaano ito mapagkakatiwalaan? Bawat kaso ay nagkakahalaga ng 5 puntos sa 20-kasong set, kaya 70% → 85% ay tatlong mensahe. Magandang hint ito, hindi patunay. Kung bumaba ang score, may natutunan kang kasinghalaga at nailigtas mo ang sarili mo mula sa pag-ship ng mas masamang prompt.

Parehong set, ibang modelo: hinahawakan ba nito ang score?#

Sinasagot ng parehong file ang pangalawang tanong: nagbabayad ka ba para sa mas maraming modelo kaysa kailangan ng gawaing ito? Baguhin ang isang linya at patakbuhin muli:

python
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'

Kung tumutugma ang accuracy sa iyong 20 kaso, may sagot ka na para sa gawaing ito, mula sa sarili mong data at hindi sa leaderboard. Kung bumaba, tingnan kung aling mga mensahe ang nasira bago ka magpasya ng kahit ano.

Magkano ang lahat ng ito? Ipagpalagay na mga 150 input tokens bawat kaso (ang instruction at ang mensahe) at mga 5 output tokens para sa isang salitang label. Iyon ay 3,000 input at 100 output tokens bawat run ng 20 kaso, na umaabot sa $0.000064 sa GLM-5.3-Flash. Sampung re-run ng set ay 200 requests; ipinapakita ng talahanayan sa ibaba ang workload na iyon para sa bawat modelo, kasama ang OpenRouter sa tabi nito. Sa workload na ito, kasama ang input at output, mas mababa ang bawat modelo sa talahanayan kaysa sa reference price ng OpenRouter.

Modelo Bawat kahilingan 200 mga kahilingan OpenRouter, 200 mga kahilingan
GLM-5.3-Flash $0.0000032 $0.00064 $0.0011
DeepSeek-V4-Flash $0.0000028 $0.00055 $0.0022
MiniMax-M2.7 $0.0000083 $0.0017 $0.0198

150 input at 5 output na token bawat kahilingan. Ang mga presyo kada 1M token ay kasalukuyan at nagbabago kasabay ng aming mga taripa; ang column ng OpenRouter ay nagpapakita ng reference na presyo para sa parehong workload.

Dalawa sa kanila ang ginamit sa artikulong ito: ang GLM-5.3-Flash ay may 390K context at hanggang 8,192 output tokens bawat sagot; ang DeepSeek-V4-Flash ay may 380K context at hanggang 32,768 output tokens, isang presyo sa anumang oras ng araw, at parehong balanse tulad ng ibang modelo. Nasa pricing page ang kasalukuyang presyo, nasa models ang buong listahan.

Saan tumitigil ang exact match#

Gumagana ang exact match dahil ang tamang sagot ay isang salita mula sa fixed list. Para sa open-ended output tulad ng summaries, rewrites o explanations, walang iisang string na maihahambing. Inilalarawan ng docs ang isa pang ruta, ang pag-grado ng modelo, at inirerekomenda ang paggamit ng ibang modelo bilang grader kaysa sa nagsulat ng sagot. Magsimula pa rin sa exact match: saanman mapipilitan mo ang maikli at fixed na sagot, ito ang pinakamurang at pinakamalinaw na test na maaari mong patakbuhin. Ang rule of thumb ng docs ay mas maraming awtomatikong gradong tanong ang mas mainam kaysa sa kakaunting gradong kamay.

Isa pang ugali: kapag tumigil nang bumuti ang v2, huwag magpatuloy sa pag-polish laban sa parehong 20 mensahe. Magdagdag ng 5–10 bago, mas mainam na totoong miss mula sa production, at patakbuhin muli.

Mabilisang pagsusuri

v2 scores 17/20 and v1 scored 15/20 on the same cases. What is the safest conclusion?

Ipakita ang sagot

Sagot: v2 looks better, but two cases out of 20 is a small gap: add new cases and rerun

Each case is 5 points, so a two-case gap is a signal to look closer, not a verdict. New cases that v2 has never seen are the next check.