Урок 04 · планирование

Решайте большие проблемы недавно открытому агенту

«Изоляция процессов обеспечивает изоляцию контекста бесплатно». Дочерний агент выполняет грязную работу, а родительский агент собирает только чистую сводку.

⏱ ~10 мин · 📝 3 интерактивных компонента · 🧑‍💻 На основе shareAI-lab · s04_subagent.py

Дилемма родительского агента

Представьте, что вы попросили Клода Кода «выяснить, как этот репозиторий 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, по вашему мнению?

Интерактив

Виджет 1 · Родительский и дочерний · сравнение размера контекста

Две стратегии для одной задачи. Нажмите «Выполнить» и посмотрите окончательную длину сообщений[] с обеих сторон и общую оценку токенов.

🧠 父 agent 亲自做
messages: 0 · ~0 tokens
🎯 spawn subagent
messages: 0 · ~0 tokens
Интерактив

Виджет 2 · Правда или ложь · Права и обязанности агентов отца и сына

6 тестов T/F, чтобы проверить ваше понимание границ изоляции.

答对 0 / 6
Интерактив

Виджет 3 · Когда создавать · Какие задачи целесообразно поручить субагенту?

Вам даются 6 описаний задач, вы решаете, будет ли (А) родительский агент выполнять их сам или (Б) подагент-порожденный. Никакого «абсолютного права» не существует, но есть очевидные преимущества и недостатки.

答对 0 / 6