3,583 papers
arXiv:2605.00817 74 1 мая 2026 г. FREE

Процедурный сбой LLM: модели теряют нить длинных инструкций — и как с этим работать

КЛЮЧЕВАЯ СУТЬ
61% → 20% точности: именно столько теряет LLM при переходе от 5-шаговых процедур к 20-шаговым. Причина не в арифметике — сложить два числа модель умеет. Метод явного трекинга промежуточных шагов позволяет надёжно выполнять длинные пошаговые расчёты — финансовые, технические, любые. Фишка: результат каждого шага нужно записать в текст — тогда модель его видит перед собой и не «додумывает» правдоподобное, но неверное число. Точность восстанавливается, потому что вместо дырявой памяти работает контекст.
Адаптировать под запрос

TL;DR

LLM не исполняют длинные пошаговые инструкции — они имитируют исполнение. Если вы даёте модели процедуру из 20+ шагов с промежуточными переменными, она не "мысленно выполняет" каждый шаг по очереди. Она генерирует правдоподобный текст, который часто пропускает шаги, останавливается раньше времени или продолжает после финала.

Точность падает с 61% до 20% — и это при задачах с элементарной арифметикой. Проблема не в сложности операций: сложить два числа модель умеет. Проблема в том, что чем больше шагов нужно удержать в "голове" одновременно, тем чаще модель сбивается. Особенно плохо, когда шаг N ссылается на результат шага N-5: такие "прыжки назад" по промежуточным результатам дополнительно снижают точность ещё на ~18%.

Практический вывод: короткая цепочка (5–10 шагов) работает надёжно. Длинная (20+) — непредсказуемо. Решение: разбивать длинные процедуры на цепочки с явным выводом промежуточных значений и передачей результатов между блоками.


🔬

Схема метода

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

ШАГ 1: Оцени длину процедуры
   └─ До 10 шагов → выполняй в одном промпте
   └─ 10+ шагов → переходи к чанкингу

ШАГ 2: Разбей на блоки по 5–7 шагов
   └─ Каждый блок = отдельный запрос
   └─ Каждый шаг должен ссылаться только на предыдущий (не на N-3, N-5)

ШАГ 3: Потребуй явный вывод промежуточных значений
   └─ "На каждом шаге выводи: [номер шага] → [результат]"
   └─ Это делает сбой видимым

ШАГ 4: Верификация между блоками
   └─ Проверь результат блока, передай как входные данные следующему

ШАГ 5: Передача состояния
   └─ Начало следующего блока: "Входные данные для шагов 8–14:
       S7 = [результат предыдущего блока]"

Шаги 1–3 — в одном промпте. Шаги 4–5 — между отдельными запросами.


🚀

Пример применения

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

Опасный способ (одним куском):

"Рассчитай прибыль: закупка 450р → логистика 15% → комиссия WB 17% → налог 6% → хранение 8р/день × 30 дней → рекламный бюджет 10% от выручки → итог"

Слишком много "прыжков" между переменными. Модель может перепутать базы для процентов или пропустить шаг.

Правильный способ (явный трекинг):

Выполни расчёт пошагово. На каждом шаге выводи: [Шаг N] → [результат]

Цена продажи: 1 200 рублей

Шаг 1: Вычти закупочную цену (450р) из цены продажи → выручка
Шаг 2: Вычти логистику WB: 15% от цены продажи → остаток
Шаг 3: Вычти комиссию WB: 17% от цены продажи → остаток
Шаг 4: Вычти налог УСН: 6% от цены продажи → остаток
Шаг 5: Вычти хранение: 8р × 30 дней = 240р → остаток
Шаг 6: Вычти рекламу: 10% от цены продажи → остаток
Шаг 7: Итог = чистая прибыль

После каждого шага отобрази: текущий остаток в рублях.

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


🧠

Почему это работает

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

Явный вывод промежуточных значений решает проблему конкретно: модель не держит S3 = 780 "в уме" — она записывает его в текст. Следующий шаг видит это число прямо перед собой в контексте и берёт его, а не вычисляет заново из воздуха.

Чанкинг работает по той же логике: короткий блок = всё нужное рядом. Передача результата следующему блоку = явное обновление контекста. Модель работает надёжно не потому что стала умнее — а потому что у неё больше нет шанса "потерять нить".

