Подписывайтесь:

Блог AST-SoftPro

Strata: инференс-движок для Qwen3.8-Flash-Next — как локальная модель научилась работать с инструментами

08.10.2026 21 мин чтения
Strata: инференс-движок для Qwen3.8-Flash-Next — как локальная модель научилась работать с инструментами

Введение

Ещё два года назад модель на 125 миллиардов параметров означала серверную стойку, облачный счёт и ежемесячный платёж за API. Сегодня такую модель можно запустить на обычном игровом ПК — благодаря инференс-движку Strata с GitHub (репозиторий Niko1221/Strata), который гоняет Qwen3.8-Flash-Next на видеокарте от 12 ГБ и 32–64 ГБ оперативной памяти. Движок бесплатный, с открытым кодом и отдаёт локальный API, совместимый одновременно с OpenAI- и Anthropic-протоколом, — то есть к нему можно подключить Claude Code, Codex CLI, Cursor и любой собственный агент.

Но между «модель отвечает на вопросы» и «модель работает агентом» лежит пропасть из одной конкретной проблемы: вызов инструментов (tool calling). Именно она чаще всего ломает локальные агентные пайплайны — модель пишет вызов не в том формате, выдаёт пустой tool call или вовсе игнорирует объявленные инструменты. В этой статье разберём, как устроен Strata, как он решает проблему с tools и каких скоростей следует ожидать на практике: prompt processing 1500–2000 токенов/с, генерация около 50 токенов/с и контекст 116 000 токенов — цифры реального рабочего окружения автора статьи.

💡 Если вы рассматриваете локальную модель для агентной работы (кодинг-ассистент, автоматизация документов, внутренний ассистент компании), статья даст вам и критерии выбора железа, и конкретные настройки движка, и понимание границ применимости.

Что такое Strata и как он упаковывает 125B-модель в домашний ПК

Qwen3.8-Flash-Next — большая MoE-модель («смесь экспертов») от лаборатории Qwen: около 125 миллиардов параметров суммарно, но для каждого токена активируется лишь малая часть сети. Ключ к запуску такой модели на потребительском железе — именно разреженность: модель представляет собой команду из 24 576 небольших «специалистов» (экспертов), и каждому слову нужны только десять из них.

Strata распределяет работу по всему компьютеру, а не пытается запихнуть модель целиком в видеопамять:

  • Видеокарта держит несколько тысяч самых востребованных экспертов — они участвуют в расчётах чаще всего.

  • Оперативная память хранит всех экспертов целиком; процессор параллельно считает тех, кто не поместился на GPU.

  • SSD содержит большую поисковую таблицу (n-gram таблица фиксированного качества 4.5 байт на символ), по которой движок предсказывает, каких экспертов запросит следующий токен.

Второй приём — спекулятивное декодирование «угадал, потом проверил». Встроенный лёгкий draft-слой (MTP-голова самой модели) предлагает несколько следующих токенов за раз, а большая модель проверяет их одним проходом и принимает корректные. По данным документации Strata, это даёт те же ответы на 1.6–1.8 раза быстрее. Третий приём — чтение длинных промптов крупными блоками (до 8 192 токенов за проход), что и обеспечивает скорость предзаполнения свыше тысячи токенов в секунду.

Отдельно стоит отметить архитектуру внимания модели: линейный компонент Gated DeltaNet делает декодирование O(1) на токен, поэтому скорость генерации почти не падает с ростом контекста — важное свойство для агентных сценариев, где история разговора постоянно растёт.

Аппаратные требования

Компонент Минимум Комментарий
Видеокарта NVIDIA RTX 20/30/40/50 или AMD RX 7800 XT и новее, от 12 ГБ видеопамяти Поддерживаются и старые карты (Tesla P40/V100, GTX 10) — через сообщество
Оперативная память 32 ГБ Определяет, какой размер модели влезет; 64 ГБ — все размеры
Диск ~80 ГБ свободно Желательно NVMe SSD: первый старт заметно быстрее
ОС Windows 10/11 или Linux (Ubuntu) Один и тот же установщик для NVIDIA и AMD

