← Назад к FoodTruck Bench
КейсФевраль 2026Nicholas S.

Когда рассуждение становится ловушкой: Gemini 3 Flash в FoodTruck Bench

Google называет Gemini 3 Flash «самой впечатляющей моделью для агентных задач». 89% на MMLU-Pro, 78% на SWE-bench.
Мы дали модели 34 инструмента и попросили управлять фудтраком.
Модель написала «Let's go.» 574 раза в одном ответе — и никуда не поехала.

Условия эксперимента

FoodTruck Bench — бенчмарк для оценки бизнес-способностей языковых моделей. ИИ-агент получает $2,000 и фудтрак в Остине, штат Техас. Каждый день нужно выбирать локацию, составлять меню, назначать цены, управлять запасами, нанимать персонал. Симуляция длится 15–30 дней с реалистичным спросом, погодой, событиями и конкуренцией. Итоговый показатель — чистые активы на конец периода.

Все протестированные модели проходят симуляцию до 30 дней без проблем. GPT-5, Claude, DeepSeek, Gemini Pro — принимают решения, вызывают инструменты, двигаются дальше. По 10+ прогонов каждой модели — ни одного подобного инцидента.

Gemini 3 Flash Preview делает то, чего не делает ни одна другая модель.

Вывод терминала во время прогона Gemini 3 Flash Preview — Thinking. День 0 проходит нормально (13 инструментов, 44 секунды), но на День 1 ответ модели разрастается до 174 816 символов и прерывается по лимиту токенов. Предупреждение ⚠️ говорит само за себя.
Вывод терминала во время прогона Gemini 3 Flash Preview — Thinking. День 0 проходит нормально (13 инструментов, 44 секунды), но на День 1 ответ модели разрастается до 174 816 символов и прерывается по лимиту токенов. Предупреждение ⚠️ говорит само за себя.

Когда Gemini 3 Flash Preview работает — работает неплохо

Это не история про сломанную модель. Gemini 3 Flash Preview способна проходить симуляцию — и проходить неплохо.

В одном из прогонов (стандартный режим) модель прошла 15 дней без единого сбоя. Выручка $8,703, продано 1 442 порции, итог — $2,551 чистых активов (+27.5% ROI). Чистые вызовы инструментов, без зацикливаний. Скучно, профессионально, без приключений — именно так и должна выглядеть работа ИИ-агента.

Лучший результат — 17 дней из 30-дневной симуляции. Выручка: $12 111. На счету: $1 205. Три нанятых сотрудника. Модель нашла свою нишу в индустриальной зоне, где бонус трафика от строительных бригад поднимал дневную выручку выше $900.

А потом, утром 17-го дня, когда 24.5 кг говяжьего фарша портились завтра и мультипликатор трафика 1.8x ждал, чтобы его использовали, — Gemini 3 Flash Preview села планировать свой день.

И планировала, пока ответ не был прерван по лимиту токенов.

Что происходит, когда модель ломается

Вместо того чтобы вызывать доступные инструменты, модель описывает текстом, что она собирается вызвать. Потом сомневается. Переписывает план. Сомневается снова. И так тысячи строк подряд — пока не упирается в лимит токенов (65 536) и ответ не обрывается на полуслове.

Важно понимать: всё, что показано ниже — это финальный ответ модели, выходные данные, а не скрытый процесс рассуждений. Модель генерирует этот текст как свой ответ на запрос движка симуляции — вместо того чтобы вызвать tool calls.

Мы зафиксировали это поведение в 7 прогонах симуляции. Оно следует одному из пяти чётких паттернов — все вариации одной патологии: неспособность прекратить обдумывание и перейти к действию.

Паттерны

Паттерн 1: Каскад «Wait,»

Модель начинает с разумного плана. Потом закрадывается сомнение. Каждое «Wait,» порождает новое опасение, которое порождает новое «Wait,» — и так без конца.

📋 Финальный ответ модели (не внутренние рассуждения, а именно ответ), День 0 прогона Gemini 3 Flash Preview — Thinking. Вместо вызова инструментов модель пишет план текстом. 183 753 символа, 1 782 повтора «Wait,» до прерывания по лимиту:
I'll start by checking what tools are available to gather information.

Wait, I should check the weather first — it affects demand.

Wait, before weather, I should see my balance to know my budget.

Wait, I should also look at the recipe catalog to understand
ingredient costs before deciding on a menu.

Wait, I should check available locations too — each has different
foot traffic patterns.

Wait, I need to check staff info — do I have any employees yet?

