LangChain Deep Agents: архитектура субагентов, планирование и что из этого можно взять для code review

Когда строишь multi-agent систему для code review, рано или поздно упираешься в три проблемы: как изолировать контекст между агентами, как планировать сложные задачи и как не упереться в лимит контекстного окна на длинных diff'ах. LangChain выпустили Deep Agents — open-source фреймворк, который решает именно эти задачи. Разбираю архитектуру и прикидываю, что из этого применимо в PRGate.

Что такое Deep Agents

Deep Agents — agent harness поверх LangGraph. Не новый runtime и не новая reasoning-модель, а набор паттернов и встроенных инструментов вокруг стандартного tool-calling цикла. По сути — «batteries included» обёртка для создания агентов, способных работать с длинными, многошаговыми задачами.

Библиотека состоит из двух частей:

Философия — «trust the LLM». Агент может делать всё, что позволяют его tools. Границы — на уровне инструментов и sandbox'ов, а не на уровне промпта.

Три кита архитектуры

1. Planning — write_todos

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

Это не просто чеклист. Plan адаптивный — если на шаге 3 обнаруживается новая информация, агент пересматривает шаги 4-6. Ближайший аналог — как работает ReAct, но с явным планом вместо implicit reasoning chain.

2. Subagents — изоляция контекста через task tool

Ключевой паттерн. Основной агент через task tool спавнит дочерних агентов с изолированным контекстом. Каждый субагент видит только то, что ему передали, делает свою работу и возвращает результат.

Зачем это нужно:

3. Filesystem backend — виртуальная файловая система

Файловые инструменты (ls, read_file, write_file, edit_file) позволяют агенту скидывать большие блоки данных на «диск» вместо того, чтобы держать их в контексте. Бэкенд pluggable:

Это решает реальную проблему: diff на 2000 строк не влезает в контекст, но агент может записать его в файл и читать по частям.

Middleware и управление контекстом

Deep Agents включает middleware для:

Middleware оборачивает вызовы модели и инжектит файловые инструменты автоматически. Сборка агента происходит в libs/deepagents/deepagents/graph.py, где собирается CompiledStateGraph с нужными хуками.

Что из этого применимо в PRGate

PRGate — open-source AI code review для GitHub. Текущая архитектура уже использует multi-agent подход: оркестратор строит план ревью, собирает контекст репозитория, запускает специализированных агентов параллельно (logic, security, style), а критик фильтрует false positives.

Вот конкретные паттерны из Deep Agents, которые имеет смысл адаптировать:

Filesystem backend для длинных diff'ов

Сейчас PRGate передаёт diff целиком в контекст агента. На больших PR это больно — контекст забивается, модель теряет фокус. Паттерн Deep Agents: записать diff в виртуальный файл, а агенту давать только summary + возможность читать конкретные chunks по запросу.

Это особенно актуально для ContextPack стадии, где собирается знание о репозитории: README, конфиги, связанные файлы. Вместо инжекта всего в промпт — filesystem с lazy loading.

Адаптивное планирование

write_todos паттерн напрямую ложится на ReviewPlan стадию PRGate. Сейчас оркестратор строит план один раз. С адаптивным планированием: оркестратор строит начальный план → после первого раунда агентов обновляет план на основе findings → запускает дополнительные проверки если нужно.

Пример: security_agent находит SQL injection → оркестратор добавляет шаг «проверить все точки входа данных в этом модуле» → спавнит дополнительного агента.

Изоляция контекста через субагенты

В PRGate агенты-специалисты уже работают параллельно. Но сейчас каждый получает полный контекст. Паттерн Deep Agents: давать каждому агенту только релевантный срез. Logic_agent получает только бизнес-логику и тесты. Security_agent — только точки входа данных и конфигурации. Style_agent — только изменённые файлы без context pack.

Меньше контекста = меньше шума = точнее findings = ниже FPR.

Model routing на уровне субагентов

Deep Agents model-agnostic — каждый субагент может использовать свою модель. PRGate уже делает это (DeepSeek для планирования, GLM для security, Qwen для style). Но формализация через SDK-подобный интерфейс упростит добавление новых агентов и A/B-тестирование моделей.

Чего в Deep Agents нет (и что PRGate решает иначе)

Ссылки

Связанные заметки

Дисклеймер / Disclaimer: material is published for informational and research purposes. Полный отказ от ответственности / Full disclaimer.