SSD Nodes Learn 🎉 VPS от $4.99/мес
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-08

Как снизить расходы на токены с помощью Paritok

Paritok сжимает запросы агентов разработки через прокси на базе Qwen3-4B. Узнайте, как технология сокращает объем данных на 74 процента и окупается ли использование шлюза v1.3.0.

Что Paritok делает с запросом

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

Провайдер выставляет счет за объем данных, который до него доходит, поэтому меньший объем данных означает меньший счет. В этом заключается основная идея. Это утверждение отличается от концепции «увеличения длины контекста», и именно поэтому данный инструмент представляет интерес, а не просто является средством для наведения порядка.

Проект находится на ранней стадии. Его первые публичные теги датированы июлем 2026 года, а текущий тег — v1.3.0 от 5 августа 2026 года. Веса модели и код шлюза распространяются по лицензии Apache 2.0. Модель сжатия представляет собой LoRA-адаптер (low-rank adaptation) для Qwen3-4B-Instruct-2507, обученный на 45 000 примерах, дистиллированных от «учителя» на основе реальных траекторий работы агентов разработки.

Почему это не обрезка контекста

Обрезка удаляет данные. Когда агент приближается к лимиту контекста и отбрасывает самые старые сообщения, файл, прочитанный на этапе 3, исчезает. Если этот файл понадобится на этапе 20, агент прочитает его снова, и вы заплатите за эти токены второй раз. Экономия была лишь временной.

Paritok заменяет сегмент более короткой формой с тегом [REF:id] и сохраняет полный текст на прокси-сервере. Модель восстанавливает сегмент, вызывая read_original или expand_context. Это меняет характер сбоев. Обрезка приводит к забыванию, о котором система не сообщает. Сжатие приводит к тому, что модель получает сжатую версию с потерей данных, но модель может запросить оригинал, если сжатого варианта недостаточно.

Фильтр инструментов работает аналогичным образом. Отфильтрованные схемы инструментов заменяются заглушками, а не удаляются, и модель восстанавливает нужную схему, вызывая gateway_search_tools. Это важно, так как фильтр, который навсегда скрывает инструмент, ограничивает возможности агента, и вы узнаете об этом только тогда, когда задача тихо завершится ошибкой.

Три рычага и один бесплатный

Первый рычаг — это фильтр схемы инструментов. Каждый запрос содержит полный массив tools. В сессии Claude Code с несколькими подключенными серверами MCP (model context protocol) этот блок занимает примерно 29,000 токенов. Фильтр выполняет эмбеддинг запроса пользователя и описания каждого инструмента с помощью BAAI/bge-small-en-v1.5 (модель эмбеддингов весом 130 MB), оставляет только подходящие инструменты, а остальные заменяет заглушками. Размер блока сокращается примерно до 8,000 токенов. Эта модель эмбеддингов работает на CPU.

Второй рычаг — сжатие контента, и именно для этой части требуется модель 4B на GPU. Чтение файлов, вывод инструментов и история переписываются, сокращаясь до 25.7% от исходного размера. Именно отсюда берется показатель в 74%. Читайте внимательно: 74% — это коэффициент сжатия для обрабатываемого контента, а не размер экономии в вашем счете.

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

Только для второго рычага нужен GPU. Это самое полезное предложение на данной странице. pip install "paritok[toolselect]" предоставляет фильтр инструментов на обычном CPU VPS, и это та часть продукта, которая не стоит вам ничего в месяц. Попробуйте её, прежде чем арендовать видеокарту.

Что измерял проект и на каком стенде

