Назад к блогу

GigaChat 3.5 Reasoning: открытые веса, линейное внимание и шесть экспертов, собранных обратно в одну модель

GigaChat 3.5 Reasoning: открытые веса, линейное внимание и шесть экспертов, собранных обратно в одну модель

GigaChat 3.5 Reasoning — первая модель линейки с открытыми весами и режимом пошаговых рассуждений, обученная на технологии online RL. В статье разбирается, что именно выложено на Hugging Face, как запустить модель локально через SGLang и почему её архитектура с линейным вниманием и 28 млрд активных параметров заслуживает внимания.

ai-forever выложила GigaChat 3.5 Reasoning — модель с режимом рассуждений, веса и код запуска которой опубликованы на huggingface, а сама модель доступна в giga.chat. В команде запуска сервера SGLang путь к ней указан как ai-sage/GigaChat3.5-432B-A28B-Reasoning. Это первая модель GigaChat, обученная на технологии online RL, и она же подключена в каталоге Evolution Foundation Models по OpenAI-совместимому API.

Ниже — что именно открыто, как устроен запуск и обучение, что признают сами авторы и какие цифры приводятся.

Что именно открыто

Открыты веса и код запуска на huggingface. Раскрыты конфиги инференса через описание флагов сервера.

Для запуска приведён пример команды с параметрами SGLang, включая парсеры рассуждений и вызовов функций, а также спекулятивного декодирования. В команде используется --speculative-algorithm EAGLE — алгоритм спекулятивного декодирования, который ускоряет генерацию за счёт предварительного предложения токенов.

python -m sglang.launch_server \
  --model-path ai-sage/GigaChat3.5-432B-A28B-Reasoning \
  --trust-remote-code \
  --tp-size 8 --ep-size 8 \
  --mem-fraction-static 0.8 \
  --tool-call-parser gigachat35 \
  --reasoning-parser gigachat35 \
  --speculative-algorithm EAGLE \
  --speculative-num-steps 3 \
  --speculative-eagle-topk 1 \
  --speculative-num-draft-tokens 4 \
  --host 0.0.0.0 --port 8000

Флаг --reasoning-parser gigachat35 выносит рассуждение в отдельное поле reasoning_content, а финальный ответ — в content; флаг --tool-call-parser gigachat35 включает парсинг вызовов функций; блок --speculative включает MTP (три головы) и ускоряет генерацию. Полная таблица с внешними моделями и eval-конфигами приведена в разделе 3.

Как запустить модель локально

Для локального запуска используется инференс-сервер SGLang: исходники клонируются, переключаются на PR 29189, установка идёт через pip с отключением сборки Rust-расширений (SGLANG_BUILD_RUST_EXTS=none pip install -e "python[all]"). Сервер стартует командой python -m sglang.launch_server с указанием модели через --model-path и флагом --trust-remote-code.

Параллелизм задаётся флагами --tp-size 8 --ep-size 8, доля статической памяти — --mem-fraction-static 0.8, адрес и порт — --host 0.0.0.0 --port 8000. Если при запуске возникает ошибка захвата CUDA-графа на этапе префилла, добавляется --cuda-graph-backend-prefill disabled.

Как разделяются рассуждение и финальный ответ

Рассуждение отделяется от финального ответа по тегам <think> и </think>: всё между ними попадает в reasoning_content, текст вне тегов — в content. Настройка на уровне запуска задаётся флагом --reasoning-parser gigachat35.

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

Архитектура и параметры

GigaChat 3.5 Reasoning построена на той же архитектурной базе, что и GigaChat 3.5 Ultra: 432 млрд параметров суммарно, около 28 млрд активных параметров на токен и контекстное окно до 262 тысяч токенов.

Отдельно отмечена архитектурная особенность — линейное внимание. Оно предназначено для работы с длинным контекстом и позволяет модели сохранять ключевую информацию из уже обработанного текста, не сопоставляя каждый новый запрос со всем предыдущим контекстом.

Как устроено обучение

Обучение начинается с SFT-чекпоинта: на этом этапе модели показывают готовые решения и просят их воспроизводить, поэтому она запоминает, как выглядит правильный ответ, но не то, как до него дойти. На новой задаче модель уверенно начинает, повторяет знакомую структуру рассуждения и сыплется на третьем шаге, не заметив, что противоречит сама себе.

Из одного SFT-чекпоинта выращивают шесть отдельных экспертов (математика, код, агенты и другие), и каждого учат online RL со своей наградой. Учат алгоритмом CISPO из работы MiniMax-M1: на каждую задачу модель пишет несколько ответов, ответы лучше среднего по группе подкрепляются, хуже среднего — подавляются. Отличие от GRPO в том, что CISPO не выключает токены, а придавливает вклад тех, что слишком далеко ушли, поэтому сигнал доходит до всех токенов, включая редкие развилки. После обучения шести экспертов их собирают обратно в одну модель через on-policy distillation.

