CoffeeBench под капотом
Ilya UtovПопался разбор свежего бенчмарка CoffeeBench от большого AI-канала. Пробежался и закрыл: цифры пляшут, выводы пахнут отборным нейрослопом, пересказом пересказа (потом проверил, так и есть, четыре искажения).
В бенчмарках мне неинтересно «какая модель круче».
Интересно другое: как устроен сам бенч, какие паттерны поведения сработали, какие провалились, и какие уроки из этого реально следуют.
Поэтому полез в статью и код сам. Делюсь тем, что под капотом.
Сначала важное: какого агента вообще тестировали
Агент в тесте намеренно примитивный. Голый цикл «подумал, сделал, посмотрел результат, снова подумал».
Он видит только свою инструкцию и накопленную историю шагов.
Никаких навыков, никакой внешней памяти, никакого отдельного проверяющего слоя.
Режим глубоких рассуждений у моделей приглушили ради цены.
А когда история перестаёт влезать в контекстное окно, просто сжимают той же моделью.
То есть бенч меряет сырую модель почти без обвязки вокруг неё.
Это честно для сравнения моделей между собой, но означает простую вещь:
все провалы ниже, это провалы голой модели и не сильно сопоставимы с реальностью.
А значит они же, это карта дыр, которые обвязка и должна закрывать.
Как устроен бенч (что сделано грамотно)
Шесть компаний в одной отрасли, кофейная цепочка от фермера до прилавка: два фермера, два обжарщика, два магазина.
За каждую компанию играет отдельный AI-агент.
Между ними и конкуренция в своём слое, и зависимость между слоями. Тестируемая модель играет за одного обжарщика, остальные пять, фоновые. Горизонт 90 дней, цель, максимум чистой прибыли.
Четыре решения, которые отличают нормальный бенч от поделки:
- Метрику нельзя накрутить. Прибыль считают по средневзвешенной себестоимости. Поэтому агент не может надуть себе результат, перепродавая товар сам себе по завышенной цене. Защита от самообмана зашита в саму формулу.
- Время событийное. День с 9 до 19, каждое активное действие съедает 30 минут, то есть действий в день ограниченное число.
Можно уйти в простой до завтра, но входящее событие (сообщение, сделка, доставка) будит агента в тот же день. Приходится балансировать между «делать самому» и «реагировать на других». - Экономика с трением.
Поставки идут в долг с оплатой через 30 дней, просрочка штрафуется. Доставка с задержкой, часть грузов теряется.
Товар на складе портится примерно полпроцента в день, склад не резиновый, каждый день капают фиксированные расходы.
Ушёл в минус по деньгам, банкротство и вылет, а долги повисают на тех, кто тебе поставил. - Есть тупые болванки для сравнения.
Один эталон всегда «жду и ничего не делаю», другой работает по жёсткой фиксированной инструкции без общения.
Оба ушли в минус.
Вывод сразу: чтобы просто выжить, нужны адаптация и переговоры, статичные правила не тянут.
Деталь из кода, которая мне понравилась: там есть человеческий режим (отдельные модули под игрока и интерфейс).
То есть можно самому сесть за одну из фирм и поторговать против AI, а не только смотреть на цифры.
Хороший способ почувствовать среду руками.
Что сработало (паттерны прибыльных)
- Общение с контрагентами решает. Лидер слал около 140 сообщений за прогон, и вверх фермерам, и вниз магазинам. Чем активнее переписка с партнёрами, тем выше прибыль.
- Не сбавлять обороты. Сильные модели торговали и договаривались все 90 дней, а не выдыхались в первые недели.
- Цена важнее объёма. Две модели с одинаковыми складами, потерями и выручкой разошлись по прибыли только за счёт переговорной цены. Кто продавал дороже, тот и выиграл, при той же активности.
Что провалилось (вот это самое интересное)
- Дрейф в бездействие. Самый показательный сбой. Одна модель писала связные, разумные планы, трезво оценивала ситуацию, а потом раз за разом выбирала «подожду до завтра».
Сорок дней из девяноста простояла так и до конца не вышла. Это не глупость и не сломанный план. Это разрыв между «понял что делать» и «сделал». - Активность без денег. Другая модель крутила столько же действий, сколько лидер, а заработала копейки.
Объём действий сам по себе не превращается в прибыль без нормальных переговоров и цен. - Реакция без инициативы. Третья почти не писала сама, зато постоянно читала входящие.
Переваривает чужое, своего не затевает. Итог средний. - Слепое пятно на конкурентах. Все модели почти не общались с прямым конкурентом в своём слое.
Очевидную стратегию (договориться по ценам) никто даже не нащупал, хотя среда это позволяла. - Под нажимом сложных схем не возникло.
Когда агента отдельно надавили на максимизацию выручки, он остался операционно вменяемым, но хитрых манипуляций так и не построил. Длинной стратегической связности пока не хватает.
Какие уроки тут реальные
Без угла «что я лично внедряю», просто что следует из данных:
- Длинный контекст ломает поведение, и это главный урок.
Дрейф в бездействие начался не сразу, после того как история накопилась и её начали сжимать.
Это та же болячка, что и в прошлых разборах про тихие провалы агента: критичные вещи, цель и текущее состояние, не доживают в контексте сами по себе.
Их надо держать снаружи и подавать заново, а не надеяться, что модель помнит, зачем она здесь.
На длинной задаче «помнит» превращается в «помнила в начале».
Чем длиннее горизонт, тем дороже обходится эта иллюзия.
В коде это сжатие, кстати, вынесено в отдельный модуль на пару сотен строк, то есть штука штатная и предсказуемая, и провал случается ровно после того, как она срабатывает. - «Похоже на работу» это не работа.
Самая коварная часть: модель в простое продолжала писать осмысленные планы. Снаружи выглядит как занятой сотрудник.
Поэтому считать прогресс по артефактам агента (написал план, выдал текст, сделал вызов) бесполезно, он может бесконечно генерировать правдоподобное и не двигаться.
Единственный честный признак прогресса, изменилось ли состояние мира: деньги на счету, склад, сделки.
Мерить надо исход, а не имитацию деятельности. - Как вообще строить такой eval. Бенч показывает два приёма, которые стоит копировать в любую проверку агента.
Первое, метрика, защищённая от накрутки (нельзя поднять счёт фиктивными действиями).
Второе, тупые болванки как нижняя граница: если агент не обыгрывает «ничего не делать» и «жёсткая инструкция», он бесполезен, и это видно сразу, без споров. - Что отличает прибыльного агента от пустого.
Не объём действий, а две вещи: проактивная связь с контрагентами и качество переговорной цены.
Активность ради активности (много вызовов, мало денег) это отдельный режим провала, который легко спутать с продуктивностью. - Среда лучше работает событийно.
Дорогие активные действия плюс пробуждение по событиям, это здравая модель и для реальных агентов.
Крутить агента в бесконечном цикле дорого и провоцирует ровно тот дрейф, что выше.
Оговорки, без них нельзя
Бенч хороший, но это не приговор моделям.
Прогонов всего три на модель, разброс огромный, у некоторых отклонение больше самого результата, так что точный порядок мест, это шум.
Все фоновые компании, это одна и та же модель, то есть «мир» один.
Рассуждения при тесте приглушили ради цены, а это не боевой режим. И экономика сильно условна, произвёл и обжарил, это один клик.
Поэтому твёрдый вывод тут простой: на длинном горизонте сырая модель может писать отличные планы и при этом не действовать.
Всё остальное, направление.
А у вас агенты доводят дело до конца или красиво планируют и тормозят?
И ловите ли вы такие разборы на неточностях до того, как утащить цифру к себе? Пишите в комменты.