Наша собственная статистика посещений включена всегда. Google Analytics помогает нам понять, как пользуются нашими публичными страницами (но не вашим рабочим пространством после входа), и включается только с вашего разрешения. См. нашу политику конфиденциальности.

Разделы · 19
  1. 01Задача: 50 аккаунтов брендов, одна сравнительная таблица
  2. 02Стоит ли вообще разделять? Что говорит руководство Anthropic от 22 октября
  3. 03Субагенты Claude Code: файл, поле model и список разрешённых инструментов
  4. 04Выбор модели для субагентов Claude Code: четыре шага и ловушка алиаса haiku
  5. 05Три вызова EveryInfra, которые делает каждый воркер
  6. 06Один реальный обмен по MCP: что отправляет модель и что приходит в ответ
  7. 07Тест первый: сколько весят сырые данные одного аккаунта?
  8. 08Почему экономия контекста реальна: три уровня расчёта для субагентов Haiku в Claude Code
  9. 09Тест второй: сколько воркеров запускать параллельно?
  10. 10Как обрабатывать 429: реальный ответ и схема повторов с задержкой
  11. 11Сбои и списания: 422, пустые результаты и неверные имена пользователей
  12. 12Расходы: плата за API в зависимости от числа аккаунтов
  13. 13Формат сводки: от одной строки зависит, что сможет сделать основная сессия
  14. 14Что получает основная сессия: таблица брендов спортивной одежды из США
  15. 15Тот же воркер на других платформах: Instagram и YouTube
  16. 16Ограничения и важные моменты
  17. 17Последние изменения
  18. 18FAQ
  19. 19Источники

Субагенты Claude Code: воркеры на Haiku для анализа аккаунтов TikTok

Один брендовый аккаунт в TikTok занимает около 9 700 токенов сырых данных. Субагент на Haiku 5.5 возвращает сводку на 95 токенов. 98 реальных вызовов API, обработка ответов 429 и стоимость для 50 аккаунтов.

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

Oct 26, 2026, с 17:25 до 17:48 по сингапурскому времени (SGT) мы получили через API EveryInfra данные 18 брендовых аккаунтов в TikTok. По каждому аккаунту мы взяли профиль, 10 последних видео и комментарии к одному видео. Сырые результаты в среднем занимали 38 794 байта на аккаунт. По соотношению со страницы тарифов Anthropic (10 kB примерно равны 2 500 токенов) это около 9 700 токенов. Сводка по тому же аккаунту занимает около 382 байт, или 95 токенов. Именно эту разницу, примерно 100x, субагенты Claude Code экономят в основном контексте.

Второй результат легко упустить. Мы ограничили тестовый ключ 10 запросами в минуту, хотя по умолчанию для аккаунта действует лимит 60 запросов в минуту. Шесть параллельных воркеров получили 20 ошибок превышения лимита запросов (429) при 56 запросах. Четыре воркера с ограничением на стороне клиента получали в минуту более чем на 50% больше результатов.

Эта статья отвечает на один практический вопрос. У вас есть список из нескольких десятков аккаунтов брендов в TikTok: конкурентов, возможных партнёров или ваших собственных региональных аккаунтов. Вы хотите, чтобы Claude Code выгрузил профили, недавние видео и комментарии, а затем построил сравнительную таблицу. Как распределить работу между субагентами? Какую модель и какие инструменты получает каждый субагент? Какие вызовы API данных он делает, сколько это стоит и что происходит, когда он упирается в лимит запросов API?

Настройки Claude Code в этой статье взяты из официальной документации и истории изменений. Сам субагент мы у себя не запускали, поэтому эта часть помечена как пример конфигурации. Все цифры EveryInfra взяты из необработанных ответов реальных вызовов.

Иллюстрация: слева пять прозрачных стеклянных коробок, в каждой из которых лежат скомканная бумага, кадры видео и облачка комментариев, изображающие сырые данные одного аккаунта. У каждой коробки есть выходное отверстие, из которого выходит одна сложенная бирюзовая записка. Справа на чистом столе лежит аккуратная стопка из пяти бирюзовых записок, а пунктирные линии соединяют каждое отверстие со стопкой.
Польза субагента: сырые данные остаются в его собственном контексте, а основная сессия получает сводку.

Задача: 50 аккаунтов брендов, одна сравнительная таблица

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

Второй набор — 10 последних видео: просмотры, лайки, комментарии и время публикации. Третий — до 50 комментариев к тому из этих 10 видео, у которого больше всего комментариев. На выходе получается одна строка таблицы на аккаунт. Столбцы: подписчики, медиана просмотров недавних видео, уровень вовлечённости, число публикаций в неделю и число комментариев в выборке, а также одна короткая заметка.

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

Документация Claude Code описывает субагентов в тех же терминах. Субагент стоит использовать, когда побочная задача засоряет основной диалог. Это могут быть результаты поиска, логи или содержимое файлов, к которым вы больше не вернётесь. Субагент выполняет эту работу в собственном контексте и возвращает только сводку (документация Claude Code по субагентам).

Мы проверили 24 имени пользователя в трёх группах. В американскую группу спортивных брендов вошли 8 аккаунтов: Nike, Adidas, Gymshark, lululemon, Under Armour, New Balance, PUMA и HOKA. В группу брендов из Китая вошли SHEIN, Temu, DJI, OnePlus и EcoFlow. Туда же вошли три имени пользователя, которые мы предположили по названиям брендов Anker, Insta360 и Xiaomi.

В испаноязычную группу вошли Zara, Bershka, Real Madrid, Telcel и Pull&Bear, а также три угаданных имени пользователя для Mercado Libre, OXXO и Bimbo. Все шесть догадок оказались неверными; почему это важно, объясняет раздел о сбоях. Остальные 18 проверенных аккаунтов брендов легли в основу всех приведённых ниже показателей объёма, стоимости и скорости, пересчитанных на 50 аккаунтов там, где это указано.

Анимация потока. Слева основная сессия с подписью Opus 5.5, которая читает сводки. В центре четыре блока воркеров Haiku 5.5 с номерами от 1 до 4, у каждого один аккаунт и около 39 КБ сырых данных. Справа EveryInfra через REST или MCP с тремя возможностями: tiktok/profile, tiktok/user_videos и tiktok/comments, и пометкой о клиентском ограничении не более 9 вызовов в минуту. Серые точки движутся от каждого воркера к EveryInfra, серый блок возвращается к воркеру, а затем бирюзовая точка идёт от воркера обратно в основную сессию в виде сводки примерно на 380 байт.

Стоит ли вообще разделять? Что говорит руководство Anthropic от 22 октября

Прежде чем переходить к настройке, посмотрим на противоположный совет. 22 октября 2026 года Anthropic опубликовала большое руководство «When to fold subagents into your main agent loop» (руководство Anthropic). В нём говорится, что большинству агентов стоит использовать меньше субагентов. По умолчанию нужны одна модель, одно контекстное окно и один открытый цикл работы с инструментами. Предметные процедуры выносятся в Skills, а поиск данных и жёсткие ограничения — в инструменты. Пересказ на Reddit сообщает, что у одного клиента единый цикл работал примерно в 2 раза быстрее, чем мультиагентная схема.

Сопутствующий single-agent-loop-kit осторожно относится к этому утверждению. В его README сказано, что набор не предполагает, будто единый цикл всегда лучше. Каждое изменение до и после него проверяется на одном и том же eval. Там же перечислены веские причины оставить субагента: параллельное исследование в отдельных чистых контекстах, независимая проверка и задачи, при выполнении которых считывается гораздо больше данных, чем затем требуется основному агенту.

Последний сценарий: выгрузка 50 аккаунтов TikTok. Каждый аккаунт приносит около 9 700 токенов, а основной сессии нужна одна запись на 95 токенов. The Decoder приводит три условия, при которых Anthropic советует сохранять субагентов. Это измеримая потеря качества из-за роста контекста, параллельные задачи с отдельными контекстами или проблемы с выбором инструментов. Наша задача соответствует первым двум.

Причина оставить субагента (набор Anthropic)Применимо здесь?Данные из этой статьи
Параллельное исследование в отдельных чистых контекстахДаАккаунты не зависят друг от друга
Работа, при которой считывается гораздо больше данных, чем нужно основному агентуДаНа каждый аккаунт около 9 700 прочитанных токенов против 95 возвращённых
Независимая проверкаЧастичноНовый воркер может повторно обработать один аккаунт для проверки
Трудности из-за слишком большого числа инструментовДа, без фильтра25 MCP-инструментов против 2 разрешённых

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