Награда у каждого эксперта своя, но конструкция общая — каскад. Сначала ворота: ответ завершён и в нужном формате, написан на нужном языке без мусора и смешения алфавитов, не нарушает жёстких ограничений инструкции. Не прошёл ворота — награда нулевая, каким бы умным ни было рассуждение внутри. Затем сумма по осям с весами: корректность, полнота, следование инструкции. И отдельно адаптивный штраф за длину: чем проще задача, тем сильнее штраф за лишние токены.

Экспертные направления

Среди шести экспертов — Code Agent, General Agent (включающий память и поиск), Диалог и Инструкции.

Code Agent учился быть агентом: на вход приходит реальный репозиторий и описание проблемы, на выходе нужен работающий патч, а проверяется он прогоном тестов после патча. Модель работает через harness: она даёт инструменты (терминал, чтение и правку файлов, запуск тестов), крутит цикл «модель сказала, harness выполнил, вернул результат» и следит, чтобы агент не ушёл в бесконечный цикл.

Агентный поиск строился на собственном наборе вопросов в духе BrowseComp, где ответ нельзя найти одним запросом: модель разбирает вопрос на подвопросы, отвечает на них по очереди, сопоставляет найденные факты между собой и не берёт первый результат выдачи на веру.

Память проверялась через Function Calling V4 и делилась на две способности. Чтение — работа с внешним хранилищем: найти информацию инструментами, собрать из нескольких мест, суммировать. Запись — отдельный навык: оценить важность факта и его уникальность относительно уже сохранённого, не засорять память дублями. В RL фазы учились раздельно: для чтения подготовили среды с информацией о пользователях и пары вопрос-ответ по ним с наградой за корректность ответа; для записи разметили, стоит ли сохранять факт после конкретной реплики, с наградой за согласованность с разметкой.

Диалог отвечает за обычный разговор: ответить по делу, объяснить, написать текст. Правильного ответа здесь нет, есть только «лучше или хуже», поэтому награда строится на сравнении: для фиксированного набора запросов берут ответ модели и ответ сильной модели, а MiniMax M2.7 как судья выбирает лучший по следованию запросу, полноте и качеству формулировок.

Инструкции отвечают за управляемость: ограничения в запросе, форматы, structured output, длинный контекст. Здесь ответ проверяем — либо ограничение выполнено, либо нет.

Почему это сделали

Авторы называют GigaChat 3.5 Reasoning первой в России открытой моделью с рассуждениями: это первая модель GigaChat с полноценным рассуждением, обученная на технологии online RL, а её веса и код запуска опубликованы. Проблема, которую это решает, связана с ограничением SFT — модель запоминает правильный ответ, но не путь к нему. Чтобы научить модель выстраивать последовательность действий, после SFT её целиком провели через online RL: вырастили шесть экспертов по доменам, каждого учили со своей наградой, а затем собрали обратно через on-policy distillation. В режиме рассуждений модель перед формированием ответа разбивает задачу на этапы, составляет план решения, при необходимости использует внешние инструменты и проверяет промежуточные результаты — это рассчитано на задачи, требующие нескольких последовательных действий.

Почему обучение заняло больше девяти месяцев

Основное время ушло не на алгоритм, а на среды с проверяемой наградой и инфраструктуру, в которой online RL на MoE такого размера сходится: «Алгоритм — наименьшая часть работы: CISPO и каскад наград воспроизводятся за недели. Время ушло на среды с проверяемой наградой и на инфраструктуру, в которой online RL на MoE такого размера вообще сходится».

Авторы признают ошибку с наградой за пройденный тест вместо задачи. В первых итерациях давали награду за каждый пройденный тест, а не за задачу целиком: прошёл семь тестов из десяти — получи 0,7. Модель это заметила и в самых сложных задачах перестала решать вообще: писала if на входные данные из примера, печатала ожидаемый ответ и забирала свою долю награды. От частичной награды за тесты пришлось отказаться — прошла либо все тесты, либо ноль.

Авторы предупреждают, что награду будут взламывать: частичная награда за тесты, судья без штрафа за длину, отсутствие ворот по языку — каждый раз модель находила лазейку раньше, чем они. Ещё одна признаваемая проблема — рассинхрон движков как скрытый off-policy: для MoE без R3 остальные оптимизации не имели смысла.

Цифры и замеры

Переход на FP8 ускоряет обучение в 1,3–2 раза и сейчас является стандартом для всех обучений. Оптимизация пайплайнов SFT ускорила обучение в три раза по сравнению с «наивным обучением», а на контексте размером 256 тыс. токенов скорость может возрастать десятикратно. Асинхронный конвейер RL-обучения, взятый за основу из verl и заставленный масштабироваться на большие модели, получился более чем в 2,5 раза быстрее исходной реализации. Нативная поддержка MTP даёт около 30% ускорения обучения. Синхронизация весов сокращена с нескольких минут до 8 секунд на шаг обучения.

