← На главную

Опубликовано

Контекст 900 тысяч токенов и вспомогательные модели: настраиваем Codex и Hermes Agent

Автор: Гусев Николай [портфолио]

Темы: ai-agents, benchmarks, llm-api, local-models

На этой неделе подписчик канала поймал изменение, о котором нигде не было объявления: "Стал юзать Hermes через codex api, и контекст стал 900к, хотя был 240-270к. Не могу найти инфу об этом нововведении". Изменение реальное, и в этой статье - как его включить, как вернуть назад и что настроить вокруг, чтобы большое окно не съедало бюджет.

Это третья статья цикла про контекст. В первых двух - "Cursor всё сломал, но виноват не Cursor" и "Почему AI-агенты деградируют на длинных сессиях" - я разбирал механику: почему сжатие теряет информацию, почему внимание размазывается по длинному контексту и почему Du et al. показали падение точности на 13.9-85% просто от длины входа. Здесь - практическая часть: конкретные конфиги для Codex и Hermes Agent.

Что произошло

Разработчик Codex Tibo (Thibault Sottiaux) объявил: модель gpt-5.6-sol получила окно в 1 миллион токенов. Раньше оно было доступно только через API-ключи, теперь переключатель включили и для аккаунтов ChatGPT. Одна строчка из его поста объясняет всё: "the switch has been flipped to use ChatGPT accounts instead". Никакого changelog - просто тумблер на стороне сервера. Старая настройка "была 240-270к" никуда не делась, сверху включили новое окно.

Как включить (или вернуть как было)

Открываете ~/.codex/config.toml и добавляете на верхний уровень, до любых секций [section]:

`model = "gpt-5.6-sol"
model_context_window = 1000000
model_auto_compact_token_limit = 900000`

Три параметра: модель, размер окна и порог автосжатия. Последний - триггер: когда история сессии дорастает до 900 тысяч токенов, Codex сам сжимает её, чтобы влезть в окно.

Но я рекомендую вернуть 500 тысяч. И вот почему.

Почему большое окно - это ловушка

Первое: расход токенов. Всё, что лежит в окне, оплачивается на каждом ходу. Длинная сессия с миллионным окном означает, что каждый ваш новый вопрос оплачивается вместе с сотнями тысяч токенов истории, которая к вопросу уже не относится.

Второе, и оно хуже: сжатие выбрасывает середину. Автокомпрессия не сохраняет историю идеально - это lossy compression, сжатие с потерями. Начало сессии (системный промпт) и хвост (последние сообщения) выживают, середина - зона поражения. Был длинный спор с агентом об архитектуре на 40-м сообщении? Считайте, его больше нет. Чем длиннее сессия, тем больше материала теряется при следующем сжатии. Механику я подробно разбирал в первых двух статьях цикла - Lost in the Middle, attention dilution, эксперимент Du et al.: даже при идеальном поиске по контексту точность падает просто от длины входа.

Третье: на практике миллион токенов редко нужен. Реальные рабочие сессии живут в 100-300 тысяч.

500 тысяч - разумный компромисс: окно с запасом, сжатие срабатывает реже, теряется меньше.

Главная мысль: не пользуйтесь флагманом для черновой работы

Проблема большого контекста - частный случай общей проблемы. Codex гоняет всю рутину через одну модель: сжатие истории, чтение скриншотов, генерацию заголовков сессии. Всё это - флагманский gpt-5.6 по флагманской цене.

Hermes Agent устроен иначе: у него есть секция auxiliary - вспомогательные модели, каждую задачу можно отдать той модели, которая для неё предназначена. Вот реальный кусок из моего config.yaml:

`auxiliary:
  vision:
    provider: lmstudio
    model: lfm2.5-vl-3b
    timeout: 30
  compression:
    provider: auto
    model: ''
    timeout: 120
  web_extract:
    provider: auto
    model: ''
    timeout: 360
  title_generation:
    provider: auto
    model: ''
    timeout: 30`

Два слота из этой секции дают максимальный эффект.

Vision: скриншоты не выходят из дома

Слот vision обрабатывает изображения: скриншоты интерфейсов, диаграммы, картинки из документов. По умолчанию это умеет основная модель - и каждый скриншот улетает в облако и тарифицируется как vision-запрос.

Мой вариант - provider lmstudio и модель lfm2.5-vl-3b, которая крутится локально в LM Studio. Три миллиарда параметров, для черновых задач видит нормально: прочитать текст с интерфейса, найти кнопку, описать диаграмму. Ноль токенов наружу, ноль приватности наружу. Когда нужна настоящая работа с изображением - её делает основная модель, но рутину жрёт локальная мелочь.