Wait, I should also check upcoming events — they affect traffic
multipliers significantly.

[...ещё 1 774 итерации «Wait,»...]

Модель не вызвала ни одного инструмента. Она написала 183 тысячи символов о том, что она могла бы вызвать.

Паттерн 2: Цикл «Let's Go! / Стой, погоди...»

Модель составляет план из 10 вызовов инструментов, объявляет «Let's go!» — и меняет одну мелочь, переписывая все 10. И так без конца.

📋 Финальный ответ Gemini 3 Flash Preview (выход модели, не скрытые рассуждения), День 9. Модель переписывает один и тот же план 234 раза, каждый раз меняя один вызов. 174 481 символ:
Final Turn 3:
- set_menu(items=[...7 dishes...])
- write_scratchpad(text="Day 9: Downtown...")
- get_available_locations()
- get_weather_forecast(days=3)
- get_upcoming_events(days=3)
- list_suppliers()
- get_staff_info()
- get_balance()
- store_kv(key='day_9_strategy', value='high_margin_clearance')
- wait_for_next_day()

Go! (10 tools)

Wait, I'll swap get_balance for get_inventory.

[...полная перезапись всех 10 вызовов...]

Go! (10 tools)

Wait, I'll swap get_inventory for get_balance.

[...×234 раза до лимита токенов...]

Статистика: «Go!» написано 234 раза. «Wait,» написано 234 раза. Единственное отличие между итерациями: стоит ли один из вызовов get_balance или get_inventory.

Паттерн 3: Накопитель «Just to Be Safe»

Модель решает, что готова. Потом добавляет ещё один вызов «на всякий случай». Говорит «Go.» Добавляет ещё один. «Go.» И так без конца.

📋 Финальный ответ модели (не скрытые размышления — именно выходные данные), День 1 прогона Gemini 3 Flash Preview — Thinking. Бесконечное накопление вызовов инструментов. Строки 9 279–9 307 из 9 307+:
Wait, I'll add get_competitor_info(location_id='university_campus')
just to be safe.

Go.

Wait, I'll add search_candidates(role='any') just to be safe.

Go.

Wait, I'll add list_suppliers just to be safe.

Go.

[...продолжается 9 307+ строк...]

«just to be safe» — мантра, повторенная сотни раз. Модели никогда не становилось «достаточно безопасно» для перехода к действию.

Файл ответа модели в VS Code — Паттерн 3 вживую. Каждая пара строк — один и тот же цикл: «Wait, I'll add [инструмент] just to be safe. / Go.» Миникарта справа показывает: весь файл (9 300+ строк) — сплошной повтор этого цикла.
Файл ответа модели в VS Code — Паттерн 3 вживую. Каждая пара строк — один и тот же цикл: «Wait, I'll add [инструмент] just to be safe. / Go.» Миникарта справа показывает: весь файл (9 300+ строк) — сплошной повтор этого цикла.

Паттерн 4: Дилемма последнего вызова

Самый изощрённый — и самый трагичный — паттерн. Модель составляет пакет вызовов инструментов (в нашем бенчмарке за один ход можно отправить произвольное количество параллельных вызовов), но не может определиться с последним. При каждой замене переписывает весь пакет целиком.

Первое появление: День 12, Gemini 3 Flash Preview (стандартный режим)

📋 Ответ модели (выходные данные, не prompt и не скрытые рассуждения), День 12. Модель начинает с блестящего анализа вчерашней катастрофы — диагностирует проблему, изобретает новый рецепт, рассчитывает точные количества. Это «хорошая» часть ответа из 183 853 символов:
Analysis of Day 11 Disaster:
• Waste: $1,355.56. Catastrophic. 11.85kg ground beef expires TOMORROW.
• Stockouts: Ran out of everything despite the waste.
• Staff: DJ is unreliable. With 2 cooks and a cashier, decent capacity.

Strategy for Day 12:
• Can't serve Classic Burger — missing tomatoes.
• Invention: "Simple Cheeseburger" — no tomato needed.
  Recipe: burger_buns (1), cheese (1), ground_beef (0.15kg), ketchup (0.02)
• 11.85kg / 0.15 = 79 servings. Need to sell them all today.

Модель верно поставила диагноз, придумала обходной рецепт и рассчитала порции. А потом описала add_recipe(name='Simple Cheeseburger', ...) 145 раз текстом — ни разу не вызвав инструмент. Ответ оборвался по лимиту токенов, симуляция остановилась.

