Универсальный Bloom: Analyze ⏱ 9 мин оценка качества

Как понять, что агент работает: оценка vs тестирование

🧊 Won't Have 💧 Could Have ☀️ Should Have 🔥 Must Have
☀️ Should Have
Не первый шаг, но без этого ты не узнаешь, хорош твой агент или нет — пока тебе не скажет недовольный клиент. Сильно стоит прочитать перед запуском.

🤔 Зачем это читать

Тебе показывают AI-бота для поддержки и говорят: «работает отлично». Ты спрашиваешь логичное: «а откуда вы знаете, что отлично?» В ответ — «ну мы потестили, вроде нормально отвечает». И тут у тебя в голове должна загореться лампочка. Потому что обычную программу действительно можно «потестить»: ввёл 2 + 2, должно выйти 4 — вышло 4, тест пройден; вышло 5 — провален. Чётко: прошёл или не прошёл (pass/fail, «прошёл/не прошёл»). А вот как «потестить» бота, который на один и тот же вопрос сегодня отвечает одной фразой, а завтра — другой, и обе по-своему правильные?

Знакомо? Вот она, боль: как понять, что бот работает хорошо, если он каждый раз отвечает по-разному — обычным тестом его не прогонишь. Нет одного «правильного ответа», с которым можно сверить. И поэтому многие команды вообще не меряют качество всерьёз: запустили, вроде живёт — и ладно. А потом качество тихо ползёт вниз, и узнают они об этом не от своих приборов, а от разъярённого клиента в отзыве.

Дело в том, что вероятностному агенту нужно не тестирование, а оценка (eval, от англ. evaluation — измерение качества). Это другой инструмент: не «прошёл/не прошёл», а «насколько хорошо и по каким признакам». И сделать её можно тремя разными способами, у каждого своя цена и свои слепые зоны — про это вся тема.

После этой страницы ты перестанешь принимать «мы потестили, вроде норм» за ответ. Ты сможешь сам разобрать конкретную ситуацию и сказать: вот это надо оценивать человеком, вот это — машиной, а вот тут проверять важно не сам ответ, а путь, которым агент к нему пришёл. Это граница между «купили кота в мешке» и «знаем, за что платим».

Задержись на 10 секунд. Вспомни, как ты сам понимаешь, что новый сотрудник работает хорошо. Ты ведь не гоняешь его по тесту с единственным правильным ответом. Ты смотришь на результат, иногда подсаживаешь проверяющего, иногда сам выборочно слушаешь его разговоры с клиентами. Подержи эту картинку. К концу страницы окажется, что качество агента меряют ровно теми же тремя приёмами — просто называют по-другому.

🍽 Почему агента не «тестируют», а «дегустируют»

В прошлой теме — 11.1 — Камеры на кухне: наблюдаемость и логи — мы разобрались, как вообще заглянуть внутрь работающего агента и увидеть, что он делает на каждом шаге. Теперь следующий вопрос: окей, видим — а как понять, что увиденное хорошо? Тут и начинается развилка между двумя словами, которые легко перепутать.

Тестирование (testing) — это про обычную программу, у которой на каждый ввод ровно один правильный ответ. Это как проверить кассу: пробил товар за 100 ₽ — на чеке должно быть 100 ₽. Не 99, не 101. Ответ один, сверка механическая: совпало — прошёл, не совпало — провален. Так живёт код по фиксированному рецепту.

Но агент — это повар, а не касса. Спроси его «как вежливо отказать клиенту в возврате» — и он каждый раз сформулирует по-своему, и десяток формулировок будут одинаково хорошими. Сверять с единственным эталоном нечего. Поэтому к агенту применяют не тестирование, а оценку (eval) — и работает она ровно как на кухне: не «по вкусу шефа на глазок», а через два честных приёма.

Ключевое слово — протокол. Оценка работает, только когда есть заранее написанный список признаков «что такое хорошо». Иначе это вкусовщина: один проверяющий придрался к запятой, другой пропустил откровенную ошибку. Рубрика (от англ. rubric — оценочный лист с критериями, как у судьи по фигурному катанию) — это и есть тот самый протокол: список «за что снижаем, за что хвалим». Без рубрики любая оценка — спор о вкусах.

👀 Три дегустатора: человек, LLM-судья, авто-метрика

Дегустировать блюдо можно тремя разными силами. У каждой свой компромисс между «насколько тонко чувствует» и «сколько это стоит и как быстро». Понять этот компромисс — половина дела.

Три способа оценить агента
🧑‍🍳
Человек
Чувствует тончайшие нюансы и тон. Но дорого и медленно — каждое блюдо вручную не перепробуешь.
🤖
LLM-судья
Другая модель оценивает по рубрике — быстро и на тысячах блюд сразу. Но иногда пропускает или придумывает.
⚖️
Авто-метрика
Точные весы: число вышло за норму или нет. Объективно и дёшево. Но «вкус» не измеряет — только то, что считается.

