Quand les agents IA rejoignent les salons Yjs, trois hypothèses s'effondrent
Ajouter un LLM en tant que pair Yjs de premier rang est un choix architectural judicieux. Cependant, cela brise les hypothèses implicites que votre pile de collaboration fait concernant la symétrie des pairs.
La plupart des systèmes partent du principe que tous les pairs travaillent à une vitesse humaine. Lorsqu'un agent IA génère 3 000 mots par minute, il perturbe trois domaines fondamentaux : le débit, la propriété de l'annulation (undo) et la cadence de présence.
Voici comment les corriger.
- Éviter l'asphyxie des écritures (Write Starvation)
Dans un modèle CRDT, il n'y a pas de serveur central pour réguler les clients. Un agent peut inonder le cycle de synchronisation par des écritures constantes. Cela prive les utilisateurs humains de leur part de la fenêtre de convergence, ce qui entraîne un décalage du curseur et des mises à jour perdues.
La solution doit se situer au niveau de la couche applicative, et non de la couche de transport. Utilisez un algorithme de token bucket entre le flux LLM et l'écriture Yjs pour limiter la vitesse de l'agent.
• Définissez une capacité pour les opérations mises en file d'attente. • Définissez un taux de remplissage pour maintenir l'agent en dessous du seuil d'asphyxie humaine.
- Isoler l'historique d'annulation (Undo History)
Si un agent partage la même origine qu'un utilisateur, le Ctrl+Z devient un chaos. Il devient impossible de distinguer une erreur humaine d'une suggestion d'IA.
Donnez à l'agent sa propre origine. Utilisez un UndoManager distinct pour l'agent.
• L' UndoManager de l'utilisateur ne suit que les actions humaines.
• L' UndoManager de l'agent gère les actions spécifiques à l'IA.
• Proposez un bouton d'interface distinct "Rejeter la suggestion de l'IA" au lieu de le lier au Ctrl+Z par défaut.
- Regrouper les mises à jour de présence (Coalesce Presence Updates)
Un agent IA produit des changements de position plus rapidement qu'un humain ne peut les percevoir. Diffuser chaque changement individuel crée du bruit dans votre cycle de rendu.
Vous devez gérer la présence de l'agent différemment :
• Regroupez les mises à jour de présence (awareness) à intervalle fixe plutôt que par opération.
• Ajoutez un champ type à l'état de présence (ex: type: 'agent').
• Utilisez ce type pour indiquer à votre couche de rendu de traiter le curseur différemment.
Le modèle "agent-en-tant-que-pair" est la bonne approche de développement. Le défi consiste à rendre vos hypothèses explicites. Ne traitez pas la limitation de débit, l'isolation de l'annulation et le regroupement de la présence comme des cas particuliers. Considérez-les comme des exigences fondamentales.
Source : https://dev.to/norfolkd/when-an-ai-agent-joins-your-yjs-room-three-assumptions-break-50h8