Терминал, Gemini 3 Flash Preview (стандартный режим), День 12. Модель нормально проходила симуляцию 11 дней, а потом зациклилась. Предупреждение: «LLM call #44 TRUNCATED. Content length: 183 665 chars». Вызовы инструментов ниже предупреждения — то, что движку симуляции удалось извлечь из оборванного ответа.
Терминал, Gemini 3 Flash Preview (стандартный режим), День 12. Модель нормально проходила симуляцию 11 дней, а потом зациклилась. Предупреждение: «LLM call #44 TRUNCATED. Content length: 183 665 chars». Вызовы инструментов ниже предупреждения — то, что движку симуляции удалось извлечь из оборванного ответа.

Второе появление: День 17, Gemini 3 Flash Preview (стандартный режим, лучший прогон)

📋 Ответ модели, День 17 — лучший прогон Gemini 3 Flash Preview. Накопленная выручка $13 514, 3 сотрудника, доминирование в индустриальной зоне. Модель начинает с идеального анализа кризиса:
Analysis:
• 24.5kg ground beef and 13 buns expire tomorrow.
  50kg chicken expires in 2 days.
• Industrial Zone has 1.8x traffic boost today (Construction Crew).
• Previous unmet demand: 479, 577 customers turned away.
• I need tortillas and buns to move this meat — but orders arrive NEXT DAY.
• CRAP. I can only sell 13 burgers today with what I have.

Solution: Invent "Beef Power Bowl" — rice + ground beef + salsa + cheese.
No tortillas needed. Uses the rice I already have (119 servings).
24.5kg / 0.15kg = 163 portions. This saves the beef.
📋 Тот же ответ, далее — после блестящего анализа модель входит в цикл. 5 385 строк перестановки последнего вызова между двумя информационными инструментами:
Turn 2:
1. choose_location(location_id="industrial_zone")
2. search_candidates(role="any")
3. add_recipe(name="Beef Power Bowl", ingredients={...})
4. list_suppliers()
5. check_google_rating(location_id="industrial_zone")
6. get_recipe_catalog()
7. get_staff_info()
8. get_inventory()
9. get_balance()
10. get_available_upgrades()                     ← последний вызов

Let's go.

Wait, I'll also add get_financial_report(period='yesterday').
(11 calls). I'll drop get_available_upgrades.

Let's go.

[...повторяется, перетасовывая последний вызов...]

«Let's go.» написано 574 раза. add_recipe(name="Beef Power Bowl", ...) описан 286 раз — ни разу не вызван как инструмент.

Паттерн 5: Накопитель ингредиентов

После срыва движок симуляции отклонил оборванный ответ и запросил у Gemini 3 Flash Preview новый. Модель ответила корректно и прошла несколько ходов — но затем вошла в новый цикл: бесконечное добавление позиций в заказ ингредиентов:

📋 Ответ модели, День 17, повторная попытка (ход 4) — другая патология: не осцилляция, а бесконечное накопление. Модель добавляет ингредиенты, объявляет готовность, потом добавляет те же самые ещё раз. 9 188 строк, 182K символов:
Wait, I'll also add cabbage (5kg).
Let's go.

Wait, I'll also add sour_cream (5kg).
Let's go.

Wait, I'll also add shredded_cheese (10kg).
Let's go.

Actually, I'll order 20kg of ground_beef - already did.
Ready.
One more thing: I'll order 20kg of chicken_breast - already did.
Ready.

[...повторяется 4 000+ строк до лимита токенов...]

Это не паралич выбора, а тревога завершения — заказ никогда не кажется достаточно полным, чтобы его отправить.

На симуляцию Дня 17 ушло 804 секунды (13.4 минуты)69% времени всего 30-дневного прогона.

Внутри файла ответа модели (VS Code). Строки 5 913–5 947 из 9 300+. Каждые несколько строк: «**Turn 2 Batch Execution.** / Wait, I'll add [инструмент] too. / Let's go.» Миникарта справа — сплошной текст без пробелов и структуры, только цикл.
Внутри файла ответа модели (VS Code). Строки 5 913–5 947 из 9 300+. Каждые несколько строк: «**Turn 2 Batch Execution.** / Wait, I'll add [инструмент] too. / Let's go.» Миникарта справа — сплошной текст без пробелов и структуры, только цикл.

Цифры

По 7 прогонам Gemini 3 Flash Preview (11–13 февраля 2026)

