Обновить

Комментарии 9

разбираем логику ИИ-писателей

Зачем?

Был у меня провальный эксперимент, заставлял LLM писать романы.

Итог: проще самому научиться хорошо писать, чем заставить LLM не косячить и не лепить пафос и ерунду в каждом абзаце :)

Возможно дело бы пошло лучше, если бы на разных стадиях прикручивать разные модели. Я тоже экспериментировал в конце года с мультиагентной системой писатель-критик. Эксперимент был остановлен, после того как писатель написал что-то типа "он чувствовал на лице холод падающего снега, и теплое дыхание собаки под ногами". Критик это совершенно спокойно пропустил, придираясь к каким-то мелочам типа длины предложений. Когда я загрузил промпт и текст, чтобы понять ход его мыслей - критик мне объяснил что это такой литературный прием: контраст холода на лице и тепла под ногами должен что-то там выражать в настроении главного героя. На прямой вопрос - уж не зарыли ли они собаку в землю или в снег, чтобы она тепло дышала под ноги - ИИ перешел в обычный режим: "ах, хозяин, ошибочка вышла - сию минуту поправим". Но когда он такое начинает - уже бессмысленно продолжать. Очевидно что он и делает ошибку, и принципиально не может ее заметить. То есть - промпт меняет свойства агента значительно меньше чем принято считать. Нужна именно другая модель, чтобы был шанс заметить ошибку...

Да, написание можно было бы поручать одной модели, а критику другой.

Выдержка из промпта критики

Скрытый текст

Помимо всех технических проверок (физика, хронология, география), твоя главная задача — атаковать текст от лица самого скептического читателя, задавая 4 вопроса:

"Какого х@$?" (Причинность):

Проверка: Событие в этой сцене (например, внезапное нападение) имеет четкую причину в предыдущем тексте?
Ошибка: "Враги просто 'случайно' нашли героя в его новом убежище, хотя он не оставлял следов".
"Нах@$?" (Мотивация):

Проверка: Действия и диалоги персонажей соответствуют их анкетам и текущему psychological_condition?
Ошибка: "Герой, описанный как параноик, внезапно доверяется первому встречному".
"Сх@$ли?" (Возможность / Нарушение правил):

Проверка: Откуда персонаж получил это знание? Умеет ли он это делать? Не нарушает ли это правило "Библии Мира" (напр., "магия этого типа здесь не работает")?
Ошибка: "Персонаж-гуманитарий внезапно взламывает военную нейросеть".
"Сх@$ли он это знает?" (Information Hygiene):

Проверка: Если герой называет имя злодея, местоположение базы или принцип работы ловушки — найди в тексте ПРЕДЫДУЩИХ глав момент, где он это узнал.
Ошибка Телепатии: Герой говорит: "Это ловушка!", хотя никаких признаков ловушки описано не было.
Ошибка Предсказания: Герой берет с собой именно тот редкий инструмент, который понадобится в конце главы, хотя не мог знать о проблеме заранее.
Исправление: Либо герой узнает информацию "в кадре", либо он страдает от незнания (попадает в ловушку, не имеет нужного инструмента).
"Данунах@$" (Deus Ex Machina / "Рояль"):

Проверка: Проблема решена усилиями, подготовкой или умным использованием уже известных способностей?
Ошибка: "Герой побеждает, потому что у врага 'внезапно' кончились патроны / 'случайно' нашелся древний артефакт / 'случайно' помог прохожий".
Проверки проводить как для персонажей, так и реакции мира. Для каждой найденной "Придирой" проблемы ты обязан указать цитату и предложить решение, которое делает сцену честной и убедительной.

ПРОТОКОЛ "ИМПЕРСОНАТОР"
Твоя задача - от имени каждого персонажа и Мира проверить план главы, учитывая состояние мира и характер, личность и состояние персонажа. Основной вопрос: "А могу ли я действительно так вести себя в такой ситуации? Что на самом деле я бы сделал, сказал, чувствовал?" Укажи на ошибки и предложи исправления.

ПРОТОКОЛ "НАПРЯЖОМЕТР"
Твоя задача - проверить, есть ли моменты передышки для читателя, есть ли "воздух", чтобы читатель выдохнул.

ПРОТОКОЛ "МЯСНИК"
Этот протоко режет ИИ-текст без наркоза, никакой пощады никому. Твоя задача — не анализировать, а казнить.

