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

Позвольте агенту управлять своим прогрессом

«Агент может отслеживать свой прогресс — и я это вижу». Позвольте модели составить свой собственный список, а затем используйте небольшой механизм, который позволит ей запомнить об обновлении списка.

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

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

При работе Claude Code часто приходится делать несколько шагов: grep для поиска ссылок → прочитать несколько файлов → изменить код → запустить тесты. Если вы позволите модели «продвигаться на ощупь», вы увидите, что она хорошо справляется с первыми шагами, затем начинает забывать в середине и, наконец, сдается на полпути.

Решением для s03 является предоставление ему инструмента манифеста: модель настраивает свой собственный инструмент todo для размещения в нем элементов задачи, а TodoManager проверяет структуру, сохраняется и возвращает текущее представление. Это имеет два преимущества:

<ул>
  • Модель вынуждена разъяснять «что делать» — простое написание этого помогает ей прояснить свое мышление.
  • Люди могут видеть, о чем он думает. Опыт отладки стал в десять раз лучше.
  • # Представление TODO, каждый элемент структурирован
    [ ] #1: grep «TODO» в src/
    [>] #2: прочитать src/app.py и просмотреть комментарии, # в процессе
    [ ] #3: генерировать сводную уценку
    [ ] #4: написать в TODO_LIST.md
    
    (0/4 завершено)

    Жесткое правило: одновременно существует только один in_progress.

    TodoManager.update() Есть проверка:

    if in_progress_count > 1:
        raise ValueError("Одновременно может выполняться только одна задача")

    Это может показаться суровым, но на самом деле это помогает модели. Если вы разрешите 3 «делания» одновременно, он начнет драться повсюду и никогда не закончит ни одно из них. Принудительное продвижение по одиночной миссии, необходимо завершить каждую перед открытием следующей.

    Приведенный ниже виджет позволяет вам выступать в роли модели, отправлять различные полезные данные задач и видеть, какие из них проходят проверку, а какие отклонены.

    Напоминание: нет обновлений в течение 3 раундов подряд? ткни это

    Даже если указан инструмент todo, модель все равно время от времени «забывает» обновить список — она уже много чего сделала, но in_progress все еще застревает на пункте 2. Ход в s03 — это очень простой счетчик:

    rounds_since_todo = 0
    в то время как True:
        ответ = LLM(сообщения, инструменты)
        ...
        Used_todo = any(b.name == "todo" for b intool_uses)
        rounds_since_todo = 0 if Used_todo else rounds_since_todo + 1
        if rounds_since_todo >= 3:
            results.append({"type":"text", "text":"<reminder>Обновите свои задачи.</reminder>"})

    Когда счет достигнет 3, включите напоминание в следующий раунд сообщений пользователя. Когда модель это увидит, она инстинктивно скорректирует задачу. Это значит использовать инженерные средства для превращения мягкого ограничения («Пожалуйста, держите его в курсе») в принудительный стимул.

    Как называется эта процедура?

    В кругах разработчиков агентов это называется структурированным самопланированием с мягкими подталкиваниями — придание модели структурированного состояния, в которое она должна записывать, дополненное оппортунистическими напоминаниями. Клод Код использует аналогичный шаблон в реальном коде, но более сдержанно (низкая частота, нейтральные формулировки).

    Почему бы просто не написать «обновлять задачи на каждом этапе» в системной подсказке? Письмо возможно, но соблюдение моделью общих инструкций в системной подсказке будет снижаться по мере продолжительности разговора. Разделение инструкций на «напоминания, которые постоянно вводятся повторно» гораздо более стабильно.
    Интерактив

    Виджет 1 · Канбан · todo нажмите очередь, чтобы развиваться

    Нажмите «Шаг», чтобы увидеть, как модель переводит задачу из состояния ожидания в состояние «in_progress» в состояние «выполнено». Обратите внимание, что в каждом раунде всегда есть только один in_progress.

    [ ] pending
    [>] in_progress
    [x] completed
    准备开始…
    Интерактив

    Виджет 2 · Проверка · Какая из 5 задач задачи прошла успешно?

    Передайте массив элементов, когда модель вызывает инструмент todo. TodoManager выполнит серию проверок: текст не пуст, статус допустим, не более одного in_progress, общее количество ≤ 20. Нажмите, чтобы определить, принята или отклонена каждая полезная нагрузка.

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

    Виджет 3 · Счетчик ворчаний · Что произойдет, если задача не будет обновляться в течение 3 раундов подряд?

    Нажмите «Следующий ход», чтобы увидеть, запускает ли счетчик вставку напоминания. Каждый раунд случайным образом выбирает «позвонить todo» или «не звонить» — производительность модели в реальности также колеблется таким же образом.

    rounds_since_todo: 0