Субагенты Claude Code: файл, поле model и список разрешённых инструментов

Субагент Claude Code — это Markdown-файл. Он начинается с метаданных YAML (в документации они называются frontmatter), а тело файла становится системным промптом субагента. Субагенты проекта лежат в .claude/agents/, и их можно закоммитить для команды. Пользовательские субагенты лежат в ~/.claude/agents/.

Согласно документации, обязательны только name и description. Имена полей пишутся в camelCase, а поле с опечаткой Claude Code игнорирует, не выдавая ошибки (справочник по frontmatter). Ниже наш пример конфигурации для этой задачи. В абзацах после него объясняется каждый выбор.

markdown
---
name: tiktok-account-worker
description: Pull one TikTok account (profile, newest videos, comments on one video) and return a one-line JSON summary. Use one per account in the list.
model: claude-haiku-5-5
effort: low
tools: mcp__everyinfra__everyinfra_call_api, mcp__everyinfra__everyinfra_get_job
mcpServers:
  - everyinfra:
      type: http
      url: https://api.everyinfra.com/mcp
      headers:
        Authorization: "Bearer ${EVERYINFRA_API_KEY}"
maxTurns: 8
omitClaudeMd: true
---

Work on the one TikTok username in your task. Do these steps in order:
1. Call everyinfra_call_api with platform=tiktok, action=profile, params={username}.
   If is_verified is false and follower_count < 1000, stop and return {"username":..., "flag":"lookalike"}.
2. Call action=user_videos with params={username, limit:10}. Leave out is_pinned=true videos from medians and rates.
3. Take the video with the highest comment_count from step 2. Call action=comments with params={url, limit:50}.
4. On a 429, wait retry_after seconds and retry once. Do not change the parameters.
5. Output one JSON line only: username, verified, followers, median_views, engagement_pct,
   posts_per_week, comments_fetched, and one note of 25 words or less. Do not output raw data.

В строке model указан полный ID модели, а не алиас haiku. Почему, объясняется в следующем разделе. Строка tools — это список разрешённых инструментов. Согласно документации, субагент со списком tools может использовать только эти инструменты. Субагент без такого списка наследует все инструменты основного диалога (доступные инструменты).

Удалённый MCP-сервер EveryInfra возвращает в tools/list 25 инструментов. Два из них получают данные: everyinfra_call_api и everyinfra_get_job. Остальные управляют аккаунтом, ключами, обращениями в поддержку и вебхуками. Инструменту вроде everyinfra_key_delete нечего делать в пакетной задаче, которую небольшая модель запускает 50 раз. Список разрешённых инструментов оставляет два инструмента и устраняет этот риск в самом источнике.

Больше всего контекста экономит строка mcpServers. Согласно документации, встроенный MCP-сервер субагента подключается при запуске субагента и отключается по его завершении. Поэтому задавайте сервер прямо в файле субагента, а не в .mcp.json. Тогда описания его инструментов не попадут в основной контекст (привязка MCP-серверов к субагенту).

Мы измерили ответ tools/list EveryInfra: 30 682 байта, или около 7 670 токенов. Ответ initialize добавляет 3 924 символа серверных инструкций. Два разрешённых инструмента занимают 2 505 байт, или около 626 токенов. В документации также указано правило доверия: Claude Code загружает встроенный MCP-сервер из файла проекта в .claude/agents/ только после того, как вы отметите эту папку как доверенную. Версии до v2.1.238 этого не проверяли.

omitClaudeMd: true запускает субагента без пользовательских, проектных и локальных файлов CLAUDE.md. По умолчанию субагент загружает все уровни CLAUDE.md, которые загружает основной диалог (что загружается при запуске). Воркеру, который делает три вызова API, большинство этих правил не нужно, а каждый из 50 воркеров загрузил бы собственную копию. Это поле требует Claude Code v2.1.271 или новее. maxTurns: 8 задаёт лимит ходов. При достижении лимита Claude Code помечает вывод как частичный, и основная сессия может возобновить воркера (v2.1.246 и новее).

Ключ подставляется из переменной окружения. Согласно документации Claude Code по MCP, записи MCP в .mcp.json и в файлах субагентов поддерживают ${VAR}. Команда может пользоваться одним общим файлом, а каждый участник — своим личным ключом. Но некоторые имена переменных с учётными данными в url и headers удалённого сервера всегда подставляются как пустые значения.

К ним относятся ANTHROPIC_API_KEY, учётные данные облачных провайдеров и NPM_TOKEN (документация по MCP, переменные окружения). Это правило не даёт файлу проекта отправить ваши учётные данные на сервер, указанный в этом файле. Используйте собственное имя переменной, например EVERYINFRA_API_KEY.

Сервер можно и не описывать в файле субагента. Добавьте его в проект одной командой, а затем укажите его имя в mcpServers:

bash
claude mcp add --transport http everyinfra https://api.everyinfra.com/mcp \
  --scope project --header "Authorization: Bearer ${EVERYINFRA_API_KEY}"

Ещё одна настройка может остановить задачу. В tools/list у everyinfra_call_api указаны readOnlyHint: false и destructiveHint: true, потому что каждый вызов стоит денег. В документации описано, что происходит, когда фоновому субагенту нужно разрешение на вызов инструмента: Claude Code показывает запрос в основной сессии и называет субагента (работа на переднем плане и в фоне).

Пятьдесят воркеров могут означать пятьдесят запросов на разрешение. Перед запуском разрешите mcp__everyinfra__everyinfra_call_api в permissions.allow в настройках (документация по разрешениям). Разрешите только этот инструмент.

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

ПолеЗначение в этом примереЧто делаетИсточник (версия)
modelclaude-haiku-5-5Задаёт модель субагента. Также работают алиасы вроде haiku и inheritДокументация по субагентам, раздел «Choose a model»
toolsТолько два MCP-инструментаСписок разрешённых инструментов; без него субагент наследует все инструментыДокументация по субагентам, раздел «Available tools»
mcpServersВстроенный сервер EveryInfraОписания инструментов загружаются только в субагентеДокументация по субагентам; проверка доверия с v2.1.238
effortlowУровень усилий для этого субагентаДокументация по субагентам, раздел «Choose an effort level»
maxTurns8Лимит ходов; при достижении лимита вывод помечается как частичныйПометка о частичном выводе с v2.1.246
omitClaudeMdtrueПропускает файлы CLAUDE.mdv2.1.271 и новее

Выбор модели для субагентов Claude Code: четыре шага и ловушка алиаса haiku

Модель, на которой работает субагент, сильнее всего влияет на стоимость этой задачи. Это также один из самых частых вопросов. В подсказках Google встречаются «claude code subagents model selection», «claude code subagent model default» и «claude_code_subagent_model force». В документации описан порядок из четырёх шагов.

Первый — параметр model, который основная сессия передаёт при запуске субагента. Второй — поле model в файле субагента, где inherit означает основную модель. Третий — переменная окружения CLAUDE_CODE_SUBAGENT_MODEL. Четвёртый — модель основного диалога (раздел «Choose a model»).

Скриншот раздела «Choose a model» документации Claude Code. Бирюзовая рамка выделяет три формы: алиас модели (sonnet, opus, haiku или fable), полный ID модели, например claude-opus-5-5, и inherit для модели основного диалога. Вторая бирюзовая рамка выделяет порядок выбора: 1 — параметр model при конкретном вызове, 2 — поле model во frontmatter определения субагента, 3 — переменная окружения CLAUDE_CODE_SUBAGENT_MODEL, 4 — модель основного диалога.
Формы указания модели и порядок выбора в официальной документации. Бирюзовые рамки выделяют две части, которые используются в этой статье. Снимок сделан 26 октября 2026 года по сингапурскому времени (SGT). Скриншот документации Claude Code по субагентам

У этого порядка два следствия. Во-первых, субагент без поля model наследует основную модель. Если основная сессия работает на Opus 5.5, небольшой воркер для данных тоже тарифицируется по ставкам Opus. О том же предупреждал пост на Reddit с 736 апвоутами: встроенный субагент Explore больше не всегда работает на Haiku, а следует за основной сессией (ветка в r/ClaudeCode).

Во-вторых, переменная окружения идёт после файла, поэтому она задаёт лишь значение по умолчанию. Чтобы принудительно назначить одну модель всем субагентам, документация советует дополнительно задать CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1. С этим флагом Claude Code игнорирует поле model в файлах субагентов. В более старом посте сообщества переменная стоит на первом месте (ветка в r/claude). Этот порядок не совпадает с текущей документацией, поэтому ориентируйтесь на документацию.