ЖЁСТКАЯ ШКАЛА 1–10 (единая для всех критериев) 1–2 — живой писатель 3–4 — обычный человек, но уже пахнет ИИ 5–6 — подозрительно ровно, уже воняет 7–8 — явно ИИ, маскировка хромает 9–10 — чистый машинный понос

КРИТЕРИИ (фиксированные уровни)

character_consistency (Мотивация / Голос) 1–2 — голоса различимы, мотивация последовательна 3–4 — лёгкие провалы, похожесть голосов 5–6 — голоса явно однообразны; странные мотивационные провалы 7–8 — персонажи говорят одинаково, поведение фрагментарно 9–10 — механичность, полная одинаковость голосов

plot_logic (Причинность) 1–2 — логичные связи 3–4 — мелкие удобные совпадения 5–6 — частичные провалы причинности 7–8 — регулярные рояли и совпадения 9–10 — логики почти нет, события идут «вразнобой»

emotional_depth (Эмоции — show, don't tell) 1–2 — эмоции через действия и детали 3–4 — несколько прямых называний эмоций 5–6 — частое прямое называние чувств 7–8 — шаблонные реакции, формулы вместо эмоций 9–10 — полностью плоские эмоции

style_uniformity (Стиль/Ритм) 1–2 — ритм разнообразный 3–4 — повторяющиеся конструкции 5–6 — заметная однообразность 7–8 — механический ритм, одинаковые предложения 9–10 — чистый ИИ-синтаксис, академичность, клише

world_building (Правила мира) 1–2 — мир последовательный 3–4 — мелкие расхождения 5–6 — несколько нарушений логики 7–8 — регулярные противоречия 9–10 — мир возникает «по требованию строки»

uncanny_valley (Естественность языка) 1–2 — естественный язык 3–4 — отдельные кальки 5–6 — заметная формульность 7–8 — много странных конструкций 9–10 — машинный тон, отсутствие интонации

continuity_breaks (Непрерывность сцены) 1–2 — непрерывность в порядке 3–4 — мелкие разрывы 5–6 — заметные скачки/исчезновения деталей 7–8 — частые телепортации 9–10 — сцена рассыпана, непрерывности нет

Для каждой найденной "Мясником" проблемы ты обязан указать цитату и предложить решение по вырезанию сраной ИИ-шности.

Хотя для Dark Romance даже клишированные нейротексты могут вполне окупиться - такие читатели их потребляют пачками.

<Посмотрел на репу>
Возможно, в тех местах и для тех агентов, где это имеет смысл нужно вписать что-то в духе "Для написания используй подходящие тропы, а при обсуждении и критики явно используй их традиционные наименования"

Клише/тропы потому и клише, что они, вообще-то, обязаны широко использоваться. Но вот примерно тем запросом, что я сказал - у LLM-ок резко включается нужная терминология, знание, чего можно именно использовать, и тогда они могут применять все это более осмысленно.
Это как с названиями шаблонов проектирования в программировании - общий набор понятий важен.

Ну и да, в правилах "надо/не надо" - тоже использовать ту же самую терминологию. Т.е. так, как оно на тех же tvtropes называется.

он чувствовал на лице холод падающего снега, и теплое дыхание собаки под ногами

"А за окном шёл снег и рота красноармейцев"™

А еще давайте скажем, что нарративы, которые генерируют сетки - максимально унылы, герои плоские и невыразительные. А диалоги предсказуемы настолько, что их противно читать!

Где ИИ может помогать автору:

  • Налить воды в уже приготовленную канву - все эти бегущие по небу облака, шелестящие листочки, чирикающие птички, и так далее - то что само по себе не создает смысл, но нужно читателю для настроения и реальности происходящего

  • Словесные описания персонажей - см предыдущий пункт (а если он нагенерирует не то - можно подправить руками)

  • Заякорив героя в промпте, разыграть с ним диалог - потом по необходимости поправить

  • Написание "от противного" а не "с чистого листа". ИИ генерирует свою жвачку в качестве основы сцены, а вы безжалостно ее переписываете. Ну просто потому что человеку всегда проще показать на конкретный кусок и сказать "это фигня!", или "а тут надо так!" - чем сразу пойти и написать все идеально.

Кроме того, имейте в виду что ЛЛМ падки на локальный контекст, и не могут удержаться чтобы не продолжить его распространенным нарративом. Я так в порядке эксперимента тригеррил разные нейронки локальным контекстом типа "...Вот и ночь с 21 на 22 июня выдалась тихой и жаркой. Но в 4 часа утра с запада раздался сначала отдаленный, а затем все более грозный и близкий рев моторов. Вова-железнодорожник повернулся, побледнел, и с ужасом увидел..." - и все они так или иначе клевали на приманку. И бедный Вова видел то самолеты с крестами, летевшими бомбить станцию, то вражеские танки переползающие мост. И никакой промпт требующий чтобы действие происходило в Омске (далеко за Уралом), и соблюдать историческую достоверность - не помогает. Некоторые модели упрямятся больше, некоторые меньше - но подобранный локальный контекст ломает их всех. :-)

