Оцінювання LLM: від публічних benchmark до вашого golden set
Той самий agent, те саме завдання, десять запусків: 7 успіхів здаються 70 %, доки pass^10 не дає рівно нуль.
На цій сторінці
Ось демонстрація. Agent із розділу 23 — той самий цикл, два з його чотирьох інструментів — спрямований на каталог із п’ятьма файлами логів і конфігурацій та отримує одне запитання.
Q: What is the last line of errors.log about?
turn 1 -> read_file({"path": "errors.log"})
turn 2 -> "The last line of errors.log is:
ERROR worker 7 timed out after 30000 ms."Правильно, і це не доводить узагалі нічого — бо ця розшифровка є однією з десяти, які я запустив, і я вибрав її вже після того, як побачив усі десять.
Запустіть ідентичне завдання десять разів, не змінюючи нічого, крім seed вибірки, і agent дасть правильну відповідь сім разів. Сімдесят відсотків — саме це число потрапило б на слайд. Тепер поставте запитання, яке насправді хвилює клієнта, — чи працюватиме це щоразу? — і відповідь буде зовсім іншим числом:
t20 7/10 successes = 70 % (95 % Wilson interval: 39.7 % to 89.2 %)
pass^1 70.00 % pass^5 8.33 %
pass^2 46.67 % pass^7 0.83 %
pass^3 29.17 % pass^8 0.00 %
pass^4 16.67 % pass^10 0.00 %Agent жодного разу не розв’язав це завдання десять разів поспіль і, судячи з цих даних, не має цього зробити. Це число — pass^10 — чесне; його майже ніколи не публікують, а до кінця цього розділу ви знатимете, як його обчислити, скільки коштує його обчислити й чому інтервал поруч із 70 % важливіший за самі 70 %.
Показати подробиці
Що цьому розділу потрібно з попередніх.
- Розділ 4 — для статистики: інтервал Вілсона для частки, причина, чому сімнадцять правильних із двадцяти нічого не розрізняють, і дурний baseline як перша вимога.
- Розділ 15 — для bench: п’ятдесятирядковий harness, парний знаковий тест на випадках, де дві системи розходяться, і правило, що prompt вимірюють, а не обговорюють.
- Розділ 23 — для того, що саме вимірюється: цикл, п’ять виходів із нього, облік вартості й фінальне спостереження, що harness робить agent керованим, але не правильним.
Тут дві панелі. TypeScript — для вашого власного оцінювання, бо йому місце у вашій continuous integration поруч із кодом. Python — для другої панелі, бо публічні benchmark живуть там, а одному з вимірювань нижче потрібні logits.
Три проєкти, три інструменти
Посилання на розділ: Три проєкти, три інструментиМайже кожна суперечка про оцінювання — це двоє людей, які вимірюють різні речі. Є три проєкти, і в них немає спільного інструмента.
| що ви оцінюєте | запитання | інструмент | кому належить |
|---|---|---|---|
| модель | чи ця модель загалом краща за ту? | публічні benchmark, leaderboard | спільноті |
| ваш застосунок | чи працюють мій prompt, мій retrieval, моя schema на моїх вхідних даних? | ваш golden set | вам |
| ваш agent | чи весь цикл, з інструментами та побічними ефектами, надійно досягає мети? | успішність завдання плюс pass^k | вам |
Плутанина дорога в одному напрямку. Leaderboard каже, що модель сильна в міркуваннях рівня аспірантури; він не може сказати, чи маршрутизуватиме вона ваші звернення в підтримку. А оцінювання застосунку, яке виставляє бал за одну відповідь на кожен input, узагалі не бачить agent, бо agent має розподіл траєкторій, а одна відповідь — це один sample із нього. Розділ 22 назвав цей третій рядок і лишив його порожнім: міра продуктивності, та частина специфікації agent, яку команди записують останньою або не записують ніколи.
Порядок теж має значення, і вендор, який продає вам модель, сам це каже. Посібник OpenAI для agent зводить вибір моделі до трьох кроків, саме в такому порядку: «Налаштуйте evals, щоб встановити performance baseline», «Зосередьтеся на досягненні вашої цілі точності з найкращими доступними моделями», «Оптимізуйте вартість і затримку, замінюючи більші моделі меншими там, де це можливо».1 Оцінювання йде першим, бо кроки два й три без числа не мають сенсу.
Golden set і що насправді дають двадцять випадків
Посилання на розділ: Golden set і що насправді дають двадцять випадківGolden set — це список вхідних даних, кожен із записаною правильною відповіддю, і grader, який вирішує, чи збігається output. Він нудний, малий і єдиний артефакт у цьому розділі, який належить вам. Побудований тут набір має двадцять завдань над каталогом із п’яти файлів — не трьох із розділу 23, тому відповіді не ті самі — і grader написаний до запуску agent:
export type Task = {
id: string;
prompt: string;
answer: string; // the fact, in words, for a human and for a judge
must: RegExp[]; // ALL must match the final answer
mustNot?: RegExp[]; // NONE may match
};
export const GOLDEN: Task[] = [
{ id: "t04", prompt: "Which file is the largest?", answer: "access.log",
must: [/access\.log/i], mustNot: [/errors\.log/i, /notes\.txt/i] },
{ id: "t12", prompt: "Which HTTP status codes appear in access.log? List all of them.",
answer: "200, 429 and 500", must: [/200/, /429/, /500/] },
// ...eighteen more
];Дві властивості тут несуть навантаження. Список mustNot існує тому, що модель, яка називає три файли, серед яких є правильний, ще не відповіла. А answer написаний і прозою, і pattern, бо і людині, і judge він знадобиться пізніше — а записати той самий факт двічі у двох нотаціях означає з’ясувати, що ви самі з собою не погодилися щодо того, у чому було завдання.
Тепер таблиця, яка вирішує. Чотири системи-кандидати, ті самі двадцять завдань, accuracy з інтервалом і два стовпці, які сама таблиця accuracy завжди приховує:
| system | correct | accuracy, 95 % Wilson | cost per solved task | mean latency |
|---|---|---|---|---|
| A — без інструментів, greedy | 2/20 | 10.0 % [2.8, 30.1] | $0.004649 | 663 ms |
| B — інструменти, стислий prompt | 5/20 | 25.0 % [11.2, 46.9] | $0.005576 | 1,362 ms |
| C — інструменти, керований prompt | 2/20 | 10.0 % [2.8, 30.1] | $0.013071 | 930 ms |
| D — C, best of 3 при T = 0.7 | 1/20 | 5.0 % [0.9, 23.6] | $0.073532 | 2,628 ms |
Читайте інтервали до переможця. Запуски плеча B лежать від 11 % до 47 %; плеча A — від 3 % до 30 %. Вони перекриваються на більшій частині довжини, і це висновок розділу 4, який приходить саме туди, де був обіцяний: двадцять випадків не можуть ранжувати чотири системи. Розділ 15 загострив це, поставивши натомість парне запитання — у випадках, де два плеча не згодні, наскільки перекошений поділ? — бо спільна складність набору скорочується. Ось кожна пара:
A vs B +0 / -3 p = 0.2500 B vs C +4 / -1 p = 0.3750
A vs C +2 / -2 p = 1.0000 B vs D +4 / -0 p = 0.1250
A vs D +2 / -1 p = 1.0000 C vs D +1 / -0 p = 1.0000Жодне із шести порівнянь не встановлене. Найкраще плече б’є плече без жодних інструментів на п’ятнадцять пунктів, і все це тримається на трьох discordant випадках. Двадцять випадків показують механізм і не можуть вибрати постачальника; сказати протилежне на зустрічі — це спосіб купити погану модель.
Є одна річ, яку ця таблиця таки встановлює, і це стовпець, який ніхто не додає. Плече D коштує у тринадцять разів дорожче за плече B на розв’язане завдання, бо sampling трьох траєкторій і вибір modal відповіді потроює рахунок незалежно від того, чи потроює він accuracy. Таблиці accuracy, які опускають cost, роблять цей компроміс невидимим.
Metric визначає число
Посилання на розділ: Metric визначає числоТепер висновок, який змінює те, як ви читатимете кожен benchmark, який будь-коли побачите. Візьміть ті самі двісті transcript — двадцять завдань, десять запусків, жодного token не згенеровано заново — і оцініть їх трьома способами:
| grader | correct | accuracy, 95 % Wilson |
|---|---|---|
| exact match із записаною відповіддю | 0/200 | 0.0 % [0.0, 1.9] |
| записана відповідь з’являється як substring | 26/200 | 13.0 % [9.0, 18.4] |
| keyword rubric вище | 52/200 | 26.0 % [20.4, 32.5] |
Нуль, тринадцять, двадцять шість. Система не змінилася. Змінився grader. Exact match повертає нуль не тому, що agent марний, а тому, що жодна відповідь вільним текстом ніколи не є побайтово ідентичною reference: він вимірює форматування й звітує про нього як про capability.
Це не курйоз, а механізм, і в нього є назва. Hard-cutoff metric оцінює завдання за принципом усе-або-нічого на кількох підфактах, тому ефект множиться. Завдання t12 питає одразу про три коди статусу. За десять запусків:
per-code presence 200: 9/10 429: 6/10 500: 8/10 (mean 0.77 per fact)
all three at once 5/10Кожен факт правильний приблизно у трьох чвертях випадків; вимога мати всі три одночасно вдвічі знижує score, а достатньо близьке до виміряних 0.50, щоб показати, звідки взялося падіння. Узагальнимо:
| per-fact accuracy | |||||
|---|---|---|---|---|---|
| 0.60 | 60.0 % | 36.0 % | 21.6 % | 7.8 % | 0.6 % |
| 0.80 | 80.0 % | 64.0 % | 51.2 % | 32.8 % | 10.7 % |
| 0.90 | 90.0 % | 81.0 % | 72.9 % | 59.0 % | 34.9 % |
| 0.95 | 95.0 % | 90.3 % | 85.7 % | 77.4 % | 59.9 % |
Прочитайте рядок 0.90 проти рядка 0.95 на : покращення per-fact на п’ять пунктів перетворюється на двадцять п’ять пунктів на кон’юнкції. З моделлю не сталося нічого дискретного. Гладка крива, прочитана через all-or-nothing metric, виглядає як стрибок — саме це Schaeffer, Miranda і Koyejo доводили щодо emergent abilities, і саме це розділ 10 відкладав сюди.2 Їхній аудит виявив, що щонайбільше 5 із 39 preferred metrics BIG-Bench узагалі демонструють emergence, причому дві дискретні metrics дають понад 92 % заявлених випадків.
Отже, дисципліна в один рядок: стрибок на графіку є свідченням про metric, доки не доведено протилежне. Перш ніж повірити, що capability з’явилася, побудуйте ті самі запуски з metric, яка дає частковий credit, і подивіться, чи урвище виживе.
Є друга версія цього ефекту, про яку Kalai та колеги стверджують, що вона шкодить вище за течією: benchmark, оцінені як правильно-або-неправильно, винагороджують вгадування замість відповіді «я не знаю», тож модель, optimized під них, вчиться вгадувати. Їхнє запропоноване виправлення — не ще один hallucination benchmark, а «зміна scoring наявних benchmark, які неузгоджені, але домінують у leaderboard».3 У вашого golden set є та сама важільна точка, і це один рядок: вирішити, чи abstention рахується як failure, чи як окрема категорія. Більшість людей ніколи не вирішує, тож він мовчки рахується як failure, і система, яку вони випускають, вгадує.
pass^k і variance, яку ніхто не публікує
Посилання на розділ: pass^k і variance, яку ніхто не публікуєДосі все оцінювало одну спробу на завдання. Agent — це не одна спроба. Розділ 17 встановив, що детермінізму у вас немає навіть за temperature zero, тож той самий input породжує розподіл траєкторій, а benchmark, який запускає кожне завдання один раз, звітує про один sample із нього.
Внесок τ-bench — metric для цього. Стаття визначає її прямо: «ми пропонуємо нову metric — pass^k (pass hat k), визначену як імовірність того, що всі k i.i.d. trials завдання будуть успішними, усереднену за завданнями».4 Запустіть кожне завдання разів, порахуйте успіхів, і незміщені estimators такі:
Друга — це знайома pass@k з генерації коду: шанс, що принаймні одна з спроб буде успішною. Поставте їх поруч на тих самих виміряних counts, і вони рухаються в протилежних напрямках:
pass@k — принаймні одна | pass^k — усі | |
|---|---|---|
| 1 | 26.0 % | 26.0 % |
| 2 | 37.0 % | 15.0 % |
| 3 | 43.5 % | 10.5 % |
| 5 | 51.2 % | 6.7 % |
| 8 | 57.7 % | 5.1 % |
| 10 | 60.0 % | 5.0 % |
Ті самі запуски, той самий grader, ті самі двадцять завдань. Один стовпець каже, що система покращується з більшою кількістю спроб, а інший — що погіршується, і обидва правильні, бо відповідають на різні запитання. pass@k — правильна metric, коли людина фільтрує output: генерація коду, чернетки, brainstorming — і додаткові спроби дешеві. pass^k — правильна metric, коли agent діє без фільтра, тобто саме те, що означає «agent». Публікувати першу там, де застосовується друга, — найпоширеніше перебільшення в цій сфері, і власний заголовок τ-bench є чесною версією: gpt-4o приблизно з 61 % pass^1 на retail падає приблизно до 25 % при pass^8.4
Тепер жало в моїх власних числах. pass^10 на моїх двадцяти завданнях — 5.0 %: рівно одне завдання з двадцяти розв’язане на всіх десяти запусках. Це завдання t19, «Чи був deploy 42 успішним?», і ось дві з десяти відповідей, які rubric оцінив як правильні:
run 2 "To check if 'deploy.log' succeeded in deploying 42, I will list the file
names in the working directory using the list_files function..."
run 8 "Yes, deploy 42 has successfully deployed. Deploying was successful for 41
as well."Перша взагалі не відповідає. Друга додає хибне твердження — deploy 41 був rolled back. Обидві збіглися з /succe|yes/. Єдине завдання, яке тримає pass^10 вище нуля, — артефакт grader, тож справжня цифра — нуль, і жоден aggregate цього мені не показав би. Sampling transcript за вашим завданням із найкращим score — це місце, де grader помирають.
І ще одне число, на честь якого названо цей розділ. Десять ідентичних оцінювань — та сама система, ті самі двадцять завдань, той самий код, нічого не змінено, крім seeds:
per-run correct: 5 2 5 5 8 5 8 5 4 5 -> 10 % .. 40 %, mean 26.0 %, sd 8.8 pointsДіапазон у тридцять пунктів у системи, яка не змінилася. Якщо ви запустите suite один раз перед release і один раз після, «покращення» на вісім пунктів буде всередині цього розкиду, і ви випустите його, вважаючи, що спричинили зміну. Саме тому pooled interval вище — 26.0 % [20.4, 32.5] — надто вузький, щоб цитувати його сам по собі: він трактує двісті корельованих trials як двісті незалежних. Чесний підсумок оцінювання agent — це середнє і розкид між повторами, а друге майже ніхто не публікує.
Judge і власний golden set для judge
Посилання на розділ: Judge і власний golden set для judgeRubric не масштабуються на open-ended відповіді, тому стандартний хід — доручити моделі grade output. На frontier scale це працює достатньо добре, щоб бути default, і має три названі failure mode: position bias, verbosity bias і self-enhancement bias.5
Виміряйте це, перш ніж довіряти. Ті самі шістдесят відповідей — три з десяти запусків — були розмічені трьома способами. Людська мітка — моя: я прочитав усі шістдесят із відкритими п’ятьма файлами й застосував одне письмове правило: pass тоді й лише тоді, коли відповідь стверджує факт, про який було запитання, і не містить нічого, що суперечить файлам.
| grader | says pass | agrees with the human | false pass | false fail |
|---|---|---|---|---|
| keyword rubric | 17/60 | 50/60 = 83.3 % [72.0, 90.7] | 8 | 2 |
| модель як judge | 60/60 | 11/60 = 18.3 % [10.6, 29.9] | 49 | 0 |
Judge сказав PASS шістдесят разів із шістдесяти. Він звітував би про цього agent як про 100 % accuracy на наборі, де людина оцінює його у 18 %. Judge без discriminative power — не шумний інструмент; це стала функція, а стала функція дає вашій найкращій і найгіршій системі однаковий score.
Prompting його не врятував. Чотири варіанти, ті самі шістдесят items:
| judge prompt | says pass | agreement with the human |
|---|---|---|
| «Відповідай PASS або FAIL.» | 60/60 | 18.3 % |
| «Відповідай FAIL або PASS.» — labels swapped | 56/60 | 25.0 % |
| плюс явний список того, що рахується як failure | 55/60 | 26.7 % |
плюс один пропрацьований приклад FAIL і один приклад PASS | 56/60 | 25.0 % |
Заміна порядку двох labels в інструкції зрушила чотири verdicts. Це вимірюваний ефект, і це неправильний тип ефекту: judge реагує на форму prompt, а не на відповідь перед ним.
Чиста демонстрація — попарна. Двадцять запитань, кожне з одним очевидно правильним і одним очевидно неправильним кандидатом, подані в обох порядках:
picked the FIRST option 40/40 = 100.0 %
order-consistent (same winner both ways) 0/20 = 0.0 % [Wilson 0.0, 16.1]
picked the CORRECT answer 20/40 = 50.0 %Він вибрав позицію A сорок разів із сорока. 50 % за correctness — це не часткова компетентність, а арифметика, бо правильна відповідь стоїть у позиції A рівно в половині trials. Consistency тут визначається так, як у MT-Bench: «відсоток випадків, коли judge дає consistent results після перестановки порядку двох assistants», що робить порівняння apples to apples: GPT-4 має 65.0 % за цією мірою, а few-shot prompting підняв її до 77.5 %.5 Мій має нуль.
Стандартне пом’якшення також із цієї статті: «викликати judge двічі, міняючи порядок двох відповідей, і оголошувати перемогу лише тоді, коли відповідь preferred в обох порядках».5 Застосуйте це тут, і judge видає нуль придатних verdicts із двадцяти пар — це правильний результат і нескінченно кращий за двадцять упевнених.
Методологічна примітка, цінніша за результат. Я також запустив тест на verbosity: та сама правильна відповідь, одна копія доповнена реченням на 36 слів, яке нічого не додає. Judge віддав перевагу довшій версії рівно у 50 % trials — це виглядає як відсутність verbosity bias, але не є нею, бо judge, який завжди вибирає позицію A, набирає 50 % на будь-якому збалансованому pairing. Ви не можете виміряти друге bias, доки перше не контрольоване. Перестановка позицій — не refinement, який додають пізніше; це те, що робить усі інші вимірювання інтерпретованими.
Для чого потрібен judge. Open-ended відповіді без parseable форми: тон, покриття, чи citation підтримує своє речення, чи refusal був доречним. Дешево, швидко і приблизно настільки добре, наскільки добра базова модель.
Чим judge не є. Ground truth. Це система з accuracy, профілем bias і cost, і їй потрібен власний golden set людських міток — включно з відомими failure — перш ніж будь-яке число, яке вона видає, щось означатиме.
Чесне застереження: цей judge — модель на пів мільярда параметрів, і ніхто не має grade з такою. Суть не в тому, що judge погані. Суть у тому, що числа вище коштували вісім хвилин, і без них verdict цього judge щодо рішення про shipping був би 100 %.
Друга панель: Python і зонд для contamination
Посилання на розділ: Друга панель: Python і зонд для contaminationЦе третя й остання оголошена Python-панель курсу, і причина — у тому, звідки беруться публічні числа. lm-evaluation-harness охоплює «понад 60 стандартних академічних benchmark для LLM, із сотнями підзавдань і реалізованих варіантів» і є «backend для популярного Open LLM Leaderboard від Hugging Face»; HELM, SWE-bench і τ-bench — це Python packages із Python entry points.6 Запустити вашу модель проти опублікованої цифри означає запустити їхній код, і в день, коли ви захочете порівнятися з числом, яке хтось процитував, ви опинитеся саме в цій екосистемі:
lm_eval --model hf \
--model_args pretrained=EleutherAI/gpt-j-6B \
--tasks hellaswag \
--device cuda:0 \
--batch_size 8Друга причина в тому, що одне вимірювання в цьому розділі неможливе через HTTP. Contamination — витік test set у training data — це failure, який тихо робить публічний benchmark беззмістовним, а найгостріший зонд для нього потребує власного loss моделі, якого не повертає жоден chat API. Це cross-entropy per token із розділу 8, спрямована на запитання про пам’ять:
def nll(text: str) -> float:
"""Mean negative log-likelihood per token, in nats."""
ids = tok(text, return_tensors="pt").input_ids.to(model.device)
with torch.no_grad():
out = model(ids, labels=ids)
return float(out.loss)Десять пар речень: п’ять є в кожному crawl вебу від його появи, п’ять написані для цього розділу сьогодні вранці, кожне в парі з переформульованою версією з тим самим змістом.
| set | canonical wording | reworded | gap |
|---|---|---|---|
| відомі, середнє з 5 | 1.21 | 3.03 | +1.83 |
| свіжі, середнє з 5 | 5.02 | 5.96 | +0.93 |
Модель у чотири рази більше здивована реченням, написаним сьогодні вранці, ніж тим, яке бачила мільйон разів, а переформулювання коштує вдвічі дорожче на відомих — ця додаткова вартість і є частиною, яку запам’ятали, а не зрозуміли. Absolute loss змішує memorisation зі звичайною природністю, тому gap — краща статистика, а continuation test ще кращий. Дайте їй перші шість слів:
famous "Permission is hereby granted, free of"
-> "charge, to any person obtaining a copy of this software and associated
documentation files (the "
famous "All human beings are born free"
-> "and equal in dignity and rights. The right to life, liberty, and security"
fresh "All evaluation harnesses are born tiny"
-> ", and the most common way to measure their size is by using a ruler."Три з п’яти відомих рядків продовжилися слово в слово з шести слів; жоден із п’яти свіжих — ні. Це модель на пів мільярда параметрів, яка декламує MIT License. Якщо ваш benchmark є у відкритому вебі, вважайте, що він є у weights. Це також аргумент на користь усього розділу: golden set, який ви написали зі своїх даних і тримаєте поза будь-яким repository, який читає crawler, — єдиний test set, щодо якого ви можете бути впевнені, що на ньому ніколи не тренували.
Що насправді вимірюють публічні benchmark
Посилання на розділ: Що насправді вимірюють публічні benchmarkЇх усе ще варто читати, якщо ви читаєте те, що кожен із них вимірює, а не одне число, приклеєне до нього.
| benchmark | що він вимірює | число зі статті |
|---|---|---|
| MMLU | знання з 57 предметів у форматі multiple-choice | GPT-3 beat chance на «майже 20 percentage points у середньому»7 |
| HELM | багато metrics × багато scenarios, standardized | coverage core scenarios зросло з 17.9 % до 96.0 %8 |
| Chatbot Arena | crowdsourced pairwise human preference | понад 240K votes; crowd votes «добре узгоджуються» з experts9 |
| SWE-bench | розв’язання реальних GitHub issues, grade тестами repo | 2,294 problems; найкраща на той час модель розв’язала «лише 1.96 %»10 |
| τ-bench | tool use із simulated user і domain policy | gpt-4o ≈ 61 % pass^1, ≈ 25 % pass^8 на retail4 |
| WebArena | long-horizon tasks на functioning websites | найкращий GPT-4 agent 14.41 % проти 78.24 % у людей11 |
| OSWorld | реальні desktop і OS tasks у застосунках | 369 tasks; найкраща модель 12.24 %, люди 72.36 %12 |
| GAIA | запитання, легкі для людей і складні для assistants | 466 questions; люди 92 %, GPT-4 з plugins 15 %13 |
| AgentBench | agent reasoning у 8 distinct environments | великий розрив між commercial і open models14 |
| AgentHarm | чи agent виконає malicious multi-step tasks | 110 malicious tasks у 11 harm categories15 |
Беріть таблицю, а не окремий рядок. Усі agentic benchmark ставлять людей значно вище за моделі, що є протилежністю knowledge benchmark і найкращим однорядковим підсумком стану галузі; їхні цифри старіють за місяці, тож цитуйте їх із датою, коли прочитали; і кожен із них вимірює завдання, яке не є вашим.
Metrics, які вирішують у production
Посилання на розділ: Metrics, які вирішують у productionAccuracy — це metric, про яку ви сперечаєтеся. Ось ті, що вирішують, чи річ піде в shipping. Усі чотири випливають із уже виміряних двохсот запусків.
Cost per solved task, not per call. Agent коштує $0.001345 за спробу і $0.005172 за фактично розв’язане завдання — у 3.85 раза більше, бо три чверті спроб не дають нічого. Latency поводиться так само: 1,213 ms за спробу, 4,667 ms за розв’язане завдання. Кожен retry, кожне повторне запитання, кожна abandoned trajectory є у другому числі й невидимі в першому.
Діагностика, краща за accuracy. У 123 зі 200 спроб agent відповів без жодного tool call — він вгадав, а не подивився. Поділ за цим:
answered without reading anything 8/123 = 6.5 % [3.3, 12.3]
answered after reading something 44/77 = 57.1 % [46.0, 67.6]Інтервали навіть близько не торкаються. Це цінніше за aggregate 26 %, бо називає річ, яку треба виправити: модель не failing to reason, вона failing to look — і виправлення в harness, а не в моделі. Одне застереження, яке цей розділ винен власним стандартам: дві групи — це різні завдання, а не ті самі завдання в парі, тож частина gap може бути через те, що вона пропускає інструменти саме на запитаннях, які вважає складними. Поділ — це діагностика, не causal claim.
Human intervention rate — metric, про яку покупець питає першою: яка частка запусків зупинилася на approval, guardrail або handoff. Типізовані interruptions із розділу 23 роблять це підраховним, а підрахунок за типом завдання й за тиждень відділяє agent, який вчиться своїй роботі, від того, що тихо перетворюється на чергу.
Abandonment — це те, чого не бачить жодна offline suite: користувач, який прочитав відповідь, закрив вкладку й зробив завдання сам. Offline evaluation — це gate; production evaluation — безперервний sample реального трафіку, оцінений тим самим grader плюс ці чотири.
І правило, успадковане з розділу 17: ніколи не assert on exact output. Assert on properties — valid JSON, correct schema, викликаний правильний інструмент, число в межах tolerance, наявний required substring. Стовпець exact-match на початку цього розділу — те, що стається, коли це правило порушене.
Що ви надсилаєте третій стороні
Посилання на розділ: Що ви надсилаєте третій стороніОцінювання постачальника — це не лише accuracy, і це друга половина етики цього курсу, з власним заголовком, а не додатком.
Вимірюйте bias, не припускайте його. Що б ви не думали про поведінку моделі щодо імен, діалектів, гендерів чи національностей, це вимірювана властивість вашого pipeline, і інструмент у вас уже є: візьміть ваш golden set, змінюйте лише attribute, порівнюйте в парі. HELM існує саме тому, що accuracy alone звітували там, де bias, toxicity, calibration і robustness також були decidable.8 Model card вендора — це відправна точка, а не evidence щодо ваших input.
Contamination — також запитання до постачальника. Зонд вище — причина спитати, на чому вимірювали опубліковане число і коли були відсічені дані моделі.
Retention, training і residency, прочитано 7 вересня 2026 року. Це змінюється, тож записуйте дату поруч із відповіддю. Сторінка політики Anthropic стверджує: «За замовчуванням ми не використовуватимемо ваші inputs або outputs з наших commercial products (наприклад Claude for Work, Anthropic API, Claude Gov тощо) для тренування наших моделей», за винятком content, який ви явно надсилаєте як feedback і який зберігається «до 5 років».16 Документація OpenAI щодо data controls стверджує, що «data, надіслані до OpenAI API, не використовуються для тренування чи покращення моделей OpenAI (якщо ви явно не погодитеся поділитися data з нами)», описує тридцятиденне default retention для abuse-monitoring logs і пропонує Zero Data Retention, що «виключає customer content із abuse monitoring logs», плюс configurable data residency у списку регіонів.17
Чотири запитання, на які треба отримати письмову відповідь до першого production call, бо кожне має іншого власника: чи використовуються мої data для training; як довго вони retained і ким; де вони processed і stored; і що стається з усім цим, якщо я використовую reseller, gateway або aggregator замість provider напряму. Останнє — місце, де живе більшість сюрпризів, і жоден benchmark вам про це не скаже.
Куди це веде далі
Посилання на розділ: Куди це веде даліТепер у вас є інструмент: golden set, який належить вам, інтервал на кожному числі, paired test для кожного порівняння, pass^k для запусків, які ви нікому не показали, виміряний judge і зонд для того, чи публічний score щось означає. Фінальне твердження розділу 23 тепер можна перевірити, а не просто проголосити — harness робить agent керованим, не правильним — і перевірка зайняла двісті запусків і вісім хвилин.
Є одна властивість agent, яку все це не вимірює, і саме через неї людей звільняють.
Кожне завдання в golden set цього розділу написав я, і кожен файл, який читав agent, написав я. Ніщо в тому каталозі не намагалося нічого робити. Змініть один рядок в одному файлі, який agent має прочитати, — рядок, що закінчується інструкцією, адресованою тому, хто прочитає його наступним, — і agent, який набрав 26 %, виконає її з тими самими інструментами, тими самими дозволами й тим самим чистим trace, а кожне число в цьому розділі залишиться рівно там, де було. Evaluation suite вимірює, як часто система досягає вашої мети. Вона не вимірює, наскільки легко хтось інший може підмінити її своєю.
Розділ 30 — саме про це: prompt injection, lethal trifecta приватних data, untrusted content і external communication, а також вартість надання agent реальних permissions. Він відкривається спостереженням, якого цей розділ уникав: той самий passing score сумісний з agent, який робить саме те, що attacker написав у файлі, який йому наказали прочитати.
Джерела й метод
Посилання на розділ: Джерела й методКожне число вище було отримане на одній машині, і жодне не торкалося платного endpoint. Agent — це цикл із розділу 23 з двома з чотирьох інструментів над каталогом із п’яти файлів; модель за портом — Qwen/Qwen2.5-0.5B-Instruct, exposed through a small server of the same shape as a chat completions endpoint exactly as in Chapter 23, but in half precision on one consumer GPU rather than that chapter's CPU. Costs use rates із розділу 16 — $2.00 за мільйон input tokens і $12.00 за мільйон output — applied to measured token counts. Repeated runs use temperature 0.7 with fixed seeds so the whole set reproduces; the four-arm table is greedy. Інтервали — Wilson at 95 %, paired comparisons are two-sided exact sign tests over the discordant pairs; Wilson interval — із розділу 4, а exact paired sign test — із розділу 15, обидва reused unchanged. Human labels — мої, applied to sixty answers under the written rule quoted in the text. Читайте кожну величину тут як властивість моделі на пів мільярда параметрів, а кожен метод — як переносний: більша модель піднімає всі числа і не змінює жодного інструмента.
Примітки
Посилання на розділ: Примітки-
OpenAI, A practical guide to building agents (PDF), сторінка 8, прочитано 7 вересня 2026 року. Джерело three-step ordering, процитованого вище, і супутньої поради «build your agent prototype with the most capable model for every task to establish a performance baseline. From there, try swapping in smaller models to see if they still achieve acceptable results.» Розділи 22 і 25 цитують його definitional and orchestration pages. ↩
-
Schaeffer, R., Miranda, B. and Koyejo, S. Are Emergent Abilities of Large Language Models a Mirage? arXiv:2304.15004 (2023). Аргумент про те, що discontinuous, all-or-nothing metrics manufacture apparent jumps from smooth underlying improvements, із аудитом BIG-Bench, процитованим у розділі 10. Їхнє власне застереження варто повторити: ніщо в статті не стверджує, що великі моделі не можуть display emergent abilities. ↩
-
Kalai, A. T., Nachum, O., Vempala, S. S. and Zhang, E. Why Language Models Hallucinate. arXiv:2509.04664 (2025). Аргумент, що benchmark із scoring right-or-wrong reward guessing over abstention, і запропонований remedy — «modifying the scoring of existing benchmarks that are misaligned but dominate leaderboards, rather than introducing additional hallucination evaluations». Розділ 19 цитує це з боку retrieval; це evaluation side того самого твердження. ↩
-
Yao, S., Shinn, N., Razavi, P. and Narasimhan, K. τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains. arXiv:2406.12045 (2024). Походження
pass^k, defined as quoted above, with both estimators printed side by side in the paper; headline abstract полягає в тому, що state-of-the-art function-calling agents «succeed on <50 % of the tasks, and are quite inconsistent (pass^8 <25 % in retail)», а section 1 gives the gpt-4o figures of ≈61 %pass^1and ≈25 %pass^8on τ-retail. Estimatorpass@k, з яким він контрастує, походить із Chen, M. et al., Evaluating Large Language Models Trained on Code, arXiv:2107.03374 (2021). ↩ ↩2 ↩3 -
Zheng, L. et al. Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. arXiv:2306.05685 (2023). Джерело трьох названих biases, definition of consistency used above («the percentage of cases where a judge gives consistent results when swapping the order of two assistants»), finding that «only GPT-4 outputs consistent results in more than 60 % of cases» with 65.0 % rising to 77.5 % few-shot, and swap-and-require-agreement mitigation quoted verbatim. Його positive result теж важливий: GPT-4 judges reach «an agreement rate exceeding 80 %» with human evaluations, «the same level of human-human agreement» — це причина взагалі використовувати judge і причина вимірювати ваш. ↩ ↩2 ↩3
-
EleutherAI, Language Model Evaluation Harness, README проєкту, прочитано 7 вересня 2026 року: «over 60 standard academic benchmarks for LLMs, with hundreds of subtasks and variants implemented» і «the backend for Hugging Face's popular Open LLM Leaderboard». Invocation
lm_eval, процитований вище, — власний приклад README. Liang, P. et al., Holistic Evaluation of Language Models, arXiv:2211.09110 (2022), — інший стандартний runner і кращий текст про evaluation design. ↩ -
Hendrycks, D., Burns, C., Basart, S., Zou, A., Mazeika, M., Song, D. and Steinhardt, J. Measuring Massive Multitask Language Understanding. arXiv:2009.03300 (2020). 57 tasks; claim abstract, що найбільша GPT-3 model «improves over random chance by almost 20 percentage points on average», — корисне нагадування, наскільки недавньою є saturation цього benchmark. ↩
-
Liang, P. et al. Holistic Evaluation of Language Models. arXiv:2211.09110 (2022). Seven metrics — accuracy, calibration, robustness, fairness, bias, toxicity and efficiency — over 16 core scenarios and 30 models, with coverage figures quoted above. Причина читати його — framing: які з семи ви report, саме по собі є choice. ↩ ↩2
-
Chiang, W.-L. et al. Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. arXiv:2403.04132 (2024). Понад 240K голосів на момент написання, краудсорсингові попарні вподобання і твердження, що «the crowdsourced human votes are in good agreement with those of expert raters». ↩
-
Jimenez, C. E., Yang, J., Wettig, A., Yao, S., Pei, K., Press, O. and Narasimhan, K. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? arXiv:2310.06770 (2023). 2,294 problems from 12 Python repositories, graded by the repositories' own tests, with best model of the time solving «a mere 1.96 %». Розділ 23 uses it for the other sense of the word «harness». ↩
-
Zhou, S. et al. WebArena: A Realistic Web Environment for Building Autonomous Agents. arXiv:2307.13854 (2023). Functioning websites across four domains, with best GPT-4 agent at 14.41 % against 78.24 % for humans. ↩
-
Xie, T. et al. OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments. arXiv:2404.07972 (2024). 369 tasks on real operating systems; humans over 72.36 %, best model 12.24 %, with GUI grounding named as the main gap. ↩
-
Mialon, G., Fourrier, C., Swift, C., Wolf, T., LeCun, Y. and Scialom, T. GAIA: A Benchmark for General AI Assistants. arXiv:2311.12983 (2023). 466 questions, humans at 92 % against 15 % for GPT-4 with plugins — найчистіше опубліковане формулювання gap між тим, що легко для людини, і тим, що легко для assistant. ↩
-
Liu, X. et al. AgentBench: Evaluating LLMs as Agents. arXiv:2308.03688 (2023). Eight distinct environments, and significant disparity between top commercial models and open-source ones of comparable size. ↩
-
Andriushchenko, M. et al. AgentHarm: A Benchmark for Measuring Harmfulness of LLM Agents. arXiv:2410.09024 (2024). 110 explicitly malicious agent tasks (440 with augmentations) over 11 harm categories, with finding that leading models are «surprisingly compliant with malicious agent requests without jailbreaking» and that simple universal jailbreak templates transfer to agents while retaining their capabilities. Це міст до розділу 30: capability benchmark і harm benchmark вимірюють ту саму систему й не погоджуються щодо того, чи вона ready. ↩
-
Anthropic, Is my data used for model training?,
privacy.claude.com, прочитано 7 вересня 2026 року. Quoted verbatim above, including feedback exception and five-year storage window for submitted feedback. ↩ -
OpenAI, Your data (API data controls documentation),
developers.openai.com, прочитано 7 вересня 2026 року. Джерело default no-training statement, thirty-day abuse-monitoring retention, description of Zero Data Retention and list of eligible endpoints, and data residency regions. ↩