Рычаги управления: - Длина блока → уменьши до 3–4 шагов для задач с умножением/делением (эти операции дают нестабильные промежуточные значения) - Формат вывода[Шаг N] → [результат] делает каждый шаг явным и проверяемым - Ссылки на переменные → перепиши "шаг 5 зависит от шага 2" как "используй результат предыдущего шага" — убери прыжки назад - Верификация в конце блока → добавь "Проверь: [итог блока] должен быть меньше стартового значения" — это ловит ошибки внутри блока


📋

Шаблон промпта

Выполни процедуру пошагово. На каждом шаге выводи: [Шаг N] → [результат].

Входные данные: {входные_данные}

{шаг_1}
{шаг_2}
...
{шаг_N} (не более 7 шагов в одном блоке)

После каждого шага: укажи текущий результат явно.
Финальный ответ: {что_вернуть}

Что подставлять: - {входные_данные} — ваши стартовые значения или условия - {шаг_1...N} — последовательные действия, каждое зависит только от предыдущего - {что_вернуть} — итоговый результат (число, вывод, решение)

Для длинных процедур (10+ шагов): разбейте на несколько запросов. Завершите первый блок, скопируйте явный результат (S7 = 840р), начните следующий блок с этих данных.


🚀 Быстрый старт — вставь в чат:

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

[вставить шаблон выше]

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


⚠️

Ограничения

⚠️ Это диагностическое исследование, не готовая техника: Статья показывает ЧТО идёт не так, но не тестирует конкретные способы исправления. Техника чанкинга выведена из результатов, а не проверена в этом же исследовании.

⚠️ Умножение и деление работают хуже: Задачи только с этими операциями деградируют сильнее, чем сложение и вычитание. Разрыв между верными и неверными ответами там больше. Для таких расчётов уменьшайте блок до 3–4 шагов.

⚠️ Крупные модели тоже сбоят: Деградация точности наблюдается почти во всех моделях — от 1.5B до 685B параметров. Большая модель делает это медленнее, но всё равно делает.

⚠️ Прыжки назад — отдельная проблема: Если ваша процедура требует "на шаге 15 возьми результат шага 8" — это самостоятельный источник ошибок, не связанный с длиной. Реструктурируйте процедуру так, чтобы каждый шаг ссылался только на предыдущий.


🔍

Как исследовали

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

Логика дизайна была остроумной: если модель сбоит не на арифметике (что проверить легко — ответ детерминирован), значит, сбоит на самом исполнении процедуры. Они намеренно разделили "умеешь ли ты считать" и "умеешь ли ты следовать длинному набору шагов". Оказалось — это разные вещи.

Второй уровень сложности: "look-back" зависимости — когда шаг N обращается не к результату шага N-1, а к шагу N-5 или N-7. Это резкое нарастание требований к "рабочей памяти" модели. При переходе от look-back1 к look-back7 точность падает дополнительно на ~18 процентных пунктов.

Самое интересное — анализ режимов сбоя. Исследователи смотрели не только на финальный ответ, а на весь текст генерации: где появился ответ, сколько шагов выполнено, было ли исправление по ходу. Выяснилось: доля точного выполнения шагов падает с 71% до 47%, а доля "недовыполнения" (модель остановилась раньше финала) растёт с 24% до 51%. То есть модели не столько ошибаются в арифметике, сколько тихо сдаются на полпути — и при этом всё равно выдают какой-то ответ.

Было 55,000 примеров, 55 датасетов, сравнение со строго детерминированным эталоном — никакой субъективности в оценке.


💡

Адаптации и экстраполяции

1. Явный "трекер состояния" в промпте

🔧 Техника: добавить таблицу переменных → модель ведёт явный реестр

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

После каждого шага обновляй таблицу:

| Шаг | Действие | Результат |
|-----|----------|-----------|
| 1   |          |           |
| 2   |          |           |
...

Заполняй каждую строку перед переходом к следующему.

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


2. Разбивка длинного workflow с передачей "эстафеты"

🔧 Техника: явная передача состояния между чатами → длинные процедуры без потерь

Когда процедура реально длинная (бизнес-анализ, сложный расчёт):

