AIDive

Пакет к видео

Jev в Claude Code: режим подсказки, собственный бенчмарк шлюза и снимок запроса

13 мин чтения

Коротко

  • Внутри Claude Code jev-gateway никогда не принуждает вызвать инструмент. Одна строка, steer: thinking || cached ? "hint" : "tool_choice", переключает его в режим подсказки, как только запрос несёт extended thinking или кешированный диалог, а настоящий запрос Claude Code несёт и то и другое уже на первом ходе.
  • Подсказка это <system-reminder> из двух предложений, добавленный в конец последнего сообщения пользователя. Модель вправе её проигнорировать, а если Claude Code уже поставил собственный system reminder последним блоком, подсказка не прикрепляется вовсе.
  • Собственный бенчмарк шлюза (120 сессий) показывает: для моделей Claude маршрутизация окупается на отладке и обходится дорого на разработке фич. Opus 5 на задаче с фичей: +61% входных токенов, +47% запросов, +83% времени; Sonnet 5: +16% входа и +37% времени.
  • Jev реально работает в Codex: шлюз там принуждает вызов инструмента, и Jev направил от 76 до 100% запросов Codex против 34 до 51% запросов Claude Code.
  • Замер на нашей машине: чистый запрос Claude Code 2.1.280 уже несёт 24 инструмента и 47,411 токенов префикса; обычная настройка с MCP-серверами несёт 40 инструментов и 57,277 токенов, и шлюз пересылает этот список в Jev при каждом вызове.
  • У fast-jev-compaction, самого популярного инструмента для Jev, есть открытые issues: хуки не регистрируются в актуальных сборках Claude Code, а полные транскрипты уходят в стороннее API. Пока нет.

Что показывают замеры

Jev это модель принятия решений, а не генератор текста. Вендор берёт $0.042 / MTok за вход при бесплатном выходе, заявляет сквозное время ответа 70ms-500ms и под заголовком «193.6x faster, 444.6x cheaper» сам пишет, что эти цифры «are on the higher end of real world gains» s3. В том же посте признаётся, что эталонные ответы усредняют GPT-6 Astra и Fable 5.1, из-за чего сравнение смещено в пользу моделей OpenAI и Anthropic s3.

jev-gateway подключается к Claude Code одной переменной окружения: bin/clients.mjs ставит ANTHROPIC_BASE_URL на локальный шлюз и не трогает вход Max s1. В src/adapters/messages.ts шлюз спрашивает Jev, какой инструмент подходит для следующего шага, и затем решает, как передать ответ. Если в запросе включён thinking или есть блоки cache_control, он даёт подсказку. Иначе выставляет tool_choice s1. Подсказка звучит так: модель-маршрутизатор считает названный инструмент наиболее подходящим следующим шагом, игнорируй это, если он не соответствует тому, что пользователь на самом деле просил. Она добавляется к последнему сообщению пользователя блоком <system-reminder> s1.

Другого выбора Anthropic API не оставляет. При ручном extended thinking tool_choice: any и tool_choice: tool не поддерживаются и возвращают ошибку, а Claude Opus 5.5, Claude Fable 5.1 и Claude Mythos 5.1 возвращают 400 на принудительный вызов инструмента независимо от thinking s4. Нюанс, который упускает комментарий в самом шлюзе: по документации Claude Opus 5 поддерживает принудительный выбор инструмента при включённом thinking s4. Что до кеша, иерархия такая: tools, затем system, затем messages; смена tool_choice инвалидирует только кеш messages, а правка определения инструмента инвалидирует весь кеш, поэтому шлюз добавляет блок, а не переписывает описание инструмента s5.

