PostHog выпустила Jeeves: открытый классификатор на 9 млрд параметров, который рассуждает

PostHog выпустила Jeeves: открытый классификатор на 9 млрд параметров, который рассуждает

PostHog выложила на GitHub проект Jeeves, классификатор в стиле Jev на базе Qwen3.5-9B (LoRA, «указывающая» голова pointer head), который перед решением строит цепочку рассуждений. В комплекте, полный код обучения, обучающая, dev- и тестовая выборки, а также вспомогательная диффузионная модель drafter с размером блока 4. Проект вдохновлён Kev; в цитировании указан автор Nicholas P. Waltz, год, 2026.

Исходная проблема, по описанию README: модели типа Jev дают калиброванные вероятности решений, но с невысокой точностью, поэтому во многих конвейерах в запасе держат рассуждающую модель. Jeeves обучают рассуждать с помощью CISPO, и это, как утверждает README, даёт лучшие результаты на задачах вне обучающей области и превосходство над Jev на JevBench hard (public).

Результаты (все, самоотчёт авторов). На тестовых данных, которых модель не видела: 0,889 против 0,822 у Kev-9B и 0,857 у Jev (подпись к таблице: точность с рассуждением, жадное декодирование, лимит 2 560 токенов). На публичных уровнях JevBench (easy, standard, hard, всего 231 задание; закрытый уровень judge не включён): 0,935 против 0,866 у Jev. Для Kev результат по JevBench приведён для Kev-8B (Qwen3), поскольку для Kev-9B он не опубликован. На собственной тестовой выборке из 2 962 примеров тот же чекпойнт даёт 0,804 без рассуждения и 0,840 с ним.

Скорость на одном H100: около 0,3 с на запрос без рассуждения и медиана 3,3 с с ним; на 90-м перцентиле с полными цепочками, 17 с. Время можно снизить, обрезая длину цепочки (параметры max_think и nothink_threshold).

В одном запросе можно задавать вопросы «да/нет» (noul), с выбором варианта (choice) и оценкой по шкале (score) через Jev-совместимый API. Есть Python SDK, прямая замена SDK Jev, ключ API не нужен, клиент по умолчанию обращается к http://127.0.0.1:8009 и ждёт ответа до 120 с. Требуются Python 3.12 и GPU с CUDA (для FP8-ядра нужна архитектура Hopper). Веса скачиваются командой hf download PostHog/jeeves и запускаются через inference.serve.

Как устроено обучение. Вопросы и состояние передаются в шаблон чата Qwen с редкими неиспользуемыми токенами токенайзера в роли разметки; замена их обычным текстом ухудшила результат, как и отказ от повторения вопросов после блока рассуждений. Голова pointer head оценивает каждый вариант скалярным произведением, итоговые вероятности, softmax с температурой, подобранной на dev-выборке. Этапы: SFT (2 эпохи, 596 шагов на 8 GPU; LoRA r=16 на всех проекциях; 19 126 вопросов из 12 публичных наборов и синтетических данных по политикам; у половины вопросов есть цепочка рассуждений, сгенерированная базовой моделью), затем CISPO (график на 624 шага, остановлен на шаге 402; 9 992 вопроса, по 8 прогонов при температуре 1, лимит 2 560 токенов рассуждения), затем калибровка одной температурой. Остановка на шаге 402, по README, сохраняет лучшую калибровку и dev-результат: дальше голова «перезаостряется» на насыщенном RL-наборе.

Drafter, диффузионная надстройка над замороженной моделью, вдохновлённая Orthrus. В отличие от Orthrus, работающего только с моделями на одном внимании, она поддерживает слои Gated DeltaNet в Qwen3.5. Блок 4 выбран по умолчанию, так как остаётся дешёвым при батчинге нескольких вопросов.