[КОНЕЦ БЛОКА 1]
Итоговые значения для передачи в блок 2:
- S_выручка = {результат}
- S_себестоимость = {результат}
- S_маржа = {результат}

---

[НАЧАЛО БЛОКА 2]
Входные данные (получены из блока 1):
- Выручка = {значение}
- Себестоимость = {значение}
- Маржа = {значение}

Продолжай с шага 8...

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


3. Использование findings из исследования для аудита своих промптов

Исследование даёт конкретный чеклист для оценки любого длинного промпта:

  • Сколько шагов? → больше 10 — риск зоны
  • Есть ли прыжки назад? → "как в шаге 3" — красный флаг
  • Операции однородны? → только умножение или только деление → уменьши блок
  • Есть ли явный вывод промежуточных значений? → если нет — добавь

🔗

Ресурсы

When LLMs Stop Following Steps: A Diagnostic Study of Procedural Execution in Language Models

Авторы: Sailesh Panda, Pritam Kadasi, Abhishek Upperwal, Mayank Singh

Аффилиации: Indian Institute of Technology Gandhinagar (IIT Gandhinagar), Soket AI

Контакт: sailesh.panda@iitgn.ac.in

Связанные работы упомянутые в статье: "Illusion of Thinking" (Shojaee et al., 2025) — аналогичная диагностика на задачах типа Башни Ханоя


📋 Дайджест исследования

Ключевая суть

61% → 20% точности: именно столько теряет LLM при переходе от 5-шаговых процедур к 20-шаговым. Причина не в арифметике — сложить два числа модель умеет. Метод явного трекинга промежуточных шагов позволяет надёжно выполнять длинные пошаговые расчёты — финансовые, технические, любые. Фишка: результат каждого шага нужно записать в текст — тогда модель его видит перед собой и не «додумывает» правдоподобное, но неверное число. Точность восстанавливается, потому что вместо дырявой памяти работает контекст.

Принцип работы

LLM не держит переменные в голове. Она предсказывает следующий токен на основе предыдущего текста. Короткая цепочка — все результаты рядом, модель их видит. Длинная цепочка — ранние результаты уходят далеко в контекст, модель начинает подставлять правдоподобные числа вместо правильных. Решение простое: требуй формат «[Шаг N] → [результат]» после каждого действия. Модель читает число из текста, а не вспоминает из пустоты. Отдельная беда — «прыжки назад»: когда шаг 15 ссылается на результат шага 8. Это самостоятельный источник сбоев — минус ещё 18% к точности. Перепиши процедуру так, чтобы каждый шаг брал только результат предыдущего.

Почему работает

Результат шага записан в текст — следующий шаг берёт его прямо оттуда. Ничего не держится «в уме». Это работает для всех моделей: от маленьких (1.5 миллиарда параметров) до огромных (685 миллиардов). Разница только в скорости деградации: большие сбоят медленнее, но всё равно сбоят. Умножение и деление деградируют сильнее сложения и вычитания — для таких задач режь блок до 3–4 шагов, не 7.

Когда применять

Любые задачи с последовательными вычислениями → финансовые расчёты (налоги, прибыль, все удержания разом), технические процедуры, юридические алгоритмы с ветвлением — особенно когда промежуточный результат шага 3 нужен на шаге 5. НЕ нужно для задач, где шаги независимы друг от друга — там проблемы деградации нет.

Мини-рецепт

1. Оцени длину: до 10 шагов — один промпт. 10 и больше — режь на блоки по 5–7.
2. Потребуй формат: добавь в промпт «На каждом шаге выводи: [Шаг N] → [результат]» — это делает сбой видимым сразу.
3. Убери прыжки назад: если шаг 12 ссылается на шаг 7 — перепиши. Каждый шаг берёт результат только предыдущего.
4. Передай состояние между блоками: закончил первый блок — скопируй финальный результат и начни следующий: «Входные данные для шагов 8–14: S7 = [число]».
5. Добавь проверку: в конце блока напиши «Итог должен быть меньше стартового значения» — ловит ошибки раньше, чем они уйдут в следующий блок.

Примеры

