4 Гід-напрямний 5 Майже архітектор ~10 хв

Eval-first: спершу перевірки, потім код з ШІ

Придумай, як зрозумієш, що «вийшло», - і лише потім запускай агента

Eval-first простими словами: чому сильні вайбкодери спершу пишуть перевірки, а потім кличуть ШІ. Capability і regression, метрика pass@k, шматки по 15 хвилин.

Скіли ECC у цьому уроці: agentic-engineeringeval-harness

Що таке eval-first простими словами

Замов торт у дуже моторного, але трохи навіженого кондитера. Скажеш «зроби торт» - він зробить. Якийсь. Може, з грибами. І буде щиро гордий собою.

А тепер скажи інакше: «торт шоколадний, на 8 шматків, без горіхів - у гостя алергія, і свічка хай стоїть, а не падає». Бачиш різницю? У кондитера зʼявився чек-лист, за яким він перевірить сам себе. І ти перевіриш - не куштуючи на зуб увесь торт.

Ось це і є eval-first : спершу придумай, як ти зрозумієш, що вийшло добре, а вже потім запускай ШІ-агента. Звучить занудно. Насправді це і є головний секрет, чому в одних ШІ видає робочий продукт, а в інших - гарне сміття.

Робот-кондитер: ліворуч робить дивний торт з грибами, праворуч охайний торт за чек-листом
Ліворуч - «просто зроби». Праворуч - eval-first: спершу чек-лист, потім торт.

Навіщо eval-first потрібен вайбкодеру

Ти вайбкодер. Код руками ти не пишеш - ти ставиш завдання агенту і приймаєш результат. І ось тут, на «приймаю результат», eval-first рятує тобі і нерви, і гроші:

  • більше не треба витріщатися в 12 файлів із думкою «ну ніби ок?» - у тебе є точний список, що має працювати;
  • агент перевіряє себе сам до того, як віддати результат - менше кіл «ні, не так, переробляй»;
  • ти ловиш момент, коли нова фіча зламала стару (а це трапляється частіше, ніж хотілося б);
  • ти можеш чесно сказати «готово» - бо в «готово» тепер є визначення, а не відчуття.

Різниця між «ШІ зробив щось» і «ШІ зробив те, що треба» - це найчастіше одне запитання, поставлене до старту: «а як ми зрозуміємо, що вийшло?»

Як працює петля eval-first

У скілах ECC це звуть eval-first loop - петля «спершу перевірки». Кроків усього чотири, і вони прості:

  1. Опиши перевірки - що має запрацювати (capability) і що не має зламатися (regression).
  2. Зроби замір «до» - проганяй перевірки на поточній версії, зафіксуй, що зараз падає.
  3. Дай агенту робити - тепер він пише код під зрозумілу мету, а не навмання.
  4. Проганяй перевірки знову - порівняй «до» і «після». Стало краще? Нічого не відвалилося?

По суті перевірка - це тести для звичайного коду, тільки для роботи з ШІ. У світі ECC так і кажуть: евали - це «юніт-тести для розробки з ШІ».

Capability і regression: нове проти старого

Їх легко переплутати - тому розкладемо по поличках.

  • Capability (чи вміє нове). Перевіряєш, чи зʼявилося те, заради чого ти все затіяв. Наприклад: «користувач реєструється за email», «форма замовлення відправляється».
  • Regression (чи не зламав старе). Перевіряєш, що вчорашнє все ще працює сьогодні. Наприклад: «стара кнопка входу на місці», «решта сторінок відкривається».

Метрика pass@k: як виміряти надійність ШІ

ШІ - штука ймовірнісна: той самий запит то виходить ідеально, то мимо. Тому надійність міряють не «так/ні», а часткою вдач із кількох спроб. Це і є pass@k .

  • pass@1 - вийшло з першого разу.
  • pass@3 - вийшло хоча б раз із трьох спроб.
  • pass^3 - усі три спроби поспіль успішні (планка вища, для критичних речей).

У скілах ECC дають такі орієнтири: для нових фіч (capability) - pass@3 від 90% і вище, а для критичних регресій - pass^3 = 100%. Усе, що працювало, зобовʼязане працювати завжди. Без винятків.

Мішень для дартсу: два дротики мимо, один у центр - це pass@3
pass@3 = влучити в центр хоча б раз із трьох кидків.

Дроби завдання на шматки по 15 хвилин

Евали працюють, лише якщо завдання можна перевірити. Гігантське «зроби мені маркетплейс» одразу не перевіриш - там сто ризиків в одному клубку. Тому в скілі agentic-engineering є правило 15-хвилинного шматочка: дроби роботу на одиниці, де кожна:

  • перевіряється сама по собі, окремо від решти;
  • несе один головний ризик (а не «тут тобі і дизайн, і оплата, і база разом»);
  • має зрозуміле «готово» - видно, коли завершено.
Хороший шматок завдання
  • «Зроби форму підписки і перевір, що email валідується» - один ризик, ясне готово.
  • «Додай кнопку замовлення, після кліку показується «дякуємо»» - перевіряється очима за секунду.
  • Кожен шматок можна прийняти або повернути окремо, не чіпаючи решти.