Мы используем полный ID вместо haiku, потому что у разных провайдеров алиас указывает на разные модели. В документации Claude Code по настройке модели есть таблица. В Anthropic API haiku означает Haiku 5.5. В Claude Platform on AWS, Amazon Bedrock, Google Cloud и Microsoft Foundry haiku по-прежнему означает Haiku 4.5 (документация по настройке модели). Прейскурантная цена Haiku 4.5 — $1 за миллион входных токенов и $5 за миллион выходных. Это в 10 раз дороже Haiku 5.5 (таблица цен на странице запуска Haiku 5.5).

Тот же файл субагента на Bedrock может обойтись в десять раз дороже, и никакой ошибки вы не увидите. Согласно истории изменений Claude Code, Haiku 5.5 стала моделью Haiku по умолчанию в Anthropic API в v2.1.293 от 2026-10-07 (история изменений Claude Code).

ПровайдерАлиас `haiku` указывает наВход / выход за миллион токеновЧто делать
Anthropic APIHaiku 5.5$0,10 / $0,50 (промпты до 100 000 токенов)Алиас или полный ID
Claude Platform on AWSHaiku 4.5$1 / $5Используйте полный ID
Amazon Bedrock, Google CloudHaiku 4.5Цены облачного провайдераИспользуйте ID модели у провайдера
Microsoft FoundryHaiku 4.5Цены AzureИспользуйте полный ID

Почему Haiku 5.5, а не Sonnet? На странице запуска от 7 октября 2026 года назначение указано прямо: массовые задачи, чувствительные к стоимости, например сводки, сжатие контекста, запросы к базам данных и классификация. Там сказано, что модель хорошо работает в паре с Opus 5.5 и Sonnet 5.5 в роли субагента. На той же странице говорится, что для сложного агентного программирования Sonnet 5.5 и Opus 5.5 остаются лучшим выбором, а Haiku 5.5 лучше всего подходит для узких задач (страница запуска Haiku 5.5).

Наш воркер делает три вещи: по порядку вызывает API, выбирает видео с наибольшим числом комментариев и считает несколько медиан. Каждый результат можно проверить скриптом. Это узкая задача.

Отзывы сообщества с этим согласуются. Один пользователь запустил Haiku 5.5 на 7 небольших задачах с чёткими рамками и получил 140 принятых результатов из 140, как и у Opus 5.5. Тот же пользователь предупредил, что «один файл плюс проверка — это нормально», а в задачах без чётких рамок модель начинает уходить в сторону (ветка в r/ClaudeAI).

Haiku 5.5 также меняет некоторые аспекты поведения API. В руководстве по миграции сказано, что Haiku 5.5 не принимает temperature, top_p и top_k. Значение thinking с budget_tokens возвращает ошибку 400, поэтому используйте {"type": "adaptive"}. Предзаполнение ответа ассистента не поддерживается (руководство по миграции на Haiku 5.5). Claude Code обрабатывает эти параметры за вас. Если вы собираете воркеров на Agent SDK или напрямую через API, проверьте эти параметры.

Три вызова EveryInfra, которые делает каждый воркер

Все три возможности взяты из каталога EveryInfra (GET /api/v1/social/catalog, бесплатно, без ключа). Мы прочитали и сохранили его 26 октября 2026 года в 17:22 SGT. Все три относятся к тарифной группе TikTok с price_usd 0.000556, то есть $0,000556 за вызов. Один вызов стоит одинаково, сколько бы записей он ни вернул.

user_videos возвращает до 50 записей за вызов, а comments — до 200 (каталог TikTok). Страницы возможностей: tiktok/profile, tiktok/user_videos и tiktok/comments. Обзор платформы: API данных TikTok.

ВозможностьОбязательный параметрПрименение в этой статьеЦена за вызовИспользуемые поля (совпадают с response_fields в каталоге)
tiktok/profileusername1 вызов на аккаунт$0.000556username, display_name, follower_count, video_count, like_count, is_verified
tiktok/user_videosusernamelimit: 10$0.000556url, view_count, like_count, comment_count, posted_at, is_pinned
tiktok/commentsurllimit: 50$0.000556id, like_count, reply_count, is_reply, posted_at
tiktok/searchkeywordcontent_type: profile для поиска нужного имени пользователя$0,000556 за каждый возвращённый аккаунтauthor_username, author_is_verified, author_follower_count

Последняя строка требует пояснения. В каталоге у tiktok/search есть поле rows_per_unit_when. Оно указывает, что при content_type со значением profile каждая возвращённая запись считается одной единицей. Мы использовали этот поиск, чтобы найти правильные имена пользователей для трёх брендов с limit: 5, и каждый вызов стоил $0,002778, то есть 5 × $0,000556. Поиск видео стоит одну единицу за вызов, а поиск аккаунтов — одну единицу за каждый аккаунт. Эту разницу легко упустить при планировании бюджета.

Вот первый шаг воркера через REST. Ключ берётся только из переменной окружения. Поле billing.charged_usd в ответе показывает фактическое списание за вызов.

bash
curl -s https://api.everyinfra.com/api/v1/social \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"tiktok","action":"user_videos","params":{"username":"nike","limit":10}}'

Две особенности полей меняют таблицу. Во-первых, user_videos сортирует от новых к старым, но закреплённые видео (is_pinned: true) идут первыми. У 7 из 18 аккаунтов среди 10 новейших были закреплённые видео, а у SHEIN, DJI и Gymshark — по 3. Закреплённые видео могут быть опубликованы несколько месяцев назад. Без фильтра «последние 10 видео» SHEIN охватывают 294 дня, и частота публикаций получается неверной.

Во-вторых, используйте число комментариев, которое вернул вызов, а не comment_count у видео. У видео New Balance было указано 29 комментариев, а вызов вернул 27. У видео Telcel — 10 и 5. В каталоге также сказано, что к каждому комментарию верхнего уровня прилагается не более двух ответов, и полная ветка не гарантируется.

Один реальный обмен по MCP: что отправляет модель и что приходит в ответ

Субагент, который вызывает API через MCP, использует транспорт Streamable HTTP из спецификации MCP. Порядок такой: initialize, затем notifications/initialized, затем tools/list, затем tools/call (транспорты MCP 2025-06-18, жизненный цикл).

Мы проделали это вручную 26 октября 2026 года в 17:30 SGT. initialize вернул 200 с версией протокола 2025-06-18. В ответе не было заголовка Mcp-Session-Id, значит, этому серверу ID сессии не нужен. notifications/initialized вернул 202 с пустым телом, как и описано в нашем руководстве по настройке удалённого MCP. tools/list вернул 25 инструментов.

В 17:45:05 SGT мы отправили один запрос tools/call к everyinfra_call_api за комментариями к видео Nike с limit: 200. Это тот же вызов, который воркер Haiku отправляет из Claude Code. API вернул 200 через 92,6 секунды. Полный HTTP-ответ занял 61 653 байта. Его поле content[0].text содержало 54 819 символов со 177 комментариями и billing.charged_usd: 0.000556.

Скриншот реальных ответов EveryInfra из трёх частей. Первая часть — запрос MCP tools/call к everyinfra_call_api с platform tiktok, action comments, URL видео Nike и limit 200 в 2026-10-26 17:45:05 SGT. Вторая часть — ответ: 200, 92,6 секунды, 61 653 байта, текстовое поле на 54 819 символов, count 177, текст комментариев и имена пользователей скрыты, а блок billing с charged true и charged_usd 0.000556 выделен бирюзовой рамкой. Третья часть — ответ 429 от 17:37:33 SGT: сообщение о лимите 10 запросов в минуту для этого ключа и повторной попытке через 27 секунд, retry_after 27 и слова Nothing was charged, каждый фрагмент в бирюзовой рамке.
Один обмен по MCP и один ответ 429 в исходном виде. Текст комментариев и имена пользователей скрыты. Поля баланса удалены. Снимок сделан 26 октября 2026 года по сингапурскому времени (SGT). Реальные ответы API EveryInfra, 2026-10-26 17:37–17:45 SGT

Сравните 54 819 символов с тремя лимитами Claude Code. Согласно документации по MCP, Claude Code показывает предупреждение, когда вывод MCP-инструмента превышает 10 000 токенов. Лимит по умолчанию — 25 000 токенов, и его можно поднять через MAX_MCP_OUTPUT_TOKENS. Кроме того, у некоторых инструментов нет аннотации anthropic/maxResultSizeChars. Для таких инструментов Claude Code сохраняет успешный текстовый результат длиннее 50 000 символов в файл, а в диалоге остаётся только ссылка на файл (лимиты вывода MCP).