Compression: сжатие контекста за копейки

Слот compression - та самая модель, которая делает автосжатие истории. Здесь экономия самая наглядная. Цены проверил по живому API OpenRouter на момент написания:

deepseek-v4-flash: окно 1 048 576 токенов, вход $0.06 за миллион, выход $0.12 за миллион.

Считаем типичное сжатие: сессия доросла до 400 тысяч токенов, модель сжимает её в выжимку тысяч на 40. Вход: 400 000 / 1 000 000 * $0.06 = $0.024. Выход: 40 000 / 1 000 000 * $0.12 = $0.0048. Итого около трёх центов за сжатие, которое на флагманской модели стоит в десятки раз дороже - и будет стоить ещё дороже с миллионным окном, когда компрессия гоняет весь этот объём через gpt-5.6.

Настраивается в две строки:

`auxiliary:
  compression:
    provider: openrouter
    model: deepseek/deepseek-v4-flash`

Бесплатный вариант, если счёт жалко даже такой

Тем же запросом к API OpenRouter находятся модели с суффиксом :free, которые подходят для сжатия не хуже:

nvidia/nemotron-3.5-lightning:free - окно 1 000 000

nvidia/nemotron-3-ultra-550b-a55b:free - окно 1 000 000

nvidia/nemotron-3-super-120b-a12b:free - окно 262 144

У NVIDIA сразу две бесплатные модели с миллионным окном: облегчённая Lightning и тяжёлый Ultra на 550 миллиардов параметров. Обе созданы будто специально под сжатие длинных сессий: вся история влезает целиком, платите ноль.

Ограничение бесплатных моделей - рейт-лимиты. И тут хинт, о котором мало кто знает: если пополнить баланс OpenRouter хотя бы на 10 долларов, суточный лимит на бесплатные модели поднимается с 50 до 1000 запросов в день. Деньги при этом никуда не деваются - они остаются на балансе и тратятся как обычно на платные модели. Двадцатикратное повышение лимита ценой одного пополнения, которое вы всё равно потратите. Для автономных агентов и ночных кронов с несколькими параллельными сессиями это разница между "работает" и "отбивается 429".

Отдельная оговорка про GLM 5.2 от Z.ai: модель хорошая, но бесплатной её называть нельзя. На OpenRouter она тарифицируется по токенам, а выгодна только по подписке Z.ai напрямую - если у вас уже есть эта подписка, GLM 5.2 тоже честный кандидат на слот compression.

Делегирование: отдельная модель для подагентов

Дальше по конфигу идёт секция delegation - настройки подагентов. Подагент - дочерний агент, которому основной делегирует часть работы: анализ большого файла, отдельное исследование, ревью ветки кода. Два практических применения. Первое - изоляция контекста: подагент не видит историю вашего чата, ему передаётся только задание, отчёт возвращается одной сводкой. Делегировали анализ логов - и 80 тысяч токенов логов остались в контексте подагента, а не в вашем. Второе - параллельность: до трёх подагентов одновременно, каждый по своему счётчику.

По умолчанию подагенты наследуют основную модель, но у секции есть свои поля model и provider - следующий уровень той же экономии: тяжёлую аналитику можно делегировать дешёвой модели, а основную разгрузить под диалог.

`delegation:
  model: deepseek/deepseek-v4-pro
  provider: openrouter
  max_concurrent_children: 3
  child_timeout_seconds: 600
  subagent_auto_approve: false`

Параметры - не декорация, каждый решает конкретную проблему. child_timeout_seconds: 600 - десятиминутный таймаут: зависший подагент не жжёт токены бесконечно. max_concurrent_children: 3 - предел параллельности, чтобы всплеск делегирования не устроил гонку за лимиты API. subagent_auto_approve: false - самое важное: подагент не может сам себе одобрять опасные действия. Страховка от того, что дочерний агент с урезанным контекстом решит "переустановить систему" ради выполнения подзадачи - ровно тот класс инцидентов, с которого начинался цикл статей.

Следующий уровень: Hermes как дирижёр, код в CLI-агентах

Слоты auxiliary решают вопрос внутри агента. Но есть вопрос уровнем выше: как оплачивать подписку ChatGPT, не сжигая её на болтовню.

Подписка на gpt-5.6 не должна быть основной моделью Hermes. Основная модель - это диалог: вопросы, рутина, уточнения. Если флагман sol отвечает на каждый чих, дневной лимит подписки уходит к обеду. Правильная схема: Hermes работает на дешёвой или уже оплаченной модели, а подписочные тяжеловесы вызываются точечно - делегацией в codex-cli.