Бенчмарк, который почти никто не цитирует, сделан самим автором шлюза. Шесть моделей, две задачи, по пять прогонов на режим, 120 сессий агентов за 2026-09-18 и 19, модели GPT в Codex 0.154, модели Claude в Claude Code 2.1, каждый агент чистый, без MCP-серверов, плагинов и навыков s2. На chess-bugfix каждая модель потратила с маршрутизацией меньше токенов, и ничто не стало менее правильным. На chess-san, задаче с фичей, маршрутизация заметно ухудшила Opus 5 и Sonnet 5, и авторы называют причину: с моделями Claude шлюз только подсказывает, поэтому неподходящая подсказка стоит обходного пути, а не игнорируется бесплатно s2. Один раз маршрутизация стоила и корректности: GPT-5.6 Luna решила chess-san пять раз из пяти без неё и три из пяти с ней s2. Авторы добавляют, что входные токены в основном кешированы (80 до 96%), поэтому экономия на входе стоит меньше денег, чем такая же экономия на выходных токенах, и что сам Jev обошёлся от полцента до десяти центов за пять прогонов s2. Один из 120 прогонов, chess-bugfix.on.3 в серии Luna, помечен как contaminated: агент нашёл в /tmp тестовый скрипт другого прогона s2.

Сноска в README, которая и подтолкнула нас к собственному тесту: с --user-tools одна конфигурация отправляла 285 инструментов и около 200,000 токенов с каждым запросом Claude Code, против 6 инструментов и 7,000 токенов в чистой s2. Мы замерили то же место. Чистый запрос Claude Code 2.1.280 несёт 24 инструмента, 87,547 символов определений инструментов и 47,411 тарифицируемых токенов префикса (16,221 записано, 31,190 прочитано); полная конфигурация несёт 40 инструментов, 93,179 символов определений и 57,277 токенов префикса, все записаны. Оба запроса несут thinking: {type: "adaptive"} и 3 блока cache_control, без tool_choice, а это ровно то условие, которое фиксирует режим подсказки в messages.ts s1. Один ответ «ok» стоит $0.07 в эквиваленте API на чистом Sonnet 5 и $1.15 на полном Fable 5.1 по полям total_cost_usd и usage самого Claude Code, то есть на том же месте, где стоит запускатель шлюза s1.

Про fast-jev-compaction, плагин из треда про «мгновенную компактацию» (рейтинг 495, 117 комментариев) s9: открытые issues важнее числа звёзд. #21 сообщает Hooks (0) после установки, потому что session.compact и turn.complete не распознаются как события хуков в Claude Code 2.1.272; #88 говорит, что хуки не могут заменить компактацию, а полные транскрипты отправляются в стороннее API; #65 описывает 9 подряд выдуманных отчётов «work done» после одной компактации; #89 сообщает, что компактация отменяется при --resume s7. Главная жалоба в треде, 84 балла, касается ToS вендора и контроля над данными s9. Cookbook по подсказке навыков это единственный измеренный выигрыш, который вендор публикует для набора инструментов агента: доля неверно загруженных навыков падает с 16.8% до 7.3%, а навыка, загруженного когда ничего не подходит, с 9.8% до 4.0% s13.

Замеры

Бенчмарк шлюза, проценты относительно той же модели с выключенной маршрутизацией s2.

chess-bugfix: найти и исправить пять внедрённых багов

Модель Решено, вкл / выкл Выходные токены Входные токены LLM-запросы Секунды Направлено Jev
GPT-6 Astra 5/5 · 5/5 1,226 (-57%) 96k (-7%) 5 (0%) 41 (-39%) 100%
GPT-5.6 Sol 5/5 · 5/5 3,211 (-57%) 202k (-40%) 9 (-36%) 78 (-36%) 93%
GPT-5.6 Luna 1/4 · 0/5 10,519 (-12%) 506k (-10%) 19.5 (-15%) 200 (+10%) 86%
Fable 5.1 5/5 · 5/5 8,675 (-13%) 276k (-19%) 14 (-22%) 148 (+6%) 45%
Opus 5 5/5 · 5/5 16,693 (-7%) 406k (-22%) 18 (-14%) 218 (+2%) 38%
Sonnet 5 5/5 · 5/5 16,623 (-41%) 616k (-48%) 26 (-26%) 243 (-25%) 34%

chess-san: добавить алгебраическую нотацию в рабочий движок