Установка предельно простая: запустите START-HERE.bat на Windows или ./setup.sh на Linux. Установщик сам определяет карту, предлагает размер модели и длину контекста; скачивание модели (~70 ГБ) продолжается с места обрыва при повторном запуске. Есть и режим «пусть ИИ установит»: в Claude Code, Cursor или Copilot достаточно вставить ссылку на репозиторий с просьбой следовать docs/AI_SETUP.md — ассистент сам подберёт конфигурацию под ваше железо.

Вызов инструментов: почему локальная модель «не умеет» вызывать инструменты

Вызов инструментов — это протокол взаимодействия: приложение объявляет модели список инструментов (чтение файла, запись, запуск команды, поиск и т. д.), а модель обязана вернуть структурированный вызов — имя инструмента и аргументы. Облачные флагманы делают это нативно. С локальными квантованными моделями возникают четыре типовые проблемы.

1. Модель пишет вызов «не тем форматом». Qwen-семейство в чат-шаблоне использует XML-подобный синтаксис (теги вызова инструмента и имени функции), тогда как OpenAI API ожидает JSON-массив вызовов в ответе, а Anthropic API — специальные блоки вызова. Квантованная модель, обученная на «родном» шаблоне, нередко выдаёт XML внутри текстового ответа. Клиент (Claude Code, Codex) такой вызов не видит: агент считает, что модель просто ответила текстом, и цикл ломается. Это общая беда локальных агентов — сообщество vLLM, например, лечит её отдельными парсерами (параметр выбора парсера со значением qwen3_xml).

2. Пустые tool calls. Характерная жалоба владельцев Qwen3.x-серий: модель иногда возвращает вызов с пустыми аргументами — агентный цикл при этом завершается или зацикливается. Особенно заметно на агрессивных квантах и при длинном контексте, где модель «теряет» часть инструкции.

3. Потеря аргументов при спекулятивном декодировании. Быстрая генерация JSON-аргументов зависит от качества draft-подсказок. Изначально MTP-draft слой Strata предлагал токены только из англо-кодового подмножества словаря (40 525 id) — на русском, французском и CJK-текстах принятых подсказок было мало, и агентные ответы шли заметно медленнее.