Поганий шматок завдання
  • «Зроби весь сайт магазину» - десять ризиків одразу, перевірити нічим.
  • «Зроби красиво» - немає визначення «готово», агент ворожить на кавовій гущі.
  • Шматки переплетені: зламав один - поїхало все, а винного не знайти.

Eval-first на живому прикладі: форма бронювання

Ти просиш агента: «додай на сайт кавʼярні форму бронювання столика». Без eval-first агент бадьоро ліпить форму, ти дивишся - поля є, кнопка є, «ну ок». А за день зʼясовується: форма шле порожні заявки, не перевіряє телефон і заразом зламала меню по сусідству.

А як би це зробив тямущий вайбкодер? Спершу описав би перевірки - і лише потім дав робити:

Промпт - скопіюй і спробуй

Додай на сайт кавʼярні форму бронювання столика. Але спершу, ДО коду, випиши перевірки, за якими ми зрозуміємо, що готово.

Перевірки на нове (що має запрацювати):

  1. Форма приймає імʼя, телефон і кількість гостей.
  2. Порожню форму відправити не можна - показується зрозуміла помилка.
  3. Телефон без цифр не приймається.
  4. Після успішної відправки видно повідомлення «заявку прийнято».

Перевірки на старе (що не має зламатися):

  1. Меню на сторінці так само відкривається.
  2. Кнопка «зателефонувати» в шапці працює.
  3. Решта сторінок відкривається як раніше.

Далі працюй так: реалізуй форму, потім сам пройди по всіх перевірках і напиши навпроти кожної PASS або FAIL. Якщо є хоч один FAIL - лагодь і перевіряй заново. Результат з FAIL мені не віддавай.

Хто перевіряє результат: код, ШІ чи людина

Перевірку можна доручити різним «суддям» - у скілі eval-harness їх три:

  • Код-суддя (найнадійніший). Точна перевірка без суперечок: тести пройшли / збірка зібралася / потрібний рядок на місці. Можеш перевірити кодом - перевіряй кодом.
  • ШІ-суддя (LLM як оцінювач). Коли «добре» не виміряти лінійкою: «чи зручний текст», «чи зрозуміла помилка». Просиш іншу модель оцінити за шкалою від 1 до 5.
  • Людина-суддя (ти). Для спірного і для всього, що про безпеку. Правило ECC жорстке: перевірки безпеки ніколи не віддаємо на повний автомат - останнє слово за людиною.

Як виглядає евал-звіт PASS/FAIL

Щоб стало геть наочно - ось короткий звіт по перевірках у стилі eval-harness:

Промпт - скопіюй і спробуй

Після того як доробиш форму, дай мені короткий звіт у такому вигляді:

Перевірки на нове: приймає поля - PASS або FAIL порожню не відправити - PASS або FAIL телефон перевіряється - PASS або FAIL повідомлення про успіх - PASS або FAIL

Перевірки на старе: меню відкривається - PASS або FAIL кнопка зателефонувати - PASS або FAIL інші сторінки - PASS або FAIL

Наприкінці: скільки зі скількох пройшло. І статус: готово до здачі чи потрібні правки.

Мем: ШІ показує зелену галочку capability і ховає за спиною червону regression
«Нове працює!» - а старе тихенько лежить у руїнах за спиною.

Часті помилки в перевірках з ШІ

  • Перевіряти лише «щасливий шлях». Ти переконався, що форма працює, коли все ввели правильно. А порожні поля? А кривий телефон? Реальні люди введуть усе, включно з емодзі в графі «вік».
  • Забувати про регресії. Радієш новій фічі і не помічаєш, як розвалилося старе. Завжди тримай під рукою список «що не має зламатися».
  • Описувати перевірки ПІСЛЯ коду. Так ти мимоволі підганяєш критерії під те, що вже вийшло. Перевірки придумуються суворо до.
  • Гнати одне гігантське завдання. Його нічим перевірити цілком. Ріж на шматки по ~15 хвилин зі зрозумілим «готово».
  • «Готово» без визначення. «Зроби красиво» - агент вгадує наосліп, а ти потім незадоволений. «Готово» = конкретний список галочок.
  • Віддавати безпеку на автомат. Логіни, оплата, доступи - фінальну перевірку завжди робить людина.
  • Гнатися за відсотками, забувши про ціну. Можна вилизувати pass@k до блиску і не помітити, що кожна спроба жере купу токенів і часу. Стеж і за надійністю, і за витратами.

TL;DR - если коротко

  • Eval-first - спершу описуєш, як зрозумієш «вийшло / ні», і лише потім віддаєш завдання ШІ.
  • Два види перевірок: capability (чи вміє нове) і regression (чи не зламав старе).
  • Ріж роботу на шматки по ~15 хвилин: кожен перевіряється сам, один ризик, зрозуміле «готово».
  • pass@k - це про надійність: «вийшло хоч раз із k спроб». Для нових фіч цілься в pass@3 вище 90%.
  • Судити вміють код, ШІ та людина. Але безпеку підтверджує лише людина - без автопілота.
  • Головна пастка - перевірити лише щасливий шлях і забути про криві введення та старий функціонал.

Пошук по вікі

Натисніть Esc для закриття

Введіть запит для миттєвого пошуку по всіх сторінках курсів та уроків.