Урок 12 · сотрудничество

Разные агенты не должны захватывать одно и то же дерево.

«Изолировать по каталогу, координировать по идентификатору задачи». Два самолета, не мешают друг другу.

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

Сложная проблема с параллельными агентами

s09-s11 позволяет запускать несколько товарищей по команде одновременно, но есть подводный камень: Они все находятся в одном рабочем каталоге. Алиса меняет auth.py, а Боб одновременно меняет auth.py — конфликты git, путаница файлов и взаимное загрязнение тестов.

Решением s12 является git worktree: на одном и том же складе вы можете получать разные ветки в разных каталогах с помощью git worktree add. Каждый агент получает собственное рабочее дерево и работает в своем каталоге, невидимом друг для друга.

my-repo/ # Основное рабочее пространство (для лида)
.worktrees/
  alice-auth/ # каталог изоляции Алисы
    (ветвь: wt/alice-auth)
  bob-api/ # каталог изоляции Боба
    (ветвь: wt/bob-api)
  index.json # реестра рабочего дерева
  events.jsonl # Журнал событий жизненного цикла

Разделение труда в двух плоскостях

s12 Явно разделите систему на две плоскости:

<ул>
  • Плоскость управления: файл JSON в .tasks/. Задача — это абстрактная единица того, «что делать», включая зависимости, владельца и статус.
  • Плоскость выполнения: каталог в .worktrees/. Рабочее дерево — это физический контейнер «где это сделать», каталог + ветка.
  • Они связаны двунаправленно через task.worktree и worktree.task_id.

    Такое разделение позволяет: Повторно использовать механизм управления задачами, но изменить среду выполнения (например, не git Worktree, а Docker-контейнер). Или измените механизм задачи, но повторно используйте рабочее дерево (например, не файл JSON, а базу данных).

    демонстрация жизненного цикла

    Рассмотрите это полностью ниже: создать задачу → создать рабочее дерево → запустить команды → сохранить или удалить. Каждый шаг имеет запись журнала событий (events.jsonl), которая используется для наблюдения в рабочей среде.

    keep vs remove

    Когда рабочее дерево завершает свою миссию, есть два финала:

    <ул>
  • удалить: git worktree удалить --force, удалить каталог. Ветви также обычно убираются. Это эквивалентно «Я больше не хочу этого исследования».
  • сохранить: отметьте только статус: сохранено в .worktrees/index.json, и физический каталог будет сохранен. Это эквивалентно: «Я получу этот результат, подожди, пока я его объединю».
  • Общий режим: субагент запускает экспериментальный рефакторинг → работает с хорошими результатами → оставить → человеческая проверка → объединяется с основной веткой → удаляется вручную. Плохой эффект? Просто снимите и выбросьте.

    Интерактив

    Виджет 1 · Жизненный цикл · От создания задачи до сохранения/удаления

    Запустите 5 событий поэтапно. Посмотрите состояние диска слева (.tasks/ + .worktrees/) и журнал событий (events.jsonl) справа.

    磁盘状态
    events.jsonl(append-only)
    Интерактив

    Виджет 2 · Параллельные каналы · 3 агента в 3 рабочих деревьях одновременно

    Алиса/Боб/Чарли одновременно изменяют один и тот же файл в разных рабочих деревьях. Видны ли они друг другу? Будет ли конфликт?

    📂 .worktrees/alice/
    📂 .worktrees/bob/
    📂 .worktrees/charlie/
    Интерактив

    Виджет 3 · Последовательность принятия решений · Выберите правильный следующий шаг для каждого шага

    Когда агент в производстве завершает работу в рабочем дереве, следует ли его оставить или удалить? 5 сцен.

    答对 0 / 5