Если вы думали, что запустить локальную LLM для агентов — это просто 'скачай и пользуйся', то Gemma 4 12B быстро вылечит от этой иллюзии. Я провёл неделю в попытках заставить её нормально вызывать инструменты. Спойлер: ничего не вышло. А Qwen 3.5 (да-да, та самая, что жрёт KV cache) делает это без вопросов. Давайте разбираться, почему Gemma 4 12B — плохой выбор для агентов, и что с этим делать.
Tool calling — это не 'поигрался и забыл'
В идеальном мире LLM получает задачу, понимает, какие инструменты доступны, и вызывает их с правильными параметрами. В мире Gemma 4 12B модель сначала выдумывает несуществующие функции, потом путает аргументы, а под конец просто начинает галлюцинировать JSON. Я тестировал через llama.cpp (по гайду по исправлению ошибок) — безуспешно.
Самая дикая проблема — с pattern в grep. Модель упорно формировала вызов grep с флагом -E и регулярным выражением, но передавала строку без экранирования. grep в ответ плевался ошибками, а Gemma 4 12B... зацикливалась. Она генерировала один и тот же вызов снова и снова, не обращая внимания на сообщение об ошибке. Это не tool calling — это комедия абсурда.
Суть: модель не умеет адаптироваться к ответам инструментов. Сломалась — и стоит. Повторяет одно и то же, пока не кончатся попытки.
Qwen 3.5 — берёт и делает
Я для сравнения запустил Qwen 3.5 (ту же, что в статье про KV cache). И она сходу справилась с тем же grep: экранировала спецсимволы, при ошибке уменьшала сложность regexp, а если не хватало данных — явно спрашивала уточнения. Разница — как между опытным разработчиком и интерном, который впервые видит командную строку.
И это при том, что у Qwen 2.5 27B тоже были проблемы с tool calling. Но Qwen 3.5 их решила. А Gemma 4 12B — нет. Похоже, что Google в погоне за общими бенчмарками просто забыл нормально натренировать модель на использовании инструментов. Это тем более странно, что Gemma 4 26B страдает от дрейфа тензоров и тоже нестабильна в агентских сценариях. Видимо, семейство Gemma 4 принципиально не заточено под tool use.
Opencode: вообще другой уровень? Нет, та же история
Opencode — популярный модуль для кодинга на базе LLM, требует от модели уверенного tool calling. Я попробовал подключить Gemma 4 12B — и получил кашу. Модель не могла правильно сформировать вызов read_file, вместо этого генерировала readFileSync — то есть Node.js функцию, которая вообще не входит в её инструменты. Opencode ждал JSON, а получал чёрт знает что.
Для контраста: Qwen 3 Coder Next при первом запуске тоже глючил, но после настройки (правильное квантование, шаблон промпта) работал идеально. Gemma 4 12B не дала себя настроить — она просто не понимала систему типов. Это не баг, это архитектурное ограничение.
Если вам действительно нужен агент для кода — берите Qwen 3 Coder или многомодальную Gemma 4 только как генератор изображений, но не как планировщик инструментов.
Что в итоге? Gemma 4 12B — не для агентов
Я потратил кучу времени на обфускацию (попытка дообучить — тоже провалилась), писал кастомные препроцессоры для промпта — ничего не помогло. Если модель в базе не умеет работать с инструментами, дообучение лишь замаскирует проблему.
Лично я теперь рекомендую разработчикам: не используйте Gemma 4 12B для агентов. Берите Qwen 3.5 или хотя бы доработанную Qwen 2.5. А если очень хочется Gemma — берите 26B и готовьтесь к деградации после 40 запросов.
И да, я не верю, что в ближайшие полгода Google исправит это для 12B. Слишком глубокая проблема с логикой вывода. Лучше смириться и перейти на проверенные модели. Или ждать Gemma 5 — может, там инженеры прочитают speсification по tool use.