Субагенты — Паттерны агентной инженерии — Блог Саймона Уиллисона
Субагенты — Паттерны агентной инженерии — Блог Саймона Уиллисона
Полный перевод, конспект и структурированный разбор материала
Перевод
Руководства > Агентные инженерные паттерны
Субагенты
Возможности LLM ограничены их лимитом контекста — тем, сколько токенов они могут одновременно удерживать в своей рабочей памяти. За последние два года эти значения практически не увеличились, несмотря на то, что сами LLM совершили огромный качественный скачок. Обычно этот лимит составляет около 1 000 000 токенов, однако бенчмарки часто показывают более качественные результаты при объеме контекста менее 200 000 токенов.
Тщательное управление контекстом с целью его удержания в этих пределах критически важно для получения отличных результатов от модели.
Субагенты предлагают простой, но эффективный способ решения крупных задач без чрезмерного расхода ценного контекста основного кодинг-агента.
Когда кодинг-агент использует субагента, он фактически запускает свою чистую копию для достижения конкретной цели, с новым окном контекста, которое начинается с чистого промпта.
Субагент Explore в Claude Code
Claude Code активно использует субагентов в рамках своего стандартного рабочего процесса. Давайте рассмотрим это на наглядном примере.
Каждый раз, когда вы начинаете новую задачу в существующем репозитории, Claude Code сначала необходимо изучить этот репозиторий, чтобы понять его общую структуру и найти информацию, необходимую для выполнения задачи.
Он делает это, составляя промпт и отправляя субагента для проведения исследования и возврата описания того, что тот обнаружит.
Я начал сессию Claude Code со скриншота страницы из моего руководства и следующего промпта:
Сделай так, чтобы при просмотре различий (diff) в главах также подсвечивались изменившиеся символы: используй более темный оттенок красного или зеленого для отдельных измененных сегментов текста внутри строки.
Вот транскрипт этой сессии.
Claude Code начал с запуска субагента «Explore» (Исследование) со следующим начальным промптом:
Найди код, реализующий просмотр различий (diff view) для разделов («chapters») в этом Django-блоге. Мне нужно найти:
- Шаблоны, которые рендерят diff (ищите HTML/CSS, связанный с diff, с красным/зеленым фоном)
- Код на Python, который генерирует diff (ищите использование difflib или аналогичных библиотек)
- Любой JavaScript, связанный с рендерингом diff
- Стили CSS для просмотра diff (красный/зеленый фон строк) Тщательно изучи директории templates/, static/, blog/. Ищи ключевые слова: "diff", "chapter", "revision", "history", "compare".
Субагенты работают аналогично любому другому вызову инструмента (tool call): родительский агент запускает их точно так же, как и любой другой инструмент, и ждет ответа. Интересно наблюдать, как модели сами составляют для себя промпты — обычно они демонстрируют хороший вкус в выборе стратегий промптинга.
Субагент Explore поработал несколько секунд и вернул ответ, который начинался так:
Отлично! Теперь позвольте мне составить подробный отчет со всеми результатами:
Отчет: Реализация просмотра различий в главах Я нашел полную реализацию просмотра различий для глав в этом Django-блоге. Вот основные компоненты:
- Код на Python — генерация diff (
/home/user/simonwillisonblog/guides/views.py, строки 139-202). Функция представленияchapter_changes()использует встроенную библиотеку Pythondifflib.unified_diff()для генерации различий: […]
Полный ответ субагента содержал все детали, необходимые родительскому агенту для того, чтобы приступить к редактированию кода для выполнения моего первоначального запроса.
Параллельные субагенты
Этот субагент Explore — самый простой пример работы субагентов, при котором родительский агент приостанавливает свою работу на время выполнения субагента. Главное преимущество такого подхода заключается в том, что субагент работает с чистым контекстом, что позволяет избежать расхода токенов из доступного лимита родительского агента.
Кроме того, субагенты могут обеспечить значительный прирост производительности: родительский агент может запускать несколько субагентов одновременно, возможно, даже используя более быстрые и дешевые модели (такие как Claude Haiku) для ускорения этих задач.
Кодинг-агенты, поддерживающие субагентов, могут использовать их на основе ваших инструкций. Попробуйте промпты вроде этого:
Используй субагентов, чтобы найти и обновить все шаблоны, на которые влияет это изменение.
Специализированные субагенты
Некоторые кодинг-агенты позволяют запускать субагентов с дополнительными настройками, часто в виде кастомного системного промпта, кастомных инструментов или и того, и другого, что позволяет этим субагентам брать на себя различные роли.
Эти роли могут охватывать множество полезных специализаций:
- Агент для код-ревью может проверять код и выявлять баги, недостающие функции или слабые места в архитектуре.
- Агент для запуска тестов может выполнять тесты. Это особенно полезно, если ваш тестовый набор большой и перегружен логами: субагент может скрыть полный вывод тестов от основного кодинг-агента и вернуть только детали о возникших ошибках.
- Агент-отладчик может специализироваться на поиске причин проблем, тратя свой лимит токенов на анализ кодовой базы и запуск фрагментов кода, чтобы локализовать шаги для воспроизведения и определить первопричину бага.
Хотя может возникнуть соблазн чрезмерно увлечься и разбить задачи между десятками различных специализированных субагентов, важно помнить, что основная ценность субагентов заключается в сохранении важного корневого контекста и управлении ресурсоемкими операциями с токенами. Ваш корневой кодинг-агент вполне способен самостоятельно отлаживать или анализировать собственные результаты работы, если у него достаточно свободных токенов.
Официальная документация
Несколько популярных кодинг-агентов поддерживают субагентов, и у каждого из них есть своя документация по их использованию: