Попросил нейросеть написать 50 слов — она выдала 73. Как заставить модель считать

Попросил нейросеть написать пост на 50 слов — получил 73. Исправил промпт — вышло 42. Переделал снова — 68. Знакомо? Модели физически не умеют считать слова в голове. Но есть хак, который поднимает точность попадания с 10% до 94%.

Попросил нейросеть написать 50 слов — она выдала 73. Как заставить модель считать

Суть проблемы: модели теряют счёт

Нейросети не имеют встроенного счётчика. Когда просишь "напиши ровно 100 слов", модель пытается считать в процессе генерации — и сбивается уже после 5-10 слов.

Исследователи из National Taiwan University (2025) протестировали способность LLM к подсчёту на 11 моделях. Результат: точность падает с 99% (1-2 слова) до 15% на дистанции 10 слов. Это как просить человека вслепую отмерить ровно 100 шагов — после 30-го начнёшь сбиваться.

Причина — архитектура трансформеров. Они обрабатывают текст параллельно, но не накапливают числовое состояние типа "уже написано 47 слов". Счётчика просто нет.

Попросил нейросеть написать 50 слов — она выдала 73. Как заставить модель считать

CAPEL: вынеси счётчик наружу

CAPEL (Countdown-Aided Prompting for Exact Length) — техника, которая превращает подсчёт в видимый процесс. Вместо счёта в голове модель пишет с маркерами обратного отсчёта:

<50>Привет,<49>сегодня<48>расскажу<47>про...

Модель видит число в предыдущем маркере и просто продолжает паттерн до <0>. Это как считать вслух вместо "в уме" — ошибки сразу видны.

Метафора: Это шпаргалка, которую разрешили подсмотреть. Модель не держит число в голове — оно уже написано в тексте.

Пример: пост для Telegram ровно 30 слов

Задача: написать пост о пользе утренних прогулок. Лимит — 30 слов.

Промпт:

Напиши пост для Telegram-канала о пользе утренних прогулок. Ровно 30 слов. Формат вывода: 1. Для каждого числа k от 30 до 1: - Выведи маркер <k> - Сразу после него — одно слово (с возможной пунктуацией) 2. После слова с маркером <1> напиши <0> и остановись 3. Маркеры не считаются — только слова 4. Числа в маркерах должны уменьшаться на 1 Пример для 5 слов: <5>Привет,<4>как<3>твои<2>дела<1>сегодня?<0> Теперь напиши пост:

Результат: Модель выдаёт текст с маркерами от <30> до <0>. Убираешь маркеры регуляркой — получаешь ровно 30 слов. Точность на GPT-4.1 — 94%.

Попробуйте сами — вот как выглядит ответ ChatGPT с этим методом:

Попросил нейросеть написать 50 слов — она выдала 73. Как заставить модель считать

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

Трансформеры отлично решают задачи pattern completion (продолжи паттерн), но плохо справляются с подсчётом в памяти. CAPEL превращает счёт в паттерн:

Обычный подход: Модель пытается помнить "написал 47 слов" → теряет счёт → выдаёт 80 вместо 100.

С CAPEL: Модель видит <47> в своём же выводе → просто пишет <46> и слово → продолжает до <0>.

Метафора: Это как считать ступеньки вслух. Забудешь число — посмотришь на последнюю произнесённую цифру и продолжишь.

Ключевые рычаги:

  • Шаг декремента = 1. Если сделать <10><8><6>... (шаг 2), модель снова будет считать между маркерами — и собьётся.
  • Формат маркера. Угловые скобки <N> работают лучше всего — чётко отделяют счётчик от текста.
  • Пример в промпте. Показываешь паттерн — модель его повторяет.
  • Список ошибок. В промпте описываешь типичные косяки ("не пропускай маркеры", "не дублируй <0>") — частота сбоев падает.
Попросил нейросеть написать 50 слов — она выдала 73. Как заставить модель считать

Готовый шаблон промпта

Для любой задачи с ограничением длины:

{твоя задача}. Ровно {N} слов. Формат вывода: 1. Для каждого числа k от {N} до 1: - Выведи маркер <k> - Сразу после него — одно слово 2. После <1> напиши <0> и остановись Пример для 5 слов: <5>Пример<4>текста<3>для<2>демонстрации<1>метода.<0> Ошибки, которых нужно избегать: - Ранняя остановка: <5>Короткий<4>текст<0> - Маркеры без слов: <5>Текст<4><3><2><1><0> Теперь выполни задачу:

Подставляешь своё N и задачу — работает.

Когда CAPEL не поможет

Метод не универсален. Ограничения:

Длинные тексты (>500 слов). Точность падает. На 1000 слов даже GPT-4.1 даёт ~50% exact match. Для книг не подойдёт.

Некоторые модели отказывают. o4-mini и GPT-4o-mini иногда воспринимают countdown как попытку извлечь внутренние рассуждения и игнорируют инструкцию.

Маркеры увеличивают вывод. Текст в 100 слов → ~200 токенов (слова + маркеры). Если платишь за API — учитывай.

Качество может немного упасть. Модель тратит "внимание" на соблюдение формата. На MT-Bench иногда снижение на 0.5-1 балл по 10-балльной шкале. Если критично — используй двухэтапную генерацию: сначала черновик без ограничений, потом перепиши с CAPEL.

Где копать глубже

Метод описан в работе "Prompt-Based One-Shot Exact Length-Controlled Generation with LLMs" (2025) исследователей из National Taiwan University. Они протестировали 11 моделей (GPT-4o, GPT-4.1, DeepSeek-V3, Qwen) на 4 бенчмарках.

Главная находка: LLM не могут считать токены в процессе генерации из-за архитектурных ограничений трансформеров. Но если вынести счёт в видимый текст — точность попадания в целевую длину прыгает с 1.9% до 94.2%.

Это универсальный принцип: любая задача, где модель должна "помнить число" в процессе генерации, решается лучше через visible scratchpad (видимые промежуточные шаги).

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

CAPEL решает реальную боль для тех, кто работает с жёсткими лимитами:

  • Посты в соцсетях (Twitter, Telegram)
  • Мета-описания для SEO (155-160 символов)
  • Заголовки (60-70 символов для Google)
  • SMS-рассылки
  • Описания товаров на маркетплейсах

Один промпт, один запрос, без итераций. Работает через любой API.

Начать дискуссию