Graph Engineering для ИИ-агентов: сборка конвейеров, защита от контекста и кэширование токенов
Разработка автономных систем на базе больших языковых моделей (LLM) переходит от односложных промптов к агентным системам. Первое поколение агентов строилось вокруг циклической инженерии (Loop Engineering): один агент получал цель, инструменты и в цикле пытался выполнить задачу, накапливая историю действий. Однако при усложнении задач разработчики столкнулись с деградацией контекста (Context Rot).
По мере роста длины диалога языковая модель перегружает контекстное окно: ключевые инструкции затираются вызовами инструментов, увеличивается число ошибок, а стоимость каждого нового шага растет. Решением этой проблемы стала графовая инженерия (Graph Engineering) — подход, в котором задача расщепляется на параллельный конвейер специализированных узлов с изолированными состояниями.
Парадокс одиночного агента: почему длинные циклы ведут к перегрузке контекста
Контекстное окно (Context Window) языковой модели имеет предел. В рамках монолитного цикла агент вынужден передавать всю историю прошлых попыток, ответов от API и временных данных на каждый следующий шаг. В результате многошаговые циклы расходуют в 10–15 раз больше токенов, чем стандартный чат.
При длительной работе возникают три рисковых фактора:
- Потеря инструкций. Модель перестает строго следовать системным правилам (System Prompt), зафиксированным в начале сессии, отвлекаясь на свежие промежуточные выводы.
- Ложная самопроверка. Агент, проверяющий собственную работу в рамках того же контекста, склонен воспроизводить свои первичные ошибки и игнорировать недостающие данные.
- Растущие финансовые затраты. Каждый новый запрос требует повторной передачи и оплаты всей накопленной истории.
Архитектура Graph Engineering: узлы, ребра и разделение состояний
Графовая инженерия переносит принципы модульного программирования в мир ИИ-агентов. Системный конвейер описывается как ориентированный граф, состоящий из двух элементов:
- Узлы (Nodes). Выделенные функциональные блоки. Узлом может выступать скрипт (например, валидация формата JSON), быстрая модель для сбора данных или специализированный агент.
- Ребра (Edges). Направленные связи между узлами, определяющие последовательность выполнения, условия переходов (условные ребра) или параллельный запуск (параллельные ребра).
Ключевой принцип заключается в изоляции состояния (Shared State): каждый узел получает на вход только те данные, которые необходимы для его локальной операции, и возвращает узкий результат.
Сравнительный разбор: Loop Engineering против Graph Engineering
Различие между монолитным циклом и графовым конвейером определяет экономику и надежность системы:
| Параметр | Монолитный цикл (Loop Engineering) | Графовый конвейер (Graph Engineering) |
|---|---|---|
| Управление состоянием | Одна непрерывно растущая история чата | Минимальное общее состояние (Shared State) и компактные входы узлов |
| Скорость работы | Последовательное выполнение всех шагов | Параллельное исполнение независимых узлов |
| Отладка и аудит | Сложно локализовать место сбоя | Точная проверка входов и выходов конкретного узла |
| Экономика токенов | Экспоненциальный рост расходов при каждом шаге | Оптимизация за счет изоляции контекста и кэширования |
| Контроль качества | Самопроверка в том же контексте воспроизводит ошибки | Независимый узел-рецензент с чистой памятью («Clean Eyes») |
Пошаговое руководство по проектированию графового конвейера
Для перевода монолитного агента на графовую архитектуру рекомендуется выполнить следующие действия:
- Определение критериев приемки. Сформулировать финальный артефакт, допустимый бюджет токенов и критерии проверки качества.
- Декомпозиция на независимые узлы. Разбить задачу на роли: планировщик (Planner), сборщики данных (Workers), агрегатор (Aggregator) и проверяющий (Reviewer).
- Проектирование схемы общего состояния (Shared State Schema). Зафиксировать поля, передаваемые между узлами: исходный запрос, список ссылок и вердикт проверки.
- Настройка параллелизма и лимитов (Bounded Concurrency). Задать лимит одновременно исполняемых процессов с учетом ограничений пропускной способности API (Rate Limits / TPM).
- Подключение изолированного рецензента. Направить результат отдельному узлу с инструкцией проверки и чистым контекстным окном.
Официальная процедура настройки LangGraph, кэширования Anthropic и subagents
Ниже приведена официальная техническая процедура реализации графовых конвейеров, кэширования и суб-агентов:
1. Сборка графа в LangGraph (Python/TypeScript)
- Где выполняется: в коде управляющего сервиса на сервере или в локальном проекте.
- Инструкция по шагам:
- Установите библиотеку:
pip install langgraph langchain-core. - Определите схему состояния с помощью
TypedDictв Python, внеся туда необходимые поля (messages,documents,decision). - Объявите функции узлов (
nodes), принимающиеStateи возвращающие обновленные ключи состояния. - Создайте экземпляр
StateGraph(State), добавьте узлы черезbuilder.add_node("name", node_func). - Задайте ребра:
builder.add_edge("node_a", "node_b")илиbuilder.add_conditional_edges("planner", routing_func). - Скомпилируйте граф:
graph = builder.compile().
- Установите библиотеку:
- Проверка работы: запустите
graph.invoke({"task": "test_query"})и убедитесь через логирование, что состояние передается между узлами. Официальная документация: LangGraph Workflows & Agents и LangGraph Graph API.
2. Настройка кэширования системных инструкций Anthropic API (Prompt Caching)
- Где выполняется: в HTTP-запросах к Anthropic API или при настройке SDK.
- Инструкция по шагам:
- Поместите статическую часть (системные инструкции, определения инструментов
tools) в начало массива сообщений. - Добавьте к последнему статическому блоку параметр кэширования:
"cache_control": {"type": "ephemeral"}. - Отправьте запрос к API. При повторных вызовах с тем же префиксом течение 5 минут модель применит кэш.
- Проверьте ответ API в объекте
usage: поляcache_creation_input_tokens(запись) иcache_read_input_tokens(чтение из кэша).
- Поместите статическую часть (системные инструкции, определения инструментов
- Безопасность и нюансы: стоимость чтения из кэша составляет 10% от базовой цены входных токенов, а запись стоит на 25% дороже стандартного входа. Не добавляйте динамические переменные перед блоком
cache_control. Официальная документация: Anthropic Prompt Caching.
3. Создание изолированных суб-агентов в Claude Code
- Где выполняется: в локальном терминале среды разработки Claude Code.
- Инструкция по шагам:
- В корне проекта создайте директорию
.claude/subagents/. - Создайте файл конфигурации суб-агента с описанием роли и ограничением инструментов (например, только чтение файлов).
- Укажите узкое назначение и инструкции проверки.
- Вызовите суб-агента из основной сессии для делегирования задачи с изолированным контекстом.
- В корне проекта создайте директорию
- Проверка работы: убедитесь, что суб-агент выполняет проверку в отдельной сессии и возвращает вердикт в родительский процесс. Официальная документация: Claude Code Sub-agents.
Экономика токенов: кэширование инструкций и оптимизация расходов
Внедрение графовой архитектуры в сочетании с механизмом Prompt Caching позволяет снизить расходы на LLM API. Повторяющиеся системные промпты и описание инструментов занимают тысячи токенов. При монолитном цикле эти токены оплачиваются полностью на каждом шаге.
При кэшировании стабильная часть инструкций сохраняется в памяти инфраструктуры Anthropic на 5 минут. Повторные обращения к этому префиксу обходятся на 90% дешевле стандартного тарифа. При массовом параллельном запуске агентов-воркеров это обеспечивает сокращение бюджета при ускорении времени отклика (latency).
Изолированная проверка качества: принцип «чистых глаз» для агентов-рецензентов
Главный фактор надежности Graph Engineering — выделение узла проверки (Reviewer Agent) в отдельную сессию. Принципиально важно соблюдать правило «чистых глаз» (Clean Eyes):
- Рецензенту не передается вся история попыток и ошибок агента-исполнителя.
- На вход подается только итоговый сгенерированный артефакт, исходные первоисточники и рубрикатор требований.
- Рецензент работает с отдельной системной инструкцией, сфокусированной на поиске галлюцинаций и нарушений формата.
Если рецензент обнаруживает ошибку, условное ребро графа возвращает задачу на узел исправления с точным указанием замечаний. Такой подход превращает конвейер в самоконтролируемую систему.