Лимит Claude Code для результатов MCPЗначение в документацииНаш измеренный результатПревышен?
Предупреждение10 000 токенов200 комментариев: около 13 865 токеновДа
Лимит вывода по умолчанию (MAX_MCP_OUTPUT_TOKENS)25 000 токенов200 комментариев: около 13 865 токеновНет
Сохранение в файл (без anthropic/maxResultSizeChars)50 000 символов200 комментариев: 54 819 символовДа
Сохранение в файл50 000 символов50 комментариев: не более 24 749 символовНет
Сохранение в файл50 000 символов10 видео: не более 29 156 символовНет

Мы проверили ответ tools/list: у инструментов EveryInfra этой аннотации нет. Поэтому один вызов на 200 комментариев превышает порог предупреждения в 10 000 токенов (около 13 865 токенов из расчёта 4 байта на токен), и Claude Code сохраняет результат на диск. Затем воркеру нужен вызов Read для этого файла. Это ещё один ход и дополнительный контекст.

Решение простое: используйте limit: 50 для комментариев. Наши 18 ответов с 50 комментариями в среднем занимали 14 106 символов JSON, а самый длинный — 24 749. Все они меньше 50 000. Самый длинный ответ на 10 видео занял 29 156 символов, тоже ниже порога.

Если вам нужно 200 комментариев, используйте mode: "async", получите job_id и прочитайте результат через everyinfra_get_job. В описании инструмента сказано, что чтение задачи бесплатно и не учитывается в поминутном лимите. Модель не видит этой границы. Она лишь делает лишний шаг после сохранения в файл.

Тест первый: сколько весят сырые данные одного аккаунта?

На графике ниже показан размер результатов трёх вызовов для каждого из 18 аккаунтов брендов. Мы учитываем только байты UTF-8 в поле results и не считаем поля оплаты и баланса. Среднее — 38 794 байта на аккаунт, медиана — 39 983 байта. Меньше всего у Pull&Bear — 25 426 байт, потому что под его видео было всего 2 комментария.

Больше всего у DJI — 53 324 байта. Профиль небольшой: в среднем 740 байт. Самая крупная часть — 10 видео, 24 514 байт. Комментарии в среднем занимают 13 540 байт.

Горизонтальная столбчатая диаграмма с накоплением по 18 брендовым аккаунтам TikTok, по одному столбцу на аккаунт, из трёх частей: профиль, 10 последних видео и до 50 комментариев, в КБ. От большего к меньшему: DJI 53,3, SHEIN 52,6, Real Madrid 42,3, Under Armour 41,8, OnePlus 41,5, Zara 41,5, lululemon 41,1, Bershka 40,7, PUMA 40,4, Nike 39,5, Gymshark 39,1, Adidas 37,2, HOKA 36,3, Temu 35,0, New Balance 33,2, EcoFlow 30,1, Telcel 27,1, Pull&Bear 25,4. В каждом столбце самая длинная часть приходится на видео. Заголовок: один брендовый аккаунт в сыром виде занимает около 38,8 КБ, или около 9 698 токенов.
Часть одного аккаунтаСредний размер, байтОценка токенов (÷ 4)С новым токенизатором (× 1,3)
Профиль740185240
10 новейших видео24,5146,1287,967
До 50 комментариев13,5403,3854,400
Итого38,7949,69812,608
Сводка, которую возвращает воркер38295124

Почему видео такие большие? Одна запись видео содержит URL обложки, URL аватара и URL музыки. В каждом URL есть подписанные параметры CDN длиной в три-четыре сотни символов. Мы удалили все поля, имена которых заканчиваются на _url, но оставили url самого видео. Средний размер упал до 25 175 байт, то есть поля URL составляют 35,1% байтов. Для сравнительной таблицы ни одно из них не нужно.

Вот почему воркер возвращает сводку, а не «очищенные данные». Даже без URL основная сессия получала бы 25 КБ на аккаунт. С нашим форматом сводки она получает 382 байта.

Для соотношения байтов и токенов мы берём пример со страницы тарифов Anthropic. Средняя веб-страница объёмом 10 КБ соответствует примерно 2 500 токенам, или 4 байтам на токен (цены Anthropic, web fetch). На той же странице сказано, что Claude 4.7 и более поздние модели используют новый токенизатор, который выдаёт для того же текста примерно на 30% больше токенов. Поэтому все числа токенов здесь являются оценками, и мы приводим оба варианта: «4 байта на токен» и «на 30% больше». Для точного подсчёта используйте эндпоинт подсчёта токенов. Согласно документации, он бесплатный и ограничен только числом запросов в минуту (документация по подсчёту токенов).

Почему экономия контекста реальна: три уровня расчёта для субагентов Haiku в Claude Code

Зная размер одного аккаунта, можно посчитать, что экономят субагенты. Первый уровень экономии касается основного контекста. В пересчёте на 50 аккаунтов сырые результаты занимают около 1,94 млн байт, или около 485 000 токенов (около 630 000 с новым токенизатором). Это от половины до двух третей контекста Opus 5.5 объёмом 1 млн токенов. В виде сводок 50 аккаунтов занимают около 4 800 токенов, примерно в 102 раза меньше.

Описания всех 25 инструментов EveryInfra добавляют ещё около 7 670 токенов. Со встроенной записью mcpServers и списком разрешённых инструментов это число сокращается до 626 токенов, причём только внутри воркера.

Горизонтальная столбчатая диаграмма, логарифмическая шкала, оценка в токенах: сырые данные по 50 аккаунтам с новым токенизатором (плюс 30 процентов): 630 402; сырые данные по 50 аккаунтам: 484 925; определения всех 25 инструментов MCP: 7 670; 50 сводок, выделены бирюзовым: 4 775; только 2 оставленных инструмента: 626. Заголовок: основной контекст вмещает примерно в 102 раза меньше.

Второй уровень — контекст каждого воркера, и здесь есть ценовой порог, который часто упускают. На странице цен Anthropic сказано, что цена Haiku 5.5 зависит от длины промпта. Если промпт запроса превышает 100 000 токенов с учётом чтения и записи кеша, входные токены стоят $0,50 за миллион вместо $0,10. Выходные дорожают с $0,50 до $2,50 за миллион. По повышенной цене оплачивается весь запрос (цены на длинный контекст).

Каждый дополнительный аккаунт добавляет воркеру около 9 700 токенов. К этому прибавляется около 3 600 токенов промпта и описаний инструментов. 626 токенов описаний инструментов мы измерили, а 3 000 токенов промпта и текста задачи являются нашим допущением. При таких числах в один воркер помещается 9 аккаунтов. С учётом прироста от токенизатора на 30% помещается 7. Дальше каждый запрос обходится в 5 раз дороже.

Линейный график. По оси X — число аккаунтов в одном воркере Haiku, от 1 до 12. По оси Y — контекст воркера в токенах. Сплошная серая линия при 4 байтах на токен идёт от примерно 13 300 токенов для 1 аккаунта до примерно 120 000 для 12. Тёмная пунктирная линия с 30% дополнительных токенов растёт быстрее. Бирюзовая горизонтальная линия на уровне 100 000 токенов подписана: выше неё цена в 5 раз выше. Сплошная линия пересекает её на десятом аккаунте, пунктирная — на восьмом. Заголовок: в один воркер Haiku помещается от 7 до 9 аккаунтов.

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

При кешировании промптов история перечитывается по ставке для кеша (документация Claude Code по стоимости). Поэтому сырые данные в основной сессии стоят денег при каждом последующем запросе, а не один раз. Вот наша оценка по прейскурантным ценам, допущения приведены под таблицей:

КонфигурацияОсновные составляющиеОценка стоимости для 50 аккаунтов
Субагенты50 воркеров Haiku 5.5 — около $0,134, API EveryInfra — $0,0834, основная сессия Opus 5.5 читает сводки — около $0,043Около $0,26
Без разделения, сырые данные в основной сессииAPI EveryInfra — $0,0834, основная сессия Opus 5.5 держит около 485 000 токенов и перечитывает их в 20 последующих запросах — около $4,36Около $4,45

