← журнал
ИИ-помощник·11 сентября 2026·8 мин чтения

Помощник, который помнит цвет глаз

Попросите любого универсального ИИ разобрать главу из вашего романа. Он честно отработает: найдёт повторы, отметит канцелярит, предложит убрать три наречия и оживить диалог. И ни разу не скажет, что у барона в этой сцене серые глаза, а двести страниц назад были карие. Что героиня сейчас в столице, хотя по вашему же таймлайну она третий день в дороге. Что город называется то Варвилль, то Варвиль.

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

В прошлом посте мы обещали рассказать, как учим помощника держать роман целиком. Рассказываем — вместе с тем, как чуть не пошли по модному пути и почему свернули.


Как было

Честно: до августа наш помощник разбирал сцену почти вслепую. В запрос уходили заголовок и текст — всё. Он умел говорить про темп, штампы и плоские реплики, и делал это неплохо. Но любое замечание уровня «это противоречит вашему миру» было ему недоступно в принципе: мира он не видел.

Хуже того, каждая функция собирала контекст по-своему. Помощник по персонажам знал одно, извлечение в энциклопедию — другое, разбор таймлайна — третье. Восемь функций, восемь разных представлений о том, что вообще известно про ваше произведение. Такие вещи не болят сразу, но чинятся потом вдесятеро дороже.

Почему мы не стали делать «как принято»

В плане этот этап назывался «RAG на векторной базе» — стандартный сегодня рецепт: разрезать все тексты на куски, превратить каждый в вектор чисел, сложить в отдельную базу, а перед запросом подкладывать модели десяток кусков, «похожих» на вопрос.

Мы начали расписывать это до реализации и обнаружили, что рецепт отвечает не на наш вопрос.

Вопросы, которые возникают у помощника, — точные, а не описательные. «Какого цвета глаза у Марта». «В какой главе он появляется впервые». «Что уже написано про Северный тракт». У каждого есть ровно один правильный ответ, и лежит он в конкретной строке — в карточке персонажа, в заметке о мире, в статье энциклопедии. Всё это у нас уже структурировано: вы сами занесли, разложили и связали.

Векторный поиск на такой вопрос вернёт десяток похожих кусков. Скорее всего, среди них будет нужный — вперемешку с описаниями трёх других персонажей. А дальше модель, ошибившись, ответит уверенно и складно. Правдоподобная неправда про ваш собственный мир — худший из возможных отказов для инструмента, который обещает знать этот мир.

Плюс цена. Векторная база — это ещё один сервис на сервере, переиндексация на каждое сохранение сцены, платные эмбеддинги на каждую правку карточки и второй источник правды, который однажды разъедется с первым. Всё это — до того, как мы увидели хоть один запрос, с которым не справился обычный точный поиск.

Решение записано отдельным документом, вместе с условием, при котором мы его пересмотрим (о нём — в конце). Мы стараемся фиксировать не только «что выбрали», но и «что должно случиться, чтобы выбрать иначе».

Что сделали вместо этого

Две вещи: справку и инструменты.

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

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

Это не абстракция, а вполне бытовые решения. Продолжение сцены получает право прочитать предыдущую: без ответа на вопрос «чем кончилось то, что было до» продолжать вслепую. Помощник по персонажу умеет искать по рукописи — лучший источник для «как этот герой разговаривает» не карточка, а реплики, которые вы уже написали. А разбор сцены не получил инструментов вовсе, и это тоже решение: ему нужен один снимок мира вокруг разбираемого текста, и он приезжает целиком.

Почему справка не «весь роман целиком»

Соблазн был: сложить в запрос вообще всё. Не сложили по двум причинам.

Первая — деньги и окно модели: за каждый символ в запросе платим мы, и незачем перечитывать сорок персонажей, чтобы проверить одну сцену. Вторая интереснее: контекст не должен перевешивать текст. Типичная сцена — пять-десять тысяч знаков. Если подложить к ней втрое больше справочника, модель начинает увлечённо комментировать мир вместо того, чтобы разбирать сцену. Мы этого опасались заранее и потому поставили потолок: около двенадцати тысяч знаков на базовый набор, не больше четырёхсот на одну карточку.

Четыреста знаков на персонажа — это сознательный размен. Сорок героев по короткой выжимке полезнее для проверки фактов, чем два героя во всех подробностях: чаще нужно знать, что персонаж вообще существует и какого цвета у него глаза, чем читать три абзаца о его детстве. А если подробности всё-таки нужны — помощник запросит полную карточку сам.

И отдельная деталь, которой мы неожиданно гордимся: когда справка не влезает в потолок, помощник узнаёт, что видит не всё. В тексте справки прямо написано, что список урезан. Без этой строчки происходило бы худшее: увидев обрезанный перечень, модель делает уверенный вывод «такого персонажа в произведении нет» — и вы получаете замечание о герое, который у вас есть.

Поиск по рукописи и его честная граница

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

Найдётся не всё. Запрос «сцена, где герой мокнет под дождём» такой поиск не вытянет, если слова «дождь» в тексте нет. Это ровно тот класс задач, ради которого векторы и придуманы, — и мы заранее договорились: как только такие запросы появятся в продукте по-настоящему, мы вернёмся к ним отдельным решением. Не из принципа, а по признаку: когда поиск начнёт отвечать пусто там, где нужный кусок в рукописи есть.

Две вещи, о которых вы не должны думать

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

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

Проверили, а не поверили

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

Со справкой помощник находил от трёх до пяти противоречий из пяти. Без неё — от одного до трёх. Ни в одном прогоне версия без справки не оказалась лучше, и ни разу помощник не выдумал противоречия, которого в сцене нет. Разброс между прогонами есть — модель не арифмометр, — но направление во всех замерах одно.

Заодно замер показал неприятное, и об этом честнее сказать вслух: на запасной модели, которую мы включаем, если основная недоступна, справка почти не помогает — противоречий она не видит и с ней. Это не повод её убрать, но повод пересмотреть запасную цепочку, и мы этим займёмся.


Что дальше

Справка — фундамент, а не витрина. На ней стоят три ближайшие вещи.

Замечания на полях. Сейчас разбор приходит панелью сбоку; хотим, чтобы он появлялся рядом с абзацем, к которому относится, как пометки редактора на распечатке.

Анализ вашего стиля. Помощник уже читает, что вы написали; следующий шаг — учиться вашей интонации по этому же тексту и помогать её держать.

Агент консистентности. Не разбор одной сцены по просьбе, а фоновая сверка романа с самим собой: кто где находится, что уже сказано, что кому известно на этой странице. Ровно здесь и появятся описательные запросы — и, скорее всего, ровно здесь мы вернёмся к разговору про векторы.


Память помощника выглядит технической деталью, а на деле это разница между советчиком и читателем. Советчик говорит про наречия. Читатель помнит, что у барона карие глаза, — и замечает, когда они меняют цвет.

— команда Стол Писателя

Заходите → · Телеграм-канал