43 000$ за два часа — столько сжёг наш агент техподдержки на API-вызовах к GPT-4, когда решил рекурсивно искать ответы в собственных галлюцинациях. Это случилось пару лет назад, когда все только нащупывали способы затаскивать автономные пайплайны в бой, и мы наивно полагали, что ручного тестирования на паре сотен логов диалогов будет достаточно. Спойлер: ручная проверка стохастических систем не масштабируется в принципе. В промпт прилетает чуть изменённый контекст, модель решает сменить цепочку рассуждений (reasoning path), игнорирует системные инструкции, и всё летит в пропасть. Именно тогда мы на своей шкуре усвоили, что eval ИИ как дисциплина: контур проверки агентов и LLM до того, как они напортачат в проде — это не корпоративная блажь, а базовый инстинкт самосохранения.
Рынок до сих пор обожает играть в русскую рулетку. Собрали агента из готовых кубиков, потыкали в песочнице, выкатили. Наш подход в Morana Labs другой: мы относимся к LLM не как к магии, а как к нестабильному, капризному узлу системы, который сломается при первой возможности. Поэтому мы нарезаем проверку на три жёстких слоя. Сначала unit-eval — проверяем отдельные атомарные шаги (например, способность модели стабильно вытаскивать строго типизированный JSON из сырого пользовательского текста). Затем end-to-end — прогоняем агента целиком по графу действий, тестируя, достигает ли он финального стейта. И онлайн-eval — легковесные асинхронные классификаторы на боевом трафике, которые ловят регрессии и выбросы в реалтайме.
Казалось бы, почему не автоматизировать это в лоб и не натравить сильную модель оценивать слабую? LLM-as-judge — это же индустриальный стандарт. Мы тоже пытались заливать проблемы железом и токенами. Проблема в том, что судья сам галлюцинирует ничуть не хуже подсудимого. Он страдает от position bias (всегда предпочитает первый вариант ответа из списка) и verbosity bias (считает длинный текст более умным и релевантным). Чтобы судья работал, его нужно загонять в рамки параноидально чётких рубрик, где каждый балл расписан как статья уголовного кодекса, а сам промпт судьи должен тестироваться на отдельных мета-эвалах.
Реальный переход от игрушек к production-ML начинается с создания golden set — набора из нескольких сотен вручную размеченных эталонных примеров. В нём должны быть собраны краевые случаи (edge cases), инъекции и самый проблемный исторический трафик. Каждый коммит, меняющий системный промпт, температуру или код инструмента, обязан проходить через этот сет.
def test_agent_e2e(ci_commit, golden_set):
results = run_eval_pipeline(
agent_version=ci_commit,
dataset=golden_set,
judge_model="gpt-4-turbo",
rubric=STRICT_EVAL_RUBRIC
)
# Хардкод лимитов. Компромиссам в проде не место.
assert results["success_rate"] >= 0.95, f"Degradation detected: {results['success_rate']}"
assert results["safety_violations"] == 0, "Agent leaked system instructions"
assert results["avg_cost_per_task"] < 0.05, "Cost threshold exceeded, possible recursive loop"
В системах с инструментами вызова внешнего API (tools) классические NLP-метрики типа BLEU или ROUGE не имеют никакого смысла. Всем плевать, насколько стилистически гладко агент сгенерировал отказ, если перед этим он удалил базу данных. Нас волнуют только суровые эксплуатационные метрики:
- Success rate: процент задач, где агент совершил правильную последовательность API-вызовов и закрыл тикет, а не просто вежливо попрощался.
- Безопасность (Safety): устойчивость к prompt injection, отсутствие утечек внутреннего контекста и контроль над тем, чтобы модель не галлюцинировала в критичных сущностях вроде ценников или идентификаторов.
- Стоимость на задачу (Cost per task): безжалостный трекинг расхода токенов. Агент в цикле размышлений может выжечь бюджет проекта за ночь, если у него нет принудительного ограничения на глубину графа.
Никаких иллюзий: continuous eval — это дорого. Это постоянный налог на инфраструктуру, на разметку эталонных датасетов живыми инженерами и на вызовы LLM-судей. Но мы платим этот налог ради одной цели — чтобы пороги алертинга отработали чётко, и если модель начнёт деградировать после скрытого обновления весов на стороне провайдера (что происходит регулярно), пайплайн просто заблокировал релиз. В тот день, когда мы отдали 43 тысячи долларов за бесконечный цикл рассуждений агента, мы купили этот опыт по рыночной цене. Вы можете забрать его бесплатно.