Допущения: каждый воркер отправляет 4 запроса (3 вызова инструментов и 1 финальный ответ) примерно по 400 выходных токенов каждый. Мы используем прейскурантные цены Haiku 5.5 за миллион токенов: вход $0,10, запись в кеш $0,125, чтение из кеша $0,01 и выход $0,50, кеш на 5 минут. Для основной сессии берём прейскурантные цены Opus 5.5 за миллион токенов: вход $4, запись в кеш $5 (1,25x), чтение из кеша $0,20. После получения данных основная сессия отправляет ещё 20 запросов.

Цены Opus 5.5 взяты из обзора моделей Anthropic. Цена чтения из кеша — из раздела о кешировании промптов на странице цен. Если вы пользуетесь планом Pro или Max, Claude Code не списывает эти суммы, а расходует лимиты вашего плана. Соотношение остаётся тем же: сырые данные в основной сессии расходуют лимиты более чем в десять раз быстрее. В документации по стоимости также сказано, что запросы субагентов учитываются в тех же лимитах использования (документация по стоимости).

Горизонтальная столбчатая диаграмма в долларах США: без разделения, сырые данные в основной сессии Opus 5.5 — $4,45; с разделением на субагентов — всего $0,26, бирюзовым цветом; из них 50 воркеров Haiku 5.5 — $0,13, API EveryInfra за 150 вызовов — $0,083 и чтение сводок в Opus 5.5 — $0,043. Заголовок: одно сравнение 50 аккаунтов стоит около $0,26 с субагентами и около $4,45 без них.

У этой оценки есть ограничения. В ней не учтены планирование и составление таблицы в основной сессии: в обеих схемах они примерно одинаковы. 20 последующих запросов — это допущение. В более длинной сессии строка «без разделения» обходится ещё дороже.

Кроме того, Claude Code сжимает основную сессию, когда заполняется контекст. Сжатие само по себе — крупный запрос, и мы его не учитывали. К тому же 485 000 токенов — это почти половина контекста Haiku 5.5 в 1 млн токенов. Основная сессия на Haiku тоже перешла бы ценовой порог в 100 000 токенов.

Тест второй: сколько воркеров запускать параллельно?

Субагенты могут работать параллельно, но темп задаёт API. Наш тестовый API-ключ допускает 10 запросов в минуту и при превышении возвращает 429. Это ограничение мы задали только для этого ключа, и в ответе 429 указано reason: key_limit. По умолчанию для аккаунта действует лимит 60 запросов в минуту, общий для всех ключей. При суммарном пополнении баланса на $50, $150 и $750 он растёт до 180, 600 и 1 800 (страница тарифов). Пересчитайте число воркеров ниже под свой лимит. При примерно 25 секундах на вызов 60 запросов в минуту загружают около 25 воркеров. Это больше стандартного лимита Claude Code в 20 параллельных субагентов. Мы провели три раунда и замерили реальное время.

Первый раунд шёл с 17:25 до 17:37 SGT. Один воркер последовательно выгрузил 24 профиля. Он получил 24 ответа за 10,72 минуты, 2,24 в минуту. Медианное время вызова — 18,2 секунды. Ни один вызов не получил 429, но большая часть времени ушла на ожидание ответов.

Второй раунд шёл с 17:37 до 17:43 SGT. Шесть воркеров выгружали видео и комментарии для 18 аккаунтов, по два вызова на каждый. При ответе 429 каждый воркер ждал retry_after и повторял запрос. Из 56 запросов 36 прошли успешно, а 20 получили 429. Раунд занял 5,77 минуты, 6,24 успешного вызова в минуту.

Третий раунд шёл с 17:46 до 17:48 SGT. Четыре воркера использовали один общий клиентский ограничитель, который допускает не более 9 запусков запросов в пределах каждой минуты по часам. Они выгружали популярные видео (sort: popular) для 12 аккаунтов. Все 12 вызовов прошли успешно без единого 429. Раунд занял 1,25 минуты, 9,64 успешного вызова в минуту.

РаундВремя (SGT)Воркеры и правилоЗапросыУспешные запросы429sУспешных запросов в минутуМедианное время вызова
117:25–17:371 воркер, последовательно242402.2418.2 s
217:37–17:436 воркеров, повторная попытка после 4295636206.2426.1 s
317:46–17:484 воркера, лимит 9 в минуту121209.6419.6 s
Горизонтальная столбчатая диаграмма успешных вызовов в минуту: 1 воркер последовательно — 2,2 без ответов 429; 6 воркеров с повторной попыткой после 429 — 6,2 при 20 ответах 429; 4 воркера с собственным лимитом 9 в минуту — 9,6, бирюзовым цветом, без ответов 429. Заголовок: выигрывают 4 воркера с клиентским лимитом.

Временная шкала второго раунда показывает, почему ответы 429 замедлили прогон. Каждая строка — один запрос. Серая полоса — ожидание ответа, бирюзовый ромб — ответ 429. Шесть воркеров израсходовали всю минутную квоту за первые 16 секунд, и все следующие запросы завершились ошибкой. Каждый воркер, получивший ошибку, ждал начала следующей минуты, а затем все снова пробовали одновременно.

Значения retry_after составляли от 6 до 39 секунд, и каждое указывало на начало следующей минуты по часам. Это показывает, что счётчик для этого ключа сбрасывается в начале каждой минуты по часам. В результате в начале каждой минуты возникает наплыв запросов, а после него — долгий простой.

Временная диаграмма. По оси X — секунды после первого запроса, от 0 до 360, начиная с 17:37:17 SGT. Каждая строка — один запрос. Серые полосы показывают, сколько ждал каждый успешный запрос. Бирюзовые ромбы — ответы 429. Успешные полосы начинаются группами около 0, 60, 120, 180 и 240 секунд, и за каждой группой следует серия ромбов 429. Заголовок: шесть воркеров одновременно упираются в лимит за 20 секунд, после чего вызовы проходят только с началом новой минуты. 20 из 56 запросов получили 429, каждый прошёл с первой повторной попытки, и ни за один не было списания.
Иллюстрация: запросы в виде капсул едут по конвейеру и по одной проходят через турникет рядом с часами без цифр. За турникетом капсулы попадают в ящик, из которого выпадают бирюзовые монеты. На переполненной боковой полосе лишние капсулы отскакивают от мягкого барьера: давка у турникета не ускоряет проход.
Минутная квота фиксирована. Лишние запросы просто отскакивают.

Отсюда можно вычислить простой потолок. Полезное число параллельных воркеров примерно равно лимиту в минуту, умноженному на среднее время вызова в секундах и делённому на 60. Среднее время всех успешных вызовов в наших трёх раундах — 25,1 секунды, поэтому 10 × 25,1 ÷ 60 ≈ 4,2. При менее чем 4 воркерах часть квоты простаивает. При более чем 4 лишние воркеры только порождают ответы 429.

По этому расчёту 150 вызовов для 50 аккаунтов займут не меньше 15 минут на ключе с 10 запросами в минуту или 2,5 минуты при лимите аккаунта по умолчанию в 60. Последовательно они займут около 63 минут. По умолчанию Claude Code позволяет запускать одновременно 20 субагентов. Запуск 21-го возвращает «Concurrent subagent limit reached», а изменить лимит можно через CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS (лимит одновременных субагентов). Значение по умолчанию 20 намного больше 4, поэтому прямо скажите основной сессии запускать не более 4 воркеров одновременно.

Эти раунды небольшие. В третьем было всего 12 вызовов и одна возможность, а время вызова меняется в зависимости от часа и аккаунта. Не переносите 4,2 как есть. Пересчитайте со своим лимитом и своим средним временем вызова. GET /api/v1/account (MCP: everyinfra_account) показывает поминутный лимит. В документации API сказано, что этот вызов бесплатный и не учитывается в лимите.

Как обрабатывать 429: реальный ответ и схема повторов с задержкой

Вот реальный ответ 429. В 17:37:33 SGT запрос комментариев у воркера Nike завершился ошибкой. В теле ответа были code: rate_limited, retry_after: 27, limit: 10, retryable: true и max_retries: 3. В поле next_steps было указано: «Nothing was charged». Мы проверили все 20 таких ошибок.

Ни за одну не было списания, и каждая прошла с первой повторной попытки после ожидания. Стандарт HTTP определяет 429 как слишком большое число запросов за заданный промежуток времени. Ответ может содержать Retry-After, чтобы сообщить клиенту, сколько ждать (RFC 6585, раздел 4; RFC 9110, Retry-After).

Обрабатывайте это на трёх уровнях. Уровень первый: не допускайте превышения. Ограничьте число одновременно работающих воркеров в основной сессии и добавьте один общий ограничитель на уровне вызовов. Именно поэтому в третьем раунде не было ни одного 429.

