Коли ШІ-агенти приєднуються до Yjs-кімнат, три припущення руйнуються

Додавання LLM як повноцінного піра (first-class peer) у Yjs — це розумний архітектурний хід. Однак це руйнує приховані припущення вашого стека для спільної роботи щодо симетрії пірів.

Більшість систем припускають, що всі піри працюють із людською швидкістю. Коли ШІ-агент генерує 3000 слів за хвилину, це порушує три основні аспекти: пропускну здатність, право власності на undo та темп присутності (presence cadence).

Ось як це виправити.

  1. Усуньте голодування записів (Write Starvation)

У моделі CRDT немає центрального сервера для обмеження швидкості (throttling) клієнтів. Агент може заповнити цикл синхронізації постійними записами. Це позбавляє користувачів-людей їхньої частки вікна збіжності (convergence window), що призводить до затримок курсора та втрати оновлень.

Виправлення має бути на рівні додатка, а не на транспортному рівні. Використовуйте алгоритм token bucket між потоком LLM та записом у Yjs, щоб обмежити швидкість агента.

• Встановіть ліміт (capacity) для черги операцій. • Встановіть швидкість поповнення (refill rate), щоб тримати агента нижче порогу, який спричиняє «голодування» людей.

  1. Ізолюйте історію Undo

Якщо агент має спільне походження (origin) з користувачем, Ctrl+Z перетворюється на хаос. Ви не зможете відрізнити людську помилку від пропозиції ШІ.

Надайте агенту його власне походження. Використовуйте окремий UndoManager для агента.

• UndoManager користувача відстежує лише дії людини. • UndoManager агента обробляє дії, специфічні для ШІ. • Винесіть «Відхилити пропозицію ШІ» як окрему кнопку в інтерфейсі, замість того щоб прив'язувати її до стандартного Ctrl+Z.

  1. Об'єднуйте оновлення присутності (Presence Updates)

ШІ-агент створює зміни позиції швидше, ніж людина може їх побачити. Трансляція кожної окремої зміни створює шум у циклі рендерингу.

Ви повинні по-іншому керувати присутністю агента:

• Об'єднуйте оновлення awareness через фіксований інтервал, а не для кожної окремої операції. • Додайте поле type до стану awareness (наприклад, type: 'agent'). • Використовуйте цей тип, щоб наказати рівню рендерингу по-іншому обробляти курсор.

Патерн agent-as-peer — це правильний шлях розробки. Виклик полягає в тому, щоб зробити ваші припущення явними. Не ставте обмеження швидкості (rate limiting), ізоляцію undo та об'єднання присутності (presence coalescing) у розряд пограничних випадків. Ставте їх у розряд основних вимог.

Source: https://dev.to/norfolkd/when-an-ai-agent-joins-your-yjs-room-three-assumptions-break-50h8