Как понять, что агент работает: оценка vs тестирование
🤔 Зачем это читать
Тебе показывают AI-бота для поддержки и говорят: «работает отлично». Ты спрашиваешь логичное: «а откуда вы знаете, что отлично?» В ответ — «ну мы потестили, вроде нормально отвечает». И тут у тебя в голове должна загореться лампочка. Потому что обычную программу действительно можно «потестить»: ввёл 2 + 2, должно выйти 4 — вышло 4, тест пройден; вышло 5 — провален. Чётко: прошёл или не прошёл (pass/fail, «прошёл/не прошёл»). А вот как «потестить» бота, который на один и тот же вопрос сегодня отвечает одной фразой, а завтра — другой, и обе по-своему правильные?
Знакомо? Вот она, боль: как понять, что бот работает хорошо, если он каждый раз отвечает по-разному — обычным тестом его не прогонишь. Нет одного «правильного ответа», с которым можно сверить. И поэтому многие команды вообще не меряют качество всерьёз: запустили, вроде живёт — и ладно. А потом качество тихо ползёт вниз, и узнают они об этом не от своих приборов, а от разъярённого клиента в отзыве.
Дело в том, что вероятностному агенту нужно не тестирование, а оценка (eval, от англ. evaluation — измерение качества). Это другой инструмент: не «прошёл/не прошёл», а «насколько хорошо и по каким признакам». И сделать её можно тремя разными способами, у каждого своя цена и свои слепые зоны — про это вся тема.
После этой страницы ты перестанешь принимать «мы потестили, вроде норм» за ответ. Ты сможешь сам разобрать конкретную ситуацию и сказать: вот это надо оценивать человеком, вот это — машиной, а вот тут проверять важно не сам ответ, а путь, которым агент к нему пришёл. Это граница между «купили кота в мешке» и «знаем, за что платим».
Задержись на 10 секунд. Вспомни, как ты сам понимаешь, что новый сотрудник работает хорошо. Ты ведь не гоняешь его по тесту с единственным правильным ответом. Ты смотришь на результат, иногда подсаживаешь проверяющего, иногда сам выборочно слушаешь его разговоры с клиентами. Подержи эту картинку. К концу страницы окажется, что качество агента меряют ровно теми же тремя приёмами — просто называют по-другому.
🍽 Почему агента не «тестируют», а «дегустируют»
В прошлой теме — 11.1 — Камеры на кухне: наблюдаемость и логи — мы разобрались, как вообще заглянуть внутрь работающего агента и увидеть, что он делает на каждом шаге. Теперь следующий вопрос: окей, видим — а как понять, что увиденное хорошо? Тут и начинается развилка между двумя словами, которые легко перепутать.
Тестирование (testing) — это про обычную программу, у которой на каждый ввод ровно один правильный ответ. Это как проверить кассу: пробил товар за 100 ₽ — на чеке должно быть 100 ₽. Не 99, не 101. Ответ один, сверка механическая: совпало — прошёл, не совпало — провален. Так живёт код по фиксированному рецепту.
Но агент — это повар, а не касса. Спроси его «как вежливо отказать клиенту в возврате» — и он каждый раз сформулирует по-своему, и десяток формулировок будут одинаково хорошими. Сверять с единственным эталоном нечего. Поэтому к агенту применяют не тестирование, а оценку (eval) — и работает она ровно как на кухне: не «по вкусу шефа на глазок», а через два честных приёма.
- Дегустация перед подачей. Прежде чем блюдо уйдёт в зал, кто-то его пробует по чек-листу: достаточно ли соли, та ли температура, так ли выглядит. Не «нравится / не нравится», а по понятным признакам.
- Тайный гость с чек-листом. Время от времени под видом обычного клиента приходит проверяющий, делает реальный заказ и оценивает по протоколу: как встретили, что принесли, сколько ждал. Это проверка уже на живых, реальных заказах.
Ключевое слово — протокол. Оценка работает, только когда есть заранее написанный список признаков «что такое хорошо». Иначе это вкусовщина: один проверяющий придрался к запятой, другой пропустил откровенную ошибку. Рубрика (от англ. rubric — оценочный лист с критериями, как у судьи по фигурному катанию) — это и есть тот самый протокол: список «за что снижаем, за что хвалим». Без рубрики любая оценка — спор о вкусах.
👀 Три дегустатора: человек, LLM-судья, авто-метрика
Дегустировать блюдо можно тремя разными силами. У каждой свой компромисс между «насколько тонко чувствует» и «сколько это стоит и как быстро». Понять этот компромисс — половина дела.
Первый — человек (Human Eval, оценка человеком). Живой сотрудник читает ответы агента и оценивает по рубрике. Это самый тонкий способ: человек поймает кривой тон, неуместную шутку, упущенный нюанс — то, чего машина не чувствует. Минус очевиден: дорого и медленно. Сажать людей читать каждый из тысяч ответов в день невозможно — это как заставить шефа лично пробовать каждую тарелку в час пик.
Второй — LLM-судья (LLM-as-Judge, оценка моделью). Берём другую языковую модель и поручаем ей оценить ответы агента по той же рубрике: «оцени этот ответ от 1 до 5 по точности и вежливости и объясни почему». Это масштабируемо: судья пройдётся хоть по десяти тысячам ответов за копейки и быстро. Но у него есть слепые зоны — он может пропустить тонкую ошибку, к которой человек придрался бы, или наоборот придумать проблему на пустом месте. Это другой повар-дегустатор: быстрый, дешёвый, но не безупречный. Важное правило: судить должна отдельная модель, не та, что писала ответ — повар не должен сам ставить себе оценку, иначе он, ясное дело, всё одобрит.
Третий — авто-метрика (Automated Metrics, автоматические измерения). Это точные весы и термометр: чисто механические числа, которые считаются без всякого «мнения». Уложился ли ответ в нужную длину? Есть ли в нём обязательная ссылка на документ? За сколько секунд агент ответил? Сколько это стоило? Объективно, мгновенно, почти бесплатно. Но весы измеряют только вес — они не скажут, вкусное блюдо или нет, уместен ли тон, полон ли ответ. Метрика поймает «ответ пустой» или «отвечал 40 секунд», но не поймает «ответ складный, а по сути неверный».
И вот вывод, ради которого всё это: ни один способ не закрывает всё в одиночку — их комбинируют. Авто-метрики гоняют постоянно на всём потоке (дёшево). LLM-судья регулярно проходит по большой выборке (масштаб). А люди выборочно перепроверяют спорное и калибруют судью (тонкость там, где она реально нужна). Это и есть зрелая оценка: дешёвое сито ловит грубые промахи, дорогое внимание тратится только на сложное.
🛤 Оцениваем не только блюдо, но и как повар к нему шёл
Теперь тонкость, которую упускают чаще всего. Что именно мы оцениваем? Напрашивается — финальный ответ агента, само «блюдо на тарелке». И часто этого мало. Потому что агент, как мы помним из 5.1 про цикл агента, решает сложную задачу не одним махом, а по шагам: подумал, сходил в систему, посмотрел, поправил. И вот тут возможна коварная штука: правильный ответ, полученный неправильным путём.
Представь: агент выдал верный итог, но по дороге залез не в ту систему, посчитал наугад, а в конце случайно угадал. Блюдо вышло съедобным — но повар шёл не по рецепту, и в следующий раз с такими повадками он отравит весь стол. Поэтому в оценке агента есть два разных предмета:
- Ответ (финальный результат) — то, что агент в итоге выдал. Верно ли по сути, вежливо ли, полно ли. Это «дегустация готового блюда».
- Путь, или траектория (trajectory, англ. — последовательность шагов агента) — как именно он к ответу шёл: те ли инструменты вызвал, в том ли порядке, не лазил ли лишний раз туда, куда не надо. Это «проверка, шёл ли повар по рецепту».
Когда что проверять? Если важен только результат, а как он получен — неважно (например, короткий справочный ответ), хватит оценки ответа. Но как только агент совершает действия — лезет в системы, что-то меняет, тратит деньги на каждом шаге, — путь становится критичным. Там верный ответ «случайно» — это бомба замедленного действия.
🗓 Две арены: на стенде (offline) и в бою (online)
Последний кусочек — где оценивать. Тут тоже две арены, и нужны обе.
Оценка на наборе примеров (offline, «на стенде»). Ты заранее собираешь набор типовых заказов с заведомо известным «как должно быть» — что-то вроде эталонного банкета на тренировочной кухне. Каждый раз, когда что-то меняешь в агенте, прогоняешь по этому набору и смотришь, не стало ли хуже. Это безопасно — ошибаешься на стенде, а не на живых клиентах. Подвох один: набор устаревает. Жизнь подкидывает новые заказы, которых на стенде не было, поэтому набор надо регулярно освежать, иначе ты идеально готов к прошлогоднему меню.
Оценка на живом потоке (online, «в бою»). Это наблюдение за реальными разговорами с реальными клиентами прямо в работе — тот самый тайный гость, плюс сигналы от самих гостей (жалобы, лайки-дизлайки, повторные обращения). Только здесь видно, как агент держится на настоящем наплыве в пятницу вечером, а не на тепличном стенде. Подвох: тут уже играют на живых людях, поэтому без оценки на стенде сначала — рискованно выкатывать.
Связь простая: на стенде проверяешь перед изменениями, в бою — следишь постоянно. Стенд защищает от того, чтобы выкатить поломку. Живой поток ловит то, что на стенде предусмотреть было нельзя. Вот как это укладывается в общий конвейер.
🧾 Как одна оценка выглядит изнутри (на пальцах)
Соберём всё вместе на псевдокоде — это просто логика на человеческом языке, не настоящий код. Сцена: проверяем один ответ бота поддержки на возврат товара.
ответ_агента = «К сожалению, вернуть нельзя — товар вне 14 дней.»
# --- авто-метрики: точные весы, считаются мгновенно ---
проверь: ответ не пустой? → да
проверь: время ответа меньше 5 сек? → да (1.8 сек)
проверь: есть ссылка на правило? → НЕТ → пометить как промах
# --- LLM-судья: оценка по рубрике, отдельная модель ---
судья оцени по рубрике «точность» (1-5) → 5 (срок и правило верны)
судья оцени по рубрике «вежливость» (1-5) → 3 (сухо, нет сожаления по-человечески)
# --- путь (траектория): тем ли путём шёл ---
проверь: агент сходил в систему за датой покупки? → да, верно
проверь: не лез ли в лишние системы? → нет, чисто
# --- спорные случаи — человеку на выборочную проверку ---
вежливость = 3 (низковато) → ОТЛОЖИТЬ человеку для перепроверки и калибровки судьи
# → итог: по сути верно, но тон надо подтянуть. Поймали ДО жалобы клиента.
Видишь, как все три способа и оба предмета работают вместе? Весы (авто-метрики) поймали отсутствие ссылки бесплатно и мгновенно. Судья (LLM) оценил то, что весами не измеришь, — точность и тон по рубрике. Путь проверили отдельно — не лазил ли агент лишний раз. А спорный балл по вежливости ушёл живому человеку: тонкое внимание потрачено ровно там, где оно нужно. Это и есть зрелая оценка — поймать просадку самому, на своих приборах, а не от клиента в гневном отзыве.
Прежде чем жать кнопки — задержись на 10 секунд. Возьми свою задачу для агента (или ту, что хотел бы ему отдать) и прикинь на ней: что бы ты там доверил весам, что — судье, а что вытащил бы на живого человека? И есть ли в ней действия, где важен не только ответ, но и путь? Подержи эту прикидку — на тренажёре ниже ровно эти два разреза и будем делать.
🎮 Подбери дегустатора под ситуацию
Три рабочие ситуации с твоим агентом. По каждой реши две вещи: каким способом тут разумнее оценивать (человек / LLM-судья / авто-метрика) и что важнее проверять — сам ответ или путь, которым агент к нему шёл. Жми кнопки — сразу увидишь разбор. Это разминка чутья, не экзамен; промахнуться тут полезнее, чем на запуске.
📖 Ключевые понятия
- Оценка (eval)
- Способ понять, насколько хорошо работает вероятностный агент — в отличие от тестирования с одним правильным ответом. Не «прошёл / не прошёл», а «насколько хорошо и по каким признакам». Кухонный образ — дегустация перед подачей плюс тайный гость с чек-листом.
- Тестирование (testing)
- Проверка обычной программы, где на каждый ввод ровно один верный ответ: совпало с эталоном — прошёл, нет — провален (pass/fail, «прошёл / не прошёл»). На агенте, который каждый раз отвечает по-разному, не работает: сверять не с чем.
- Рубрика
- Заранее написанный список критериев «что такое хорошо» — оценочный лист, как у судьи в спорте. Без рубрики любая оценка превращается в спор о вкусах: один придрался к запятой, другой пропустил грубую ошибку.
- LLM-судья (LLM-as-Judge)
- Способ оценки, где отдельная языковая модель оценивает ответы агента по рубрике. Масштабно и дёшево — пройдётся по тысячам ответов; но иногда пропускает тонкое или придумывает проблему. Судить должна не та модель, что писала ответ.
- Авто-метрика (Automated Metrics)
- Чисто механические измерения без «мнения»: длина ответа, время отклика, стоимость, наличие обязательной ссылки. Объективно и почти бесплатно. Но измеряет только считаемое — «вкус», тон и полноту по сути не оценит.
- Путь, или траектория (trajectory)
- Последовательность шагов, которыми агент шёл к ответу: какие инструменты вызвал, в каком порядке, не лазил ли лишний раз. Критично проверять, когда агент совершает действия в системах: верный ответ, полученный кривым путём, — бомба замедленного действия.
- Оценка на стенде и в бою (offline / online)
- На стенде (offline) — прогон по заранее собранному набору примеров перед любым изменением, безопасно. В бою (online) — наблюдение за живыми заказами и сигналами клиентов в реальной работе. Нужны обе: стенд защищает от выката поломки, бой ловит то, чего на стенде не было.
🛡️ Частые заблуждения
«Мы агента протестировали — он отвечает правильно, всё ок»
«Протестировали» в смысле «прогнали пару раз руками» — это не оценка. Агент отвечает каждый раз по-разному, и пара удачных прогонов ничего не доказывают про тысячи реальных запросов. Нужна оценка по рубрике, на наборе примеров и на живом потоке. «Вроде отвечает нормально» — это не цифра, а ощущение.
«LLM-судья оценивает за нас — значит, люди для оценки больше не нужны»
Не путай. LLM-судья даёт масштаб и дешевизну, но у него есть слепые зоны: он пропускает тонкое и иногда придумывает проблемы. Люди нужны, чтобы выборочно перепроверять спорное и калибровать самого судью — иначе ты слепо доверяешь дегустатору, которого никто не проверял. Судья экономит людей, но не заменяет их полностью.
«Если финальный ответ верный — значит, агент сработал хорошо»
Не всегда. Верный ответ можно получить кривым путём: агент залез не в ту систему, посчитал наугад и случайно угадал. Блюдо вышло съедобным, но повар нарушил рецепт — и завтра отравит стол. Когда агент совершает действия, проверять надо не только ответ, но и путь, которым он к нему шёл.
🧠 AI-чутьё (AI Judgment)
Без оценки летишь вслепую; «вроде лучше» — не ответ, ответ — «на сколько процентов»
Главная рамка темы: без оценки ты летишь вслепую и узнаёшь о поломке агента не от своих приборов, а от рассерженного клиента. Агент не ломается с грохотом, как сломанная касса, — он деградирует тихо: начинает чуть хуже отвечать, чуть чаще ошибаться, и без честной оценки это незаметно неделями. Оценка — это приборная панель. Нет панели — летишь по ощущениям, пока не упадёшь.
Отсюда практический фильтр владельца. Когда тебе говорят «новая версия агента лучше» или «обновили — стало точнее», задай один вопрос: «на сколько процентов лучше и на каком наборе вы это померили?» Честный ответ звучит как «точность на нашем наборе из 500 примеров выросла с 82% до 89%». Это сравнение двух вариантов на одинаковых условиях — то, что называют A/B-сравнением. А вот ответ «ну, на глаз поприятнее отвечает» — это сигнал, что оценки нет вообще и решение принимают по вкусовщине. «Вроде получше» — не цифра.
И мостик к следующей теме, чтобы ты не попался в типичную ловушку. Казалось бы, самый простой способ оценить ответ — сверить его буквально, слово в слово, с эталоном (это называют точным совпадением, exact-match). Звучит надёжно. Но на живом языке это разваливается: ответы «Столица Франции — Париж» и «Париж — столица Франции» по смыслу идентичны, а буквально не совпадают ни на грамм — и тупая сверка зачтёт второй как ошибку. Почему точное совпадение так подводит и чем его заменяют — в следующей теме.
🎯 Практика
Одно задание на пять минут — оно превращает книжную «оценку» в твой рабочий чек-лист перед запуском любого AI.
- Возьми AI-задачу со своей работы — реальную или ту, что хотел бы отдать агенту (бот поддержки, помощник для отчётов, агент, который что-то оформляет). Запиши её в одну строку.
- Набросай рубрику — три-пять признаков «что такое хорошо» для этой задачи. Например, для бота поддержки: ответ по сути верный; тон вежливый; есть ссылка на правило; уложился в 5 секунд; не выдумал того, чего нет. Это твой протокол дегустации.
- Напротив каждого признака пометь, кем его дешевле проверять: точными весами (авто-метрика), моделью-судьёй или живым человеком. И отдельно реши: в этой задаче агент совершает действия в системах? Если да — допиши, что проверять надо ещё и путь, не только ответ.
Помнишь «мы потестили, вроде норм» с начала страницы? Теперь у тебя есть готовый ответ на это. Покажи свою рубрику тому, кто продаёт тебе «работает отлично», и спроси, по каким из этих признаков и на каком наборе он мерил. Тишина в ответ — и ты уже знаешь, что покупаешь кота в мешке.