Ограничения из README: на знаниевых тестах Jeeves уступает Jev (MMLU 0,793 против 0,900, MMLU-Pro 0,739 против 0,840); рассуждение медленное на хвосте распределения; сравнения с Kev и Jev вне JevBench сделаны на других заданиях из тех же источников; из-за отсутствия награды за единство языка цепочки рассуждений плохо интерпретируемы.

Ключевые факты

  • Jeeves, открытая модель PostHog на Qwen3.5-9B (LoRA, pointer head), обученная через SFT и CISPO рассуждать перед решением; в репозитории код обучения, данные train/dev/test и drafter с блоком 4.
  • По данным README: точность 0,889 против 0,822 у Kev-9B и 0,857 у Jev на невиданных тестовых данных; 0,935 против 0,866 у Jev на публичных уровнях JevBench (231 задание).
  • Скорость на одном H100: около 0,3 с без рассуждения, медиана 3,3 с с рассуждением, 17 с на p90 с полными цепочками.
  • На знаниевых тестах модель слабее Jev: MMLU 0,793 против 0,900, MMLU-Pro 0,739 против 0,840.
  • Есть Jev-совместимый API и SDK-замена; нужны Python 3.12 и GPU с CUDA (для FP8, Hopper).

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

Классификаторы в стиле Jev быстры и выдают калиброванные вероятности, но, по словам README, страдают от невысокой точности, из-за чего многие конвейеры держат рассуждающую модель как запасной вариант. Jeeves пытается совместить оба свойства: модель сначала рассуждает, затем выдаёт вероятности по вариантам ответа. Ценность проекта ещё и в открытости: опубликованы не только веса, но и весь рецепт обучения, данные и код сборки наборов.

Кому это важно

Командам, которые строят автоматическую классификацию и маршрутизацию текстов (например, обращений клиентов: отдел, срочность, раздражение) и пользуются Jev-совместимым API. Также тем, кто интересуется обучением рассуждающих моделей с подкреплением (CISPO), калибровкой вероятностей и ускорением генерации диффузионным drafter для Qwen3.5 со слоями Gated DeltaNet.

Как это применить

Нужны Python 3.12 и GPU с CUDA; для FP8-ядра, Hopper. Установить зависимости, скачать веса командой hf download PostHog/jeeves и запустить сервер через python -m inference.serve вместе с drafter; затем отправлять запросы в формате Jev либо использовать Python SDK из папки sdk/ (замена Jev SDK, ключ не нужен). Если важна задержка, можно ограничить длину рассуждения параметром max_think и порогом nothink_threshold; без рассуждения запрос занимает около 0,3 с на H100. Полный конвейер обучения запускается на 8 GPU через bash run.sh. Лицензия на код и веса в источнике не указана; каждый публичный набор данных остаётся под своей лицензией.

Можно ли доверять

Все результаты, самоотчёт авторов из README, независимых проверок или воспроизведений источник не упоминает. Сравнения с Kev и Jev опираются на числа, которые публикует Kev; для JevBench вместо Kev-9B взят Kev-8B (Qwen3), закрытый уровень judge исключён, а сравнения вне JevBench сделаны на других заданиях из тех же источников, сами авторы указывают это как ограничение. Метрика для 0,889/0,822/0,857 в тексте названа только подписью к таблице («точность с рассуждением»), и источник не сопоставляет её с 0,840 на собственной тестовой выборке из 2 962 примеров. Таблицы результатов в доступном тексте отсутствуют.

Риски и подводные камни

Знаний у модели меньше, чем у Jev (MMLU 0,793 против 0,900, MMLU-Pro 0,739 против 0,840), так что для задач, где нужны общие знания, она может подойти хуже. Рассуждение замедляет ответ: 3,3 с в медиане и 17 с на p90 с полными цепочками; в примере из README ответ на три параллельных вопроса занял около 8,1 с (одна иллюстрация, не замер). Цепочки рассуждений плохо интерпретируемы из-за отсутствия награды за единство языка. Обучение по CISPO остановлено на шаге 402 из 624, потому что дальше голова чрезмерно «заостряется», при собственном дообучении стоит следить за калибровкой.