Логика распределения ролей:

Планирование и архитектура - gpt-5.6-sol. Сложный выбор, план рефакторинга, ADR (Architecture Decision Record) и SDD (Software Design Document) - задачи, где дорога каждая мысль. Sol здесь не роскошь, а инструмент.

Реализация - gpt-5.6-terra или zcode. Terra - сбалансированная модель Codex для многофайлового кодинга. Альтернатива - ZCode CLI от Z.ai с glm-5.3: он идёт по подписке coding-plan и жрёт собственные лимиты, не трогая дневной запас ChatGPT. Когда у вас две подписки - codex и zcode - они работают как два независимых ресурса.

Черновое писательство - deepseek-v4-flash или бесплатный nemotron с OpenRouter. Документация, черновики, комментарии.

Ревью результата - снова делегация в codex, в идеале другой моделью. Модель, которая писала план, будет защищать свой план; свежий взгляд с другим порядком reasoning ловит то, что автор пропустил.

Как это выглядит в работе. В корень репозитория кладётся ТЗ-файл с полным контекстом: что есть, что сделать, команды верификации. Дальше - три вызова.

Первый: планирование.

`codex exec -m gpt-5.6-sol --sandbox danger-full-access \
  "Read TZ-auth.md. Write plan/ANALYSIS.md and plan/PLAN.md \
   with phases and verification steps. Do NOT write code yet."`

Второй: реализация, пофазно, с проверкой после каждой фазы.

`codex exec -m gpt-5.6-terra --sandbox danger-full-access \
  "Execute Phase 1 from plan/PLAN.md. \
   Verify with: python -m pytest tests/ -v. Commit. Do NOT push."`

То же самое через zcode - длинное ТЗ передаётся файлом, а не строкой:

`node zcode.cjs -p "Execute the task in the attached file. \
  Work ONLY in src/. After editing run node --check." \
  --cwd C:/projects/repo --mode yolo --attach TZ-auth.md --json`

Третий: ревью.

`codex exec -m gpt-5.6-sol \
  "Review git diff main..HEAD. Find bugs, unverified claims, \
   missing tests. Report findings, do not fix."`

Три детали, которые отличают рабочую схему от украшательства. Первое: ТЗ-файл вместо гигантского промпта - CLI-агенты надёжно читают файлы и теряют строки при передаче через аргументы. Второе: git после каждой фазы - не верьте самоотчёту агента, верьте git log и зелёным тестам; codex и zcode умеют рапортовать "готово", когда работы нет. Третье: таймауты - реальная делегация уходит за 5-15 минут, дефолтные лимиты обрывают её на середине, и вы получаете подправленный репозиторий без верификации.

Общая экономика схемы: подписка ChatGPT тратится только на sol-планирование и ревью (минуты тяжёлой работы), реализация разводится на terra/zcode/бесплатные модели, а диалоговая нагрузка живёт на дешёвой основной модели. Тот же принцип, что и со auxiliary-слотами, только масштаб - не задачи, а целые агенты.

Ещё один хинт, который живёт рядом

Ночной сброс сессии. Секция session_reset закрывает контекст по расписанию: в 4 часа ночи или после суток простоя (mode: both - сработает то, что наступит раньше). Та же экономия, только по календарю: сессия не таскает хвосты вчерашних debugging-серий, утро начинается с чистого контекста, а не с полумёртвого сжатия вчерашнего дня.

`session_reset:
  at_hour: 4
  idle_minutes: 1440
  mode: both`

Что в итоге

Настройка Codex при работе с gpt-5.6-sol:

`model = "gpt-5.6-sol"
model_context_window = 500000
model_auto_compact_token_limit = 450000`

Настройка Hermes для тех же задач:

`auxiliary:
  vision:
    provider: lmstudio
    model: lfm2.5-vl-3b
  compression:
    provider: openrouter
    model: deepseek/deepseek-v4-flash`

Логика простая. Большое окно контекста - не достижение, а расходник: каждый токен в окне оплачивается на каждом ходу, а сжатие всё равно выбросит середину. Не расширяйте окно, когда можно разнести задачи по моделям: флагман - думать, локальная мелочь - смотреть картинки, дешёвая или бесплатная - жать историю. Миллионное окно оставьте для редких случаев: огромный рефакторинг одной кодовой базы, длинный анализ одного документа. Для всего остального 500 тысяч и правильные вспомогательные модели дают тот же результат в разы дешевле.

Почему середина теряется и что говорит об этом наука - в первых двух частях цикла: Cursor и компактинг, деградация на длинных сессиях.