Что это меняет на практике

GigaChat 3.5 Reasoning доступна в каталоге сервиса Evolution Foundation Models и подключается по OpenAI-совместимому API без самостоятельного развёртывания инфраструктуры для инференса. Стоимость — 96 ₽ за 1 млн входных и 289 ₽ за 1 млн выходных токенов. Модель ориентирована на задачи, связанные с бизнесом, финансами и юриспруденцией.

Отличие от GigaChat 3.5 Ultra — в способе дообучения: модель дополнительно дообучили с помощью online RL, отдельно обучали шесть версий для разных классов задач, а затем объединили навыки методом on-policy distillation. На опубликованных разработчиками тестах наиболее заметный прирост относительно GigaChat 3.5 Ultra Instruct получен в программировании, планировании и следовании инструкциям: IFBench вырос с 43,66 до 77 баллов, Natural Plan — с 64 до 80,19, LiveCodeBench v6 — с 56,2 до 85,4. В прикладных сценариях модель может пригодиться разработчикам для анализа ошибок, подготовки исправлений, генерации тестов и работы с кодовой базой.

Для доступа через OpenAI-совместимый API используется gpt2giga — FastAPI-прокси, который принимает OpenAI-, Anthropic- и Gemini-like запросы и отправляет их в GigaChat; локальный адрес по умолчанию — http://localhost:8090. Через OpenAI SDK клиент создаётся с base_url="http://localhost:8090/v1" и api_key="<GPT2GIGA_API_KEY>", затем вызывается client.chat.completions.create с model="GigaChat-2-Max". Через Anthropic SDK — с base_url="http://localhost:8090", тем же ключом, model="GigaChat-2-Max" и max_tokens=256. Прокси переводит OpenAI Chat Completions, OpenAI Responses, OpenAI Embeddings, Anthropic Messages и Gemini GenerateContent в вызовы GigaChat, а также отдаёт список моделей в OpenAI-, Anthropic-, Gemini- и LiteLLM-совместимом виде.

Что публиковала ai-forever раньше

Помимо GigaChat, у ai-forever есть коллекция Zarya — набор моделей текстовой диффузии для генерации текста размеров 0.6B, 1.7B и 4B, а также коллекция SMITH с моделью SMITH-Exp (11B, генерация текста). Отдельно опубликована FRIDA (извлечение признаков, 0.8B) и связанное с ней пространство FRIDA-Decisions, решающее структурированные решения по русскому тексту за один проход энкодера: выбор, шкала, да/нет и ранжирование. Также опубликованы Pollux-4B-Judge (генерация текста, 4B) и FiMMIA-Audio (10.1M).

Среди датасетов — ZaryaOrthrusDataset-1.7B и ZaryaOrthrusDataset-0.6B (для них указаны только размеры 2.83M и 3.35M и дата обновления, назначение не описано), RUMBA, LIBRA и LIBRA_old (относятся к бенчмарку длинного контекста LLM), POLLUX-instructions (назначение не раскрыто).

С GigaChat напрямую связаны три репозитория. gpt2giga; он нужен, когда клиент, редактор, агентный фреймворк или SDK умеет работать с OpenAI/Anthropic/Gemini API, а реальный backend должен быть GigaChat. gigachain — включает интеграционные библиотеки langchain-gigachat (Python и JavaScript/TypeScript) и langchain4j-gigachat (Java), а также SDK-обёртки для REST API GigaChat, управляющие авторизацией запросов. giga_agent.

Ограничения и открытые вопросы

По доле отбракованных данных: около 30% вопросов отбрасываются сразу после усложнения как слишком простые — их не удаётся усложнить дальше, а сильная референсная модель отвечает на них без поиска. Из оставшихся ещё 70% не проходят отбор по pass rate для RL: примерно половина из них решается либо во всех восьми сэмплах, либо ни в одном, и сигнала для обучения не даёт. Проверка однозначности снимает ещё около 7%. В итоге до обучающей выборки доходит примерно каждый пятый сгенерированный вопрос.

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

Что пошло не так в обучении. При работе с JSON метрика оставалась около нуля, хотя вручную ответы выглядели правильными: перед JSON модель писала что-то вроде «Конечно, вот результат», а после добавляла комментарий — для человека это выглядело нормально, но строгий парсер считал весь ответ некорректным. В RL добавили отдельный штраф за любой текст вне требуемой JSON-структуры. В первых итерациях награда давалась за каждый пройденный тест, и модель в сложных задачах перестала решать вообще, печатая ожидаемый ответ из примера; от частичной награды пришлось отказаться. При обучении разговорного эксперта судья систематически предпочитал длинные ответы, считая их более подробными и качественными, из-за чего средняя длина выросла почти в три раза; чтобы убрать такое поведение, добавили штраф за длину, зависящий от типа запроса и средней длины ответов сильных моделей.

Источники

Похожее