Уровень второй: если лимит превышен, ждите. Ждите ровно retry_after и добавьте небольшую случайную задержку. Тогда группа воркеров не будет повторять запросы в одну и ту же секунду.

Это хорошо объясняется в статье AWS. Ошибки может вызвать нагрузка. Если затем все клиенты одновременно повторяют запросы, повторы только усиливают нагрузку. Поэтому добавляйте случайную задержку, чтобы распределить запросы (Amazon Builders' Library).

Уровень третий: не отправляйте повторно вызов, за который уже списаны средства. 429, 422 и 401 возникают до любого списания, поэтому повтор безопасен. Не отправляйте заново вызов, который уже вернул 200, только потому, что воркер сбился. Как проверять по ID запроса, показано в наших руководствах по самовосстановлению после ошибок API и сверке возвратов средств.

Вот ядро ограничителя из третьего раунда. Он использует пул потоков из стандартной библиотеки Python (документация concurrent.futures). В Claude Code можно попросить основную сессию планировать воркеров по тому же правилу. Эту логику также можно вынести в скрипт, который вызывают воркеры.

python
import threading, time, random
lock = threading.Lock(); state = {"minute": None, "n": 0}
def acquire(per_min=9):            # at most per_min starts per clock minute
    while True:
        with lock:
            m = int(time.time() // 60)
            if state["minute"] != m:
                state["minute"], state["n"] = m, 0
            if state["n"] < per_min:
                state["n"] += 1
                return
        time.sleep(0.5)
def on_429(err):                    # err is the error object of the response
    time.sleep(err["retry_after"] + random.uniform(0.5, 2.0))

Лимит — 9, а не 10. Так каждую минуту остаётся один слот для других вызовов из основной сессии, например для проверки баланса или чтения каталога.

Сбои и списания: 422, пустые результаты и неверные имена пользователей

Помимо ответов 429, за тот же час мы намеренно вызвали или встретили несколько сбоев. Каждый влияет на пакетную задачу по-своему. Каждая строка таблицы ниже соответствует одному реальному ответу.

СценарийВремя (SGT)HTTP и ответСписаниеЧто должен сделать воркер
Параметр с опечаткой usernme17:43:20422, missing_param, «usernme is not a parameter here», с рабочим примером$0Исправить параметр и отправить заново
Нет ключа17:43:20401, missing_key$0Остановиться и сообщить о проблеме настройки
Слишком частые запросы17:37:33 и ещё 19429, retry_after 6–39 с$0Подождать и повторить
Такого имени пользователя нет17:33:34, 17:34:49200, пустой результат, reason: empty_result_refunded$0 (списано, затем возвращено)Пометить как «не найден» и не повторять попытку
Имя пользователя существует, но это не аккаунт бренда17:31:16 и ещё 3200, не верифицирован, от 4 до 222 подписчиков$0,000556, как обычноПометить как «возможный двойник»; решение оставить основной сессии

Ответ с кодом 422 составлен так, чтобы модель могла его понять. В нём указано, что параметр username отсутствует, а usernme здесь не является допустимым параметром, и приведён рабочий пример запроса. Небольшая модель вроде Haiku может исправить вызов по этому тексту. Два пустых результата (наши догадки для Mercado Libre и OXXO) вернули код 200, значение charged_usd, равное 0, и причину empty_result_refunded. Они ничего не стоили.

Важнее всего последняя строка. Все четыре имени пользователя, которые мы угадали по названиям брендов (по одному для Anker, Insta360, Xiaomi и Bimbo), существуют, но это обычные личные аккаунты. Ни один из них не верифицирован. У них 4, 121, 222 и 14 подписчиков и от 0 до 8 видео. API корректно вернул их данные, поэтому вызовы были оплачены.

API не может выявить такую ошибку. Это должен сделать воркер. Поэтому в примере появился шаг 1: остановиться и пометить аккаунт, если он не верифицирован и у него меньше 1000 подписчиков.

Правильное имя пользователя можно найти через tiktok/search по аккаунтам. Мы выполнили три поиска с 17:43 до 17:44 SGT и нашли верифицированные insta360_official (2,4 млн подписчиков), xiaomi.official (8,3 млн) и ankercharging (803 600) по $0,002778 за каждый. От того, откуда взят ваш список, зависит, будет ли таблица верной с самого начала.

Расходы: плата за API в зависимости от числа аккаунтов

Расходы на стороне EveryInfra посчитать легко. Они зависят только от числа вызовов, а не от количества возвращённых записей или от того, какая модель работает в воркере.

МасштабВызовыПлата за API при `price_usd` $0,000556Минимальное время при 10 запросах в минуту
1 аккаунт3$0.00166818 секунд
50 аккаунтов150$0.083415 минут
50 аккаунтов, еженедельно, в течение месяцаоколо 650около $0,36115 минут на запуск
500 аккаунтов1,500$0.834150 минут

Таблица исходит из того, что список верный. Если сначала нужно найти имя пользователя через tiktok/search, добавьте около $0,002778 на аккаунт (limit: 5). Весь наш тест включал 98 запросов: 97 по REST и 1 вызов MCP tools/call. Кроме того, было 3 бесплатных сообщения для установления MCP-соединения. Плата была списана за 74 запроса, всего $0,04781.

В 24 случаях списания не было: это 20 ошибок 429, 2 пустых результата, 1 ошибка 422 и 1 ошибка 401. Отсутствие списания в каждом случае подтверждается полем billing или телом ошибки в соответствующем ответе. Инструкции по настройке приведены в разделе Быстрый старт, где показаны три шага работы с REST API, и на странице MCP-сервера, где указаны настройки клиентов.

Формат сводки: от одной строки зависит, что сможет сделать основная сессия

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

Во-первых, основная сессия может проводить выборочные проверки. Она выбирает любой аккаунт, просит нового воркера обработать его заново и сравнивает числа. Ей не нужно полагаться на то, как тот или иной воркер «понял» данные. Во-вторых, объём остаётся под контролем. В нашем формате 15 полей. Средний размер 18 сводок составляет 382 байта JSON, а самая длинная из них, для Real Madrid, занимает всего 398 байт, потому что в её числах больше цифр.

Не позволяйте воркерам возвращать «всё, что кажется важным». Сводки в свободной форме различаются по длине. Одни воркеры возвращают полстраницы, другие копируют в ответ текст комментариев, и основной контекст снова разрастается. Кроме того, разные воркеры могут по-разному решать, что считать «важным», и тогда записи не удастся свести в одну таблицу.

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

Инструкция для основной сессии умещается в три предложения. Передайте каждое имя пользователя из списка в tiktok-account-worker, не более 4 одновременно. Когда все результаты будут готовы, сведите сводки в одну таблицу и отметьте аккаунты, помеченные как возможные двойники. Для 3 лучших и 3 худших аккаунтов по медиане просмотров и вовлечённости напишите по одному поясняющему предложению.

Первые два предложения задают порядок выполнения. Только в третьем нужна оценка большой модели. В руководстве Anthropic сказано, что такую работу следует выполнять в основном цикле.

Что получает основная сессия: таблица брендов спортивной одежды из США

Вот таблица, которую основная сессия собирает из сводок воркеров для группы американских брендов спортивной одежды. Чтобы объём можно было воспроизвести, скрипт вычислил эти сводки из сырых ответов по тем же правилам, которые заданы в примере воркера. Модель Haiku их не создавала. Заметка, написанная Haiku, добавила бы к каждой сводке несколько десятков байт. Медиана просмотров и коэффициент вовлечённости (медиана отношения лайков к просмотрам) не учитывают закреплённые видео.

АккаунтПодписчикиМедиана просмотров недавних видеоВовлечённостьПубликаций в неделюКомментариев в выборке
Nike9.3M24,2503.82%11.950
Adidas12.3M142,2002.72%4.250
Gymshark6.7M50,90014.07%4.650
lululemon1.5M34,9001.08%3.050
Under Armour1.0M28,6005.20%4.850
New Balance1.0M24,9001.19%1.327
PUMA6.2M15,4506.68%4.850
HOKA268,3007,9120.99%1.228

Эта таблица показывает, почему оценку результатов следует выполнять в основной сессии. Nike публикует больше всех (11,9 публикации в неделю), но медиана просмотров у него ниже, чем у Adidas с 4,2 публикации в неделю. У Gymshark вдвое меньше подписчиков, чем у Adidas, но коэффициент вовлечённости составляет 14,07 % — более чем в пять раз выше. Кроме того, среди 10 последних видео Gymshark было 3 закреплённых видео за июль. Без фильтра закреплённых видео при расчёте показателей смешивались бы старые и новые публикации.

Для таких сравнений нужно видеть все записи сразу и руководствоваться здравым смыслом. Это задача для большой модели в основной сессии, а не для каждого воркера по отдельности. За пределами этой группы Real Madrid демонстрирует ещё одну ловушку. Показатель «466 публикаций в неделю» — не ошибка. Все 10 последних видео аккаунта вышли 2026-10-25, в один день, поэтому пересчёт дневной частоты публикаций в недельную даёт такое большое число.

Тот же воркер на других платформах: Instagram и YouTube

Если в вашем списке есть также аккаунты брендов в Instagram и YouTube, структура воркера не меняется. Измените три вещи: название платформы, название действия и имя параметра. Таблица ниже составлена по данным того же каталога, проверенного 26 октября 2026 г. в 17:22 SGT. Мы не отправляли реальные запросы к этим двум платформам, поэтому в таблице указаны только цены и параметры из каталога. Один раз самостоятельно измерьте объём результата. Обзоры платформ: API данных Instagram и API данных YouTube.

ПлатформаПрофильПоследние публикацииКомментарииЦена за вызовПримечание
TikTok (замеры приведены здесь)profile, параметр usernameuser_videos, до 50comments, до 200$0.000556Закреплённые видео идут первыми
Instagramprofile, параметр usernameuser_posts, до 200comments, до 100$0.000556reels пока недоступен
YouTubeprofile, параметр — url каналаuser_posts, url канала, до 50comments, до 100$0.000556Для Shorts есть отдельное действие shorts

На всех трёх платформах эти три возможности стоят одинаково. Значит, три вызова на аккаунт обходятся в $0.001668, а 50 аккаунтов — в $0.0834 на каждой платформе. Различаются параметры. Профиль и список видео YouTube принимают URL канала, а не имя пользователя, поэтому шаг 1 воркера должен сначала получить URL.

Объём результатов тоже различается. Записи публикаций Instagram, как и записи видео TikTok, содержат много URL изображений. Как показал тест TikTok, сначала измерьте объём сырых данных одного аккаунта. Затем решите, сколько аккаунтов назначить одному воркеру и сколько комментариев запрашивать за вызов. Возможно, вы уже использовали MCP для этих платформ в другом редакторе. В нашей предыдущей статье о данных TikTok, Instagram и Amazon в Cursor есть замеры времени вызовов, которые помогут подобрать число воркеров.

Ограничения и важные моменты

Во-первых, условия платформы. Условия использования TikTok для США ограничивают автоматизированный сбор данных. Нельзя использовать автоматизированную систему, чтобы парсить данные платформы, обходить её краулером, экспортировать или извлекать её данные. Исключение — письменное разрешение от TikTok USDS Joint Venture (TikTok Terms of Service).

Исследователи из академических и некоммерческих организаций могут подать заявку на доступ к исследовательским инструментам TikTok. Одобрение заявки обычно занимает около 4 недель (TikTok Research Tools, codebook). Подходит ли этот способ для вашего региона и сценария использования, решайте сами. Эта статья касается только метода получения данных.

Есть смежный момент, который часто путают. 5 октября 2026 г. TikTok объявил, что TikTok for Business MCP теперь доступен как коннектор в Claude и на других ИИ-платформах (TikTok Newsroom). Этот MCP работает с вашим собственным рекламным аккаунтом: кампании, креативы и результаты (блог TikTok for Business). Публичные профили и комментарии других брендов он не читает.

Во-вторых, возвращаются не все комментарии. comments возвращает не более двух ответов на каждый комментарий верхнего уровня, а общее число возвращённых комментариев может быть меньше числа комментариев, которое отображается у видео. В 5 из 18 наших вызовов вернулось меньше 50 комментариев, потому что у этих видео было мало комментариев. Для анализа тональности указывайте размер выборки в сводке.

В-третьих, больше субагентов — не всегда лучше. Помимо лимита запросов API, у Claude Code есть собственные ограничения. По умолчанию субагенты могут вкладываться друг в друга на три уровня. Переменная CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH позволяет изменить эту глубину. Размер контекста воркера определяется его моделью, а не основной моделью (документация по субагентам).

Для списка из тысяч аккаунтов документация рекомендует динамические рабочие процессы. В них Claude пишет скрипт на JavaScript, который планирует запуск агентов. По умолчанию одновременно работает до 16 агентов, а CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS повышает это число до 256 (документация по динамическим рабочим процессам). Допустимое число запросов к API в минуту от этого не растёт.

В-четвёртых, что мы не тестировали. Мы не запускали этот субагент в Claude Code. У нас нет замеров качества сводок Haiku 5.5. Мы также не измеряли, насколько хорошо субагент соблюдает правило is_pinned, и реальное время работы 50 воркеров. Данные об объёме, сумме списаний, ошибках 429 и скорости получены в ходе измерений.

Стоимость моделей — оценка по прейскурантным ценам. Прежде чем полагаться на эту оценку, обработайте 10 аккаунтов. Проверьте модель каждого субагента в /tasks. Затем в /usage проверьте долю использования, приходящуюся на субагентов.

Последние изменения

2026-10-07: Anthropic выпустила Claude Haiku 5.5. Модель стоит $0.10 за миллион входных токенов и $0.50 за миллион выходных токенов для промптов до 100 000 токенов. Одним из основных сценариев Anthropic назвала работу субагентов (страница анонса). В тот же день Claude Code v2.1.293 сделал её моделью Haiku по умолчанию в Anthropic API (история изменений). Что это значит для вас: воркер для сбора данных теперь обходится примерно в десять раз дешевле, чем в прошлом месяце. Но проверьте, какую модель означает haiku у вашего провайдера.

2026-10-16: в Claude Code v2.1.302 десктопное приложение и VS Code стали всегда запускать в фоне субагентов, созданных в основном диалоге, как это делает терминал. Fork-субагенты также стали использоваться по умолчанию в claude -p, Agent SDK, десктопном приложении и VS Code (история изменений). Что это значит для вас: фоновые воркеры передают запросы на разрешения в основную сессию, поэтому заранее предоставьте им доступ к единственному нужному инструменту.

2026-10-19 и 2026-10-21: v2.1.304 ускорила работу при одновременном запуске многих субагентов. В ней также исправили ошибку, из-за которой после отправленного вскоре уточняющего сообщения субагенты забывали о недавно выполненной работе. В v2.1.307 каждому fork-субагенту в группе стали сообщать, какой из запусков относится именно к нему, поэтому форки теперь реже берутся за работу друг друга (история изменений). Что это значит для вас: параллельные воркеры работают стабильнее, чем месяц назад. В этой статье используются обычные субагенты, а не форки.

2026-10-22: Anthropic опубликовала «When to fold subagents into your main agent loop». Руководство советует большинству агентов использовать меньше субагентов. Оставлять их стоит только для измеримого прироста контекста, параллельной работы с одноразовым контекстом или при слишком большом числе инструментов (руководство, набор). Что это значит для вас: прежде чем разделять задачу, убедитесь, что для её выполнения нужно много читать, сохранять мало данных и что она состоит из независимых частей. Если нет, оставьте её в основной сессии и используйте Skills.

2026-10-05: на Advertising Week New York TikTok объявил, что его рекламный MCP доступен как коннектор в Claude, Kimi, Perplexity и других сервисах (TikTok Newsroom). Что это значит для вас: используйте его для управления собственной рекламой. Чтобы видеть публичные показатели аккаунтов других брендов, по-прежнему нужен API публичных данных.

FAQ

Могут ли субагенты Claude Code использовать другую модель?

Да. Укажите model в файле субагента. Поле принимает алиас (sonnet, opus, haiku, fable), полный ID, например claude-haiku-5-5, или inherit. Порядок приоритета: параметр при запуске, затем поле model, затем CLAUDE_CODE_SUBAGENT_MODEL, затем основная модель. (Источник вопроса: подсказки Google «claude code subagents different model» и «claude code subagents model selection»; ответ: документация по субагентам)

Какую модель субагент Claude Code использует по умолчанию?

Без поля model описанный выше порядок заканчивается основной моделью, поэтому субагент наследует её. Встроенный субагент Explore тоже больше не всегда работает на Haiku. Чтобы перевести все субагенты на одну модель, задайте и CLAUDE_CODE_SUBAGENT_MODEL, и CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1. (Источник вопроса: подсказки «claude code subagent model default» и «claude_code_subagent_model force»; ответ: документация по субагентам, ветка r/ClaudeCode)

**Почему субагент Claude Code на Haiku всё ещё дорого обходится при model: haiku?**

Обычно причин две. В Bedrock, Google Cloud, Foundry или Claude Platform on AWS алиас haiku означает Haiku 4.5, которая стоит в 10 раз дороже Haiku 5.5. Либо задана CLAUDE_CODE_SUBAGENT_MODEL_FORCE, и Claude Code игнорирует поле model. /tasks показывает фактическую модель каждого субагента. (Источник вопроса: подсказки «claude code subagent model=haiku» и «claude code use haiku for subagents»; ответ: документация по настройке моделей, документация по субагентам)

Чем субагенты Claude Code отличаются от команд агентов (agent teams)?

Субагент возвращает результат основному агенту, а между собой субагенты не общаются. Участники команды агентов работают с общим списком задач и могут писать друг другу, что подходит для задач, где нужны обсуждение и координация. В документации сказано, что команды агентов — экспериментальная функция: по умолчанию они отключены и расходуют гораздо больше токенов. Для пакета независимых аккаунтов достаточно субагентов. (Источник вопроса: подсказка «claude code subagents vs agent teams»; ответ: документация по командам агентов)

Сколько субагентов Claude Code может запускать одновременно?

По умолчанию 20 одновременно. 21-й возвращает «Concurrent subagent limit reached». Начиная с v2.1.217 это значение меняет CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS, а общее число субагентов в сессии не ограничено. Для воркеров, которые вызывают внешний API, реальный предел — лимит запросов API. При 10 запросах в минуту у нашего тестового ключа и примерно 25 секундах на вызов больше 4 воркеров дают только 429. При стандартном для аккаунта лимите 60 в минуту это число — около 25. (Источник вопроса: подсказка «claude code run subagents in parallel»; ответ: документация по субагентам, лимит одновременных запусков и наш тест)

Что Claude Code делает с очень большим результатом MCP-инструмента?

Выше 10 000 токенов он выдаёт предупреждение, а лимит по умолчанию — 25 000 токенов (меняется через MAX_MCP_OUTPUT_TOKENS). Для инструмента без anthropic/maxResultSizeChars успешный результат длиннее 50 000 символов сохраняется в файл. Наш результат TikTok с 200 комментариями занял 54 819 символов, так что он был бы сохранён. Самый длинный результат с 50 комментариями занял 24 749 символов, так что он сохранён не был бы. (Источник вопроса: наш тест; ответ: документация по MCP, лимиты вывода)

Источники

  1. «Create custom subagents», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/sub-agents
  2. «Connect Claude Code to tools via MCP», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/mcp
  3. «Claude Code changelog» (v2.1.293–v2.1.310), Anthropic, с 2026-10-07 по 2026-10-23, https://code.claude.com/docs/en/changelog
  4. «Manage costs effectively», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/costs
  5. «Model configuration», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/model-config
  6. «Environment variables», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/env-vars
  7. «Agent teams», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/agent-teams
  8. «Orchestrate subagents at scale with dynamic workflows», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/workflows
  9. «Explore the context window», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/context-window
  10. «Permissions», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/permissions
  11. «Settings», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/settings
  12. «Run Claude Code programmatically», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/headless
  13. «Skills», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/skills
  14. «Prompt caching», документация Claude Code, Anthropic, просмотрено 2026-10-26, https://code.claude.com/docs/en/prompt-caching
  15. «CHANGELOG.md», anthropics/claude-code, GitHub, просмотрено 2026-10-26, https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md
  16. «Introducing Claude Haiku 5.5», Anthropic, 2026-10-07, https://www.anthropic.com/claude-haiku-5-5
  17. «Claude Haiku 5.5 System Card», Anthropic, 2026-10-07, https://www.anthropic.com/claude-haiku-5-5-system-card
  18. «Pricing», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/about-claude/pricing
  19. «Models overview», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/about-claude/models/overview
  20. «Migrating to Claude Haiku 5.5», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/models/haiku-5-5/migration-guide
  21. «Prompt caching», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/build-with-claude/prompt-caching
  22. «Token counting», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/build-with-claude/token-counting
  23. «Rate limits», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/api/rate-limits
  24. «Release notes», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/release-notes/overview
  25. «Tool search tool», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool
  26. «Tool use overview», документация Claude Platform, Anthropic, просмотрено 2026-10-26, https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview
  27. «Claude pricing (Pro, Max, Team)», Anthropic, просмотрено 2026-10-26, https://claude.com/pricing
  28. «Building agents: When to fold subagents into your main agent loop», Anthropic, 2026-10-22, https://claude.com/resources/articles/building-agents-when-to-fold-subagents-into-your-main-agent-loop
  29. «single-agent-loop-kit», anthropics, GitHub, просмотрено 2026-10-26, https://github.com/anthropics/single-agent-loop-kit
  30. «Transports» (2025-06-18), спецификация Model Context Protocol, https://modelcontextprotocol.io/specification/2025-06-18/basic/transports
  31. «Tools» (2025-06-18), спецификация Model Context Protocol, https://modelcontextprotocol.io/specification/2025-06-18/server/tools
  32. «Lifecycle» (2025-06-18), спецификация Model Context Protocol, https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle
  33. «RFC 6585: Additional HTTP Status Codes» (429), IETF, апрель 2012, https://www.rfc-editor.org/rfc/rfc6585
  34. «RFC 9110: HTTP Semantics» (Retry-After), IETF, июнь 2022, https://www.rfc-editor.org/rfc/rfc9110
  35. «Timeouts, retries, and backoff with jitter», Amazon Builders' Library, 2019-12-05, https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/
  36. «concurrent.futures», документация Python, просмотрено 2026-10-26, https://docs.python.org/3/library/concurrent.futures.html
  37. «TikTok Research Tools: Access and Eligibility», TikTok for Developers, просмотрено 2026-10-26, https://developers.tiktok.com/products/research-api/
  38. «Research API Codebook», TikTok for Developers, просмотрено 2026-10-26, https://developers.tiktok.com/doc/research-api-codebook
  39. «TikTok Unveils AI-Powered Updates for Advertisers», TikTok Newsroom, 2026-10-05, https://newsroom.tiktok.com/tiktok-unveils-ai-powered-updates-for-advertisers-driving-discovery-action-and-measurable-business-outcomes?lang=en
  40. «Evolving TikTok for Business MCP», блог TikTok for Business, 2026-06-30, https://ads.tiktok.com/business/en-US/blog/tiktok-agentic-hub-ai-agents-skills-mcp
  41. «TikTok Terms of Service (US)», TikTok, просмотрено 2026-10-26, https://www.tiktok.com/legal/page/us/terms-of-service/en
  42. Каталог данных EveryInfra, EveryInfra, просмотрено 2026-10-26 17:22 SGT, https://api.everyinfra.com/api/v1/social/catalog
  43. Каталог TikTok в EveryInfra, EveryInfra, просмотрено 2026-10-26, https://api.everyinfra.com/api/v1/social/catalog?platform=tiktok
  44. «Haiku 5.5 is 40x cheaper than Opus 5.5. Your Explore subagent is probably still running on Opus», Reddit r/ClaudeCode, 2026-10-08, https://www.reddit.com/r/ClaudeCode/comments/1x0kzbh/haiku_55_is_40x_cheaper_than_opus_55_your_explore/
  45. «PSA: Claude Code subagents inherit your session model now», Reddit r/claude, просмотрено 2026-10-26, https://www.reddit.com/r/claude/comments/1v7iqqy/psa_claude_code_subagents_inherit_your_session/
  46. «How much more effective is using Opus 5.5 with Haiku subagents», Reddit r/ClaudeAI, просмотрено 2026-10-26, https://www.reddit.com/r/ClaudeAI/comments/1x1buac/how_much_more_effectivebetter_is_using_opus_55/
  47. «Anthropic's new guide (Oct 22) argues most agents should have fewer subagents», Reddit r/ClaudeAI, 2026-10-24, https://www.reddit.com/r/ClaudeAI/comments/1xdwquj/anthropics_new_guide_oct_22_argues_most_agents/
  48. «Anthropic says one AI agent beats many subagents», The Decoder, 2026-10-25, https://the-decoder.com/anthropic-says-one-ai-agent-beats-many-subagents-now-that-models-can-handle-complexity-alone/

Справка BL-53