ChartSWE-bench Lite: compression rate against solve quality retained (project's published figures)
The data behind this chart
[
  {
    "label": "Paritok-4B-v1",
    "compressed_to_pct": 25.7,
    "quality_retained_pct": 86.5
  },
  {
    "label": "gpt-4.1-mini",
    "compressed_to_pct": 50.2,
    "quality_retained_pct": 85.6
  },
  {
    "label": "gpt-5",
    "compressed_to_pct": 61.9,
    "quality_retained_pct": 93.6
  }
]

Это опубликованные показатели самого проекта, измеренные на его собственном стенде в рамках SWE-bench Lite. Paritok-4B-v1 сжимает контент до 25.7% от исходного размера, сохраняя при этом 86.5% от исходного показателя успешных решений. Использование gpt-5 в качестве компрессора позволяет сохранить больше качества, 93.6%, но сжатие составляет лишь 61.9%, при этом вы будете платить по тарифам передовых моделей, чтобы сэкономить на стоимости запросов к этим же моделям.

Оценивайте столбец качества объективно. Сохранение 86.5% от показателя успешных решений означает, что при сжатых прогонах не были решены задачи, которые решались без сжатия — это почти одно нерешенное задание из семи. В рамках бенчмарка это просто число в таблице. В вашем репозитории это задача, которую вы запускаете дважды.

ChartReported input-token saving as a session grows (project's own harness)
The data behind this chart
[
  {
    "label": "Turn 1",
    "saved_pct": 25
  },
  {
    "label": "Turn 5",
    "saved_pct": 39
  },
  {
    "label": "Turn 12",
    "saved_pct": 57
  },
  {
    "label": "Turn 20",
    "saved_pct": 63
  }
]

Экономия ресурсов растет по мере выполнения сессии, так как история накапливается, а сжатию подвергается именно она. Проект сообщает об экономии около 25% на одном шаге, 39% к 5-му шагу и 63% к 20-му шагу. Также указано, где этот рост прекращается: при лимите в 200,000 токенов абсолютная экономия стабилизируется на уровне около 48,000 токенов за шаг, примерно между 8-м и 12-м шагами, так как после заполнения контекста история перестает расти. Часто упоминаемая цифра «более 85%» описывает сессии с полностью заполненным контекстом. Это лучший сценарий, поэтому не стоит строить планы, опираясь только на него.

Окупается ли GPU с 24 GB для Paritok?

Карта с 24 GB — это стандартная единица аренды для модели такого размера. По состоянию на 7 августа 2026 года медианная цена аренды RTX 4090 с 24 GB по запросу составляла $0.44 в час, при этом самые дешевые предложения были около $0.20. Возьмем $0.44. Если оставить сервер включенным на весь месяц, это 730 часов, что дает $321. При работе только в рабочее время, по 8 часов в день в течение 22 дней, получается 176 часов, что составляет $77.

Теперь переведем сокращение токенов в денежный эквивалент. Сокращение применяется к входным токенам. Выходные токены проходят через прокси без изменений, поэтому их количество не меняется. Предположим, что входные токены составляют 80% от ваших общих затрат, что типично для агента-программиста, и проверьте это допущение по своему счету. Ваша экономия в долларах — это сокращение количества токенов, умноженное на 0.8.

ChartMonthly agent bill needed before a $0.44/hour 24GB card pays for itself
The data behind this chart
[
  {
    "label": "Turn 5 (39% saved)",
    "bill_always_on_usd": "1,030",
    "bill_workday_only_usd": 248
  },
  {
    "label": "Turn 20 (63% saved)",
    "bill_always_on_usd": 637,
    "bill_workday_only_usd": 154
  },
  {
    "label": "Saturated (85% saved)",
    "bill_always_on_usd": 472,
    "bill_workday_only_usd": 114
  }
]

При показателе насыщенной сессии в 85% вы сохраняете 68% от счета, поэтому карта, оставленная включенной, окупается, как только ваши ежемесячные расходы на агента превышают примерно $472, или около $114, если вы останавливаете инстанс вне рабочих часов. При показателе turn-20 в 63% эти значения становятся $637 и $154. При показателе turn-5 в 39%, что соответствует коротким сессиям, вам потребуется около $1,030 в месяц, чтобы аренда карты вообще имела смысл.

Два фактора делают этот вариант выгоднее, чем предполагает таблица. Модели не требуется 24 GB: сборка q4 занимает около 2.5 GB, а сборка bf16 — около 8 GB, поэтому карта меньшего объема или GPU-сервер, который вы уже используете для других задач, снижает все показатели в этой таблице. А остановка инстанса, когда никто не программирует, — это самый эффективный рычаг, так как он сокращает расходы на аренду примерно на три четверти.

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

Если вы сравниваете арендуемые часы GPU с API-токенами в целом, точка безубыточности между GPU VPS и API-токенами использует ту же арифметику для самого процесса инференса.

Запуск шлюза Paritok на VPS

Требуется Python 3.10 или новее. В Ubuntu 24.04 поставляется Python 3.12, поэтому стандартного образа VPS достаточно для работы версии без поддержки GPU.

sudo apt update && sudo apt install -y python3-venv curl
python3 -m venv /opt/paritok/venv
source /opt/paritok/venv/bin/activate
pip install "paritok[proxy]==1.3.0"
pip install "paritok[toolselect]==1.3.0"

Зафиксируйте версию. Репозиторий выпустил тег v1.2.8 29 июля 2026 года и v1.3.0 5 августа 2026 года; проект, развивающийся с такой скоростью, меняет ключи конфигурации между релизами. Обычный pip install paritok или git clone из main приведет к тому, что на следующей неделе вы получите другой шлюз, не имея записей о том, какая именно версия выдала измеренные вами показатели.

Бэкендом по умолчанию является Ollama. Загрузите модель, а затем присвойте ей короткое имя, которое ожидает прокси.

ollama pull paritok/paritok-4b-v1
ollama cp paritok/paritok-4b-v1 paritok-4b-v1

Запишите paritok.yaml рядом с ней. use_gpu_server: false — это то, что обеспечивает сжатие на вашем собственном оборудовании.

use_gpu_server: false
local_model:
  base_url: http://localhost:11434
paritok proxy --port 8080 --config-file paritok.yaml

paritok up — это сокращение для всех вышеперечисленных действий: команда загружает модель, если она отсутствует, и запускает прокси на порту 8080. Проверьте прокси перед тем, как направлять на него агент.

curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/stats

/health возвращает небольшой JSON-объект, содержащий "status":"ok" и строку версии. /stats возвращает общие показатели сжатия и собственную оценку прокси по объему сэкономленных данных. Воспринимайте эту оценку как самопроверку прокси и сверяйте её со страницей статистики использования у вашего провайдера.

Для обеспечения высокой пропускной способности, а не удобства, vLLM запускает адаптер поверх базовой модели.

vllm serve Qwen/Qwen3-4B-Instruct-2507 \
  --enable-lora \
  --lora-modules paritok-4b-v1=paritok/paritok-4b-v1 \
  --port 8000

Ollama быстрее в развертывании. vLLM значительно лучше справляется с параллельными запросами, что становится важным, как только один сервер начинает обслуживать более одного агента. Практическая разница между Ollama и vLLM — это то, что поможет вам сделать выбор.

Укажите агенту адрес прокси через переменные окружения базового URL.

export ANTHROPIC_BASE_URL=http://127.0.0.1:8080
export OPENAI_BASE_URL=http://127.0.0.1:8080

Codex CLI игнорирует OPENAI_BASE_URL, поэтому проект записывает ~/.codex/config.toml за вас, когда codex.enabled: true задана в paritok.yaml. Если экспортировать переменную отдельно, Codex продолжит обращаться к провайдеру напрямую; признаком этого является счетчик /stats, который не меняется во время вашей работы.

Держите слушатель на 127.0.0.1, никогда не используйте 0.0.0.0. Прокси пересылает ваш API-ключ провайдера вышестоящему узлу, поэтому прокси, доступный из Интернета, становится открытым релеем для этого ключа: любой, кто обнаружит порт, будет тратить ваши деньги, даже не видя самого ключа. Получайте доступ к нему с ноутбука через SSH-туннель или VPN вместо открытия порта.

Запустите его под управлением systemd, чтобы сервис возобновлял работу после перезагрузки. Настройте пути в соответствии с вашей установкой.

[Unit]
Description=Paritok compression proxy
After=network-online.target

[Service]
User=paritok
WorkingDirectory=/opt/paritok
ExecStart=/opt/paritok/venv/bin/paritok proxy --port 8080 --config-file /opt/paritok/paritok.yaml
Restart=on-failure

[Install]
WantedBy=multi-user.target

Включите его с помощью sudo systemctl enable --now paritok, затем снова выполните curl /health. Если юнит запускается и сразу завершает работу, это обычно означает, что путь к файлу конфигурации указан неверно, а journalctl -u paritok -n 50 выведет причину ошибки.

Размещаемый вариант и его стоимость

Проект также предлагает сжатие как услугу. Установите use_gpu_server: true с API-ключом, и модель 4B будет работать на их оборудовании. Стоимость составляет $0.30 за миллион обработанных токенов; согласно документации, до конца августа 2026 года услуга предоставляется бесплатно. Это избавляет от необходимости арендовать GPU и выполнять все вышеописанные операции по обслуживанию.

Это также означает, что ваши промпты и файлы, которые считывает агент, покидают вашу машину и попадают к третьей стороне, прежде чем достигнут провайдера модели. Self-hosting существует именно для того, чтобы избежать этого промежуточного звена. Решите, что для вас важнее, прежде чем устанавливать этот флаг, так как изменение флага — это одна строка кода, а последствия — нет.

Как оценить результаты до и после внедрения

Опубликованные показатели принадлежат проекту и получены в ходе тестирования на SWE-bench Lite. Ваш репозиторий — это не SWE-bench Lite. Проведите собственные измерения.

  • Отработайте одну обычную неделю без прокси в цепочке запросов. Зафиксируйте количество входных токенов (input tokens), токенов из кэша (cache-read tokens) и выходных токенов (output tokens) отдельными строками, как они указаны на странице статистики вашего провайдера, а не общей суммой в долларах.
  • Отработайте следующую неделю с использованием прокси, выполняя аналогичный объем задач.
  • Сравните показатели входных токенов и токенов из кэша. Количество выходных токенов должно остаться примерно на том же уровне, так как прокси их не сжимает. Если объем выходных данных значительно изменился, значит, помимо прокси, на процесс повлияли другие факторы.
  • Подсчитайте количество задач, которые пришлось переделывать. Это качественная сторона вопроса, которую не отображает ни один дашборд.
  • Прибавьте затраты на GPU ко второй неделе перед сравнением итоговых сумм.

Разделение входных и выходных токенов важно, так как их стоимость сильно различается, а компрессор воздействует только на одну из этих категорий. По состоянию на август 2026 года Claude Sonnet 4.6 стоит $3 за миллион входных токенов и $15 за миллион выходных токенов, а чтение из кэша промптов обходится в 10% от стоимости входных токенов — $0.30 за миллион. Разница в стоимости входных и выходных токенов определяет, будет ли для вас выгоден компрессор на стороне ввода. Куда на самом деле уходят токены Claude Code поможет понять, какая часть вашего контекста достаточно велика, чтобы её стоило сжимать.

Кэширование промптов (prompt caching) особенно усложняет расчеты для фильтров инструментов. Блок инструментов располагается в начале запроса, поэтому после первого обращения он обычно попадает в кэш по цене 10% от стоимости входных токенов. Сокращение 21,000 токенов из кэшированного блока экономит 21,000 по цене $0.30 за миллион, что составляет около $0.006 за запрос, а не $0.063, как можно было бы предположить исходя из стоимости без кэширования. Проект сохраняет отфильтрованный блок неизменным на протяжении всей сессии, чтобы кэшированный префикс не менялся. Фильтр, который перевыбирал бы инструменты на каждом шаге, привел бы к инвалидации этого префикса и стоил бы дороже, чем сэкономленные средства.

Что еще не подтверждено

Все приведенные выше показатели производительности взяты из самого проекта. Независимого воспроизведения результатов SWE-bench Lite не существует, а учитывая, что первые теги датированы июлем 2026 года, у кода практически отсутствует история эксплуатации. Коэффициент сжатия и показатель сохранности качества измерены стороной, которая заинтересована в их высоких значениях. Это не означает, что они неверны. Это означает, что они не подтверждены, и вам следует относиться к ним иначе, чем к цифрам, полученным вами самостоятельно.

Стоит знать об одном задокументированном поведении, прежде чем винить в проблемах свою настройку. Модель эмбеддингов, используемая фильтром инструмента, загружается при первом запросе, а не при запуске, поэтому проект рекомендует прогрев в течение 10–15 секунд, после чего время отклика составляет около 15 мс на вызов. Отправьте один тестовый запрос после запуска прокси, и ваш первый реальный шаг агента не будет выглядеть зависшим.

Четыре вещи, которые вы можете проверить самостоятельно за полдня: запускается ли прокси и остается ли он в рабочем состоянии, меняется ли /stats во время вашей работы, действительно ли снижается объем входных токенов у вашего провайдера и завершает ли агент работу. Для вашей конфигурации эти показатели значат гораздо больше, чем любой опубликованный бенчмарк.

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

FAQ

Снижает ли Paritok мой счет за API или только объем используемого контекста?

Он снижает счет, так как прокси переписывает запрос до того, как он достигает провайдера, а провайдер выставляет счет за полученные данные. Размер этого снижения меньше, чем может показаться из заголовков. Цифра 74% — это коэффициент сжатия контента, который подвергается сжатию. В сквозном режиме проект показывает около 25% экономии на одном шаге и 63% к 20-му шагу, при этом сокращаются только входные токены. Выходные токены проходят без изменений.

Сколько ресурсов GPU нужно для самостоятельного хостинга модели сжатия?

Сборка q4 занимает около 2.5 GB, а сборка bf16 — около 8 GB, поэтому модель помещается на карту с 24 GB с большим запасом. Карта меньшего объема также подойдет, что изменит расчет окупаемости в вашу пользу. Фильтр схем инструментов (tool-schema) вообще не требует GPU: он использует BAAI/bge-small-en-v1.5, модель эмбеддингов размером 130 MB, которая работает на CPU. Установите paritok[toolselect] на обычный VPS, и вы получите сокращение блоков инструментов ценой небольшого объема RAM.

Что произойдет, если компрессор удалит то, что нужно агенту?

Ничего не удаляется. Сжатые сегменты помечаются тегом [REF:id], и модель восстанавливает полный текст с помощью read_original или expand_context. Отфильтрованные схемы инструментов заменяются заглушками, а не удаляются, и модель восстанавливает их с помощью gateway_search_tools. Реальный риск менее заметен, чем отсутствие файла: модель работает с данными с потерями и может не понять, что ей нужно запросить оригинал. Именно это измеряет показатель сохранения качества 86.5% на SWE-bench Lite.

Почему мой первый запрос выполняется пятнадцать секунд?

Модель эмбеддингов, отвечающая за фильтрацию инструментов, загружается при первом запросе, а не при запуске. Проект указывает время прогрева от 10 до 15 секунд, после чего каждый вызов занимает около 15 ms. Отправьте один тестовый запрос с curl после запуска прокси, и первый реальный шаг агента не будет задерживаться.

Стоит ли использовать облачный GPU-сервер вместо самостоятельного хостинга?

Это избавляет от аренды GPU и обслуживания, стоимость составляет $0.30 за миллион обработанных токенов по состоянию на август 2026 года. Однако это также отправляет ваши промпты и файлы, которые читает агент, третьей стороне до того, как они попадут к вашему провайдеру моделей. Если вы используете self-hosting, чтобы хранить код на инфраструктуре под вашим контролем, этот вариант сводит на нет причину, по которой вы начали. Самостоятельный хостинг позволяет хранить и контекст, и API-ключ провайдера на вашем собственном сервере.