Leçon 12 · coopération

Différents agents ne doivent pas s’emparer du même arbre.

"Isoler par répertoire, coordonner par ID de tâche." Deux avions ne se gênent pas.

⏱ ~10 min · 📝 3 widgets interactifs · 🧑‍💻 Basé sur shareAI-lab · s12_worktree_task_isolation.py

Un problème difficile avec les agents parallèles

s09-s11 vous permet de démarrer plusieurs coéquipiers en même temps, mais il y a un piège : Ils sont tous dans le même répertoire de travail. Alice change auth.py, et Bob change également auth.py en même temps - conflits git, confusion de fichiers et contamination mutuelle des tests.

La solution pour s12 est git worktree : dans le même entrepôt, vous pouvez extraire différentes branches dans différents répertoires via git worktree add. Chaque agent dispose de son propre arbre de travail et travaille dans son propre répertoire, invisible les uns aux autres.

my-repo/ # Espace de travail principal (pour le prospect)
.worktrees/
  alice-auth/ #répertoire d'isolation d'Alice
    (branche : wt/alice-auth)
  bob-api/ #répertoire d'isolation de bob
    (branche : wt/bob-api)
  index.json # registre worktree
  events.jsonl # Journal des événements du cycle de vie

Division du travail sur deux plans

s12 Diviser explicitement le système en deux plans :

  • Plan de contrôle : fichier JSON dans .tasks/. La tâche est une unité abstraite de « que faire », comprenant les dépendances, le propriétaire et le statut.
  • Plan d'exécution : Répertoire dans .worktrees/. Worktree est le conteneur physique de "où le faire", un répertoire + une branche.

Les deux sont liés de manière bidirectionnelle via task.worktree et worktree.task_id.

Ce type de découplage permet de : Réutiliser le mécanisme de gestion des tâches mais changer l'environnement d'exécution (par exemple, pas git worktree, mais docker conteneur). Ou changer le mécanisme des tâches mais réutiliser l'arbre de travail (par exemple, pas un fichier JSON mais une base de données).

démonstration du cycle de vie

Parcourez-le entièrement ci-dessous : créer une tâche → créer un arbre de travail → exécuter des commandes → conserver ou supprimer. Chaque étape possède un enregistrement de journal des événements (events.jsonl), qui est utilisé à des fins d'observabilité en production.

keep vs remove

Il y a deux fins lorsque worktree termine sa mission :

  • remove : git worktree remove --force, supprimez le répertoire. Les branches sont également généralement nettoyées. Cela équivaut à "Je ne veux plus de cette exploration".
  • keep : marquez uniquement statut : conservé dans .worktrees/index.json, et le répertoire physique est conservé. Cela équivaut à "Je vais obtenir ce résultat, attendez de le fusionner".

Mode commun : le sous-agent exécute un refactor expérimental → s'exécute avec de bons résultats → conserver → examen humain → fusionne dans la branche principale → supprime manuellement. Mauvais effet ? Il suffit de le retirer et de le jeter.

Interactif

Widget 1 · Cycle de vie · De la création d'une tâche à conserver/supprimer

Déclenchez 5 événements par étapes. Regardez l'état du disque à gauche (.tasks/ + .worktrees/) et le journal des événements (events.jsonl) à droite.

磁盘状态
events.jsonl(append-only)
Interactif

Widget 2 · Voies parallèles · 3 agents dans 3 arbres de travail simultanément

Alice / Bob / Charlie modifient le même fichier dans différents arbres de travail en même temps. Sont-ils visibles les uns des autres ? Y aura-t-il un conflit ?

📂 .worktrees/alice/
📂 .worktrees/bob/
📂 .worktrees/charlie/
Interactif

Widget 3 · Flux de décision · Choisissez la bonne étape suivante pour chaque étape

Lorsqu'un agent en production termine le travail dans l'arbre de travail, doit-il être conservé ou supprimé ? 5 scènes.

答对 0 / 5