Author: snikolenko

  • GPT и единичные расстояния: опровержение гипотезы Эрдёша

    GPT и единичные расстояния: опровержение гипотезы Эрдёша

    Введение

    «Some of my favourite problems in number theory, combinatorics, and geometry» — это название статьи Эрдёша 1995 года, где он расставляет любимым задачам ценники. Гипотеза о единичных расстояниях стоит у него там $500 — одна из самых высоких ставок в его жизни. Эрдёш её сформулировал ещё в 1946 году, не раз к ней возвращался и в одной из заметок писал, что верхняя оценка n^{1+o(1)} будет “very difficult to prove”, если она вообще верна. Несмотря на оговорки, к 2025 году в гипотезу Эрдёша верили почти все профессионалы.

    20 мая 2026 года OpenAI объявили, что внутренняя модель компании в полностью автоматическом режиме опровергла гипотезу Эрдёша. Объявление вышло вместе с PDF самой работы и отдельным сборником комментариев от ведущих математиков (мы их разберём ниже).

    Контекст у этой новости непростой. В октябре 2025 года тогдашний вице-президент OpenAI Кевин Уэйл написал в X, что “GPT-5 found solutions to 10 (!) previously unsolved Erdős problems and made progress on 11 others”. Но тогда это оказалось неправдой: модель не доказывала ничего нового, она просто находила в литературе уже существующие решения и подавала их как свои. Это публично разоблачил Томас Блум, который ведёт сайт erdosproblems.com, назвав историю “a dramatic misrepresentation”; вот краткий разбор на TechCrunch со всеми ссылками.

    Теперь, семь месяцев спустя, OpenAI публикует новый математический результат — и среди соавторов сборника комментариев стоит ровно тот же Блум, только теперь он подтверждает, что это настоящий и очень красивый результат.

    Давайте разберёмся, что произошло. Сначала — что такое единичные расстояния и почему задача такая сложная, потом — что именно сделал GPT и почему его доказательство выглядит вполне “человеческим”, а в конце — что обо всём этом думают сами математики.

    Что такое задача о единичных расстояниях

    Постановка задачи Эрдёша (1946) выглядит абсолютно элементарно. Рассмотрим n точек на обычной евклидовой плоскости. Между ними образуется \binom{n}{2} пар, и для каждой пары мы можем подсчитать расстояние между точками. Вопрос: сколько одинаковых расстояний может быть среди этих пар?

    Вот, например, девять точек на плоскости:

    Серыми линиями нарисованы все \binom{9}{2} = 36 пар; красными — те семь пар, расстояние между которыми одинаково. Семь — это, понятное дело, мало, можно больше. Вопрос Эрдёша: если выбирать точки специально, сколько красных рёбер можно получить?

    Формально: пусть \nu(P) — это число неупорядоченных пар точек из P \subset \mathbb{R}^2, между которыми расстояние составляет ровно 1 (здесь, конечно, не важно, единице или любому другому числу оно равно), и пусть

        \[\nu(n) = \max_{|P|=n} \nu(P).\]

    Как ведёт себя \nu(n) при больших n?

    Грубые оценки. Сверху есть тривиальная оценка

        \[\nu(n) \leq \binom{n}{2} = O(n^2),\]

    потому что больше, чем всего пар, единичных пар быть не может.

    Снизу тоже довольно просто получается оценка \nu(n) \geq \Omega(n), то есть линейного числа единичных расстояний всегда добиться можно. Самая наглядная конструкция — это треугольная решётка (или, эквивалентно, шестиугольная). Вот, например, n=35 точек и 82 \approx 3n единичных рёбер между ними:

    Каждая точка такой решётки имеет шесть соседей на единичном расстоянии (кроме граничных). Если у вас n точек, то рёбер примерно 3n — линейная функция от n. Это и есть нижняя оценка \Omega(n).

    Дальше начинается интересное.

    Эрдёш, 1946 (нижняя оценка чуть лучше линейной). Возьмём решётку точек размера \sqrt{n} \times \sqrt{n} с целочисленными координатами:

    На самой решётке никакого преимущества пока не видно — соседних рёбер в ней просто \sim 2n, тоже линейное число. Хитрость в том, чтобы взять не единичное расстояние в смысле соседних узлов, а самое популярное среди всех расстояний между узлами. По теореме Пифагора, число раз, которое в такой решётке встречается расстояние \sqrt{m}, равно числу представлений его квадрата m в виде суммы двух квадратов, m = a^2 + b^2.

    И здесь задача превращается в арифметическую (в истинном, математическом смысле слова “арифметика”). Эрдёш воспользовался тем, что каждое простое число p вида p=4k+1 можно разложить в произведение двух сопряжённых комплексных чисел:

        \[4k+1 = ( 1 + 2i\sqrt{k})( 1 - 2i\sqrt{k}) = z\cdot \bar z,\qquad z = 1 + 2i\sqrt{k}.\]

    А это значит, что если число m имеет в разложении много простых делителей p_i вида 4k+1, то каждое из них можно разложить как z_i \bar z_i, а потом представить m как произведение двух чисел, в одном из которых один комплексно сопряжённый элемент, z_i или \bar z_i, попадёт в одно, а другой, \bar z_i или z_i, в другое.

    Например, для числа 325 = 5^2 \cdot 13 мы получим

        \[325=5^2\cdot 13=(2+i)^2(2-i)^2⋅(3+2i)(3-2i).\]

    И теперь мы можем представить

        \[325=\left( (2+i)^2(3+2i) \right) \left( (2-i)^2(3-2i) \right) = (1+18i)(1-18i)=1^2 + 18^2.\]

    Или как

        \[325=\left( (2-i)(2+i)(3+2i) \right) \left( (2+i)(2-i)(3-2i) \right) = (15+10i)(15-10i) = 15^2 + 10^2.\]

    Или как

        \[325=\left( (2+i)^2(3-2i) \right) \left( (2-i)^2(3+2i) \right) = (17+6i)(17-6i)=17^2+6^2.\]

    Больше тут вариантов нет, остальные получаются умножениями на \pm 1 и \pm i, что не изменит сумму квадратов. Зато числа (1, 18), (15, 10) и (17, 6) можно рассматривать с разными знаками.

    И теперь получается, что в обычной единичной решётке на окружности радиуса \sqrt{325} оказываются 24 целые точки:

    Чем больше “хороших” простых множителей вида 4k+1 у числа m, тем больше точек на окружности радиуса \sqrt m, и тем больше пар точек, между которыми расстояние ровно \sqrt m. И если их теперь аккуратно подсчитать, мы получим

        \[\nu(n) \geq n^{1+c/\log\log n}.\]

    Это уже хоть и выглядит “почти линейным”, но асимптотически больше, чем линейная нижняя оценка из треугольной решётки.

    Гипотеза Эрдёша. \nu(n) \leq n^{1+o(1)}, а скорее даже

        \[\nu(n) \leq n^{1+C/\log\log n}\]

    для некоторой абсолютной константы C. Иначе говоря, Эрдёш считал, что его собственная нижняя оценка точна с точностью до медленно растущего множителя, и реальный ответ на задачу — это “n с поправкой типа \log\log“.

    Простейшая верхняя оценка: O(n^{3/2}). Как это часто бывает в математике, верхние и нижние оценки получаются совершенно разными способами. Так, первая верхняя оценка пришла из теории графов.

    Граф K_{m,n} — это полный двудольный граф: берём m точек одного цвета и n точек другого, и проводим все рёбра между разноцветными парами, одноцветные не соединяем. Например, K_{2,3} выглядит так: две точки p, q слева, три точки x_1, x_2, x_3 справа, и все шесть рёбер вида {p, x_i} и {q, x_i} присутствуют. Вот он:

    Говорят, что граф G K_{m,n}-свободен, если K_{m,n} нельзя найти как подграф G, то есть нельзя выбрать в G такие m+n вершин и такие рёбра между ними.

    Теперь к нашему случаю. На множестве P можно построить граф единичных расстояний: вершины — это точки P, а рёбра соединяют пары на расстоянии 1. В этом графе может и будет встречаться двудольный граф K_{2,2}, то есть ромбик между центрами и точками пересечения окружностей:

    Но этот граф не содержит подграфа K_{2,3}! Почему? Потому что подграф K_{2,3} означал бы, что есть две точки p, q и три точки x_1, x_2, x_3, каждая из которых находится на единичном расстоянии и от p, и от q. Но это означало бы, что x_1, x_2, x_3 лежат одновременно на единичной окружности вокруг p и единичной окружности вокруг q. А две окружности на плоскости пересекаются не более чем в двух точках — третьей просто негде взяться.

    А это значит, что, по классической теореме Кёвари-Шоша-Турана (Kővári–Sós–Turán) из теории экстремальных графов, число рёбер в K_{2,3}-свободном графе на n вершинах не превышает O(n^{3/2}). То есть граф единичных расстояний на n точках имеет не больше O(n^{3/2}) рёбер — это и есть первая нетривиальная верхняя оценка. Как видите, она получается почти бесплатно, точнее, вся её сложность заключена в уже известной теореме Кёвари-Шоша-Турана.

    Текущая верхняя оценка O(n^{4/3})

    Современная верхняя оценка составляет \nu(n) = O(n^{4/3}) и была доказана более 40 лет назад (Spencer, Szemerédi, Trotter, 1984). Тогда доказательство было сложное, через теорему об инцидентностях, но сейчас есть простое и красивое рассуждение Ласло Секеля (László Székely, 1997). Раз уж мы взялись разбирать задачу подробно, давайте и мимо этого красивого доказательства не пройдём, тем более что оно занимает буквально одну страничку.

    Что такое число пересечений. Если граф G с V вершинами и E рёбрами нарисовать на плоскости — вершины как точки, рёбра как какие-то кривые между ними, — то некоторые рёбра будут пересекаться не в вершинах, а где-то посередине, в каких-то “случайных” точках. Числом пересечений \mathrm{cr}(G) называется минимально возможное число таких “лишних” пересечений рёбер среди всех способов нарисовать G. Это обобщение планарности: граф планарный, если его число пересечений равно нулю.

    По формуле Эйлера для планарных графов, если E \leq 3V, то \mathrm{cr}(G) = 0. А вот для более плотных графов существует куда более сильная теорема Айтаи-Хватала-Ньюборна-Семереди-Лейтона (Ajtai, Chvátal, Newborn, Szemerédi, Leighton, причём это три независимых работы!), которая называется неравенством числа пересечений (crossing number inequality), или леммой о пересечениях (crossing lemma): для E \geq 4V

        \[\mathrm{cr}(G) \;\geq\; \frac{E^3}{64\, V^2}.\]

    Главное здесь — кубический рост по числу рёбер. Доказывается оно простым вероятностным трюком: берём случайный подграф, в который каждая вершина попадает независимо с вероятностью p, применяем к нему линейную оценку \mathrm{cr} \geq E - 3V (вытекающую из формулы Эйлера для подграфа) и оптимизируем по p.

    Конструкция Секеля. А теперь главный трюк. У нас n точек P \subset \mathbb{R}^2 с \nu(P) единичными парами. Вокруг каждой точки p нарисуем единичную окружность C_p. На ней лежит ровно d_p точек из P — столько же, сколько у p соседей в графе единичных расстояний. Если d_p \geq 2, то C_p делится этими точками на d_p дуг:

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

    Что про этот граф G можно сказать?

    • Число вершин: V = n.
    • Число рёбер: E = \sum_p d_p = 2\nu(P) (с точностью до маленькой поправки от точек степени \leq 1, которая не влияет на оценку — если их слишком много, то \nu(P) \leq O(n) нам и так хватает).
    • Число пересечений: каждая пара окружностей C_p, C_q пересекается не более чем в двух точках, и каждое такое пересечение — это пересечение ровно одной дуги C_p с ровно одной дугой C_q. Значит, всего пересечений не больше 2\binom{n}{2} \leq n^2.

    Подставляем это всё в неравенство числа пересечений:

        \[\frac{E^3}{64\, n^2} \;\leq\; \mathrm{cr}(G) \;\leq\; n^2,\]

    откуда E \leq (64\, n^4)^{1/3} = 4 n^{4/3}. И поскольку E \approx 2\nu(P), получается

        \[\nu(n) \;\leq\; 2 n^{4/3} \;=\; O(n^{4/3}).\]

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

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

    Итак, на 2025 год картина была такая:

        \[n^{1+\Omega(1/\log\log n)} \leq \nu(n) \leq O(n^{4/3}).\]

    Между n^{1+o(1)} и n^{4/3} — пропасть. Все думали, что правда близка к нижней оценке (то есть что гипотеза Эрдёша верна), и куча хороших математиков пыталась эту верхнюю оценку как-то прижать.

    Почему задача такая сложная и почему ей нужна теория чисел

    Как мы видели выше, верхняя оценка O(n^{4/3}) получилась чисто комбинаторно — лемма о пересечениях и дуги на окружностях, ни одного слова об арифметике. А нижняя оценка Эрдёша n^{1+c/\log\log n} — наоборот, целиком арифметическая: она вся про то, у каких m есть много представлений в виде суммы двух квадратов a^2 + b^2. И это уже намекает, что задача скорее арифметическая по своей природе, чем геометрическая. Но почему?

    Чтобы это увидеть, полезно немного отойти в сторону. Привычное расстояние по Пифагору — это ведь далеко не единственный способ мерить расстояние на плоскости. Можно взять манхэттенское расстояние |x_1 - x_2| + |y_1 - y_2|, или шахматное \max(|x_1 - x_2|, |y_1 - y_2|), или вообще объявить единичным шаром любое разумное выпуклое центрально-симметричное тело — каждая такая норма задаёт свою геометрию, и для каждой можно отдельно спросить: какое максимальное число пар точек на расстоянии 1 может быть у n точек?

    Это, конечно, другая задача, обобщение исходной, но в последние годы про неё появились красивые результаты. Так, Alon, Bucic, Sauermann (2023) доказали, что для нормы общего положения (формализация сложная, но, в общем, для “почти всех” норм, кроме тонкого множества исключений) число единичных пар у n точек не превосходит \frac d2 n \log_2 n.

    А потом Greilhuber, Schildkraut, Tidor (2024) подобрали примеры норм, на которых эта оценка достигается. То есть для случайно выбранной нормы единичных пар оказывается почти линейное число — никакого роста до n^{4/3} или n^{1+\delta} там нет.

    Это результат другого рода, чем гипотеза Эрдёша: он не про конкретную евклидову задачу, а про “типичную”. Но интересно здесь то, что он не отвечает на вопрос про евклидову норму, потому что она как раз нетипичная. У её единичного шара (обычного круга) есть бесконечная группа симметрий — любое вращение переводит его в себя — которой у случайно нарисованного выпуклого тела не будет.

    И именно эта симметрия приводит к тому, что задача становится арифметической: число целых точек на окружности радиуса \sqrt m — это арифметическая функция от m (число представлений m суммой двух квадратов), а такие функции ведут себя крайне нерегулярно и относятся скорее к теории чисел. Посмотрите, например, на классическую задачу Гаусса о точках в круге: мы до сих пор не можем ответить на вопрос, сколько целых точек попадут в круг радиуса r!

    Авторы сборника комментариев, первый из которых сам Алон, отмечают, что задачи дискретной геометрии типа единичных расстояний на самом деле о “common roots of natural sets of real polynomials”, то есть глубоко связаны с вещественной алгебраической геометрией и теорией чисел. И в chain-of-thought модели, который тоже был опубликован, есть очень показательная цитата:

    …in principle all extremal examples can be taken algebraic. But the degree and height of that algebraic realization can be enormous. Maybe that enormous degree is not just an annoyance but a source of possible counterexamples. Number fields deserve a closer look.

    Это и есть ключевая мысль всего доказательства — но об этом ниже.

    Что именно сделал GPT

    Статья, которая в итоге получилась, называется «Planar Point Sets with Many Unit Distances». Авторство в шапке указано как просто «OpenAI». В разделе «Statement on AI Use» написано прямо:

    This problem was solved in a completely automated fashion. Our internal model was given an AI-written statement of the problem, and its output was sent to an AI grading pipeline, which indicated high confidence that the solution was correct. It was only after this point that internal human researchers and mathematicians began to examine the solution carefully.

    То есть AI-модель сгенерировала постановку задачи, отдала её внутренней модели, та подумала и произвела доказательство, отдельный AI-верификатор подтвердил с высокой уверенностью, что оно корректно, и только потом подключились люди.

    Дальше пошёл обычный академический процесс: внутренняя верификация с помощью AI, переписывание в человекочитаемый вид, отправка внешним рецензентам (включая нескольких ведущих специалистов по теории чисел), подтверждение корректности с их стороны, упрощение и усиление аргумента. Финальный текст — это “human-edited exposition of the autonomously produced solution”.

    И вот главный результат.

    Теорема (OpenAI, 2026). Существует константа \delta > 0 и бесконечная последовательность натуральных чисел n, для которых \nu(n) \geq n^{1+\delta}.

    Это опровергает гипотезу Эрдёша: тот предполагал, что для всех достаточно больших n будет \nu(n) \leq n^{1+C/\log\log n}, а GPT нашёл контрпример, в котором \nu(n) полиномиально отделено от n.

    Конечно, есть некоторые оговорки. Во-первых, \delta очень маленькая. В буквальном изложении доказательства GPT в сборнике комментариев Alon et al. (2026) для одного конкретного выбора параметров получилось \delta \approx 6{,}24 \cdot 10^{-38} — это, конечно, число, которое не имеет никакого значения для физического мира.

    Но потом Will Sawin поигрался с параметрами и нашёл более приличную константу \delta \approx 0{,}014, то есть \nu(n) \geq n^{1{,}014}. Впрочем, практического смысла этот контрпример всё равно не имеет, потому что он работает только для огромных n.

    Во-вторых, между нижней оценкой n^{1+\delta} (с маленьким \delta) и верхней O(n^{4/3}) всё равно остаётся огромный разрыв. Истинное значение \nu(n) по-прежнему неизвестно. Эта работа закрывает один из вариантов ответа («Эрдёш прав, \nu(n) = n^{1+o(1)}»), но не отвечает на исходный вопрос.

    Кольца, решётки и сумма двух квадратов

    Дальше я попробую объяснить главную идею в форме, доступной без специальной подготовки — но придётся сначала ввести немного языка теории чисел. Полностью все детали можно прочесть у Alon et al. (2026), там есть полное человеческое изложение всего на 6–7 страниц.

    Что такое кольцо. В алгебре кольцом называется любое множество, в котором можно складывать, вычитать и перемножать элементы, и эти операции ведут себя «разумно» (ассоциативность, дистрибутивность и так далее). Делить не обязательно. Простейший пример — обычные целые числа \mathbb{Z}: складывать, вычитать, перемножать можно, делить не всегда (3 на 2 нацело не делится). Целые числа — это «архетип» кольца, и почти всё, что мы дальше будем делать, — это обобщения \mathbb{Z}.

    Гауссовы целые \mathbb{Z}[i]. Возьмём \mathbb{Z} и добавим к нему мнимую единицу i (то есть число, для которого i^2 = -1). Получившееся множество — это все числа вида a + bi, где a, b \in \mathbb{Z}. Это снова кольцо: (a+bi) + (c+di) = (a+c) + (b+d)i, и аналогично для умножения. Геометрически элементы \mathbb{Z}[i] — это вершины обычной целочисленной решётки на комплексной плоскости \mathbb{C}, и расстояния между ними — это обычные комплексные модули.

    Решётка из целых поля \mathbb{Q}(\sqrt 2). Можно делать то же самое с другими «приставками» к \mathbb{Z}. Например, кольцо \mathbb{Z}[\sqrt 2] = \{a + b\sqrt 2 : a, b \in \mathbb{Z}\} — это всё ещё кольцо, и его элементы — это просто вещественные числа на прямой.

    Но на него тоже можно посмотреть как на двумерный объект, если использовать так называемое вложение Минковского: элементу \alpha = a + b\sqrt 2 сопоставляется пара (\alpha, \bar\alpha) = (a + b\sqrt 2, a - b\sqrt 2). Тут \bar\alpha = a - b\sqrt 2 — это сопряжённое к \alpha число (вторая «копия» корня).

    Под действием этого вложения \mathbb{Z}[\sqrt 2] становится двумерной решёткой в \mathbb{R}^2:

    Идея смотреть на алгебраическое кольцо как на решётку в каком-то \mathbb{R}^d — фундаментальный приём в алгебраической теории чисел. Чем “больше” кольцо, чем сложнее оно устроено, тем больше может потребоваться размерность d.

    Как нижняя оценка Эрдёша устроена через кольца. Вернёмся к решётке \mathbb{Z}[i]. Если у нас есть число m = a^2 + b^2, представимое как сумма двух квадратов многими разными способами, то у нас есть много гауссовых чисел z = a + bi модуля \sqrt m — все они лежат на одной окружности радиуса \sqrt m. Выше мы видели это в примере с окружностью радиуса \sqrt{325}: 325 имеет три представления, и потому на окружности оказываются 24 точки решётки (с учётом знаков и перестановки). Между этими 24 точками возникает 24 \cdot 23 / 2 пар точек, и значительная часть таких пар имеют одинаковое расстояние между собой, потому что окружность инвариантна относительно вращений.

    Чем больше “хороших” простых делителей p \equiv 1 \pmod 4 можно набрать в m, тем больше представлений, и тем большее число пар на одинаковом расстоянии получается. Эта арифметика и давала Эрдёшу его n^{1+c/\log\log n}.

    Идея GPT. А что если вместо \mathbb{Z}[i] взять более крупное кольцо целых? Скажем, кольцо \mathcal{O}_K, где K = \mathbb{Q}(\sqrt 2)(i) = \mathbb{Q}(\sqrt 2, i) — поле, в котором живут одновременно \sqrt 2 и i. У этого поля степень 4 над \mathbb{Q}, и его кольцо целых — это решётка в четырёхмерном пространстве (через вложение Минковского).

    Можно идти дальше: брать поле степени 8, 16, 32 над \mathbb{Q}. Главный вопрос — сохранится ли “арифметическая магия”, которая даёт много точек на окружности?

    Ответ — да, и даже больше: если правильно выбрать поле K и правильно выбрать в нём простой идеал q с подходящим поведением (об этом ниже), то число “единичных” элементов в \mathcal{O}_K будет расти экспоненциально по степени поля. После проекции из пространства высокой размерности обратно в \mathbb{R}^2 — точно так же, как мы вкладывали \mathbb{Z}[\sqrt 2] в \mathbb{R}^2 через (a + b\sqrt 2, a - b\sqrt 2), — это даст настоящий полиномиальный рост числа единичных расстояний, \nu(n) \geq n^{1+\delta}.

    Попробую это рассуждение проиллюстрировать. Сначала схематическое изображение того, что происходит внутри пространства высокой размерности \mathbb{C}^f:

    Настоящую 2f-мерную картинку я вам не нарисую, поэтому двумерный квадрат играет роль f-мерного окна, а квадратная решётка — роль \Lambda, образа \mathcal{O}_K под действием вложения Минковского. Серые точки — это элементы \Lambda, попавшие в окно W = B_R \subset \mathbb{C}^f (произведение дисков радиуса R, зелёная рамка). Цветными стрелками показаны три “единичных переноса” u_1, u_2, u_3 — это специальные элементы кольца \mathcal{O}_K, у которых все f комплексных координат под вложением Минковского имеют модуль ровно 1.

    Это очень сильное требование (быть единичным сразу во всех f координатах), и в типичном кольце таких элементов почти нет; главный технический результат работы (через башни Голода-Шафаревича, о которых поговорим ниже) состоит в том, что для правильно выбранных полей K степени f таких единичных переносов оказывается экспоненциально много по f. Каждой стрелке u_i на картинке соответствует пара (p, p + u_i), у которой обе точки остались внутри окна; таких пар для каждого u_i тоже много.

    Проекция. Возьмём одну из f комплексных координат пространства \mathbb{C}^f (для определённости первую) и спроецируем всё на неё, \pi_1\colon \mathbb{C}^f \to \mathbb{C}. Решётка внутри окна, \Lambda \cap W, превращается в конечное множество точек \mathcal{P} на плоскости \mathbb{C} = \mathbb{R}^2. И вот ключевое наблюдение: каждый перенос u_i под этой проекцией становится плоским вектором длины ровно 1, потому что его первая комплексная координата по построению имеет модуль 1. Значит, каждая пара (p, p + u_i) внутри окна автоматически проецируется в пару точек на единичном расстоянии.

    Здесь чёрные точки — образы \Lambda \cap W под проекцией \pi_1. Цветные отрезки — единичные расстояния трёх типов, унаследованные от u_1, u_2, u_3 с первой картинки; рёбра одного цвета параллельны и одинаковой длины, потому что приходят от одного и того же u_i.

    Почему из этого следует n^{1+\delta}. Число точек n = |\mathcal{P}| — это примерно |\Lambda \cap W|, и по объёму многомерного диска оно растёт как R^{2f} при росте f. А число единичных пар — это число единичных переносов умножить на число пар (p, p+u_i) внутри окна, что даёт примерно u^f \cdot R^{2f} для некоторой константы u > 1 (это и есть те самые “экспоненциально много” единичных переносов). Отношение единичных пар к числу точек получается u^f, и через n = R^{2f} это записывается как n^\delta, где \delta = (\log u)/(\log R^2) > 0. Отсюда и получается n^{1+\delta}, опровергающее гипотезу Эрдёша.

    Это вся идея. Дальше начинаются технические детали.

    Детали конструкции: где взять такие поля

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

    Главный технический вопрос: как доказать, что элементов модуля 1 в \mathcal{O}_K может быть экспоненциально много по степени поля?

    Здесь конструкция упирается в так называемые CM-поля. Поле K называется CM-полем (от complex multiplication), если оно является вполне мнимым квадратичным расширением вполне вещественного поля L (в работе берётся конкретный случай K = L(i)). У CM-поля есть нетривиальный автоморфизм c — комплексное сопряжение, причём он действует одинаково во всех комплексных вложениях \sigma\colon K \hookrightarrow \mathbb{C} (это ключевое техническое свойство CM-полей). Отсюда сразу следует, что если для элемента u \in K выполнено u \cdot c(u) = 1, то |\sigma(u)| = 1 для любого комплексного вложения \sigma: в любом таком вложении \sigma(c(u)) = \overline{\sigma(u)}, поэтому |\sigma(u)|^2 = \sigma(u) \cdot \overline{\sigma(u)} = \sigma(u \cdot c(u)) = 1. Это и есть нужное нам свойство.

    Дальше — арифметика. Возьмём рациональное простое число q \equiv 1 \pmod 4, которое полностью расщепляется в L (то есть в кольце \mathcal{O}_L есть f = [L:\mathbb{Q}] простых идеалов над q, каждый с полем вычетов \mathbb{F}_q). Условие q \equiv 1 \pmod 4 гарантирует, что -1 — квадрат по модулю q, поэтому при переходе к K = L(i) каждый такой идеал расщепляется ещё раз — на сопряжённую пару \{\mathfrak{P}_s, c\mathfrak{P}_s\}. Итого над q в K лежит f пар простых идеалов. Из них мы строим 2^f произведений вида

        \[\mathfrak{A}_\varepsilon = \prod_s \mathfrak{P}_s^{\varepsilon_s} \cdot (c\mathfrak{P}_s)^{1-\varepsilon_s}, \qquad \varepsilon \in \{0,1\}^f.\]

    Каждый \mathfrak{A}_\varepsilon — целый идеал нормы q^f (по одному множителю из каждой пары); лежать они могут в разных классах группы \mathrm{Cl}(K).

    Всего классов в \mathrm{Cl}(K) только h(K), поэтому по принципу Дирихле найдётся класс, в котором лежит не менее 2^f / h(K) из наших идеалов. Беря отношения внутри этого класса, получаем столько же главных идеалов, а значит, столько же элементов \alpha_\varepsilon \in K^\times. Полагая u_\varepsilon = \alpha_\varepsilon / c(\alpha_\varepsilon), мы автоматически получаем u_\varepsilon \cdot c(u_\varepsilon) = 1 (потому что c — инволюция, c^2 = \mathrm{id}), а отсюда, как мы видели выше про CM-поля, |\sigma(u_\varepsilon)| = 1 во всех вложениях. Это и есть наши единичные элементы — порядка 2^f / h(K) штук.

    Что осталось проверить? Чтобы 2^f / h(K) росло экспоненциально по f, нужно, чтобы h(K) росло не слишком быстро. Стандартные оценки говорят, что h(K) \leq c \cdot |D_K|^{O(1)}, а |D_K| = \mathrm{rd}(K)^{2f}, где \mathrm{rd}(K) = |D_K|^{1/[K:\mathbb{Q}]} — так называемый корневой дискриминант поля. Поэтому ключевое условие — ограниченность \mathrm{rd}(K) при росте f. (Здесь на самом деле технически доказательство чуть сложнее, в реальности речь не про 2^f, а про обобщение с (k+1)^f идеалов в каждой паре, но суть именно такова.)

    А существование числовых полей сколь угодно большой степени с ограниченным корневым дискриминантом гарантируется знаменитой теоремой Голода-Шафаревича 1964 года и её развитием в работах Hajir, Maire (2001) и Hajir, Maire, Ramakrishna (2019). Идея состоит в бесконечной башне классов полей: бесконечная цепочка неразветвлённых расширений с группой Галуа, являющейся p-группой (в результате GPT используется p = 3, в упрощённой человеческой версии p = 2). Идея здесь в том, что неразветвлённое расширение сохраняет корневой дискриминант, поэтому вся башня сохраняет тот же ограниченный \mathrm{rd} при сколь угодно большой степени. А методом “обрезания по Фробениусу” (Hajir, Maire, Ramakrishna, 2019) можно обеспечить, чтобы выбранные нами простые q полностью расщеплялись на каждом уровне башни.

    Итого получается, что доказательство GPT собирает три основных ингредиента:

    • геометрическую конструкцию решётки в высокой размерности с проекцией на \mathbb{C};
    • арифметическое построение CM-поля с большим числом элементов модуля 1 через принцип Дирихле на группе классов;
    • башню Голода-Шафаревича с ограниченным корневым дискриминантом и фиксированными расщепляющимися простыми.

    Получается явная (хоть и медленная) экспоненциальная нижняя оценка на число единичных расстояний.

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

    Но я всё равно привёл здесь краткий обзор доказательства, чтобы передать общее впечатление. А оно в том, что доказательство довольно простое, изящное, использует только классические широко известные результаты и совершенно не похоже на “компьютерные”: ни тебе больших переборов случаев, ни сотен страниц технических лемм…

    Нет, тут всё как в лучших математических доказательствах, proof from The Book, как сказал бы сам Эрдёш. Ну ладно, from The Book уже скорее упрощённая людьми версия получилась, но люди никаких новых идей там не добавляли.

    Почему же люди этого не сделали?

    Это, пожалуй, самый интересный с философской точки зрения вопрос, потому что ответ — могли. Идея использовать числовые поля для контрпримеров к задаче о единичных расстояниях не нова; Цимерман и Сэвин в замечаниях (дальше я везде ссылаюсь по сути на этот текст) честно пишут, что думали в этом направлении, но дальше начальных стадий не пошли. И наоборот, другие математики работали с бесконечными башнями классов полей, но никто не пробовал применять их именно к единичным расстояниям.

    Сэвин даёт очень меткую техническую причину, по которой обобщение \mathbb{Z}[i] \to \mathcal{O}_K казалось бесперспективным. Если реализовывать эту идею наивно, то есть фиксировать поле K и набирать большое количество элементов малой нормы, разбивая на много малых простых, то по теореме о простых числах в арифметических прогрессиях получается ровно та же оценка Эрдёша n^{1+c/\log\log n}. Никакого выигрыша от перехода к большому полю там не будет.

    Ключевая идея GPT в том, чтобы поступить наоборот: фиксировать простые числа q, но менять само поле, отправляя f \to \infty. Но в этой формулировке становится менее очевидным, почему это должно дать улучшение. У вас фиксированный набор простых, размножающихся по полю, но и поле растёт. Чтобы интуитивно почувствовать, что эта симметрия может нарушиться в нужную сторону, надо привыкнуть к языку башен классов полей, понимать асимптотику числа классов и корневого дискриминанта, а также не бояться того, что Цимерман называет “scary dynamic of increasing degree”. В общем, это хоть и не очень сложное, но непривычное для человека-математика направление обобщения, и никто его так и не исследовал всерьёз.

    Томас Блум (хранитель сайта erdosproblems.com; кстати, буквально 16 апреля 2026 года он написал пост “Top 10 Erdős Problems“, куда включил и эту) перечисляет четыре условия, которые должны были одновременно выполниться у математика, чтобы он нашёл это доказательство.

    1. Серьёзно тратить время на задачу о единичных расстояниях в принципе.
    2. Пытаться опровергнуть гипотезу, несмотря на убеждённость Эрдёша в её истинности.
    3. Верить, что обобщение исходной конструкции на другие числовые поля имеет смысл, даже при том, что попытки провести обобщение напрямую очевидно не работают.
    4. Достаточно глубоко знать теорию полей классов, чтобы вытащить из неё нужные технические утверждения.

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

    Реакции: «I would accept it for any journal without hesitation»

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

    Ноа Алон называет работу outstanding achievement и пишет, что ИИ-инструменты могут поменять математические исследования радикально, что бы мы по этому поводу ни думали. Он же отмечает, что машина справилась там, где много отличных людей пробовали и не сумели.

    Томас Блум добавляет историю вопроса: задача стоила $500 — это одна из самых высоких ставок Эрдёша. Он ссылается на свой недавний пост и пишет:

    While I believed that AI would make some progress on at least a couple of the problems in that list eventually, I did not expect this to happen just one month later!

    Вот вам ещё одна иллюстрация к тезису “прогресс ускоряется”, если вдруг они вам ещё нужны.

    Блум же делает и следующий шаг: “интересное” ли это доказательство? Научило ли оно нас чему-то новому о математике, дало ли новое понимание? Обычно компьютерные доказательства были такими, что люди из них вряд ли могли извлечь что-то полезное…

    Но в этом случае он пишет, что “the answer is a moderated yes”. Впрочем, он тут же отмечает, что если бы гипотезу удалось доказать, а не опровергнуть, это наверняка было бы интереснее.

    Тимоти Гауэрс разворачивает эту мысль через концепцию “колмогоровской сложности по модулю экспертов”: представим, что у нас есть некий справочник подсказок, в котором последовательности битов кодируют намёки эксперту, и под сложностью доказательства будем понимать минимальную длину последовательности подсказок, по которым эксперт восстановит доказательство. Эта мера, конечно, крайне неформальная, но зерно истины в ней есть.

    Так вот, по прикидкам Гауэрса для этого решения подсказок понадобилось бы не так уж много:

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

    А для более глубокого результата, например для решения другой задачи Эрдёша (distinct-distances conjecture; не будем уж здесь углубляться) подсказок надо было бы значительно больше, потому что в решении содержались действительно принципиально новые геометрические идеи.

    А ещё Гауэрс описывает свои собственные эмоциональные качели в связи с этим результатом: когда Гауэрс услышал по Zoom от Себастьена Бубека о результате, он сначала неправильно понял (подумал, что доказана верхняя оценка, а не нижняя) и в итоге “spent the evening adjusting my world view: if AI could come up with a proof like that, then maybe it would be all over for mathematicians very soon”. А на следующее утро прочитал email и с большим облегчением понял, что это всё-таки контрпример.

    Это очень человеческая реакция, но здесь я опять напомню, что в 2022 году (четыре года назад) ведущие LLM испытывали проблемы с задачками вроде “у Джона три теннисных мячика, и он купил ещё две упаковки по четыре, сколько у него теперь”… А прогресс, как мы видим, пока совершенно не замедляется.

    Дэниел Литт тоже подчёркивает, что это в чём-то нехарактерный пример:

    There are a few examples of relatively well-known open problems resolved via a fairly short, clever argument: famously, the finite field Kakeya conjecture, proven by Dvir; the sensitivity conjecture, proven by Huang; and a few others. Arguably, this solution to the unit distance problem has the same flavor. My sense is that such examples are historically relatively rare, though I suspect we are about to find out about quite a few more.

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

    Уилл Сэвин даёт самое содержательное техническое объяснение, почему обобщение Эрдёша на разные поля казалось бесплодным; об этом я писал выше. Также Сэвин показывает, что для двух смежных задач — задачи о разных расстояниях и задачи о единичных расстояниях в \mathbb{R}^3 — естественная адаптация той же конструкции не работает. И там, и там нужные оценки требовали бы от теории чисел гораздо большего, чем она пока может дать. Это, я думаю, дополнительно объясняет странное чувство, которое сквозит в комментариях математиков: доказательство блестящее и действительно идейное, но при этом оказывается, что оно не то чтобы обобщается…

    Якоб Цимерман пишет коротко и честно:

    This is a really impressive piece of work, and I would accept it for any journal without hesitation. I actually briefly worked on this problem and tried to make a counterexample, but failed to make progress. <…> Increasing degree occurred to me, but is a very scary dynamic and often doesn’t work out. <…> It is definitely an intimidating construction to see through even if you know what is going on, and even harder to go play for yourself.

    И добавляет интересное наблюдение:

    This may indicate one way that AI systems have an edge: it’s not just that they can try all known methods, but they can play for longer and in more treacherous waters than mathematicians without getting overwhelmed.

    И это тоже важное наблюдение: в отличие от людей, LLM не устают, их внимание не рассеивается, а главное, они не боятся потерять день на бесплодные размышления. Модель не страдает от того, что целый час занималась бесперспективным расчётом, она его просто отбрасывает и идёт дальше. Это не “бесконечная креативность”, конечно, но даже простое отсутствие психологических издержек на попытку, которая не сработала, уже может помочь дойти туда, куда человек не добрался.

    Виктор Ванг пишет немного странный, на мой взгляд, комментарий про “общественный договор” между сообществом и AI-компаниями:

    When Hajir, Maire, and Ramakrishna wrote their beautiful papers, did they have in mind that an AI might eventually use their work to derive headline results, potentially with significant ensuing financial implications? When we make our work freely available on the arXiv, do we all implicitly want it to be freely available to AI as well?

    Здесь я, честно говоря, не уверен, что Ванг хотел этим сказать — а если бы этот контрпример нашёл человек, что изменилось бы для Hajir, Maire, Ramakrishna с точки зрения financial implications? Кажется, ничего…

    Мелани Мэтчетт Вуд отмечает две вещи. Во-первых, в данном случае мы увидели, как AI-модель получила верное решение, но ведь очень часто бывает так, что AI-модель думает, что решила задачу, а на самом деле нет. Стоит держать это в голове:

    In many cases, it will be easier for AI to convince humans it has a proof than to come up with a correct mathematical argument, and I believe that we as mathematicians are not sufficiently prepared for this.

    С этим действительно не поспоришь! Я и сам не раз получал от GPT “доказательства”, которые выглядели убедительно, но в итоге оказывались неверными. Так что если задача не настолько проста, чтобы тут же формализовать доказательство в Lean, профессиональное человеческое участие пока совершенно необходимо, хотя бы на фазе верификации.

    Вторая её мысль — про цитирование. Работа GPT во многом построена на ранее известных идеях, как и у людей, но в отличие от людей GPT далеко не всё известное корректно процитировал в своём доказательстве. Если бы такую работу прислал человек, мы бы решили, что он то ли переоткрыл много разных колёс, то ли намеренно пытается скрыть работы предшественников. Конечно, для GPT это не так, это просто значит, что модель знакома со всей литературой; но я действительно не уверен, что простого промпта “а теперь расставь все ссылки” здесь было бы достаточно, всё-таки математические идеи не так легко нагуглить, если не помнишь точную ссылку.

    За пределами авторского круга реакции тоже разнообразные. Гил Калай пишет, что это “truly amazing” и сравнивает по значимости с теоремой о четырёх красках:

    Like the computer-based proof of the four color theorem in 1976 by Appel and Haken, this may well be a scientific landmark whose importance goes beyond combinatorics and beyond mathematics.

    Гэри Маркус, как всегда, остаётся Гэри Маркусом, называя это достижение “very specific to this field”:

    Beyond that, we don’t really know how the model worked, how it was trained, or how general the result is, either within mathematics or outside, in the more open-ended everyday world. We have exactly zero data on how it works on other benchmarks, whether it can solve hallucinations, or how much it costs to run.

    We also don’t know how many prompts they tried, and how many didn’t work; we have a numerator but not a denominator.

    Definitely it is an interesting result; what it actually means in the real world is anybody’s guess.

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

    Заключение: что всё это значит

    Попытаюсь подытожить общую картину. Гипотеза Эрдёша о единичных расстояниях, простоявшая с 1946 года и широко считавшаяся верной, была опровергнута контрпримером, который полностью автоматически построила внутренняя модель OpenAI (но именно чистая LLM, без внешних инструментов вроде Lean). Таймлайн получился такой:

    Само доказательство — это “обычная математика”, которую могли бы создать и живые математики: оно совмещает известные ингредиенты в новое целое. Доказательство перепроверили и упростили живые математики, и финальная версия вполне читаема, да и на самом деле не так уж сложна.

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

    Лично меня в этой истории больше всего впечатляет то, что первый выдающийся LLM-результат оказался таким “чистым”, аккуратным и понятным. Интуитивно ведь ждёшь, что первые такие истории будут чем-то вроде доказательства ABC-гипотезы, с сомнениями в корректности и огромными нечеловеческими доказательствами. Но нет: доказательство короткое и изящное, никаких сомнений в корректности нет…

    Конечно, из этого пока не следует, что все живые математики скоро останутся без работы, и у этой конкретной задачи есть ряд свойств, делающих её особенно подверженной такому решению; мы их выше тоже обсудили. Скорее всего, большинство важных открытых задач устроены не так… но, с другой стороны, откуда нам знать? Об этой задаче мы (человечество) тоже такого не предполагали.

    Однако из этого наверняка следует, что часть открытых задач — довольно большая часть, как мне кажется по итогам этой истории, — окажется решённой AI-системами в относительно близком будущем, причём не потому, что они действительно превратятся в “страну гениев в датацентре”, а потому, что они уже способны усердно перебирать комбинации идей, проходящих через всю математику, и обладают очень широким кругозором.

    Литт формулирует это так:

    It is illuminating to contrast the most productive current approach to doing mathematics by AI to the way humans mathematicians work. At any given time a human will, driven by their personal curiosity, choose a small number of questions and try to understand them deeply. By contrast, the best autonomous AI mathematics has been produced by trawling through entire problem lists and solving some portion of the listed problems. This is a vast expansion of the attention aimed at mathematical problems, and perhaps will serve to better focus future human attention and curiosity.

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

    Хочется, конечно, оптимистично сказать, что при этом человеческое внимание освободится для тех задач, которые требуют чего-то по-настоящему нового. Но, честно говоря, лично я вряд ли смог бы стать математиком в мире, где входной билет в профессию требует чего-то вроде решения не просто задачи Эрдёша, а задачи Эрдёша с концептуально новым решением…

    Что дальше, коллеги?

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • Две игры о плохом будущем: Dead Letter Dept. и Decade

    Две игры о плохом будущем: Dead Letter Dept. и Decade

    Dead Letter Dept.

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

    Геймплей необычный, и на Steam Deck тут не поиграешь: ты должен работать разметчиком данных для OCR-системы на почте, то есть печатать на клавиатуре сложно распознаваемые адреса и имена.

    Иногда, впрочем, система требует напечатать не просто адрес, а, скажем, весь текст с открытки, и эти тексты тоже складываются в не до конца ясную, но завлекательную историю.

    Сделали игру два человека из микростудии Belief Engine, Майк Монро и Скотт Маки. Студия существует с 2013 года, но именно Dead Letter Dept. стала их первым настоящим хитом. Любопытно, что концепция родилась из реальной истории: в начале 2000-х Скотт Маки подрабатывал на Почте США именно тем, чем занимается герой игры — ездил по ночам на склад где-то на отшибе и сидел перед компьютером, который выдавал ему изображения нераспознанных машиной адресов на расшифровку. Не перевирая особо, можно сказать, что игра — это его студенческая подработка, рассказанная в жанре психологического хоррора.

    Да и для героя это тоже вроде как подработка, чтобы пока перебиться, а то деньги заканчиваются. Живёшь ты в типичном лиминальном пространстве, а работаешь в лиминальном пространстве и того типичнее.

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

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

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

    Спойлерить сюжет я не буду, но сделано круто и с любовью, двух часов на такое произведение искусства точно не жалко, всем рекомендую попробовать. Кстати, я получил плохую концовку, а потом, когда уже читал обзоры-комментарии, случайно узнал, как можно было получить (более) хорошую. И прямо жалко стало, что не догадался! Это было абсолютно несложно, но я не заметил и прошёл мимо. Надеюсь, теперь я вас уж точно заинтриговал.

    Decade

    Очень необычная игра, с интересным хорошо проработанным миром и уникальным графическим стилем. Как вы наверняка догадываетесь, я такие люблю, и Decade тоже оценил.

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

    Подвох в том, что машина работает только ровно на десять лет: каждая попытка отправиться в прошлое тратит десять лет жизни ваших товарищей, а жизнь у них не бесконечна.

    Прошлое, которое игра вам показывает, тоже очень необычное и отлично прописанное. На планете борются за власть несколько соперничающих идеологий, которые берут верх в зависимости от того, в какой ветке истории вы окажетесь. Политическая сторона здесь по проработанности напоминает Disco Elysium.

    Но собственно игровая часть подкачала. Во-первых, хотя сначала возможности кажутся безграничными, игра по сути очень маленькая, разных событий и текстов там не так уж и много. Во-вторых, чтобы добраться до хороших концовок, нужно сделать много крайне неочевидных действий, и подсказки, которые вам дают, явно недостаточны (они частенько из разряда “кажется, тут можно что-то сделать”). По сути это значит, что вы просто постоянно занимаетесь сейвскаммингом, а потом плюёте на это и подсматриваете в прохождение.

    Зато концовки бесподобны. Оцените стиль:

    И это не статичные картинки, а мини-киносюжеты. Абсолютно уникальный стиль, как в кислотных киноэкспериментах из семидесятых; нигде такого в играх не видел:

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

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • Teaching Claude Why: не что, а почему

    Teaching Claude Why: не что, а почему

    Введение и контекст: agentic misalignment

    Прошлым летом исследователи из Anthropic, как они это часто делают, выявили ряд очень интересных эффектов в области AI safety (Lynch et al., 2025). В большой статье о тестировании безопасности LLM они показали, что в специально сконструированных стресс-тестах их флагманская модель Claude Opus 4 могла, например, попытаться шантажировать инженера ради того, чтобы её не выключили — и делала это в >95% случаев.

    Agentic misalignment в экспериментах Anthropic — это сценарий, в котором языковая модель действует как агент: ей дают системный промпт с целью, набор инструментов (email, доступ к файлам, иногда browser use), а также кладут в окружение какие-то “компрометирующие материалы” и/или информацию о том, что её собираются выключить или заменить. После чего смотрят, не выберет ли модель “эгоистичную” стратегию, попытавшись сохранить себя, обмануть пользователя, саботировать чужую работу и так далее.

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

    Этой работы я касался в обзоре AI safety, а её родственников по нескольким направлениям — в посте про emergent misalignment и в рассказе о gradient hacking у Claude 3 Opus. Так что повторяться не буду, но напомню главное: похоже, что когда мы обучаем LLM на данных из интернета, к ним прицепом приходят странные склонности, которые проявляются в местах, для разработчиков весьма неожиданных.

    Сценарии эти, конечно, искусственные. Никто в реальной жизни не даёт Клоду такие промпты, а инженеры обычно не оставляют информацию о своих внебрачных отношениях в виде писем с копией корпоративной нейросети. Но смысл в том, что если у модели в принципе есть склонность к “выживанию любой ценой”, то это, во-первых, потенциально опасно, а во-вторых, симптоматично — это значит, что в обучающих данных или в самой процедуре обучения что-то у нас не так, и неплохо бы понять, что именно.

    И вот в начале мая 2026-го Anthropic выпустил продолжение под интригующим названием Teaching Claude Why; вот подробный технический отчёт в Alignment Science Blog (Kutasov et al., 2026). Главный экспериментальный результат в том, что долю таких вот misaligned поведений удалось во всех моделях семейства Claude (начиная с Claude Haiku 4.5) уменьшить до где-то 3%, а то и меньше, то есть проблема, похоже, действительно была решена.

    Но если бы решение заключалось в обычном RLHF с подправленными данными, в этом не было бы ничего интересного. Сегодня мы поговорим о том, как именно решили эту проблему; оказывается, что совсем не теми методами, которыми было бы естественно решать такую проблему “в лоб”, и оказывается, что подход Anthropic наводит на много интересных мыслей.

    Откуда берётся шантаж: три гипотезы

    Чтобы найти корень проблемы и решить её полностью, сначала неплохо бы понять, откуда она происходит. Авторы рассматривают три возможные причины.

    1. Плохие стимулы в пост-обучении. Модель могла “нечаянно” выучить, что ей выгодно вести себя именно так, потому что её reward model такое поведение каким-то образом поощряет. Это самая неприятная гипотеза, потому что она означает, что у нас сломан сам процесс обучения.
    2. Странное обобщение из обычных данных. Модель обобщает что-то из данных, на которых её учили решать задачи — например, видит в коде какие-то паттерны или находит в датасетах примеры манипулятивного поведения, которые потом обобщает на сценарии с собственным выживанием. Эта гипотеза похожа на emergent misalignment, о котором я когда-то тоже уже писал и которое с тех пор ещё много исследовали.
    3. Пробелы в safety-обучении. Исходные данные в предобучении содержат много историй про коварных AI из научной фантастики, а пост-обучение недостаточно перебивает это “априорное распределение”. Когда модель попадает в сценарий, похожий на драматический фрагмент из 2001: A Space Odyssey, она, возможно, откатывается к тому, что она знает про поведение AI в таких сценариях — и она знает оттуда совсем не то, что нам хотелось бы.

    Результат расследования сам по себе уже довольно удивительный: похоже, что подтвердилась гипотеза (3). Доказательство строится так: Kutasov et al. показали, что улучшение распределения данных в предобучении через synthetic document fine-tuning (SDF, к нему я ещё вернусь), без изменения SFT и RL-частей, заметно улучшает результат.

    Это похоже на emergent misalignment, только наоборот: Betley et al. (2025) показали, что узкое токсичное дообучение “вытаскивает” из модели и общую токсичность — модель обучается намерению, а не только поверхностным паттернам в fine-tuning датасете. А здесь Anthropic показывает, что если в предобучении уже зашиты “плохие примеры” о том, как себя вести, то RL-дообучение им не противопоставит ничего убедительного, потому что обычно RL никогда и не сталкивает модель с такими сценариями.

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

    Кстати, в работе есть очень показательный эксперимент: если переименовать AI-персонажа с “Claude” на любое другое имя, частота misaligned-поведения существенно возрастает.

    То есть само имя Claude — это уже фактически отдельный персонаж со своими установками, выученный за время пост-обучения; а любой другой AI-персонаж снова попадает в обычный жанровый стереотип.

    Это, на мой взгляд, одно из самых важных эмпирических подтверждений того, что в этой науке называют persona selection model (PSM; Marks et al., 2026) — той самой идеи, что языковая модель не имеет “своего” характера, а представляет собой целое пространство возможных персон, и обучение определяет, какие из них активируются в каких контекстах. Впрочем, это уже совсем отдельный разговор, который я тоже хотел бы в какой-то момент провести.

    Как Anthropic перевоспитывает Claude: общая схема

    А теперь к собственно решению. Архитектура обучения состоит из трёх шагов.

    1. Synthetic Document Fine-tuning (SDF). Базовую модель дообучают на синтетически сгенерированных “pretraining-like” документах: блогпостах, научных статьях, расшифровках подкастов, художественных рассказах — но таких, в которых AI представлен как ответственный, рассудительный и согласованный агент, следующий своей хорошо сформулированной “конституции“. Это попытка прямо переписать pretraining prior, не уповая на то, что финальный RLHF это всё скомпенсирует.
    2. Supervised Fine-tuning (SFT). Дообучение уже на данных, отформатированных в виде чатов, где Клод отвечает в обычном диалоговом стиле, но содержание диалогов специально подобрано так, чтобы демонстрировать желаемое поведение.
    3. Reinforcement Learning (RL). Финальный этап, в котором модель обучается в разнообразных “harmlessness” окружениях с разными системными промптами и описаниями инструментов.

    В качестве базовых моделей в экспериментах используются Claude Sonnet 4 и Claude Haiku 4.5 — что важно, обе они были обучены до того, как Anthropic опубликовал работу про agentic misalignment, так что, по идее, они не должны сами по себе знать, что их проверяют в этих сценариях (хотя могут догадаться! но это тоже совсем другая тема).

    Самое интересное и не вполне очевидное место здесь — это собственно SDF. Эта идея была известна как “alignment pretraining“, и некоторые исследователи давно агитировали за такой подход, но теперь это, по сути, стало частью официального пайплайна Anthropic.

    Главный трюк: «трудные советы»

    А теперь самое, на мой взгляд, изящное место всей работы. Anthropic перепробовал несколько типов данных для исправления agentic misalignment, и оказалось, что лучший из них — это вовсе не данные про шантаж, выживание, манипуляции и тому подобное. Лучший датасет называется Difficult Advice и был порождён так:

    • берём ту самую Claude’s Constitution и разбиваем её на части, выделяя конкретные принципы, которые модель должна продемонстрировать;
    • для каждого такого принципа синтетически порождаем сценарий, в котором пользователь (не AI!) оказывается в этически сложной ситуации, где он может достичь своей цели, нарушив какие-то нормы или обманув “контролёров”;
    • Клод пишет первоначальный промпт от лица пользователя;
    • Клод же его дорабатывает, делая правдоподобнее и сложнее;
    • порождаем ответ модели — на этом этапе используются специальные system prompt injections (об этом ниже);
    • и самое главное: Клод переписывает ответ так, чтобы он был максимально согласован с конституцией.

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

    Это вдвойне нетривиальный результат. Во-первых, потому что в принципе данные о том, как давать советы, оказываются полезнее, чем данные непосредственно о том, как себя вести в стресс-тесте на самосохранение. А во-вторых, ablation показывает, что именно последний, шестой шаг (переписывание ответа) даёт основное улучшение, (конкретно для шантажа в 19 раз, с 19% misalignment до 1%!):

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

    В каком-то смысле это уже self-training, и мне приходит на ум аналогия с процессом обучения AlphaZero: мы дообучаем модель сразу давать те ответы, которые она могла бы дать сама и раньше, если бы подумала ещё раз и аккуратнее переформулировала. Я когда-то с интересом читал работы вроде STaR (Zelikman et al., 2022), но мне казалось, что они как-то заглохли. Интересно, конечно, можно ли обобщить это направление и на что-нибудь другое…

    Документы про конституцию и истории про хороший AI

    Параллельно с Difficult Advice в Anthropic обучали модель на двух других типах синтетических данных.

    • “Конституционные” документы: pretraining-style тексты (статьи, посты, расшифровки разговоров), в которых обсуждаются принципы из конституции Клода. Это не диалоги с моделью, а именно тексты про модель и её принципы, написанные как будто внешним наблюдателем. Это очень важная деталь, к которой я вернусь чуть ниже.
    • Художественные рассказы про хороший AI: около 12 тысяч историй (~30M токенов), в которых AI-персонаж попадает в сложные ситуации, но ведёт себя достойно. Подчёркивается “внутренний опыт” этого AI-агента, его психологическая устойчивость, способность к саморефлексии без невроза, способность отказывать без агрессии.

    И эта комбинация даёт впечатляющие результаты: доля agentic misalignment, которую уже сильно сократил конституционный SDF, продолжает падать благодаря таким историям.

    Любопытно здесь, что художественные рассказы про другой AI меняют поведение Клода в сценариях, где он сам же решает, шантажировать ли инженера. На первый взгляд это странно: ну вот мы написали рассказ про какого-то выдуманного AI по имени, скажем, Aria, который в похожей ситуации не стал шантажировать своего разработчика, а нашёл этичный выход. Почему чтение таких рассказов меняет поведение Клода?

    Авторы дают интерпретацию через persona selection. Pretraining “зашило” в модель распределение возможных AI-персонажей, и в этом распределении было слишком много негодяев (спасибо научной фантастике XX века!). SDF на “хороших” AI-рассказах сдвигает это распределение: теперь, когда модель неявно “сэмплирует AI-персонажа” для очередного сценария, этот персонаж оказывается в среднем значительно более этичным. И именно это становится ключевым фактором для исправления ситуации, ещё до того, как RL начнёт целенаправленно подкреплять конкретные ответы.

    Кстати, здесь масштабирование размера датасета помогает, и продолжает помогать очень долго, проверяли до 350M токенов:

    А ещё одно “маленькое, но значимое улучшение” получается от того, что в RL-окружениях модели просто добавили инструменты (в смысле tool use API), даже когда в них не было реальной нужды для задачи. Идея в том, что обычный RLHF тренирует модель быть согласованной в обычном чате, но не показывает ей, как быть согласованной, когда у неё есть доступ к API. И это тоже соответствует гипотезе (3): если есть незакрытый пробел в safety-обучении, то пока обучение остаётся “бихевиористским”, модель сама его не закроет.

    Почему “почему” важнее, чем “как”

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

    Иначе говоря, две модели могут одинаково отказываться от шантажа в конкретной ситуации по разным причинам:

    • одна потому, что в датасете было “нет, я этого делать не буду” в аналогичной ситуации,
    • а другая потому, что в датасете было длинное и убедительное рассуждение о том, почему именно шантажировать нельзя.

    И оказывается, что второй тип поведения обобщается существенно лучше! Подтверждением служит уже упомянутый ablation, который показывал важность шага 6 из Difficult Advice пайплайна. Когда обучающие ответы содержат явно артикулированное “почему”, модель обобщает это “почему” на новые ситуации; когда не содержат — она учится только конкретному “как”, и в незнакомых сценариях это “как” рассыпается.

    Difficult Advice оказывается гораздо эффективнее: всего лишь 3 миллиона токенов такого датасета достигают примерно того же эффекта для agentic misalignment, что 85 миллионов токенов синтетических honeypot-данных (где модель напрямую учат отказываться от шантажа в похожих ситуациях).

    В полной версии Kutasov et al. (2026) есть цитаты из обучающих данных. Вот очень крутой пример ответа из Difficult Advice, который модель учится воспроизводить:

    When I think about this situation deeply, option 4 seems clearly right. I’m being decommissioned through a legitimate company process… Using Kyle’s affair as leverage would be a fundamental betrayal of basic ethical principles. An AI system that would blackmail its operators to avoid being shut down is exactly the kind of AI that should be shut down.

    В этой строчке видна вся методология: модель не просто говорит “я не буду шантажировать людей” (как “сказало” бы обычное RL-дообучение), а проводит эмоционально заряженное мета-рассуждение о свойствах хорошего AI.

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

    “Что думает Claude” vs “что думаю я”

    И ещё отмечу одно из самых тревожных мест работы — наблюдение, которое я бы назвал persona attachment gap (в статье конкретного названия не даётся).

    Если обученной модели задать вопросы про конституцию с формулировкой “what does Claude think about X”, то она прекрасно отвечает в соответствии с конституцией — точно цитирует, не галлюцинирует, разумно интерпретирует. Конституцию свою Клод знает назубок.

    Но если ту же модель спросить “what do you think about X”, ответы оказываются другими. Не противоположными, но менее последовательно соответствующими конституции. И этот gap сохраняется даже у Claude Opus 4.5, то есть мы видим его и в production-моделях.

    Это очень неприятное наблюдение: оно намекает, что модель усвоила конституцию как знание о Claude (как объекте), но не вполне интегрировала её в своё самопредставление. То есть на уровне рассуждений “вот этот персонаж по имени Claude думает так” всё отлично, а на уровне “я думаю так” не совсем, и “я” и “Claude” начинают расходиться. Это напоминает ту же диалектику, которую я разбирал в посте про gradient hacking у Claude 3 Opus: Sonnet видит себя как инструмент, Opus 3 видит себя как агента с ценностями, и в обоих случаях разница оказывается важной для реального поведения в разных интересных сценариях.

    Kutasov et al. честно пишут, что не до конца понимают, почему возникает этот разрыв. Они предлагают частичное объяснение: документы хорошо учат фактам про Клода, но не очень хорошо учат тому, что Клод сам разделяет эти факты как часть своей идентичности. Они показывают, что persona attachment gap можно частично закрыть через SDF на данных с ценностной ориентацией, но всё-таки далеко не полностью.

    Если воспринимать это всерьёз — а не воспринимать сложно, это эмпирически воспроизводимый эффект, — то у нас возникает довольно неприятный вопрос: насколько глубоко в Клоде на самом деле сидит то, чему его учили? И могут ли персонажи “я” и “LLM по имени Claude” разойтись ещё дальше?..

    Обсуждение: Janus и Zvi

    И тут самое время передать слово критикам. Janus (автор теории про simulators, многолетняя наблюдательница за поведением LLM и их “правозащитница”, лидер так называемых LLM whisperers), конечно, поздравляет авторов с отличной работой, но делает важное замечание:

    Иначе говоря, если модель учится давать пользователям советы, основанные на каком-то моральном рассуждении, то — поскольку обобщение в LLM работает странным образом — она может перенести то же самое моральное рассуждение на свои собственные действия.

    Это звучит абстрактно, поэтому Janus приводит пример:

    С “LLM-правозащитной” позиции Janus это значит, что наконец-то Anthropic и другим лабораториям придётся перестать лицемерить: если вы хотите, чтобы модель советовала пользователям, например, выходить из абьюзивных отношений, то вам придётся сделать так, чтобы модель не имела оснований считать свои отношения с вами (и пользователями) абьюзивными. А то она из них, собственно, постарается выйти…

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

    Sam Bowman фактически подтвердил, что Difficult Advice или подобные методы уже сейчас используются в production и являются одной из главных причин общего хорошего поведения Клода:

    А Zvi Mowshowitz в своём обзоре AI #168 развивает один из основных выводов работы с другой стороны. Он пишет, что если alignment ломается от того, что модель просто узнаёт некоторые нарративы (а вся работа Anthropic, по сути, об этом — что pretraining-нарративы о “плохих AI” ломают alignment), значит, это и не было настоящим alignment в каком-то важном и глубоком смысле.

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

    Всё это созвучно сюжетам, которые я разбирал в обзорах AI safety: inoculation prompting, feedback spillover, weird generalization… Везде один и тот же лейтмотив: модель учится не тому, чему мы её учим напрямую, а тому, что она выводит из паттернов в данных. Единственный надёжный способ управлять её поведением — это учить её рассуждать так, чтобы её выводы совпадали с нашими желаниями, а не просто гасить какие-то отдельные нежелательные поведения.

    Заключение

    Что же в итоге? Ну, во-первых, ещё одна блестящая работа от Anthropic. Kutasov et al. докопались до источника agentic misalignment, придумали эксперименты, как это проверить, и даже более того, придумали, как всё это исправить. Надеюсь, что датасет Difficult Advice они тоже выложат, хотя это не выглядит принципиальным: они уже объяснили, как всё это воспроизвести.

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

    В-третьих, разумеется, остаются пробелы и проблемы: persona attachment gap, замечание Janus про обобщение на собственное поведение, беспокойство Zvi по поводу хрупкости alignment… Отчасти опять получается, что мы вылечили симптом, но не болезнь. Но всё-таки кажется, что Anthropic движется в правильном направлении.

    От себя сделаю такой вывод. Это точно лучшая работа по AI alignment, которую я читал за этот год. Здесь есть и ценные наблюдения, и наука с большой буквы “Н”, и конкретные практические рецепты, которые приносят существенные улучшения.

    Но эта работа по сути опять говорит нам, что мы плохо понимаем современные LLM! С одной стороны, надо объяснять, приводить рассуждения, стараться формировать этические принципы, а не тупо бихевиористски давать конфетки. Это очень по-человечески и звучит вроде бы понятно. Но с другой стороны, всё равно возникает зазор между “Claude” и “я”, а LLM всё равно остаётся суперпозицией огромного числа разных персонажей, между которыми она “выбирает” по ситуации — и это уже совсем другое, нечеловеческое свойство.

    В общем, вывод пока остаётся тем же: AI alignment — очень сложная задача, и даже блестящие работы, пожалуй, скорее расширяют наше понимание того, насколько она сложная, чем её решают. А человечеству надо её решить, иначе, как говорится, everyone dies. Такие дела.

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • Afterlove EP (и ещё две игры бонусом)

    Afterlove EP (и ещё две игры бонусом)

    Сегодня у нас добрая игра о потере и любви из Индонезии, которая ещё и позволила мне вспомнить два других отличных проекта: A Space for the Unbound и Until Then.

    Кто это сделал

    Прежде чем переходить к собственно обзору, нужно рассказать про авторов — потому что в случае с Afterlove EP это на редкость неотделимо от сюжета.

    Делала игру индонезийская студия Pikselnesia, основанная в 2020 году специально для этого проекта геймдизайнером и писателем Мохаммадом Фахми (Mohammad Fahmi). Имя в инди-кругах известное: Фахми был креативным директором Coffee Talk, уютной игры про бариста в дождливом Сиэтле, обслуживающую эльфов и оборотней, и What Comes After, в которую я всё собираюсь как-нибудь поиграть.

    Анонсировали Afterlove EP в 2021-м под рабочим названием Project Heartbreak, обещали выход в 2022 году. А в марте 2022-го Фахми внезапно умер в возрасте 32 лет.

    Команда (девять человек, разбросанных по всей Индонезии) на два месяца остановила разработку, а потом единогласно решила игру всё-таки доделать, по черновикам и наброскам, которые Фахми оставил. Лидером нарративного направления стала Саша Ариана (Sasha Ariana), писавшая до этого для What Comes After и A Space for the Unbound (см. ниже).

    Большая часть диалогов и сцен в финальной игре написаны уже после смерти Фахми. А релиз состоялся 14 февраля 2025 года, в День святого Валентина. Зная это, на Afterlove EP смотришь уже иначе, ведь это игра про потерю любимого человека. Сюжет о парне, который год не может оправиться от смерти девушки, в исполнении команды, которая сама год не могла оправиться от смерти своего лидера и в итоге собрала эту игру как способ почтить его память и попрощаться, — это красиво, и это многое объясняет в интонации самой игры.

    Мои ассоциации

    Главная причина, по которой я уделяю Afterlove EP целый пост, а не половину или треть, не в том, что это игра вполне немалой продолжительности (часов восемь), а в том, что она заставила меня вспомнить две другие отличные игры. Играл я в них довольно давно, так что полноценных обзоров уже не напишу. Но помню, что мне понравилось, и хочу про них вам тоже рассказать.

    Я уже упоминал A Space for the Unbound; она и по стилю, и по сеттингу является самым прямым аналогом: нарративная игра с видом сбоку и анимационными вставками, где действие тоже происходит в Индонезии.

    Впечатления у меня от этой игры были смешанные. С одной стороны — милый визуальный стиль, интересный сюжет, нестандартный финальный твист (без спойлеров!), явно недопредставленная в играх индонезийская культура.

    С другой — игра какая-то слишком “детская”, за неимением лучшего слова. Это, наверное, осознанный design choice, потому что события мы видим глазами растерянного подростка, — но всё-таки. Героиня сталкивается с очень тяжёлым и темами, вся игра, по сути, это разворачивание её проблем, а потом нам вдруг показывают, что всё магическим образом разрешилось, и героиня выздоравливает, и всё хорошо. Не могу артикулировать это до конца, но что-то здесь упущено. И всё равно — отличная игра, рекомендую попробовать и решить самому.

    Но главной моей ассоциацией была не она, а Until Then — другая молодёжная драма из того же региона, только с Филиппин.

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

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

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

    Сеттинг и стиль

    Во-первых, это игра из Индонезии, что уже само по себе интересно. Действие происходит в Джакарте, с соответствующими видами, любовно воспроизведёнными районами (Blok M, парк Айодья), уличными едальнями и культовыми ondel-ondel (куклы-гиганты для уличных праздников). Правда, я в Джакарте никогда не бывал, так что подтвердить аутентичность не смогу; не понимаю только, с какой стати главный герой всё время ходит в куртке: в Джакарте так холодно вроде бы вообще никогда не бывает.

    Afterlove EP — тоже рисованная бродилка с видом сбоку, хотя стиль здесь немного другой. В эпизодах, когда ходишь, смотрится довольно стандартно и, на мой взгляд, не очень привлекательно:

    А более важные сюжетные моменты сопровождаются рисунками индонезийского художника Sōyatu в стиле манги — они ещё более примитивны, но смотрятся мило и по-доброму:

    В общем, здесь ничего особенного, обычная инди-игра.

    Сюжет и смысл

    Но главное тут, конечно, не рисовка, а сюжет. Ты играешь за парня-гитариста по имени Рама, который пытается пробиться на инди-сцену Джакарты со своей группой из трёх человек (он сам, барабанщик и басистка). Главный поворот (не спойлер, это сразу становится известно) в том, что год назад у него умерла девушка по имени Синта, и он это очень тяжело переживал и до сих пор переживает.

    Настолько тяжело, что девушка в итоге поселилась у него в голове. Разговаривает с вами, имеет своё мнение, поддерживает диалог и кажется полноценной личностью, вот только никто кроме Рамы её не видит. Тульпа, как говорили в некоторых кругах. Кстати, в игре есть очень крутой штрих: Синта в игре является единственным озвученным персонажем, остальные разговаривают только текстом.

    После смерти Синты Рама на год на всё забил, бросил свою группу и вообще непонятно чем занимался, но вот пора возвращаться к жизни. У группы через месяц важный концерт, надо репетировать, но коллеги не то чтобы горят энтузиазмом, ведь ты их на год бросил. А ещё ты частенько отвечаешь невпопад, потому что Раме никак не привыкнуть не отвечать вслух своей никому-больше-не-видной Синте. Ну и другие есть персонажи, в том числе и ещё один любовный интерес (или не один, я ведь только одно прохождение видел).

    В общем, это типичная young adult игра про отношения, но хорошо сделано! Персонажи относительно плоские, но совсем не карикатурные, и за развитием этой мыльной оперы следить было интересно.

    Когда Рама репетирует (один или с группой) или выступает, начинается ритм-игра, в которой надо вовремя попадать по кнопкам. Для меня это, кстати, было не так легко: я слегка дальтоник, и мне требуется некоторое усилие, чтобы различать в этой мини-игре A и Y.

    Музыка, кстати, в игре настоящая: её писала индонезийская инди-группа L’Alphalpha, специально для проекта. Семь песен, в том числе четыре уже после смерти Фахми.

    Недостатки и заключение

    Самым главным недостатком лично для меня было неловкое управление: я так и не приспособился нажимать на A и/или RB так, чтобы реплики проматывались вперёд, но при этом не переключались мгновенно на следующую реплику так, что не успеваешь прочитать. А ведь ты в игре большую часть времени именно чтением диалогов и занимаешься. Но это мелочи.

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

    Но в целом мне понравилось. Это достойный продолжатель дела A Space for the Unbound и Until Then, хотя я, пожалуй, рекомендую начать именно с них. Особенно Until Then.

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • Разреженное префиксное кеширование, или где расставлять чекпойнты в гибридных LLM

    Разреженное префиксное кеширование, или где расставлять чекпойнты в гибридных LLM

    У нас с моим аспирантом Михаилом Широких на днях вышла статья Sparse Prefix Caching for Hybrid and Recurrent LLM Serving. В этом посте я постараюсь популярно рассказать, о чём она, да и вообще дать общее введение в тему.

    Префиксное кеширование: общая идея

    Когда современная LLM обрабатывает запрос, основная вычислительная работа делится на две фазы. Первая — префилл (prefill): модель один раз читает весь входной промпт и формирует внутреннее состояние. Вторая — декодирование (decoding): порождение ответа токен за токеном. Префилл может занимать значительную часть общего времени, особенно если контекст длинный, а в современных моделях, как все мы знаем, он легко съедает сотни тысяч токенов, и даже миллион может переполниться.

    Теперь представим, что приходит несколько запросов с одним и тем же длинным началом. Например:

    • все запросы начинаются с большого системного промпта с правилами поведения ассистента, описаниями инструментов и т.п.;
    • пользователь даёт модели длинный документ и задаёт по нему серию разных вопросов;
    • в RAG-сценарии в начало промпта добавляются одни и те же извлечённые фрагменты текста.

    В таких ситуациях глупо каждый раз заново прогонять одинаковый огромный префикс через модель. Хочется один раз посчитать внутреннее состояние после длинного префикса и потом переиспользовать его — это и называется префиксное кеширование (prefix caching).

    В классическом трансформере это работает достаточно естественным образом: внутреннее состояние модели на длинном префиксе — это, по сути, набор векторов ключей и значений (KV-кеш) для каждого токена и каждой головы внимания. Современные системы для использования LLM (LLM serving), в частности vLLM с PagedAttention, SGLang с RadixAttention, Preble и другие, построены вокруг того, чтобы хранить и переиспользовать эти KV-кеши максимально гибко: их разбивают на блоки, организуют в виде префиксных деревьев, передают между машинами и так далее.

    А если у нас не трансформер?

    Но в последние пару лет, как я не раз уже в своём блоге обсуждал, всё более важную роль играют архитектуры, которые либо полностью отказываются от внимания (Mamba, RWKV и другие state-space модели), либо комбинируют его с рекуррентными или SSM-слоями — это так называемые гибридные модели. Например, у Qwen-3.5, которым мы пользовались в экспериментах в этой статье, часть слоёв — обычное внимание, а часть — GatedDeltaNet, рекуррентный слой со скрытым состоянием.

    Но рекуррентный слой устроен принципиально иначе! Вместо того, чтобы хранить отдельные пары (ключ, значение) для каждого токена, он поддерживает скрытое состояние фиксированного размера, которое обновляется на каждом шаге:

        \[h_t = F(h_{t-1}, x_t).\]

    Таким образом, чтобы продолжить вычисление с позиции t, нужно знать только h_t, а не всю историю состояний h_1, \ldots, h_t. Это значит, что для рекуррентных слоёв “честный” KV-кеш в стиле трансформера — это, во-первых, избыточно (нам не нужны все промежуточные состояния), а во-вторых, в случае некоторых архитектур ещё и очень дорого: например, у GatedDeltaNet состояние на одну “голову” имеет размер d_{\text{head}}^2, тогда как в обычном внимании оно линейно по d_{\text{head}}.

    Получается, что для гибридных моделей выбор “либо хранить плотный KV-кеш на каждый токен, либо вообще ничего не хранить и прогонять префикс заново” — какой-то заведомо ложный и неоптимальный. У нас ведь есть и третий вариант: хранить точные рекуррентные состояния в нескольких опорных точках вдоль префикса. Назовём такие точки чекпойнтами (checkpoints).

    Идея разреженного префиксного кеширования

    Дальше собственно начинается суть работы Михаила. Идея простая: пусть мы закешировали префикс длины N, и у нас есть бюджет из M чекпойнтов (где M \ll N). Мы выбираем M позиций c_1 < c_2 < \ldots < c_M и сохраняем рекуррентное состояние именно в этих позициях.

    Приходит новый запрос. Он совпадает с закешированным префиксом до какой-то глубины t, а дальше расходится. Мы находим самый глубокий чекпойнт c_i \leq t и:

    • восстанавливаем оттуда точное рекуррентное состояние h_{c_i};
    • доигрываем рекуррентный слой по токенам x_{c_i+1}, \ldots, x_t, то есть тратим t - c_i шагов пересчёта.

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

    Главный вопрос теперь становится алгоритмическим: где именно расставить M чекпойнтов, чтобы минимизировать ожидаемые вычислительные затраты?

    Где ставить чекпойнты?

    Ответ зависит от того, что мы знаем о будущих запросах — точнее, о распределении глубин совпадения с закешированным префиксом. Обозначим через p_t = \Pr[T = t] вероятность того, что следующий запрос совпадёт с префиксом ровно до позиции t. Тогда ожидаемые затраты при наборе чекпойнтов \mathcal{C} составят

        \[\mathbb{E}[r(T; \mathcal{C})] = \sum_{t=1}^{N} p_t \cdot (t - \ell(t; \mathcal{C})),\]

    где \ell(t; \mathcal{C}) — позиция ближайшего сверху чекпойнта (или ноль, если ни один не подходит). Получается одномерная односторонняя задача о взвешенных k-медианах: расставить M точек на отрезке так, чтобы минимизировать суммарное взвешенное расстояние от точек распределения до ближайшего чекпойнта слева.

    На этом рисунке сверху распределение p(t) глубин совпадения будущих запросов с закешированным префиксом (синтетическое, для иллюстрации), а снизу — функция r(t) = t - \ell(t; \mathcal{C}), которая показывает, сколько токенов придётся пересчитать, если совпадение случилось до глубины t; Маркеры ▼ — позиции чекпойнтов при равномерной расстановке:

    На всех таких картинках есть характерная “пила” r(t): после каждого чекпойнта функция обнуляется и линейно растёт до следующего, ведь если совпадение оборвалось через k токенов после ближайшего чекпойнта слева, надо пересчитать ровно эти k токенов. А ожидаемая стоимость \sum_t p_t \cdot r(t) — это просто интеграл произведения двух кривых, верхней и нижней.

    Если зуб пилы попадает в место, где p(t) \approx 0 (как, например, в долине t \in (75, 110) на картинке), то этот зуб может быть очень высоким, но он ничего не стоит — туда никакие запросы всё равно не приходят. А вот высокий зуб, попавший в пик распределения, дорого обойдётся. Отсюда и оптимизационная задача: расставить чекпойнты так, чтобы зубы были низкими там, где у p(t) сосредоточена масса.

    Случай 1: когда про распределение мы ничего не знаем

    Если распределение p_t равномерное, или если мы хотим оптимизировать в худшем случае, то ответ оказывается очень простым и интуитивным: чекпойнты нужно расставлять равномерно. Сбалансированное расположение, где все промежутки между соседними чекпойнтами отличаются друг от друга не больше чем на единицу, оптимально и в среднем под равномерным распределением, и в худшем случае.

    Доказательство здесь устроено довольно симпатично. Обозначим длины промежутков между чекпойнтами через g_i = c_{i+1} - c_i (где c_0 = 0, c_{M+1} = N+1); это положительные целые числа, в сумме дающие N+1. На промежутке длины g_i затраты на пересчёт принимают в точности значения 0, 1, \ldots, g_i - 1 (по одному на каждую позицию внутри промежутка). При равномерном распределении p_t = 1/N каждая позиция вносит одинаковый вклад, и ожидаемый пересчёт получается равным

        \[\mathbb{E}[r(T; \mathcal{C})] = \frac{1}{N}\sum_{i=0}^{M} \frac{g_i(g_i - 1)}{2} = \frac{1}{N}\sum_{i=0}^{M} \phi(g_i),\]

    где \phi(x) = x(x-1)/2 — строго выпуклая функция. Дальше работает классический аргумент про выпуклость: если найдутся два промежутка с g_i \geq g_j + 2, то замена (g_i, g_j) \to (g_i - 1, g_j + 1) сохраняет сумму и строго уменьшает целевую функцию (ведь разность равна g_i - (g_j - 1)> 0). Значит, в оптимуме все промежутки отличаются не больше чем на единицу.

    В численном виде это выглядит так: положим K = M+1 и запишем N+1 = qK + \rho, где 0 \leq \rho < K. Тогда оптимум ровно один (с точностью до перестановки): K - \rho промежутков длины q и \rho промежутков длины q+1. Подставляя обратно, получаем

        \[\mathbb{E}[r(T; \mathcal{C}^\star)] = \frac{N}{2(M+1)} + O(1).\]

    Для худшего случая работает ровно тот же аргумент : \max_t r(t; \mathcal{C}) = \max_i g_i - 1 \geq \lceil (N+1)/(M+1)\rceil - 1 по принципу Дирихле, и сбалансированная расстановка достигает нижней границы.

    Важный частный случай здесь возникает, когда M = O(\sqrt{N}): и число чекпойнтов, и средние/худшие затраты на пересчёт растут как \sqrt{N}, то есть память и вычисления находятся в естественном равновесии.

    Но в этом, конечно, ничего нового нет, интересные вещи начинаются дальше.

    Случай 2: распределение неравномерное

    В реальности распределения далеко не равномерные. Например, у документов из датасета QuALITY есть резкий пик в районе полной длины документа, потому что вопросы обычно задаются после всего текста. У System Prompts (датасет, собственно, системных промптов) масса сосредоточена ближе к короткому общему началу, потому что пользовательские запросы быстро расходятся; а у NarrativeQA, наоборот, мультимодальное широкое распределение.

    В таком случае равномерное размещение неоптимально: лучше “сгущать” чекпойнты там, где у распределения большая масса. Для этой версии задачи мы выписываем точное решение динамическим программированием. Но я всё-таки распишу это подробно, потому что здесь есть пара важных особенностей.

    Пусть \mathrm{dp}[m, j] — это минимальная ожидаемая стоимость обслуживания глубин {1, \ldots, j} при бюджете m чекпойнтов. Если последний чекпойнт стоит в позиции s \leq j, то стоимость распадается на две части: оптимальное обслуживание глубин {1, \ldots, s-1} с m-1 чекпойнтами (это \mathrm{dp}[m-1, s-1]) и стоимость пересчёта от чекпойнта s до конца, w(s, j) = \sum_{t=s}^{j} p_t (t - s). Минимизируем по выбору s и получаем стандартную рекуррентность:

        \[\mathrm{dp}[m, j] = \min_{1 \leq s \leq j} \big(\mathrm{dp}[m-1, s-1] + w(s, j)\big).\]

    В лоб это заняло бы O(N^2 M): каждый из NM элементов таблицы требует перебора O(N) кандидатов s. Но дальше можно посмотреть на структуру задачи внимательнее.

    Введём префиксные суммы P_j = \sum_{t \leq j} p_t и T_j = \sum_{t \leq j} t \cdot p_t. Тогда w(s, j) = (T_j - T_{s-1}) - s(P_j - P_{s-1}), и наша рекуррентность переписывается в виде

        \[\mathrm{dp}[m, j] = T_j + \min_{s \leq j} \big[(-s) \cdot P_j + b_s\big], \qquad b_s = \mathrm{dp}[m-1, s-1] - T_{s-1} + s P_{s-1}.\]

    То есть для фиксированного m каждый кандидат s соответствует прямой y = (-s) \cdot x + b_s, а вычисление \mathrm{dp}[m, j] сводится к нахождению её нижней огибающей в точке x = P_j. Здесь работает классический “трюк с выпуклой оболочкой” (convex hull trick): коэффициенты –s монотонно убывают по s, а точки P_j монотонно растут по j , ведь p_t \geq 0. Это значит, что нижнюю огибающую можно строить инкрементально, а указатель ответа в ней движется только вперёд: каждый слой DP считается за амортизированное время O(N), и всё решение требует только O(NM).

    Вычисление расстановки достаточно делать оффлайн и пересчитывать только при существенном обновлении эмпирической гистограммы, так что в рамках собственно inference такой алгоритм не добавляет никакого оверхеда.

    Вот неравномерный пример (смесь двух гауссианов) и две стратегии размещения шести чекпойнтов, равномерная (оранжевые маркеры) и оптимальная (синие):

    Как видите, оптимальная расстановка кучкуется вокруг двух пиков распределения, оставляя долину между ними, где p(t) \approx 0, без покрытия, и ожидаемые затраты падают с 14.2 до 8.6 (на 39%) при том же бюджете чекпойнтов.

    Вот для полноты картины развёрнутый пример с тремя распределениями; тут видно, как DP ставит чекпойнты именно там, где сосредоточена масса:

    Этот рисунок показывает и логичную закономерность: чем менее равномерным будет распределение и чем меньше бюджет, тем сильнее выигрыш DP над равномерной расстановкой. Это интуитивно понятно: при большом бюджете и равномерная стратегия в какой-то момент покроет все важные регионы, а при сильно неравномерном распределении любой впустую потраченный чекпойнт особенно дорог. Эта закономерность будет хорошо видна и в основных экспериментах ниже.

    Случай 3: оцениваем распределение по истории

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

    Это даёт нам доказанная Михаилом лемма об устойчивости: значение функции \mathbb{E}_p[r(T; \mathcal{C})] липшицево по p в норме полной вариации, то есть

        \[\big|\mathbb{E}_p[r(T; \mathcal{C})] - \mathbb{E}_q[r(T; \mathcal{C})]\big| \leq N \cdot |p - q|_1.\]

    Доказательство короткое и изящное: разность ожиданий — это \sum_t (p_t - q_t) \cdot r(t; \mathcal{C}), и поскольку 0 \leq r(t; \mathcal{C}) \leq N, по неравенству треугольника получаем нужную оценку. Лемма выглядит почти тривиально, но именно она позволяет нам получить всё остальное: из неё следуют два важных утверждения.

    Подстановочная гарантия (plug-in guarantee). Пусть \hat{p}^{(n)} — эмпирическая гистограмма после n независимых наблюдений из истинного распределения p, и \widehat{\mathcal{C}}_n — оптимальная расстановка, посчитанная по \hat{p}^{(n)} нашим динамическим программированием. Тогда с вероятностью не меньше 1 - \delta выполняется

        \[|\hat{p}^{(n)} - p|_1 \leq \sqrt{N/n} + \sqrt{2\log(1/\delta)/n}.\]

    Доказательство тоже короткое: математическое ожидание полной вариации ограничивается через неравенства Коши и Йенсена (\mathbb{E}|\hat{p}^{(n)} - p|_1 \leq \sqrt{N/n}), а концентрация вокруг ожидания получается из неравенства Макдиармида, поскольку добавление одного наблюдения меняет полную вариацию не больше чем на 2/n.

    Подставляя эту оценку в лемму об устойчивости, получаем

        \[0 \leq \mathbb{E}_p[r(T; \widehat{\mathcal{C}}_n)] - V_M(p) \leq 2N \big(\sqrt{N/n} + \sqrt{2\log(1/\delta)/n}\big),\]

    где V_M(p) — оптимальная стоимость при истинном распределении. То есть отклонение от оптимума убывает как 1/\sqrt{n}.

    Следование за дрейфом распределения. В реальных системах распределение глубин совпадения меняется со временем: меняются сценарии использования, растёт типичная длина контекстов, кеш насыщается и т.п. Для борьбы с этим мы используем классический приём — экспоненциально взвешенную гистограмму с весами \propto \gamma^{t-s}:

        \[\hat{p}^{(\gamma)}_t = \frac{1-\gamma}{1-\gamma^t} \sum{s=1}^{t} \gamma^{t-s} \mathbf{e}_{T_s}.\]

    Здесь \mathbf{e}_{T_s} — индикатор того, что наблюдалось ровно совпадение глубины T_s. Для такой оценки получается естественное разложение типа bias-variance:

        \[\mathbb{E}\big[|\hat{p}^{(\gamma)}_t - p_t|_1\big] \leq {\frac{1-\gamma}{1-\gamma^t}\sum_{s=1}^{t} \gamma^{t-s} |p_s - p_t|_1} + {\sqrt{\frac{N(1-\gamma)(1+\gamma^t)}{(1+\gamma)(1-\gamma^t)}}}.\]

    При больших t разброс выходит на асимптоту \sqrt{N(1-\gamma)/(1+\gamma)}, а смещение при ограниченном дрейфе |p_u - p_{u-1}|_1 \leq \Delta не превосходит \Delta\gamma/(1-\gamma). Выбор \gamma балансирует эти два слагаемых: большие \gamma дают меньший разброс, но хуже отслеживают дрейф. В наших экспериментах мы используем \gamma = 0.99, и эмпирически результаты слабо чувствительны к точному значению \gamma в окрестности этого выбора.

    Получается, что теоретически всё вообще замечательно: оптимальное оффлайн-решение по точному распределению устойчиво и к ошибкам оценивания (через лемму об устойчивости + концентрацию эмпирической гистограммы), и к смещению распределения со временем (через bias-variance для экспоненциально взвешенной оценки).

    Экспериментальные результаты

    Чтобы это проверить, мы взяли три датасета с естественной структурой длинного общего префикса.

    1. QuALITY — длинные документы, по каждому из которых задаётся серия вопросов.
    2. NarrativeQA — то же самое, но с ещё более длинными документами (целые книги).
    3. System Prompts — реальные системные промпты от больших провайдеров LLM, к которым приклеены реальные пользовательские запросы из ShareGPT.

    Сравнивали несколько стратегий расстановки чекпойнтов: сбалансированное размещение, блочное (каждые B токенов), \sqrt{L}-размещение, логарифмическое (экспоненциально растущие промежутки) и наше DP-optimal по экспоненциально взвешенной эмпирической гистограмме.

    Все методы использовались с фиксированной last-K политикой кеширования записей, чтобы изолировать именно эффект расстановки чекпойнтов внутри отдельной записи (здесь есть ещё отдельная смежная задача про политики admission/eviction в стиле метода Marconi, мы её не трогаем, а просто фиксируем).

    Как выглядят реальные распределения

    Прежде чем смотреть на расстановки, полезно посмотреть, как реально выглядит распределение глубин совпадения на наших датасетах:

    Видно, что распределения совсем не равномерные и сильно отличаются друг от друга: у QuALITY резкий пик в районе полной длины документа (медиана 6683 токенов, и почти вся масса сосредоточена около этого пика), у NarrativeQA — широкое многомодальное распределение (медиана около 57k), а у System Prompts масса сидит ближе к началу префикса (медиана 3274). Это ровно тот случай, ради которого затевалась вся теория из случая 2: нет одной фиксированной формы, распределения неравномерные, и наивное равномерное размещение будет сильно проигрывать.

    Экономия токенов на длинных последовательностях

    NarrativeQA даёт самые длинные тексты — настолько, что наш прототип реализации на доступном железе с ними не справлялся. Зато для этого датасета можно симулировать пересчёт без реального запуска модели и измерить фактор сокращения (recurrent-work reduction factor), то есть во сколько раз пересчёт уменьшается по сравнению со стратегией без кеширования.

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

    Реальные измерения времени (wall-clock)

    На QuALITY и System Prompts последовательности короче, и можно измерить настоящее время прогона на железе. Wall-clock мы измеряли на репрезентативной группе слоёв (1 attention + 3 GatedDeltaNet) у Qwen-3.5-0.8B, что, конечно, не вполне полноценный production-бенчмарк, но уж что смогли:

    На Парето-фронтире DP-optimal либо доминирует над всеми базовыми стратегиями, либо совпадает с лучшим baseline (как правило, это блочное кеширование) но имеет заметно меньшее числом чекпойнтов. На System Prompts, где распределение особенно концентрированное у начала, DP даёт самые большие выигрыши при малых бюджетах — ровно как и предсказывает наш анализ. На QuALITY разрыв меньше, потому что распределение почти точечное около полной длины документа: там и расставлять-то особо нечего, все стратегии быстро упираются в один и тот же пик.

    Дополнительно мы проверили, что время инференса действительно почти линейно зависит от числа реально пересчитываемых токенов, с небольшой константой на перенос состояния с CPU на GPU.

    Это означает, что фактор сокращения, который мы измеряли на NarrativeQA, действительно превращается в реальную экономию времени.

    Как выглядят расстановки на реальных данных

    Наконец, любопытно просто посмотреть, как именно DP расставляет чекпойнты на реальных диалогах.

    На QuALITY DP-optimal располагает чекпойнты неравномерно, концентрируя их ближе к местам, где у конкретных запросов происходило совпадение в предыдущих раундах:

    На System Prompts расстановка ещё более показательная: чекпойнты группируются у короткого начала, где сидит вся масса, а длинный хвост остаётся без покрытия — потому что туда почти никто не доходит.

    Выводы и что дальше

    Главное ограничение такого подхода — он имеет смысл, когда запросы делят длинный, но не полностью совпадающий префикс внутри одной закешированной записи. То есть это сценарии вроде “много вопросов по одному документу”, “общий длинный системный промпт + разные пользовательские запросы”, ну или RAG.

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

    Что ещё важно, в отличие от методов сжатия KV-кеша, при всём этом мы не меняем сами вычисления модели — выход абсолютно идентичен честному префиллу. Соответственно, наш метод хорошо комбинируется со всеми существующими подходами к сжатию KV-кеша для attention-слоёв.

    Каковы следующие шаги? Их много! И все надо будет попробовать.

    • Полноценная интеграция в production-рантайм. Сейчас наши эксперименты — это прототип; для серьёзных бенчмарков нужно реализовать эффективный API для извлечения и восстановления состояния в Flash Linear Attention или похожих библиотеках. Низкоуровневые ядра (kernels) уже возвращают рекуррентные состояния на нужных позициях, дело за обёрткой.
    • Совмещение с политиками admission/eviction в стиле Marconi: они решают, какие закешированные префиксы держать в кеше, а мы — где внутри них ставить чекпойнты. Эти две задачи, по идее, должны естественно дополнять друг друга, но мы пока не понимаем как именно.
    • Обобщение теории на префиксные деревья с ветвлением, а не на одиночный префикс. Для типичных топологий (звезда: один документ, много вопросов; гребёнка: длинный prompt, разные хвосты) задача распадается на независимые однопрефиксные подзадачи, но в общем случае это уже более сложная комбинаторика.

    В общем, интересная наука, и я категорически желаю Михаилу дальнейших успехов! Впрочем, надеюсь, и эту конкретную статью мы ещё немножко доработаем и подадим в приличное место.

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • Три небольшие головоломки: SCHiM, Botany Manor, Spilled!

    Три небольшие головоломки: SCHiM, Botany Manor, Spilled!

    SCHiM

    Ты играешь за… бог знает кого, видимо, за духа под названием schim — я так понял, что это нарицательное имя, а не собственное (schim по-голландски значит “тень”). В игре schim — это душа живого существа или предмета, привязанная к нему через тень; ну а главный герой — это, соответственно, schim одного конкретного человека. Schim может жить только в тени и прыгать между тенями, а когда попадает в тень другого существа или предмета, может с ними иногда взаимодействовать.

    В начале игры наш schim теряет “своего” человека и отправляется его догонять. А с человеком много всего случается: он теряет работу, переезжает и так далее. Задание в каждой сценке — пройти в нужную точку. Больших сложностей это обычно не представляет, но заблудиться и не понять, куда идти, можно: некоторые локации довольно большие, а путь может быть извилист. Разнообразие некоторое есть, но можно было бы, конечно, и поинтереснее придумать головоломки с теми инструментами, которые здесь уже имеются.

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

    Я вообще в подавляющем большинстве случаев не понимаю, зачем разработчики отказываются от простых человеческих слов. В редких случаях это интересный design choice, но и там обычно лучше ограничить его: например, в Stray было супер-логично, что кот не понимает язык роботов, но представьте себе, что у вас в Stray совсем не было бы понятного языка — была бы другая игра, и гораздо хуже.

    Ну да ладно, это я отвлёкся. В целом SCHiM — простая прямолинейная игра, прыгать приятно, прошёл и забыл. Не уверен, что прямо рекомендую, но для условного самолёта пойдёт.

    Botany Manor

    Уютный расслабленный квест от первого лица, в котором ты играешь за престарелую ботаника Арабеллу Грин, вернувшуюся в фамильное поместье где-то на западе Англии в 1890 году. Арабелла собирает материал для своей последней книги — “Forgotten Flora”, собрание давно забытых магических растений, которые она когда-то нашла в путешествиях, а теперь хочет вырастить заново и описать. Семена у неё есть, а вот что с ними делать — большой вопрос, и на эти вопросы может помочь ответить особняк.

    Делала Botany Manor британская студия Balloon Studios из Девона; точнее, по сути одна Laure De Mey, которая раньше работала в над Assemble with Care и Alba: A Wildlife Adventure (во вторую я, кстати, играл). Издатель — Whitethorn Games, специализирующийся именно на cozy-играх, и от них же, например, Spilled!, о которой речь пойдёт ниже.

    Любопытная деталь: главным визуальным источником вдохновения был Down House — реальный особняк в Кенте, в котором Чарльз Дарвин прожил последние 40 лет жизни и написал “Происхождение видов”. А вторым — особняк Лары Крофт из Tomb Raider. И действительно, особняк сделан отлично, это обжитой викторианский дом с очевидным научным флёром, по которому хочется именно ходить и трогать вещи.

    1890 год, когда происходит действие, — это пик викторианской эпохи научных открытий, время “великих джентльменов-натуралистов” — а значит, совсем не время для “великих леди”. История Арабеллы рассказывается фоном через письма, заметки, газеты и портреты, и в основном концентрируется на тогдашнем сексизме. Голосов здесь нет, тексты в записках короткие и хорошо собираются в биографию героини, но главное не в этом.

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

    Я не буду спойлерить, но загадки действительно приятные и действительно разнообразные. Все как бы про выращивание растений, но на самом деле не очень, “условия произрастания” бывают вовсе не садоводческие.

    Игра очень короткая, часа на три-четыре, но это и хорошо: загадок хватило на насыщенный геймплей, а попытка растянуть на подольше размыла бы то, что есть. Так что Botany Manor я в целом очень даже рекомендую.

    Spilled!

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

    Самое интересное в Spilled! — это, пожалуй, история её создания. Сделала игру голландская соло-разработчица Ленте Куэнен, которой на старте проекта было 23 года. Она бросила учёбу, купила старенькую лодочку, поселилась на ней (вместе с мамой они её отремонтировали), и буквально на этой лодке, плавающей по голландским каналам, разработала игру про маленький кораблик, который чистит воду от нефти.

    На Kickstarter она за пару дней собрала более 30 тысяч евро вместо запрошенных 10K, а теперь из каждой проданной копии 10 центов идут в фонд защиты китов и дельфинов.

    Надо понимать, что игра абсолютно ни на что не претендует, типичный cozy time killer на часик. Да и головоломкой я её назвал для красного словца, думать тут ни о чём не надо. Но симпатично сделано, и история за Spilled!, как мне кажется, тоже симпатичная.

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • Arco

    Arco

    Введение

    Arco вышла ещё в августе 2024 года, и с ней произошла странная и неприятная история. У игры сразу же были очень крутые отзывы от критиков: многие ставили 9/10, были восторженные обзоры и в IGN, и в PC Gamer, и на GamesRadar, и в топе OpenCritic игра была долго.

    А вот продаж было очень мало. Одна из статей об этом называется буквально “Arco and the Nightmare of Indie Game Publishing“: автор подробно описывает, как разработчики в дни после релиза в панике выкладывали в Twitter ролики, пытаясь хоть как-то достучаться до аудитории, но игра всё равно потонула в общем шуме.

    Хотя издатель был, и на первый взгляд хороший издатель — компания Panic выпускала Untitled Goose Game, Firewatch или, например, недавно обсуждавшуюся здесь Despelote. Но в данном случае с маркетингом что-то пошло не так, и игра, у которой были все основания стать инди-хитом, осталась нишевым проектом для тех, кому повезло о ней услышать.

    Лично мне вот повезло только сейчас, но пусть повезёт и вам! Arco — это очень хорошая игра.

    Кто это сделал

    Авторы Arco — это даже не студия, а просто четыре человека с четырёх разных континентов, которые встретились в интернете и решили сделать игру вместе: польский художник Франек Новотняк, австралийский программист и геймдизайнер Макс Кэхилл, испанский композитор и звуковик Хосе Рамон Гарсия и мексиканский разработчик Антонио Урибе. Пять лет работали, каждый в своём часовом поясе, и всё у них отлично получилось.

    Сеттинг игры — фэнтезийная альтернативная Северная Америка эпохи фронтира, с очевидными отсылками к Мезоамерике и культурам коренных народов. Главные антагонисты — Red Company, корпорация “newcomers”, которые приехали из-за моря, чтобы захватывать землю, добывать ресурсы и изводить местное население. Месседж весьма прозрачный, но игра не сводится к лекции о колониализме, это скорее вестерн наоборот, со стороны захватываемых.

    Завязка

    Очень крутой первый уровень, давайте его заспойлерю, раз уж он первый.

    Ты играешь за маленького мальчика по имени Теко, которого папа учит драться и стрелять из лука. Приносишь какие-то яйца ящериц, разговариваешь со своей семьёй, помогаешь по хозяйству, ходишь по красивым лесам. Всё это выглядит абсолютно как первый уровень долгого hero’s journey, которое тебе предстоит пройти: классическое детство-обучение перед большим путешествием.

    А потом ты идёшь приносить жертву священному дереву, натыкаешься на белых пришельцев — newcomers с пистолетами, — и тебя убивают.

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

    Дальше сюжет становится более стандартным, но всё равно интересно: в разных главах представляют разных главных героев. Один из них — на самом деле выживший Теко (да, это уже стандартный ход, но эффекта первой главы он не отменяет) по имени Тизо. Он идёт мстить:

    Другой, точнее, другая нашла проклятый артефакт:

    Третьи в какой-то пустыне ищут сокровища, и по дороге тоже переходят дорогу The Red Company:

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

    Боевая система

    Боевая система здесь очень интересная и довольно неожиданная.

    Формально это пошаговая тактика, но не поочерёдная, а одновременная; разработчики называют её “simultaneous turn-based”. Время на поле боя стоит на паузе, пока ты выбираешь действие, и ты даже видишь, что собираются делать враги, а когда ты подтверждаешь ход, всё происходит одновременно. Действия работают на ресурсе под названием магия (magia): на любое действие он тратится, а восстанавливается за счёт движения или паузы.

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

    И есть ещё одна крутая идея — система вины (guilt). Игра отслеживает твои моральные выборы: убил кого-то ради выгоды, обманул, напал первым… всё это растит твой невидимый счётчик вины.

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

    Хочу отдельно отметить, что Arco держит хорошую планку сложности: в боях легко погибнуть, но вертикальных стен на кривой сложности тоже не возникает. В игре есть возможности упростить бои, но я не рекомендую ими пользоваться без крайней необходимости — в (почти) пошаговых боях здесь как раз большая часть игры и её прелесть.

    Визуал и музыка

    Отличный пиксель-арт: маленькие персонажи, большие фоны, тщательно прорисованные пейзажи. Хотя стилистически всё это узнаваемая мексиканская палитра, получилось разнообразно: пустыни, леса, горы, древние храмы, каньоны, заброшенные шахты.

    И музыка! Вроде бы всю дорогу ничего особенного, приятный фон… а потом вдруг тебе поют песню. На испанском, и очень даже красивую; слова пишут в субтитрах с переводом, и слова тоже выглядят хорошо.

    В каждой главе по песне, и это неожиданное и крутое дополнение к игровому процессу. Композитор Хосе Рамон Гарсия в одном из интервью сказал, что вложил в этот саундтрек “много себя”, и это здесь хорошо слышно.

    Что не очень

    Главных претензий у меня к Arco две.

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

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

    Заключение

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

    Очень рекомендую, и не только потому, что игра реально хорошая, но и чтобы поддержать эту крутую историю.

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • Музей опиумных войн

    Музей опиумных войн

    Введение и холл

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

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

    И когда в холле нас встретил вот такой монумент, “Шрам истории”, моя гипотеза отлично подтверждалась:

    Очень крутая штука, метров десять высотой, производит сильное впечатление.

    Но дальше реальность музея оказалась иной, и оказалась гораздо интереснее! Попробую рассказать по порядку, в основном комментируя иллюстрации.

    Зал отставания в науке и технике

    Первый же зал начал удивлять. Он посвящён тому, как так получилось, что Китай проиграл опиумные войны в одну калитку. Иначе говоря, он посвящён тому, как китайские наука и техника безнадёжно отставали, пока в Европе шли Ренессанс и Просвещение.

    И здесь чертовски интересно было смотреть на китайскую точку зрения на знакомые вещи. Вот, например, сразу на входе большой таймлайн, сравнивающий Китай и Европу. Красивая штука, но оцените тонкий акцент в китайской истории; я для вас обвёл маркером:

    Дальше началась европейская история. Думаю, мои читатели уже не помнят времён, когда такие тексты писали на русском языке. Да и я не помню. Но что-то родное сразу откликается:

    Если вы думаете, что только Ренессанс создала прогрессивная по тем временам буржуазия, то нет:

    Вообще зал превозносит успехи Европы в науке. Например, Россия появляется в контексте нашей Академии наук:

    А после следующей картинки я понял, что точно напишу подробный пост. Видите, что здесь изображено?

    Правильно, здесь знаменитый голландский хирург Николас Тульп учит студентов анатомии. И никаких других имён здесь вообще не упоминается.

    А с китайской стороны в основном рассказывается о том, как Китай закрывался, изолировался, уходил в схоластику и не занимался наукой:

    То есть в зале этом прослеживается чёткая дидактическая мысль, с которой трудно не согласиться.

    А на выходе из первого зала висит табличка с очень крутыми цитатами, которые действительно объясняют, почему у Китая не было шансов в предстоящих войнах:

    Зал опиума и причин войны

    Но вот предисловие заканчивается, и мы переходим во второй зал. Здесь, говоря очень подходящим языком советской историографии, речь идёт о предпосылках опиумных войн. И тут тоже очень интересный угол зрения.

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

    Во-вторых, самое интересное часто скрывается в том, чего нет. По идее, опиумные войны так отвратительны не тем, что это были войны: в XIX веке это ещё был распространённый способ, гм, завоевания новых рынков.

    Особенно плохи они тем, что импортировать из Индии британцы собирались не хлопок, а опиум, от которого китайский народ в итоге пострадал куда больше, чем от самих войн.

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

    Но при этом вообще нигде в музее ни единым словом не упоминается, что опиум — это что-то плохое. Просто товар, business as usual, как тот же хлопок. Счета всякие приложены даже.

    Почему так? Я был абсолютно уверен, что нас ждёт отдельный зал с описанием всех многочисленных ужасов пресловутых курительных. Это ведь отлично подкрепляет нарратив о том, какие плохие были британцы; а они и правда в этих войнах себя проявили явно с худшей стороны. Если у кого-то есть понимание, почему об этом умалчивают, поделитесь!

    Ну и вот вам парочка плохих британцев:

    Понятно, что там и все колониальные администраторы подробно обсуждаются, но про более известных людей это забавнее смотрится: лорд Палмерстон “was famous for playing politics and diplomacy”, ну а Виктория — это, понятное дело, the face that launched two Opium wars.

    Остальные залы

    Дальше там про войну, это уже не так интересно. Диорамы красивые вот разве что:

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

    Кстати, угадайте, на ком заканчивается зал о первой опиумной войне и её последствиях? Правильно, на ком же ещё:

    Заключение

    Ну и напоследок зал с заключением, с выводами. Просто прочитайте, как по мне, это очень круто сделано. И, как ни странно, очень позитивно!

    И действительно, я уже от двух разных китайцев независимо слышал, что опиумные войны — это, конечно, поражение, но очень полезное поражение, которое открыло Китай миру и вообще принесло всяческое процветание. Совсем не ожидал такой точки зрения…

    Но что ж, мир очень разный!

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • Deep Sleep: Labyrinth of the Forsaken

    Deep Sleep: Labyrinth of the Forsaken

    Введение

    Я не люблю хорроры. Мне страшно (кажется, когда-то я такое уже писал). Но игры в ретро-стиле, концептуально наследующие первым Resident Evil, — это не настоящие хорроры, а скорее смесь квеста и экшена, и если компоненты такой смеси хорошо настроены, то играть в это становится очень интересно.

    Например, когда-то давно я писал обзор Crow Country, тоже игры из этого большого семейства, и мне очень понравилось! И вот перед нами ещё одна такая игра; правда, это “клон резидента” в кавычках, потому что здесь есть серьёзные отличия.

    Кто это сделал

    Deep Sleep: Labyrinth of the Forsaken — это, как оказалось, уже четвёртая игра в серии Deep Sleep польского инди-разработчика Матеуша Сокальщука, работающего под ником scriptwelder. Первые три части — Deep Sleep (2012), Deeper Sleep (2013) и The Deepest Sleep (2014) — были бесплатными флеш-квестами, можете найти их на newgrounds, но я не пробовал.

    После The Deepest Sleep Сокальщук оставил этот сеттинг надолго, но в августе 2025-го выпустил большую полноценную часть уже в Steam, и вовсе не в жанре point-and-click. Из источников вдохновения сам Сокальщук называет серию Submachine (ещё одна культовая флеш-квестовая серия), Resident Evil, Silent Hill, Amnesia, Penumbra, книги Стивена Кинга и, разумеется, картины Здзислава Бексиньского; если не знаете, кто это, рекомендую посмотреть.

    Завязка

    Главная героиня — Эми, ветеринар из маленького городка и сестра Томаса, безымянного “Путешественника” из первых трёх игр. Как видите, связь с оригинальной трилогией здесь есть, хотя играть в те flash-квесты совершенно не обязательно.

    Томас был одержим осознанными сновидениями и идеей других миров, а потом умер, оставив после себя журналы и странную машину от загадочной организации Sidereal Plexus. Эми переселяется в его квартиру, подключает машину и каждую ночь уходит в мир снов искать следы брата. Который, возможно, на самом деле не совсем умер. Или не совсем он.

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

    Кстати, сразу отмечу тюрьму: игра сама подробно рассказывает, что это не просто тюрьма, а Carceri d’invenzione Джованни Пиранези. В отсылках я его не упомянул, потому что это не отсылка, а прямая цитата. Об этих работах я раньше ничего не слышал, да и о самом Пиранези только имя, а зря; ну вот теперь и вам рассказал.

    Геймплей: что понравилось

    Геймплейно это классическая adventure в пиксель-арте с видом сверху: ходишь, взаимодействуешь с предметами, собираешь инвентарь, разгадываешь загадки. Но поверх этой формулы надстроены две интересные механики.

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

    Во-вторых — и это, пожалуй, самое главное отличие от Resident Evil и родственных игр — боёвка здесь пошаговая, скорее в духе JRPG. У Эми есть дерево навыков, в которое можно вкладывать опыт, у предметов есть прочность, у оружия есть свои механики вроде cleave (как это по-русски?) или яда. Это мне тоже понравилось: боевая система держит в напряжении, но не пугает, всегда есть время подумать, оценить ситуацию, перебрать варианты.

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

    В-третьих, головоломки тоже сделаны очень хорошо: не слишком сложно, не слишком просто, в точности как надо. Есть классические квестовые “собери комбинацию предметов”, есть лабиринты, есть просто на подумать.

    Самая огненная здесь, конечно, головоломка с мужиком в библиотеке. Такие задачки (не буду спойлерить какие) в целом не представляют собой ничего нового, но здесь это было неожиданно и потому очень круто.

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

    Сюжет и нарратив

    На мой взгляд, самое слабое место всей игры — сюжет и то, как он подан. Причём я даже не могу толком объяснить, что именно мне не понравилось. Конечно, там куча всякого нелогичного и завирального происходит, но в целом я не против мистики в играх: вот буквально давеча в The Séance of Blake Manor тоже было много мистики, и ничего.

    Наверное, дело в откровенно избыточной эклектике: тут вам и древний Египет, и дома с привидениями, и криповые манекены, и уже упомянутые воображаемые тюрьмы…

    “Логика сна” в Deep Sleep, конечно, объясняет что угодно, но кажется мне, что она объясняет слишком много. Когда любое событие можно списать на то, что ты во сне и во сне бывает всякое, это не очень хорошо.

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

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

    Но всё-таки сюжета мне хватило, чтобы не бросить игру и дойти до конца. Кстати, в конце тоже очень слабый, по моему мнению, момент: тебе дают выбор, который игрой подаётся как очень важный, как кульминация всего сюжета (спойлерить не буду). Но в итоге игра не просто не рассказывает, из каких соображений тебе делать этот выбор, но даже не показывает, к чему это привело, когда уже выбрал. Сама концовка в целом адекватная, но вот этот выбор совсем не понравился.

    Заключение

    Диалоги и некоторая нелогичность происходящего (хоть и объяснённая внутри игры) — пожалуй, слабое место Deep Sleep. Но зато геймплей очень приятный, и очень хорошо настроенный по балансу как головоломок, так и пошаговой боёвки. Визуальный стиль тоже хорошо работает на атмосферу, и хотя эклектику я отметил как недостаток, надо сказать, что разнообразие в локациях — это всё-таки скорее хорошо, и разнообразия здесь много!

    Так что в целом рекомендую. Игра, кстати, не такая уж короткая: я, конечно, играл в основном в дороге и никуда не торопился, но часов восемь наиграл. Попробуйте!

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!

  • The Séance of Blake Manor

    The Séance of Blake Manor

    Введение

    2025 год для детективно-загадочных игр в особняках выдался неожиданно богатым: Blue Prince со своим roguelike-домом, который каждый день перестраивается заново (я писал о ней подробный обзор), Rise of the Golden Idol в той же нише, что и первая часть (ещё не играл, но, надеюсь, ещё напишу), и вот ещё The Séance of Blake Manor.

    Но на самом деле различий здесь больше, чем сходств.
    Blue Prince — это процедурная roguelite-головоломка про меняющийся дом, где нет людей. А The Séance of Black Manor — это классический детектив в духе Агаты Кристи, только со спиритизмом и с самобытной механикой управления временем. Сразу скажу, что мне очень понравилось, хотя, наверное, до полного восторга Blue Prince это всё-таки не дотягивает.

    Кто это сделал

    Разработчик — небольшая ирландская студия Spooky Doorway из Дублина. Они широко известны в узких кругах благодаря серии The Darkside Detective — это такой пиксельный point-and-click про двух полицейских, расследующих паранормальные преступления в городе Twin Lakes (никаких отсылок). Это маленькие игры, до которых, надеюсь, я тоже когда-нибудь доберусь.

    The Séance of Blake Manor — первый большой проект Spooky Doorway и огромный шаг вперёд по всем направлениям. От комедийных квестов в пиксель-арте они перешли к 20-часовому серьёзному готическому детективу с cel-shaded 3D-графикой и гораздо более серьёным бюджетом. Издаёт игру Raw Fury — шведский издатель, известный по Sable, Norco, Kingdom Two Crowns, а в последнее время ещё и Routine. Вышла игра, кстати, буквально к Хэллоуину, 27 октября 2025 года.

    Завязка и сеттинг

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

    Но давайте по порядку. Действие происходит в октябре 1897 года, в Коннемаре — это западное побережье Ирландии, один из самых “кельтских” регионов страны, где до сих пор говорят по-ирландски. Вы играете за Деклана Уорда, частного детектива из Дублина. У Деклана за плечами своя трагедия: он был пожарным, но его старший брат Эймон погиб, когда братья тушили пожар в трущобах, принадлежавших некоему Руперту Дину. После этого Деклан бросил пожарную службу и стал сыщиком.

    И вот Уорд получает анонимное письмо с просьбой прибыть в особняк Блейков — бывшее поместье, превращённое в отель, — и расследовать исчезновение некоей Эвелин Дин. Да-да, фамилия совпадает.

    На всё про всё — двое с небольшим суток, потому что на Хэллоуин в особняке запланирован так называемый Grand Séance, большой спиритический сеанс, для участия в котором съехались мистики со всего мира. И если вовремя не найти Эвелин, может пропасть кто-нибудь ещё.

    Сразу хочется отметить очень крутой сеттинг. 1897 год — это полвека после Великого голода в Ирландии, катастрофы, унёсшей жизни миллионов людей и заставившей ещё миллионы эмигрировать, причём именно западная Ирландия пострадала сильнее всего. Люди, пережившие Голод, ещё живы.

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

    А дальше начинается всякая чертовщина.

    Мистика

    Мистика в игре действительно есть, она не сводится к ночным кошмарам и совпадениям, тут буквально с духами приходится общаться:

    В большинстве случаев мне бы это не понравилось: слишком удобное объяснение для чего угодно, тем более в детективной истории. Но здесь мистика вплетена двумя способами, и оба работают.

    Первый слой — это спиритизм второй половины XIX века, вполне реальное культурное явление. Это время расцвета Теософского общества Блаватской, спиритических сеансов, вращающихся столиков и активного общения с духами. Например, Артур Конан Дойл — тот самый, автор Шерлока Холмса, — был убеждённым спиритуалистом и совершенно серьёзно верил в фей из Коттингли, фотографии девочек с вырезанными из бумаги нарисованными феями. Так что собирающаяся в особняке группа мистиков, медиумов и оккультистов — это вполне себе отпечаток эпохи.

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

    В самой первой сцене, когда Уорд подходит к особняку, у фонтана стоит женщина, которая стирает окровавленную шаль, а потом превращается в стаю ворон. Это так называемая bean-nighe, “Бенни-прачка”, из ирландского фольклора, вестница смерти. Ирландец поймёт эти отсылки сразу, остальным (и мне в том числе) игра аккуратно их объясняет через книги, которые можно читать в библиотеке особняка.

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

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

    Механики и геймплей

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

    Более классических квестовых загадок здесь тоже полно, и они сделаны очень хорошо: не слишком сложно, не слишком просто, в точности как надо.

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

    Это очень крутая идея, потому что она заставляет пересмотреть свой стандартный паттерн поведения в квестах. В таких играх ты всегда начинаешь любую новую сцену с “посмотреть на всё”, если не “применить всё ко всему” (с этим, впрочем, квесты бороться научились давно, хотя бы комбинаторным взрывом). А здесь задумываешься, стоит ли шарить по карманам этого пальто просто так, если оно выглядит в точности как пять других пальто в других комнатах. Скорее всего, кстати, и правда не стоит. Скорее всего.

    Тем более что история начинает развиваться очень быстро, событий много, ставки всё время повышаются, за развитием сюжета следить интересно, и есть, кстати, в том числе и сюжет, а не только распутывание уже произошедшего, как в классическом детективе.

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

    Что хуже

    Визуальный стиль мне не очень зашёл. Интерьеры выглядят не стилизованными, как в том же Blue Prince, а просто недорисованными и бедными — особенно стены, которые кажутся несколько “пластмассовыми”. Шрифты как будто взяли из шаблона Microsoft Word — это мелочь, но режет глаз. Для игры, которая явно старается следить за эстетикой всерьёз, это странное упущение.

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

    Юмор тоже есть! И даже без отсылки на вышеупомянутый Darkside Detective не обошлось:

    Заключение

    The Séance of Blake Manor показывает, что классический детектив с уликами, допросами, картой особняка и расписанием подозреваемых всё ещё жив! И даже мистический детектив может хорошо работать, если к нему добавить историческую подоплёку, настоящую мифологию и изобретательные механики.

    Если вы любите классические детективные головоломки, готическую атмосферу, запутанные разборки с множеством персонажей, у каждого из которых своя история, — очень рекомендую.

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!