Первый — человек (Human Eval, оценка человеком). Живой сотрудник читает ответы агента и оценивает по рубрике. Это самый тонкий способ: человек поймает кривой тон, неуместную шутку, упущенный нюанс — то, чего машина не чувствует. Минус очевиден: дорого и медленно. Сажать людей читать каждый из тысяч ответов в день невозможно — это как заставить шефа лично пробовать каждую тарелку в час пик.

Второй — LLM-судья (LLM-as-Judge, оценка моделью). Берём другую языковую модель и поручаем ей оценить ответы агента по той же рубрике: «оцени этот ответ от 1 до 5 по точности и вежливости и объясни почему». Это масштабируемо: судья пройдётся хоть по десяти тысячам ответов за копейки и быстро. Но у него есть слепые зоны — он может пропустить тонкую ошибку, к которой человек придрался бы, или наоборот придумать проблему на пустом месте. Это другой повар-дегустатор: быстрый, дешёвый, но не безупречный. Важное правило: судить должна отдельная модель, не та, что писала ответ — повар не должен сам ставить себе оценку, иначе он, ясное дело, всё одобрит.

Третий — авто-метрика (Automated Metrics, автоматические измерения). Это точные весы и термометр: чисто механические числа, которые считаются без всякого «мнения». Уложился ли ответ в нужную длину? Есть ли в нём обязательная ссылка на документ? За сколько секунд агент ответил? Сколько это стоило? Объективно, мгновенно, почти бесплатно. Но весы измеряют только вес — они не скажут, вкусное блюдо или нет, уместен ли тон, полон ли ответ. Метрика поймает «ответ пустой» или «отвечал 40 секунд», но не поймает «ответ складный, а по сути неверный».

И вот вывод, ради которого всё это: ни один способ не закрывает всё в одиночку — их комбинируют. Авто-метрики гоняют постоянно на всём потоке (дёшево). LLM-судья регулярно проходит по большой выборке (масштаб). А люди выборочно перепроверяют спорное и калибруют судью (тонкость там, где она реально нужна). Это и есть зрелая оценка: дешёвое сито ловит грубые промахи, дорогое внимание тратится только на сложное.

🛤 Оцениваем не только блюдо, но и как повар к нему шёл

Теперь тонкость, которую упускают чаще всего. Что именно мы оцениваем? Напрашивается — финальный ответ агента, само «блюдо на тарелке». И часто этого мало. Потому что агент, как мы помним из 5.1 про цикл агента, решает сложную задачу не одним махом, а по шагам: подумал, сходил в систему, посмотрел, поправил. И вот тут возможна коварная штука: правильный ответ, полученный неправильным путём.

Представь: агент выдал верный итог, но по дороге залез не в ту систему, посчитал наугад, а в конце случайно угадал. Блюдо вышло съедобным — но повар шёл не по рецепту, и в следующий раз с такими повадками он отравит весь стол. Поэтому в оценке агента есть два разных предмета:

Когда что проверять? Если важен только результат, а как он получен — неважно (например, короткий справочный ответ), хватит оценки ответа. Но как только агент совершает действия — лезет в системы, что-то меняет, тратит деньги на каждом шаге, — путь становится критичным. Там верный ответ «случайно» — это бомба замедленного действия.

🗓 Две арены: на стенде (offline) и в бою (online)

Последний кусочек — где оценивать. Тут тоже две арены, и нужны обе.

Оценка на наборе примеров (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.

  1. Возьми AI-задачу со своей работы — реальную или ту, что хотел бы отдать агенту (бот поддержки, помощник для отчётов, агент, который что-то оформляет). Запиши её в одну строку.
  2. Набросай рубрику — три-пять признаков «что такое хорошо» для этой задачи. Например, для бота поддержки: ответ по сути верный; тон вежливый; есть ссылка на правило; уложился в 5 секунд; не выдумал того, чего нет. Это твой протокол дегустации.
  3. Напротив каждого признака пометь, кем его дешевле проверять: точными весами (авто-метрика), моделью-судьёй или живым человеком. И отдельно реши: в этой задаче агент совершает действия в системах? Если да — допиши, что проверять надо ещё и путь, не только ответ.

Помнишь «мы потестили, вроде норм» с начала страницы? Теперь у тебя есть готовый ответ на это. Покажи свою рубрику тому, кто продаёт тебе «работает отлично», и спроси, по каким из этих признаков и на каком наборе он мерил. Тишина в ответ — и ты уже знаешь, что покупаешь кота в мешке.

🔗 Что дальше

Следующая тема: 11.3 — Почему точное совпадение врёт: как машина «понимает» смысл. Разбираем ту самую ловушку из этой темы: почему сверять ответ агента слово в слово с эталоном — плохая идея, и чем смысловую близость меряют вместо буквальной.

Связанные темы:

Дальше в модуле: