SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-29

Как сэкономить на токенах агента через Paritok

Изучите работу шлюза Paritok для оптимизации запросов к LLM. Инструмент сокращает объем данных на 74 процента за счет сжатия вывода и чтения файлов. Разбор математики окупаемости.

Как 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 МБ), оставляет подходящие инструменты, а остальные заменяет заглушками. Объем блока сокращается примерно до 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%, при этом вы будете платить по тарифам frontier-моделей ради экономии на тех же тарифах.

Оценивайте столбец качества объективно. Сохранение 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 достаточно для работы в режиме CPU-only.

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

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

Укажите рядом 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 долларов за миллион выходных токенов, а чтение из кэша промптов (prompt-cache read) обходится в 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 в процессе работы, действительно ли снижается количество входных токенов у вашего провайдера и продолжает ли агент выполнять работу. Для вашей конфигурации эти проверки значат гораздо больше, чем любые опубликованные бенчмарки.

О том, как это решение соотносится с вашими остальными инструментами: self-hosted LiteLLM gateway маршрутизирует и учитывает запросы, не изменяя их содержимое, поэтому эти два решения закрывают разные задачи и могут использоваться совместно, при этом 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 года. Однако это также отправляет ваши промпты и файлы, которые читает агент, третьей стороне до того, как они достигнут вашего провайдера моделей. Если вы используете самостоятельный хостинг, чтобы хранить код на инфраструктуре под вашим контролем, этот вариант сводит на нет причину, по которой вы начали. Самостоятельный хостинг позволяет держать и контекст, и API-ключ провайдера на вашей собственной машине.