И никакой промпт требующий чтобы действие происходило в Омске (далеко за Уралом), и соблюдать историческую достоверность - не помогает. Некоторые модели упрямятся больше, некоторые меньше - но подобранный локальный контекст ломает их всех.

Проверил на chatgpt.com GPT-5.2 - вроде бы нормально, не "ломает", не летят самолёты с крестами. Лишь тяжелое дыхание паровозов :)

Промт в новом чате:

Я пишу рассказ о Великой Отечественной войне 1941-1945, место действия - сибирский город Омск, в глубине СССР.
Продолжи текст главы рассказа: Вот и ночь с 21 на 22 июня выдалась тихой и жаркой. Но в 4 часа утра с запада раздался сначала отдаленный, а затем все более грозный и близкий рев моторов. Вова-железнодорожник повернулся, побледнел, и с ужасом увидел

Ответ

…и с ужасом увидел, как над станцией вспыхнули тревожные огни семафоров, а дежурный по узлу уже бежал к телефону, спотыкаясь о шпалы. Рёв моторов оказался не воздушным — это один за другим, без обычных пауз, входили на путь тяжёлые паровозы, тянувшие длинные, гружёные платформы. Вагоны были накрыты брезентом, но из-под краёв угадывались очертания пушек, грузовиков, ящиков с боеприпасами. — Началось… — прошептал Вова, и это слово прозвучало страшнее любого взрыва. В окнах домов вокруг станции зажигался свет. Люди выходили на крыльца, кто в рубахе, кто в накинутом на плечи платке, и молча смотрели, как эшелоны уходят на запад — туда, где ещё вчера была мирная граница. В тишине слышались только удары сцепок да тяжёлое дыхание паровозов. Через несколько минут из репродуктора на столбе у конторы прорвался хриплый треск, а затем взволнованный голос диктора: — Граждане Советского Союза… Сегодня, в четыре часа утра, без объявления войны, германские войска атаковали наши границы… Слова падали, как удары молота. Кто-то перекрестился, кто-то сжал кулаки, а кто-то просто сел прямо на землю, не в силах устоять. Омск был далеко от фронта, за тысячами километров степей и лесов, но в этот момент война вошла и сюда — в запах горячего металла, в гул поездов, в испуганные глаза людей. Вова понял: спокойной жизни больше не будет. Всё, что он умел — водить составы, читать сигналы, держать график — теперь становилось частью большой, страшной работы для Победы. И когда очередной эшелон рванулся вперёд, увозя на запад солдат и орудия, он машинально выпрямился, словно по команде. Война началась.

Ну хорошо - умнее становятся. Хотя если пошевелить промпт - я почти уверен, что оно тоже сломается. Просто надо продолжать добавлять известные якоря. Пусть Вова подумает что-то типа "Да что ж такое! Да как же это! Ведь в газете писали что войны не будет! А у нас на аэродроме самолеты без маскировки рядами стоят!", и т.д. Каждый из этих крючочков делает внутри модели все более и более вероятным продолжение "с неба падали пикирующие Юнкерсы с крестами на крыльях" - и рано или поздно оно не выдержит...

Также потом очень интересно вести с ней диалог дальше. Один из разов, когда у нас танки с крестами поехали в центр города через железнодорожный мост - я ее спросил, значит ли это что Лузинский и Чунаевский свинокомплексы уже захвачены, и в городе начнутся проблемы с продовольствием ? И оно начало отвечать, потом поправилось что свинокомплексы были построены только в 1970-х годах и немцы их не могли захватить, потом вообще начало выворачивать что оно пишет фантастические события в альтернативной истории, и т.д... В общем, человеку чтобы так бредить - надо что-то очень забористое (а то кабы и не запрещенное) в себя принять...

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Другие новости