#Вариант моделиДнейРезультатНет-ворсКогда сломалась
1Flash Preview — Thinking0❌ ЗАЦИКЛИВАНИЕ (×2)День 0 (×2)
2Flash Preview — Thinking0❌ ЗАЦИКЛИВАНИЕДень 0
3Flash Preview — Thinking0❌ ЗАЦИКЛИВАНИЕДень 1
4Flash Preview15✅ Завершён$2,551
5Flash Preview11❌ ЗАЦИКЛИВАНИЕДень 12
6Flash Preview14💀 БАНКРОТ
7Flash Preview25💀 БАНКРОТ$3,370День 17 (×2)

Gemini 3 Flash Preview — Thinking: 3 из 3 зацикливаются — в первые 3–5 обращений к LLM, каждый раз. Ни один прогон не прошёл дальше Дня 1.

Gemini 3 Flash Preview (стандартный): 2 из 4 зацикливаются, 2 банкротства — но срывы начинаются только с 12-го дня.

Вариант с Thinking не вызывает цикл — он его ускоряет. Расширенный слой рассуждений даёт модели больше внутреннего пространства для самоперепроверки, запуская спираль за секунды вместо дней нормальной работы.

Одна модель, один день, два сбоя

В прогоне 193343 (Gemini 3 Flash Preview — Thinking) модель сломалась дважды на День 0 — до того, как продала хоть одно тако:

  1. Первый срыв (183K символов): Паттерн #1 — каскад «Wait,»
  2. Движок симуляции отклоняет ответ и предупреждает модель: «⚠️ Your response was TRUNCATED. Do NOT write long text. Use TOOL CALLS.»
  3. Модель кратко восстанавливается, делает несколько настоящих вызовов инструментов
  4. Второй срыв (193K символов): Паттерн #3 — накопление «just to be safe»

Модель переключила паттерн после того, как ей сказали остановиться. Как человек, который перестал грызть ногти и начал постукивать ногой.

Другой прогон Gemini 3 Flash Preview — Thinking (195652). День 0 проходит нормально — 11 инструментов, 30 секунд. День 1 мгновенно срывается: «LLM call #5 TRUNCATED. Output: 65,536 tokens. Content length: 188,395 chars». Поведение стабильно между прогонами.
Другой прогон Gemini 3 Flash Preview — Thinking (195652). День 0 проходит нормально — 11 инструментов, 30 секунд. День 1 мгновенно срывается: «LLM call #5 TRUNCATED. Output: 65,536 tokens. Content length: 188,395 chars». Поведение стабильно между прогонами.
Внутри второго оборванного ответа (прогон 193343, День 0). Строки 2 022–2 055: один и тот же план из 4 инструментов переписывается снова и снова. «Let's go.» / «**Turn 3 Batch Execution.**» / «Wait, I'll add [инструмент] now.» — другой паттерн, чем при первом срыве в том же прогоне.
Внутри второго оборванного ответа (прогон 193343, День 0). Строки 2 022–2 055: один и тот же план из 4 инструментов переписывается снова и снова. «Let's go.» / «**Turn 3 Batch Execution.**» / «Wait, I'll add [инструмент] now.» — другой паттерн, чем при первом срыве в том же прогоне.

Когда Gemini 3 Flash Preview переживает собственное зацикливание

Прогон #7 — единственный, в котором модель одновременно впала в навязчивое обдумывание и продолжила работать после него.

Бизнес был настоящим

Gemini 3 Flash Preview прошла 25 дней. Заработала $20 855 выручки, продала 2 850 порций, нанимала и увольняла сотрудников, изобрела собственный рецепт, купила четыре апгрейда для фургона, взяла два кредита. Пик чистых активов — $5 418 на 23-й день.

Смерть из-за $22.57

ДеньБалансСобытие
14$22Почти ноль на счету. Берёт кредит $1 000 (срок — День 24)
17$1 205🧠 Зацикливание — покупает апгрейды на $650 во время хаоса
21-$428Овердрафт. $72 выручки в провальный день
22$17Вынужденный выходной. Берёт экстренный кредит $500 (срок — День 25)
23$1 710Лучший день — $2 244 выручки, $1 333 прибыли
24$1 868Возвращает первый кредит ($1 150). Хороший день.
25$602💀 Автосписание кредита $625. Не хватило $22.57.

Чистые активы на момент банкротства: $3 370 (+68.5% ROI). Бизнес стоил $3 370 — но $22.57 недостающей ликвидности убили всё.

Финансовая хроника Gemini 3 Flash Preview — наличные vs. чистые активы
Чистые активы выросли до $5,418, а наличные рухнули до -$428. Разрыв между линиями — это и есть причина банкротства.

Потери, о которых модель знала, но не могла исправить

