← Блог

MapReduce для субагентов: как обработать 12800 строк и не потерять контекст

Сережа Рис · 14 January 2026

claude codeсубагенты

Файл субтитров — 12 тысяч строк. Читаю кусками по тысяче.

На восьмом куске — Context limit reached.

А я ещё не начал генерировать конспект.

Проблема: контекст — жёсткий лимит

У Opus 4.5 окно в 200 тысяч токенов. Звучит много — пока не начнёшь читать большие файлы.

Мне нужно было сделать конспект двухчасового урока по вайбкодингу. Файл субтитров — 12800 строк. Каждое чтение по тысяче строк съедает процентов десять контекста. Плюс системный промпт, история чата, инструменты.

Восемь чтений — и 185k из 200k занято. Работа не начата, а данные уже не влезают.

Идея: каждый субагент — это отдельные 200k

Task tool запускает субагента в изолированном процессе. У него свой контекст. Свои 200 тысяч токенов.

Anthropic в своей research-системе обнаружили: разбивать работу между субагентами и потом собирать результаты — эффективнее, чем запихивать всё в один большой контекст. Даже если модель технически вмещает.

Три субагента — это три отдельных контекста по 200k. Каждый читает свой кусок файла, делает свою часть работы, возвращает результат. Главный агент только собирает.

Паттерн MapReduce

Название из распределённых вычислений: Map раздаёт задачи, Reduce собирает результаты.

[subtitles.srt — 12800 строк]
            │
    ┌───────┼───────┐
    ▼       ▼       ▼
[Agent 1] [Agent 2] [Agent 3]
Ch. 1-9   Ch. 10-18 Ch. 19-26
    │       │       │
    ▼       ▼       ▼
[Summary] [Summary] [Summary]
    └───────┼───────┘
            ▼
    [Main: объединить]
            │
            ▼
    [summary.md готов]

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

Как это выглядит в Claude Code

Запускаю три Task tool параллельно:

Task(
  subagent_type: "general-purpose",
  prompt: "Прочитай subtitles.srt строки 1-4000.
           Сгенерируй конспект для глав 1-9.
           Формат: ### Глава + тезис + детали + цитата."
)

Task(
  subagent_type: "general-purpose",
  prompt: "Прочитай subtitles.srt строки 4000-8000.
           Сгенерируй конспект для глав 10-18."
)

Task(
  subagent_type: "general-purpose",
  prompt: "Прочитай subtitles.srt строки 8000-12800.
           Сгенерируй конспект для глав 19-26."
)

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

Результат — три блока текста, которые склеиваю в один файл.

Что получилось

Метрика Последовательно MapReduce
Контекст главного агента 100% (переполнен) ~30%
Время выполнения Не завершилось ~3 минуты
Результат Обрыв на середине 26 глав конспекта

Последовательное чтение упёрлось в лимит. Параллельное — работает.

Когда использовать

Подходит:

Не подходит:

Overhead Каждый субагент стоит ~20k токенов на запуск. Три субагента — 60k. На маленьких задачах это может быть дороже, чем просто прочитать файл.

Почему это работает

Принцип из Go: «Share memory by communicating, don’t communicate by sharing memory». Не пытайся впихнуть всё в один контекст. Раздай работу, собери результаты.

Anthropic пишут, что в их research-системе субагенты — это способ сжатия. Каждый исследует свой кусок, возвращает только важное. Главный агент не тонет в деталях.

То же самое с файлами. В моём случае: 12800 строк субтитров превратились в 460 строк конспекта. Компрессия примерно 28:1.

Источники

Подписаться на обновления — @sereja_tech