[ПЛОХО] : Рассчитай чистую прибыль: закупка 450р, логистика 15%, комиссия WB 17%, налог 6%, хранение 240р, реклама 10% от выручки — цена продажи 1200р
[ХОРОШО] : Выполни пошагово. На каждом шаге выводи: [Шаг N] → [результат в рублях]. Цена продажи: 1 200р Шаг 1: Вычти закупку (450р) из цены продажи Шаг 2: Вычти логистику WB — 15% от 1200р Шаг 3: Вычти комиссию WB — 17% от 1200р Шаг 4: Вычти налог — 6% от 1200р Шаг 5: Вычти хранение (240р) Шаг 6: Вычти рекламу — 10% от 1200р Шаг 7: Итог = чистая прибыль После каждого шага: текущий остаток в рублях. Модель выдаст цепочку из 7 явных строк с суммами. Видно где именно результат расходится с ожиданием — ловишь ошибку, не пересчитывая всё заново.
Источник: When LLMs Stop Following Steps: A Diagnostic Study of Procedural Execution in Language Models
ArXiv ID: 2605.00817 | Сгенерировано: 2026-05-04 05:23

Проблемы LLM

ПроблемаСутьКак обойти
Модель теряет промежуточные результаты в длинных процедурахДаёшь 20+ шагов с промежуточными числами. Модель не держит их "в уме". Она предсказывает следующий токен по ближайшему тексту. Ранние результаты уходят далеко назад в контекст. Модель начинает их подменять — правдоподобными, но неверными числами. Точность падает кратно. Работает не по задаче, а по ощущению правдоподобияПотребуй явную запись каждого шага: [Шаг N] [результат]. Результат шага появляется в тексте прямо перед следующим. Модель "видит" его — и берёт оттуда, а не придумывает
Прыжки назад по шагам ломают расчётПроцедура требует: "на шаге 15 возьми результат шага 8". Это отдельный источник ошибок — помимо длины. Модель должна вернуться далеко назад по контексту. Это даёт дополнительный сбой даже в коротких процедурах, если в них есть такие ссылкиПерепиши процедуру так, чтобы каждый шаг ссылался только на предыдущий. "Используй результат предыдущего шага" — не "результат шага 8"

Методы

МетодСуть
Явный трекинг шагов — видимость промежуточных результатовДобавь в запрос: "На каждом шаге выводи: [Шаг N] [результат]". Это переводит "память" из головы модели в текст. Следующий шаг видит результат прямо перед собой. Сбой сразу становится видимым — можно поймать ошибку, не пересчитывая всё. Когда применять: любая процедура с накопительными вычислениями (расчёт прибыли, кулинарный рецепт с граммами, многошаговый план). Не нужно: 3–5 шагов без промежуточных переменных
Чанкинг длинных процедур с передачей состоянияБольше 10 шагов — бей на блоки по 5–7 шагов каждый. Каждый блок — отдельный запрос. Завершил блок скопировал явный итог передал следующему: "Входные данные: S7 = 840р". Почему работает: короткий блок держит все нужные значения рядом в тексте. Модель не теряет нить — она физически не может её потерять. Для умножения/деления: уменьши блок до 3–4 шагов — эти операции дают нестабильные промежуточные значения
📖 Простыми словами

WhenLLMsStop Following Steps: A Diagnostic Study of Procedural Execution inLanguageModels

arXiv: 2605.00817

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

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

В реальности это выглядит как полный провал на длинных дистанциях. Если ты просишь рассчитать чистую прибыль для Wildberries, прогоняя цифру через закупку, логистику, налоги и хранение, модель лажает уже на четвертом звене. Она может выдать красивый и уверенный ответ, но внутри будет каша из цифр, которые не бьются друг с другом. Чем больше шагов в твоем промпте, тем выше шанс, что LLM либо «выключится» раньше времени, либо начнет нести правдоподобную чушь, игнорируя половину условий.

Этот принцип универсален и касается не только математики. Тестировали на алгоритмах, но это работает и в кодинге, и в сложном планировании, и в анализе юридических документов. Любая многоходовочка, где результат шага А должен стать входом для шага Б, — это зона риска. Как только цепочка становится длиннее 5-7 звеньев, стандартный подход «напиши всё одним куском» перестает работать, и ты получаешь имитацию деятельности вместо результата.

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

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с