Вайбкодил некоторого агента, в качестве ядра был выбран OpenCode cli в режиме serve. Главная задача была - добиться максимально быстрой генерации документов.
К сожалению, на топовых моделях оптимизация почти незаметна, думают и делают долго, на 10 минутных сессиях экономия в 10 секунд мало что даст, но всё же нашел один момент, который повышает стабильность работы и избавляет агента от лишних движений и повышает стабильность результата на выходе.
По умолчанию, что Claude Code cli, что OpenCode, могут в процессе выполнения запроса запускать сабагентов, даже если вы не добавляли их в систему специально. Они сами решают, когда задачу стоит разбить на этапы и часть этапов отдать в работу сабагентам. Когда это надо было делать на 200к токенах контекстного окна Claude, я бы еще понял, зачем сабагент для сбора информации по проекту - собрать весь контекст и предоставить основному агенту концентрированную выжимку данных по проекту без лишнего шума, и без мусора в контексте. Зачем мне делает это Opencode на 1миллионе контекста GPT модели - не понятно.
(если что, обсуждаем именно агентную работу с четко прописанными инструкциями в правилах агента с конкретными этапами и действиями, когда у вас есть некоторый пейплайн по обработке контента, где каждый шаг должен строго выполняться)
Начал разбираться, как с этим бороться и что заметил:
1. Например, задача агента - собрать информацию по интернету, сгенерировать документ и сохранить.
2. Агент запускает поиск информации, но не сам, а часто это делает сабагентом, чтобы весь информационный шум не собирать. Как это выглядит: основной агент пишет промпт сабагенту, какую информацию надо собрать и что с ней делать, затем сабагент после сбора информации возвращает основному агенту в его контекст уже подготовленную информацию.
3. Но, даже на умнейших моделях, сабагенты иногда ведут себя не так, как задумано, потому что они опираются не на наши промпты, а на тот, что написал ему основной агент. Например сабагент может начать пытаться генерировать документ который его не просили, и этот же документ всё равно будет генерировать потом основной агент. Да и в целом, важные тонкие детали из правил агента при передаче информации от агента к сабагенту и обратно часто либо теряются, либо снижается "сила" некоторых инструкций, что может оказаться критичным для автономных систем с долгими многоэтапными пейплайнами. Не забываем еще что передача информации между агентами тоже тратит время и токены.
Я около 4 суток непрерывно наблюдал за ходом действий агента и выявил очевидную закономерность - все сессии с самопроизвольным запуском сабагентов тратили больше токенов, работали дольше, происходили лишние вызовы инструментов, стабильно происходило дублирование некоторых действий и потеря фокуса на задаче.
В общем, выполняется совершенно неэффективная и бесполезная работа, на умных моделях с 200+к моделях контекста это надо срочно выключать. Я давний противник сабагентов в их общепринятом понимании (в некоторых задачах они оправданы, но мало кто их правда использует по назначению). А теперь моё мнение еще сильнее укрепилось. Берем модель в ежовые рукавицы и не даем ей никакого ни морального, ни физического права больше рождать себе подобных без нашего разрешения.
1. Идем в глобальный конфиг OpenCode (обычно лежит по адресу
~/.config/opencode/opencode.json2. Добавляем запрет на инструмент
"task": "deny" в блоке разрешений, например так:"permission": {
"task": "deny"
},3. Радумемся качественной работе агента.