Модель Решено, вкл / выкл Выходные токены Входные токены LLM-запросы Секунды Направлено Jev
GPT-6 Astra 5/5 · 5/5 3,663 (0%) 143k (+2%) 7 (0%) 88 (+8%) 95%
GPT-5.6 Sol 5/5 · 5/5 5,096 (-9%) 147k (-39%) 7 (-36%) 78 (-16%) 86%
GPT-5.6 Luna 3/5 · 5/5 6,809 (-14%) 315k (-51%) 14 (-42%) 121 (-14%) 76%
Fable 5.1 5/5 · 5/5 13,497 (-24%) 331k (-27%) 13 (-19%) 167 (-26%) 51%
Opus 5 5/5 · 5/5 20,152 (+22%) 676k (+61%) 25 (+47%) 390 (+83%) 44%
Sonnet 5 5/5 · 5/5 23,487 (+9%) 991k (+16%) 32 (+3%) 327 (+37%) 42%

Наш собственный снимок запроса, то самое место, где стоит jev-gateway s1.

Чистая Полная
Модель, выбранная Claude Code claude-sonnet-5 claude-fable-5-1 (настройка пользователя, 1M)
thinking в запросе {type: "adaptive"} {type: "adaptive"}
Блоки cache_control 3 3
tool_choice нет (auto) нет (auto)
Инструментов в запросе 24 40 (28 встроенных + 12 MCP)
Определения инструментов, символов 87,547 93,179
Системный промпт, символов 27,754 12,436
Весь запрос, символов 134,882 155,718
Тарифицируемые токены префикса (запись + чтение кеша) 47,411 (16,221 записано, 31,190 прочитано) 57,277 (всё записано)
Выходные токены 4 4
Стоимость одного «ok» в эквиваленте API $0.07 $1.15

Протокол: логирующий прокси на 60 строк на 127.0.0.1:8790 пересылает каждый запрос на https://api.anthropic.com байт в байт и записывает, что в нём лежит, то есть то самое место, которое bin/clients.mjs отводит jev-gateway. Claude Code 2.1.280 запускался в headless-режиме, claude -p "Reply with the single word ok. Do not use any tool." --output-format json --max-turns 1, из приватного репозитория Expo с 1,021 отслеживаемым файлом, по подписке claude.ai. Чистая: CLAUDE_CONFIG_DIR на пустую директорию, --strict-mcp-config, --setting-sources project. Полная: обычные пользовательские настройки машины, .mcp.json проекта, пользовательские MCP-серверы и установленные плагины. Один запрос на конфигурацию, только первый ход; ключа Jev нет, так что цифры регрессии это переигранный бенчмарк шлюза, а не воспроизведённый.

Сделайте в понедельник

  • Прежде чем добавлять любой маршрутизатор, замерьте своё место: запустите логирующий прокси, направьте на него ANTHROPIC_BASE_URL, выполните claude -p "Reply with the single word ok." --output-format json --max-turns 1 и прочитайте в выводе cache_creation_input_tokens плюс cache_read_input_tokens.
  • Посчитайте инструменты в этом запросе. Если редко используемые MCP-серверы раздувают список, уберите их из .mcp.json или ограничьте по проектам; это сокращение действует на каждый запрос, с маршрутизатором или без.
  • Если Jev в Claude Code всё же нужен, откройте src/adapters/messages.ts в своём клоне jev-gateway и проверьте строку steer: при включённом thinking или кеше вы покупаете подсказку, а не маршрут.
  • Прогоните бенчмарк шлюза на своём репозитории с --user-tools, а не доверяйте шахматным таблицам; оставляйте маршрутизацию, только если на задаче поиска бага запросов становится меньше без изменения решено/не решено.
  • Не ставьте fast-jev-compaction, пока не закрыты issues #21, #88 и #89; после установки проверьте, что /hooks показывает больше нуля хуков.
  • Прочитайте ToS вендора, прежде чем вставлять ключ: каждый маршрутизируемый запрос отправляет ваш список инструментов и последнее сообщение, а плагин компактации отправляет полные транскрипты.
  • Если вы также работаете с Codex, сначала проверьте Jev там: бенчмарк показывает, что окупается именно принудительный tool_choice.

