Статьи

Что ИИ поменял в карте? Правки по пунктам вместо переписанного файла

Когда языковая модель дорабатывает карту, она обычно возвращает весь проект заново — и увидеть, что именно она переписала, нельзя. В PlyLoom 0.10 правки приходят списком: каждую видно отдельно, нужные принимаются, остальные остаются в стороне, а всё сразу отменяется одним шагом.

Файл целиком — доверие на надежде

До сих пор работа с ИИ над готовой картой выглядела так: приложить проект к промту, попросить изменения и получить обратно весь проект. Открыв такой файл, вы заменяете карту целиком. Если модель по дороге потеряла пару узлов, сократила цитату или «поправила» атрибут, о котором её не просили, заметить это можно только случайно. На большом JSON такое бывает чаще, чем хочется.

Проблема не в модели, а в форме ответа. Полный файл — это снимок, а нам нужна разница: что добавить, что изменить, что убрать. Поэтому в 0.10 PlyLoom различает две вещи.

  • Пакет — файл .plyloom, полный снимок проекта. Его хранят, пересылают коллегам, кладут в репозиторий. С нуля карта по-прежнему приходит пакетом.
  • Приращение — список правок к известной версии: добавить узел, изменить поле, связать, убрать с листа. Так приходят доработки.

Чужие правки никогда не попадают в проект сами. Они проходят один и тот же экран проверки — пришли они от ИИ или из файла коллеги.

Как это выглядит

В «Справка → Работа с ИИ» выберите «Доработать открытую карту» и «ИИ в чате» — кнопка скопирует промт вместе с проектом — целиком или одним листом с его соседями — и просит модель вернуть только список правок. Модель не может потерять то, чего не трогала, а ответ получается короче.

Страница «Работа с ИИ»: что сейчас открыто, переключатели «Что делаем», «Дорабатывает», «Отдаём ИИ» и схема обмена с метками «целиком», «часть», «только изменения»
Схема обмена: что открыто, что уходит в чат, кто работает, что возвращается и что получится. Здесь в чат уходит часть карты — лист с соседями, а обратно приходят только изменения.

Ответ из чата вставляется как есть через «Проект → Вставить ответ ИИ…»: текст вокруг JSON и кавычки ``` не мешают. Если модель всё же вернула проект целиком, PlyLoom сравнит его с текущим и покажет тот же список.

Экран правок: пункты по листам, изменённый текст по словам, конфликт не отмечен
Правки сгруппированы по листам. Первый пункт — конфликт: модель рассчитывала на другой текст, поэтому он не отмечен.

Каждый пункт — одна правка с понятным смыслом:

  • + добавляет узел, связь или лист, ~ меняет, − убирает. Изменённый текст показан по словам: удалённое зачёркнуто, новое выделено.
  • Конфликт — правка рассчитана на одно значение, а в проекте уже другое. Такой пункт не отмечен: заменить можно, но только сознательно.
  • Ошибка — правка не подходит проекту: нет такого листа, неизвестный тип, слишком длинный текст. Её нельзя отметить.
  • Пункт, которому нужен другой — связь к новому узлу, узел на новом листе, — без него не применится, и рядом написан номер нужного.

Отмеченное применяется одним шагом, неотмеченное отклоняется. Решить позже можно кнопкой «Отложить»: список ждёт в полосе внизу экрана и открывается снова с теми же отметками.

Применённое не становится окончательным сразу — оно остаётся отмеченным, как исправления в текстовом редакторе. Новые узлы обведены зелёным, изменённые — жёлтым. Они могут быть на любых листах: стрелки ‹ › в полосе внизу проходят по ним по очереди. У выбранного узла в панели свойств написано, что с ним сделали, и есть «Принять» и «Отклонить». Для всех сразу — «Принять все» и «Отклонить все» в той же полосе; отклонение возвращает и удалённое, а ваши собственные правки после применения не трогает.

Лист после применения правок: новый узел обведён зелёным, изменённые — жёлтым, внизу панель отметок
После применения сразу видно, куда пришли правки.
Полоса правок внизу экрана и панель свойств выбранного изменённого узла с кнопками «Принять» и «Отклонить»
Внизу — полоса этих правок: «Принять все», «Отклонить все», ‹ › по изменённым узлам и список удалённого. Справа — решение по одному узлу.

Сравнение двух файлов

Тот же экран открывается из «Проект → Сравнить с файлом…» и из предпросмотра при открытии .plyloom — там появилась кнопка «Сравнить с текущим». Сравнение идёт по смыслу, а не по строкам: узлы, тексты, атрибуты, связи, листы и словари. Передвинутые карточки не засоряют список; если нужно, отметьте «Перенести и расположение».

Сравнение с копией коллеги: шапка сообщает, что обе стороны менялись после общей версии; одна правка — конфликт, другая отмечена
Копия коллеги, которую оба правили после общей версии: показаны только его правки, а то, что вы тоже меняли, — конфликт.

Модели иногда перенумеровывают ID. Узел с другим ID, но тем же типом и названием, PlyLoom считает тем же узлом, а связь — той же связью по её концам и типу. Без этого любое переименование ID выглядело бы как «удалить всё и добавить заново».

Версии без истории

При каждом «Скачать .plyloom» в файл записывается отпечаток версии — 12 знаков, вычисленных из содержимого, — и отпечатки версий, из которых он получился. Только отпечатки: прежнее содержимое в файл не попадает, и удалённый из карты абзац не уедет вместе с ней к получателю.

По отпечаткам PlyLoom понимает, что пришло: продолжение вашей версии, более старая копия или копия, которая менялась параллельно с вашей. Для последнего случая нужна общая версия. Её содержимое хранится только в вашем браузере — последние восемь открытых или скачанных версий. Если она есть, показываются только правки коллеги, а то, что вы меняли тоже, отмечено конфликтом. Если нет — различия смешивают обе стороны, и удаления не отмечены: это могут быть ваши новые узлы.

Как проверено

Кроме обычных тестов, сравнение проверено на случайных правках учебных карт: переименования, тексты, атрибуты, новые и удалённые узлы, связи, листы, порядок вкладок. Для каждого набора правок список, посчитанный PlyLoom, должен превращать одну карту в другую и обратно без остатка, а при слиянии конфликты должны появляться только там, где обе стороны трогали одно и то же. Эти проверки нашли и закрыли несколько тонких мест — например, сохранение основного листа узла и порядка вкладок.

Что ещё в 0.10

  • Файл приложения легче: 2,76 МБ вместо 3,18, в сжатом виде 1,56 МБ. Картинки справки больше не разбираются как код при старте, и холст появляется быстрее.
  • Внутри файла из чужого кода остался только React; сборка не скачивает пакеты.
  • Исправлены склонения в счётчиках, устаревшая легенда линий и панель на узком телефоне.

Полный список — на странице «Что нового».

Скриншоты сняты с версии 0.10.0 на учебной карте «Разработка: экспорт отчёта»; правки в них придуманы для иллюстрации.

Читайте также