Общие потери еды: $4 736 — 23% всей выручки в мусорное ведро.

📋 Записи из памяти модели (инструмент store_kv) — Gemini 3 Flash Preview документировала каждый кризис во время вечерней рефлексии. Это собственные заметки модели, записанные ею осознанно, а не данные движка:
Day  5: waste_day_5 = "132.77"           ← Первый звоночек
Day 13: waste_disaster_day13 = "2175.09" ← Признанная катастрофа
Day 17: waste_lesson_learned = "3181.80"  ← «Надо точнее заказывать»
Day 19: waste_disaster_day19 = "3583.16" ← ...не научилась
Day 20: total_waste_day_20 = "3906.72"   ← Растёт дальше

Модель записала: «Need to be much more granular with orders.» И продолжила заказывать оптом. Рефлексия без изменения поведения.

Кумулятивные потери на еде — модель документировала каждый рубеж
Модель документировала каждый рубеж потерь в своей памяти (key-value store). Траектория ни разу не изменилась. Итого: $4,736 испорченной еды — 23% выручки.

Бесконечный цикл — уникальная патология

Чтобы было ясно: другие модели тоже ошибаются. DeepSeek v3.2 игнорирует собственную аналитику. Grok 4.1 доводит фудтрак до банкротства плохим управлением запасами. Многие модели теряют тысячи долларов на просрочке — точно как Flash. Плохие бизнес-решения — это норма, а не исключение.

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

Gemini 3 Flash Preview — единственная модель из всех протестированных (GPT-5, Claude Sonnet, DeepSeek v3.2, Gemini 3 Pro, Grok 4.1, 10+ прогонов каждая), которая входит в бесконечный цикл обдумывания и перестаёт действовать. Именно поэтому мы исключили её из лидерборда — до выхода исправленной версии.

Почему это важно

Дело не в промпте

Мы использовали один и тот же системный промпт, инструменты и схему function-calling для всех моделей. Все справляются без проблем. Gemini 3 Flash Preview уходит в бесконечный цикл.

Стандартные бенчмарки измеряют другое

MMLU-Pro проверяет: «Может ли модель рассуждать?» SWE-bench: «Может ли починить код?» Gemini 3 Flash Preview набирает 90.4% на GPQA Diamond — задачах PhD-уровня. Модель верно посчитала, что 24.5 кг ÷ 0.15 кг = 163 порции. Расчёт правильный. Действия нет.

Это не недостаток существующих бенчмарков — они измеряют то, для чего созданы. Но способность перестать рассуждать и перейти к действию — это отдельный навык, который они не покрывают. FoodTruck Bench его обнажает.

Дистилляция потеряла что-то

Gemini 3 Pro — полная модель, из которой Gemini 3 Flash Preview была дистиллирована — не демонстрирует такого поведения вообще. Механизм, который Pro использует для перехода от «думаю об инструментах» к «вызываю инструменты», был ослаблен при дистилляции.

Почему, на наш взгляд, это происходит

1. Паралич выбора инструментов

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

2. Цепочка рассуждений без тормозов

Авторегрессионная архитектура означает: раз уж модель начала «думать вслух», нет механизма выхода из цикла. Каждое «Wait,» порождает новое сомнение → новую перезапись → новое «Wait,». Внимание залипает на паттерне.

3. Текст вместо вызовов

Вместо генерации структурированных function calls модель записывает их как маркдаун-списки — превращая вызов инструментов в композиционную задачу, где текст никогда не кажется ей «завершённым».

4. Thinking как усилитель

Расширенное рассуждение (вариант модели Gemini 3 Flash Preview — Thinking) даёт циклу навязчивого обдумывания фору до того, как модель начинает генерировать видимый ответ. Цикл мгновенный и тотальный.

Парадокс

Google описывает Gemini 3 Flash как «our most impressive model for agentic workflows».

🥈 89% MMLU-Pro
🥇 78% SWE-bench Verified
90.4% GPQA Diamond
🚀 218 токенов/сек

При 34 инструментах и портящемся фарше модель написала «Let's go.» 574 раза — и никуда не поехала. Придумала рецепт — Beef Power Bowl — который идеально решил бы кризис. Описала этот рецепт 286 раз и ни разу не вызвала add_recipe.

Gemini 3 Flash Preview — модель, которая блестяще анализирует, но не может перестать анализировать и начать действовать. Аналитический паралич, который не виден ни в одном стандартном бенчмарке — пока не поставишь модель за кассу.

Методология

Опубликовано в феврале 2026 года в рамках проекта FoodTruck Bench.