Читать дальше

  • Таблица принудительного вызова инструментов по моделям, включая то, какие модели возвращают 400 и какие режимы thinking блокируют any и tool s4.
  • Таблица инвалидации кеша: tools, затем system, затем messages, и строка про tool_choice, объясняющая дизайн шлюза s5.
  • Issue #24 в jev-gateway: неизменный на протяжении сессии список инструментов пересылается в Jev с каждым запросом, это статья расходов, которую скрывает дашборд s14.
  • Раздел о целостности данных в README бенчмарка: 119 из 120 прогонов не пересекались друг с другом, один помечен contaminated в runs.jsonl s2.
  • Независимый разбор Jev как классификатора или фильтра на публичных и приватных данных, вне контекста coding-агентов s12.
  • Почему evals вендора сравнивают с двумя моделями, а не с эталоном, и что это делает с громкими множителями s11.
  • Сторонний обзор jev-gateway, разбирающий разделение «Jev выбирает, LLM пишет» и открытость на localhost, исправленную в тот же день s8.
  • Тред запуска на HN, где вопрос цен и субсидий обсуждается открыто s10.

Источники

  • jev-gateway, GitHub, vinilana. Зачем читать: в src/adapters/messages.ts лежит та самая строка, решающая между подсказкой и принудительным вызовом, а bin/clients.mjs показывает, что запускатель задаёт только ANTHROPIC_BASE_URL.
  • jev-gateway-bench, GitHub, vinilana. Зачем читать: полная таблица 120 сессий и собственная трактовка авторов, включая единственный загрязнённый прогон.
  • Introducing System One Models & Jev, TypeSafe AI. Зачем читать: цены, задержка и сноска, оговаривающая заявление о 444.6x, от самого вендора.
  • Forcing tool use, Anthropic docs. Зачем читать: таблица по моделям, какие значения tool_choice дают ошибку.
  • Prompt caching, Anthropic docs. Зачем читать: иерархия инвалидации, которая диктует дизайн с подсказкой.
  • fast-jev-compaction, GitHub, tamaratran. Зачем читать: откройте вкладку issues раньше README.
  • jev-gateway Review: Jev Picks, the LLM Writes, mrjev.com. Зачем читать: взгляд со стороны на архитектуру шлюза.
  • Instant Claude Code compaction is my favorite use of Jev so far, r/ClaudeCode. Зачем читать: тред практиков, где вверху возражение по ToS.
  • HN: Introducing System One Models and Jev, Hacker News. Зачем читать: дискуссия при запуске о ценах и устойчивости.
  • The Evals: Measured Against Two Models, Not Against Truth, novcog. Зачем читать: критика метода оценки, стоящего за множителями вендора.
  • Testing Jev on public and private data: classifier or filter, Aman Kumar. Зачем читать: независимый замер вне coding-агентов.
  • Skill suggestion cookbook, TypeSafe docs. Зачем читать: единственные опубликованные цифры по выбору из набора, 16.8% до 7.3%.
  • jev-gateway issue #24, GitHub. Зачем читать: стоимость повторной отправки списка, которую никто не считает.
  • Jev + Claude Code: compaction and a Sonnet 5 source check, jevmodel.ai. Зачем читать: второй взгляд на заявление о компактации с проверкой на Sonnet 5.

FAQ

Принуждает ли jev-gateway когда-нибудь вызвать инструмент внутри Claude Code?

Только когда в запросе нет ни extended thinking, ни блоков cache_control. В наших снятых запросах первого хода было и то и другое, в чистой и в полной конфигурации, так что на практике шлюз даёт подсказку.

Почему шлюз просто не перепишет описания инструментов, чтобы направлять сильнее?

Изменение определений инструментов инвалидирует весь кеш промпта: tools, system и messages. Добавление блока к последнему сообщению пользователя затрагивает только уровень messages, это самое дешёвое место для подсказки.

Значит, Jev бесполезен для кодинга?

Нет. Бенчмарк показывает, что он окупается в Codex, где инструмент принуждается и направляется от 76 до 100% запросов, и на задачах отладки у всех моделей. Не подтверждается цифрами шлюза лишь подача вроде «самый дешёвый Claude Code».

Стоит ли пробовать fast-jev-compaction?

Подождите, пока закроются issues про регистрацию хуков (#21, #88) и про --resume (#89), и решите, приемлемо ли для ваших репозиториев, что полные транскрипты уходят в стороннее API.