Решайте большие проблемы недавно открытому агенту
«Изоляция процессов обеспечивает изоляцию контекста бесплатно». Дочерний агент выполняет грязную работу, а родительский агент собирает только чистую сводку.
Дилемма родительского агента
Представьте, что вы попросили Клода Кода «выяснить, как этот репозиторий Rust из 100 000 строк обрабатывает параллелизм». Интуитивный подход: он выполняет ls, cat, grep и ищет в основном контексте.
Проблема: в ходе этого раунда исследования в сообщениях[[] будет собрано 30 результатов Tool_results, каждый из которых будет содержать несколько тысяч токенов. К тому моменту, когда он действительно начнет писать ответ, контекст будет заполнен процессом исследования — верхний предел будет активирован еще через несколько шагов, а ответ все равно будет сбивать с толку.
Решение проблемы s04: передайте задачу исследования новому агенту. Новый агент начинает с messages=[], исследует свои собственные и, наконец, возвращает только сводку родительскому агенту. В родительском контексте есть только одно предложение: «Инструмент задачи был настроен один раз, и результат был XXX», что обновляется.
def run_subagent(подсказка: str) -> str: sub_messages = [{"role":"user", "content": Prompt}] # Новый контекст for _ в диапазоне(30): # Верхний предел безопасности для предотвращения потери контроля ответ = client.messages.create(..., messages=sub_messages, инструменты=CHILD_TOOLS, ...) ... # Возвращается только последний текст, все промежуточные рассуждения отбрасываются return "".join(b.text for b in response.content if hasattr(b, "text"))
Сравнение контекста отца и сына
Этот виджет имитирует реальную задачу: «Составить список всех мест в этом хранилище, которые вызывают устаревший API». Вы можете запустить его с помощью двух стратегий: (A) родительский агент делает это сам; (B) создать субагента. Сравните размеры двух последних контекстов слева и справа.
CHILD_TOOLS: Какие инструменты может получить субагент?
В реализации s04 есть деталь, которую легко упустить: субагент не может получить инструмент задачи.
# Субагент может использовать только базовые инструменты и не может создавать внуков CHILD_TOOLS = [bash, read_file, write_file, edit_file] # Родительский агент имеет еще один инструмент для задач PARENT_TOOLS = CHILD_TOOLS + [задача]
Почему? Избегайте того, чтобы рекурсивная диспетчеризация превращалась в взрыв дерева. Один субагент порождает четыре субсубагента, и всего за несколько раундов выполняются десятки одновременных вызовов. Ни токен, ни ограничение скорости API не могут с этим справиться. Соглашение s04: spawn плоский, и один слой родительский → дочерний — это один слой. Это также имеет место и в реальной реализации Claude Code — в инструменте Task запрещено повторно вызывать инструмент Task.
видимый и невидимый
Давайте разберемся с правами и обязанностями: Какой из следующих вопросов, по вашему мнению, является T, а какой F, по вашему мнению?