Когда разработчик поручает автономному ИИ-агенту регулярную задачу — например, еженедельный парсинг и аудит прайс-листов поставщиков с поиском рыночных цен — первый прогон кажется магией. Но при следующем запуске агент заново перебирает инструменты, блуждает по шагам, сжигает бюджет на рассуждения и выдает отчет в совершенно другой структуре.
Проблема кроется в слепом перепланировании: классический агентный цикл заставляет нейросеть заново изобретать велосипед на каждом шаге. Существует четыре архитектурных уровня фиксации повторяющихся задач — от сохраненного текста до детерминированного кода. Разберем механику каждого уровня, расчет экономии токенов и правила сборки надежного пайплайна.
Сколько стоит перепланирование в агентном цикле
Агентный запуск стандартно работает как цикл ReAct (Reasoning + Acting): модель считывает контекст, выбирает тул (инструмент), получает результат выполнения и заново прогоняет раздувшийся контекст через LLM на следующем витке. Входной контекст накапливается лавинообразно, увеличивая задержку (latency) и чек за API.
Представим типовой сценарий сверки цен на 10 последовательных шагов:
- Системный промпт с описанием доступных тулов забирает 8 000 токенов.
- Каждый промежуточный шаг (вызов инструмента и возвращенный payload) добавляет в контекст по 1 500 токенов.
- Суммарный входной поток за 10 вызовов рассчитывается по нарастающей: $8000 + (8000 + 1500) + (8000 + 3000) + \dots + (8000 + 13500) = 147 500$ входных токенов.
Если вынести логику в детерминированную структуру (граф или код), модель вызывается всего один раз — в финальном узле аналитики, получая чистые агрегированные данные объемом 6 000 токенов. Разница по входным токенам достигает 25 раз, а цепочка из десяти долгих сетевых запросов схлопывается в единичный вызов.
| Архитектурный уровень | Кто строит план при повторе | Входные токены (10 шагов) | Устойчивость к смене формата | Риск галлюцинаций в логике |
|---|---|---|---|---|
| 1. Сохраненный промпт | Модель с нуля на каждом запуске | ~147 500 токенов | Высокая (адаптируется сама) | Высокий |
| 2. Скиллы (Agent Skills) | Модель по жесткой инструкции | ~50 000 – 90 000 токенов | Средняя | Умеренный |
| 3. Граф шагов (Graph) | Жесткий граф узлов + модель | ~6 000 токенов | Низкая (требует правок графа) | Минимальный |
| 4. Детерминированный код | Python/JS код (без LLM в логике) | 0 токенов (только финальный анализ) | Нулевая (ломается от сдвига колонок) | Нулевой |
Уровень 1: Запуск по расписанию и триггерам
Самый простой вариант — сохранить текст запроса и повесить его на триггер. Планирование здесь целиком остается внутри LLM: на каждый запуск открывается новая изолированная сессия, где агент формирует цепочку действий заново.
Подобный подход реализован вендорами "из коробки":
- ChatGPT (Scheduled Tasks): три режима работы (разовый/повторяющийся по расписанию, мониторинг изменений, триггеры по событиям). Событийные задачи отслеживают новые письма в Gmail, сообщения в каналах Slack или обновления pull request в GitHub. Лимит платформы: не более 30 срабатываний в час и не более 720 в сутки на пользователя.
- Claude Cowork: запуск по расписанию через команду
/schedule. Сценарий можно написать с нуля либо выполнить задачу вручную, после чего Claude преобразует успешный сеанс в периодический промпт. Внутри проектов Cowork действует общая память, связывающая контекст соседних запусков. - Claude in Chrome: пользователь включает режим записи действий в браузере, а платформа транслирует клики и переходы в воспроизводимый шорткат.
Плюс метода — гибкость: если поставщик внезапно переименует колонку «Цена с НДС» в «Прайс (брутто)», агент разберется на лету. Минус — непредсказуемый формат итогового отчета и максимальная стоимость выполнения.
Уровень 2: Упаковка логики в открытый формат скиллов
Скилл (Agent Skill) — это стандартизированная папка с файлом SKILL.md и вспомогательными скриптами. Спецификацию предложила компания Anthropic для Claude Code, после чего формат стал открытым стандартом для Codex, ChatGPT, Gemini CLI, Cursor и GitHub Copilot.
Скилл организует контекст через механизм progressive disclosure (поэтапное раскрытие): система не скармливает модели всю документацию сразу, а держит в постоянной памяти лишь метаданные.
Типовая структура директории скилла:
price-audit/
├── SKILL.md
├── scripts/
│ ├── read_price.py
│ └── deviation.py
└── assets/
└── report_template.xlsxФайл SKILL.md содержит фронтмэттер (YAML-шапку) и markdown-инструкцию:
---
name: price-audit
description: Сверка прайс-листов поставщиков с рыночными данными и генерация отчета
---
# Инструкция по выполнению аудита
1. Запусти скрипт парсинга входного файла: `python scripts/read_price.py --file <input_path>`
2. Для каждой позиции рассчитай дельту через `python scripts/deviation.py`
3. Сформируй итоговый файл, взяв за основу assets/report_template.xlsxПодключение скилла кардинально снижает энтропию: модель больше не фантазирует архитектуру пайплайна, а исполняет детерминированные скрипты из папки scripts/. Расход токенов падает, так как тяжелые расчеты уходят в локальный рантайм Python.
Уровень 3: Фиксация пайплайна графом состояний
Когда логика стабилизировалась, цикл рассуждений устраняют полностью. Задачу оборачивают в граф (state graph), где каждый шаг — это изолированная функция, а модель привлекается точечно.
Инструменты вроде LangGraph или n8n позволяют собрать жесткую цепочку: чтение файла $\to$ валидация колонок $\to$ HTTP-запрос к API цен $\to$ расчет дельты $\to$ узел LLM для краткого резюме аномалий $\to$ отправка в Slack.
Пример минимального узла валидации и подготовки контекста на Python:
import pandas as pd
from typing import Dict, Any
def process_price_feed(file_path: str, threshold: float = 0.15) -> Dict[str, Any]:
df = pd.read_excel(file_path)
# Детерминированный расчет без привлечения LLM
df["deviation"] = (df["market_price"] - df["supplier_price"]) / df["market_price"]
anomalies = df[df["deviation"].abs() > threshold]
return {
"total_positions": len(df),
"anomalies_count": len(anomalies),
"payload_for_llm": anomalies.to_dict(orient="records")
}Модели больше не передается 5 000 строк исходного прайса и системные промпты десяти тулов. Она получает компактный JSON с отфильтрованными аномалиями и решает ровно одну задачу — генерирует текстовое резюме для закупщика.
Уровень 4: Полная компиляция в детерминированный код
Финальная стадия оптимизации — полное вытеснение ИИ из процесса выполнения рутины. Если на шаге 1 агент написал рабочий Python-скрипт, отладил регулярные выражения и нашел селекторы, этот код сохраняется в репозиторий и запускается через стандартный cron или CI/CD-пайплайн.
Где это ломается: подводные камни фиксации
Главный компромисс агентных систем: чем жестче зафиксирован план, тем ниже его толерантность к изменениям среды.
- Хрупкость входных контрактов. Детерминированные графы и Python-скрипты ломаются, когда поставщик меняет заголовки колонок, переходит с формата
.xlsxна.csvили упаковывает значения в объединенные ячейки. Агент первого уровня справится с этим незаметно, а жесткий пайплайн упадет в runtime. - Лимиты триггеров. Платформенные триггеры (например, в OpenAI Scheduled Tasks с лимитом 30 вызовов в час) могут стать узким горлышком при резком всплеске событий во внешних сервисах.
- Иллюзия стабильности промпта. При уровне 1 обновление весов модели на стороне провайдера способно разрушить рабочий сценарий: прежний текстовый промпт начнет пропускать шаги, которые раньше отрабатывали корректно.
Что попробовать дальше
- Проведите аудит агентных задач: выделите сценарии, запускаемые чаще 3 раз в неделю, и переведите их из обычного чата в формат спецификации
SKILL.md. - Изолируйте вычисления: вынесите парсинг таблиц, валидацию и математику из контекста модели в локальные Python-скрипты.
- Настройте гибридный контур: запускайте детерминированный граф, а вызов неструктурированного агентного цикла используйте только как fallback-механизм в блоке
except Exception, если формат данных изменился.
FAQ
Чем формат скилла SKILL.md отличается от обычного системного промпта?
Скилл хранится локально в структурированной папке и загружается по принципу progressive disclosure. Модель видит только название и краткое описание из YAML-шапки, пока задача не потребует открытия полной инструкции или вызова вспомогательного скрипта.
Можно ли полностью исключить обращение к LLM в повторяющихся задачах?
Да, если задача сводится к четким алгоритмам: сбору данных, парсингу по регулярным выражениям и математическим расчетам. В таких сценариях агент нужен лишь один раз — чтобы сгенерировать и протестировать исполняемый Python-скрипт.
Когда стоит остаться на Уровне 1 (сохраненный текстовый промпт)?
Уровень 1 незаменим в условиях высокой неопределенности: когда источники данных постоянно меняют структуру, формулировки входящих писем нетипичны, а цена ошибки при перепланировании ниже затрат на разработку и поддержку графа.
Как кэширование префикса (Prompt Caching) влияет на стоимость сложных агентов?
Кэширование снижает стоимость повторного чтения системного промпта и истории сообщений, но не уменьшает число шагов в цикле ReAct. Модель все равно совершает множественные последовательные вызовы, накапливая задержку ответа.