4. «Пустые» ходы в истории. Серверная обвязка Strata до версии 0.1.40 сохраняла в истории assistant-ходы без текста; следующая модельная реплика начинала копировать эти пустые повороты, что сбивало агентный ритм (issue #843).

Как Strata решает эти проблемы

Разработчик пошёл не путём «дообучения модели», а путём исправления движка — и это важный архитектурный выбор для локального инференса.

Восстановитель вызовов инструментов (tool_call_recovery). В конфиг strata-<model>.json добавляется параметр включения восстановления вызовов. После этого сервер распознаёт вызов объявленного инструмента, даже если модель записала его нестандартно: как JSON вида «имя + аргументы» внутри блока кода, как XML-блок в начале строки или как второй вызов внутри одного тега (причём параметры второго вызова не «сливаются» с первым). Всё остальное, написанное в этих формах, остаётся обычным текстом — то есть восстановление работает точечно и не превращает случайный JSON в теле статьи в команду. Модель при этом по-прежнему не может вызывать «системные» инструменты вроде веб-поиска — только те, что объявлены в запросе.

Унифицированный API под два протокола. Strata одновременно отдаёт OpenAI-совместимый эндпоинт (базовый путь /v1 на локальном сервере), Anthropic-совместимый путь /v1/messages (для Claude Code достаточно указать базовый адрес сервера через переменную ANTHROPIC_BASE_URL) и OpenAI Responses API для Codex CLI. Конвертация между XML-шаблоном модели и JSON-схемой клиента происходит на стороне сервера — приложение видит корректные вызовы инструментов, даже если «под капотом» модель рассуждала в своём формате.

Расширение draft-словаря. Начиная с версии 0.1.27 MTP-draft слой умеет работать с расширенными подмножествами словаря: полная кириллица (флаг --draft-vocab cyrillic, 58 963 id) подняла скорость русских ответов со 83 до 109 токенов/с на RTX 5090; французский subset (fr, версия 0.1.39) повысил долю принятых подсказок во французских ответах с 0.51 до 0.60 без потери скорости на английском и коде. Для русскоязычных агентных проектов это прямо влияет на отзывчивость инструментов.

Мелкие, но важные исправления агентного цикла. С 0.1.40 пустые реплики ассистента по умолчанию исключаются из истории (возврат к старому поведению — через переменную окружения STRATA_KEEP_EMPTY_TURNS). Для клиентов вроде Claude Code, которые шлют много коротких служебных запросов, добавлен режим «рассуждать только по запросу» (anthropic_thinking: on_request) — рассуждение включается только когда клиент явно просит, а не на каждый вспомогательный вызов.

⚠️ Важно понимать границы: локальная квантованная модель остаётся чувствительной к качеству промпта и длине контекста. Даже с tool_call_recovery агентные цепочки на 20+ последовательных вызовов инструментов будут заметно «человечнее» в ошибках, чем облачный флагман. Для критичных бизнес-процессов (доступ к реальным данным, платёжные операции) такие риски должен оценивать специалист — выбор движка лишь половина задачи, вторая половина — корректная реализация с учётом edge-кейсов и безопасности.

Скорость на практике: PP 1500–2000, TG ~50, контекст 116K

Документация Strata приводит замеренные таблицы на RTX 5070 (12 ГБ), Ryzen 5 7600, 64 ГБ DDR5 — Windows, движок 0.1.26 с настройками установщика (предзаполнение в авто-режиме, 8-битный кэш внимания выше 4K, стриминг кэша от 64K). Для кванта IQ3_XXS (того самого формата GSQ-RCO от ISTA DASLab):

Длина промпта Prompt processing, токенов/с
1K 482
4K 1007
32K 1745
64K 1609
128K 1602
Длина контекста Output (генерация), токенов/с
1K 61.9
4K 61.6
32K 58.5
64K 57.2
128K 49.0

Как эти цифры соотносятся с реальным рабочим окружением автора этой статьи? Статья написана моделью qwen3.8-flash-next-iq3_xxs (квант GSQ-RCO от ISTA DASLab, 75.8 ГБ: 47 ГБ резидентно + 28.8 ГБ на диске) под управлением Strata на Ubuntu-сервере (плата X99, два процессора Intel Xeon E5-2680v4, 64 ГБ регистровой ECC-памяти) с двумя NVIDIA RTX 4070 (по 12 ГБ каждая) и контекстом 116 000 токенов. Замеренные там показатели: prompt processing 1500–2000 токенов/с, генерация ~50 токенов/с. Это ровно та зона, где находятся табличные значения IQ3_XXS на 32–128K (1600–1745 PP и 49–58 TG): две видеокарты в мульти-GPU конфигурации Strata держат верхнюю границу PP-диапазона, а более скромные по объёму памяти карты 12 ГБ дают нижнюю границу генерации.

Что из этого следует для планирования рабочего места:

  • Предзаполнение (PP) — сильная сторона движка. Промпт на 30–40 тысяч токенов (большой файл, длинная история агента) обрабатывается за 20–30 секунд. Для сравнения: README Strata оценивает чтение первого сообщения чата примерно в одну минуту на 30 000 токенов — последующие реплики стартуют за секунды благодаря кэшу промпта.

  • Генерация (TG) ~50 токенов/с — быстрее скорости чтения, но заметно медленнее облачных API (те же таблицы дают Q2_0 до 93 токенов/с). Для агентных задач это приемлемо: tool call — короткий JSON, его «узкое место» не генерация, а предзаполнение обновлённой истории.

  • Контекст 116K для IQ3_XXS на 64 ГБ оперативной памяти — комфортный режим: установщик сам рекомендует до 128K для этого кванта (эксперты 43 ГБ + кэш внимания). На сервере с 128 ГБ и двумя GPU запас ещё больше.

Что ещё ускоряет движок (и когда это нужно)

  • KV-стриминг (с 0.1.5): при контексте от 64K кэш внимания хранится в оперативной памяти, в видеопамяти остаётся только читаемая вниманием часть — больше экспертов помещается на GPU (+6% на 128K, +23% на 262K для Q2_0).

  • Гибридный кэш внимания K8V4 (PR #120): ключи 8 бит, значения ротированные 4 бита — на 23% меньше памяти, на RTX 3090 с Coder-версией генерация выросла с 85 до 99 токенов/с при контексте 198K.

  • Fused int8-ядра (0.1.36): предзаполнение Q2_0 ускорилось на 16–22% на картах RTX 30 и новее.

  • Связанные драфты со случайным выбором (opt-in через переменные окружения STRATA_SPEC_COUPLED и STRATA_SPEC_GUMBEL): при температуре выше нуля доля принятых подсказок выросла с 52.8% до 59.9%, генерация +9% — актуально для «креативных» агентных прогонов.

💡 Практический совет: для агентной работы на русском языке сразу включайте расширенный словарь подсказок с кириллицей (флаг --draft-vocab cyrillic) и восстановление вызовов инструментов в конфиге. Это два переключателя, которые напрямую влияют на скорость и надёжность вызовов инструментов в кириллических проектах — типичная ошибка новичков ограничиться настройками по умолчанию.

Сравнение с альтернативами: llama.cpp, vLLM, SGLang

Strata не единственный способ гонять Flash-Next локально — но у него своя ниша.

Критерий Strata llama.cpp vLLM / SGLang
MoE 125B на 64 ГБ оперативной памяти Да (нативный многоуровневый кэш экспертов) Частично (mmap + lazy mode, медленнее) Нет (нужны сотни ГБ видеопамяти или offload с потерей скорости)
API-совместимость OpenAI + Anthropic + Responses OpenAI-подобный (через llama-server) OpenAI
Кэш внимания «из коробки» Да, с recovery-парсером XML/JSON Зависит от чат-шаблона и парсера клиента Нужен отдельный парсер вызовов (например qwen3_xml)
Установка для неквалифицированного пользователя Один запуск: стартовый скрипт на Windows или Linux (см. раздел про установку) Ручная сборка/запуск Docker + конфигурация
Мульти-GPU Да (документированный режим) Ограниченно Да, но для больших пулов видеопамяти

Для задач «один ПК — один агент» Strata выигрывает именно связкой MoE-кэша и двойного API. Для сервера с 4×24 ГБ и одним промптом в батче vLLM может дать более высокую генерацию. Разница принципиальная: llama.cpp/vLLM оптимизируют dense-модели, а Strata спроектирован под сверхразреженные MoE — и это заметно по скоростям PP на длинном контексте.

Рекомендации по внедрению

  1. Подбирайте квант под оперативную память, а не «максимальный». При 32 ГБ — Coder-версия (убраны половина экспертов, ~91% результата полной модели по SWE-bench Verified от авторов кванта); при 64 ГБ — IQ2_XS как баланс или IQ3_XXS/IQ3_S для качества; при 96+ ГБ — IQ3_S или Unsloth UD-IQ4_XS.

  2. Не бойтесь первого запуска. Загрузка 35–55 ГБ в RAM может на 1–3 минуты подвесить ПК — это нормальное поведение движка, а не зависание.

  3. Для агентов фиксируйте контекст разумно. 116–128K достаточно для большинства кодинг-сессий; гонка за 262K на 64 ГБ оперативной памяти упирается в память и замедляет декодирование.

  4. Тестируйте вызовы инструментов до внедрения. Прогоните короткий агентный сценарий (5–10 вызовов инструментов) и посмотрите логи strata-<model>.log — если модель систематически пишет XML, включайте восстановление вызовов инструментов в конфиге.

  5. Оценивайте риски перед продакшном. Локальный агент с доступом к файловой системе и сети — это поверхность атак (prompt injection через читаемые документы, некорректные вызовы инструментов). Для бизнес-внедрений архитектуру изоляции агента стоит проектировать со специалистом: команды, которые доверяют критичные задачи опытным разработчикам, экономят время на исправлении ошибок, предотвратимых на этапе проектирования.

Заключение

Strata показывает, что граница «локальный ИИ — облачный ИИ» сдвигается не столько квантованием, сколько инженерией движка: многоуровневый кэш экспертов, спекулятивное декодирование и честный парсинг вызовов инструментов превращают 125-миллиардную MoE-модель в рабочего агента на обычном ПК. Скорости prompt processing 1500–2000 токенов/с при генерации ~50 токенов/с и контексте 116K (замерено на Ubuntu-сервере, X99, 2×Xeon E5-2680v4, 2×RTX 4070 12 ГБ, квант IQ3_XXS от ISTA DASLab) означают, что агент с десятками тысяч токенов истории отвечает практически без пауз между шагами.

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

Источники