December 31, 2025

Prompt Repetition: удвоение промпта для лучшей точности без reasoning

🧠 Контент предназначен специально для моего сообщества в телеграме @aiNovaSapiens

TL;DR

Prompt Repetition — техника, которая просто копирует твой промпт дважды подряд: вместо <QUERY> отправляешь <QUERY><QUERY>. Работает в обычном чате, на любых моделях (Gemini, GPT, Claude, Deepseek).

LLM обучены как каузальные модели — каждый токен "видит" только предыдущие, не будущие. Поэтому порядок слов влияет на точность: <КОНТЕКСТ><ВОПРОС> работает иначе чем <ВОПРОС><КОНТЕКСТ>. Когда варианты ответа идут ДО вопроса, модель обрабатывает опции вслепую, без контекста задачи. Отсюда ошибки — особенно в задачах где критичен порядок информации (поиск элемента в списке, выбор из вариантов, извлечение данных).

Повторение промпта позволяет каждому токену "увидеть" все остальные токены дважды — первый раз линейно, второй раз с полным контекстом. Исследование показало 47 побед из 70 тестов, 0 поражений на разных моделях и задачах. При этом длина ответа не растёт, задержка не меняется — модель генерирует столько же токенов, просто точнее.


Схема метода

ВМЕСТО: <твой промпт>
ПИШИ:   <твой промпт>
        <твой промпт>

Всё. Один запрос, один ответ. Просто дублируешь текст промпта.


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

Задача: У тебя длинная переписка с клиентом в поддержке (30+ сообщений) по поводу заказа на Ozon. Нужно быстро определить — упоминал ли клиент возврат товара, и если да, то в каком сообщении.

Промпт:

Вот переписка с клиентом:

[Сообщение 1] Клиент: Здравствуйте, заказ не пришёл
[Сообщение 2] Поддержка: Добрый день! Уточните номер заказа
[Сообщение 3] Клиент: 12345-WB
[...28 сообщений с уточнениями...]
[Сообщение 31] Клиент: Может тогда просто верну деньги?
[Сообщение 32] Поддержка: Оформим возврат

Упоминал ли клиент возврат? Если да — в каком сообщении?

Вот переписка с клиентом:

[Сообщение 1] Клиент: Здравствуйте, заказ не пришёл
[Сообщение 2] Поддержка: Добрый день! Уточните номер заказа
[Сообщение 3] Клиент: 12345-WB
[...28 сообщений с уточнениями...]
[Сообщение 31] Клиент: Может тогда просто верну деньги?
[Сообщение 32] Поддержка: Оформим возврат

Упоминал ли клиент возврат? Если да — в каком сообщении?

Результат:

Модель точнее найдёт упоминание возврата в Сообщении 31. При обычном промпте она могла бы пропустить косвенное упоминание ("верну деньги") или указать неправильный номер сообщения — особенно если вопрос шёл ДО переписки в структуре промпта. С повторением каждый токен вопроса "видит" всю переписку дважды, снижая риск ошибки.


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

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

Повторение даёт второй проход по всей информации. Первая копия промпта прочитана линейно. Вторая копия — с накопленным контекстом из первой. Теперь модель "видит" связи между всеми частями промпта: вопрос понимает опции, опции понимают вопрос.

Рычаги управления:

  • Количество повторений — можно повторить 3 раза (×3) для особо сложных задач с длинными списками (NameIndex показал рост точности с 21% до 97%). Для простых задач достаточно ×2.
  • Явная граница — добавь "Let me repeat that:" между копиями. Иногда даёт чуть лучший результат, но не всегда. Тестируй на своих данных.
  • Часть промпта — для очень длинных промптов повторяй только критичную часть (вопрос + инструкцию), не весь контекст. Экономит токены.

Шаблон

{твой_промпт}
{твой_промпт}

Или с явной границей:

{твой_промпт}

Let me repeat that:

{твой_промпт}

Или тройное повторение:

{твой_промпт}

Let me repeat that:

{твой_промпт}

Let me repeat that one more time:

{твой_промпт}

Где {твой_промпт} любой промпт который используешь сейчас. Просто продублируй его. Инструкция по формату ответа, контекст, вопрос — всё повторяется целиком.


Ограничения

⚠️ Не работает с reasoning: Когда просишь модель "think step by step" или используешь o1/o3, эффект минимален. Модели при рассуждении и так повторяют части промпта в своих мыслях. Повторение входа ничего не добавляет.
⚠️ Удваивает входные токены: Если промпт 1000 токенов, с повторением будет 2000. Стоимость запроса растёт (но не стоимость ответа — длина генерации не меняется). Для коротких промптов не критично, для длинных (10К+ токенов) может бить по бюджету.
⚠️ Лимиты контекста: Очень длинные промпты (близкие к лимиту модели) невозможно повторить — не влезут в контекстное окно. В таких случаях повторяй только критичную часть (вопрос + инструкции), не весь контекст.
⚠️ Задержка на Claude: Anthropic модели (Haiku, Sonnet) показали рост latency на очень длинных промптах (от удвоения 10К+ токенов) — prefill стадия затягивается. На коротких промптах эффекта нет.

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

Команда из Google Research взяла 7 моделей (Gemini 2.0 Flash и Lite, GPT-4o и 4o-mini, Claude 3 Haiku и 3.7 Sonnet, Deepseek V3) и прогнала через 7 бенчмарков — от школьных тестов (ARC, OpenBookQA) до математики (GSM8K, MATH) и своих кастомных задач.

Тестировали два режима: без reasoning (просто ответь) и с reasoning (think step by step). Для multiple choice запускали в двух вариантах: question-first (вопрос → опции) и options-first (опции → вопрос). Второй вариант жёстче — модель читает варианты не зная что искать.

Результаты удивили простотой и стабильностью: из 70 комбинаций модель+бенчмарк+режим получили 47 статистически значимых побед и 0 поражений. Особенно сильный эффект на кастомных задачах NameIndex (найди 25-е имя из 50) и MiddleMatch (найди элемент между двумя другими) — там точность росла с ~20% до ~97%.

Почему это работает: авторы объясняют через архитектуру attention. В каузальных LLM токен на позиции N "видит" только токены 1..N, не дальше. При повторении промпта токен из второй копии "видит" все токены первой копии + себя. По сути каждый токен промпта получает двустороннюю видимость — это близко к bidirectional attention, но без переобучения модели.

Инсайт для практики: исследователи заметили, что reasoning-модели (обученные через RL) сами научились повторять части промпта в своих рассуждениях. Prompt Repetition переносит эту работу на prefill стадию (параллелизуемую), убирая токены из generation стадии (последовательной). Эффективность растёт без изменения качества.

Неожиданность: метод Padding (добавление точек "..." до той же длины что у повторения) не дал эффекта. Значит дело не в длине входа, а именно в повторении смысловых токенов.


Оригинал из исследования

Базовые варианты из статьи:

Baseline:

Copy

Copy

<QUERY>

Prompt Repetition:

Copy

Copy

<QUERY>
<QUERY>

Prompt Repetition (Verbose):

Copy

Copy

<QUERY>
Let me repeat that:
<QUERY>

Prompt Repetition ×3:

Copy

Copy

<QUERY>
Let me repeat that:
<QUERY>
Let me repeat that one more time:
<QUERY>

Контекст: Исследователи тестировали все 4 варианта на одинаковых данных. Verbose и ×3 иногда давали чуть лучший результат чем базовое повторение, особенно на задачах с длинными списками. Но разница небольшая — базовое <QUERY><QUERY> работает отлично в 90% случаев.


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

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

Если задача требует генерации + проверки (например, написать текст ровно 100 слов), повтори инструкцию после генерации:

Copy

Copy

Напиши пост для Telegram-канала про [тема]. Ровно 50 слов.

Напиши пост для Telegram-канала про [тема]. Ровно 50 слов.

---

Ответ:

{сюда модель сгенерирует текст}

---

Проверь: написано ровно 50 слов? Если нет — перепиши.

Двойной промпт даёт точную генерацию, инструкция проверки — самокоррекцию.


🔧 Техника: повторять только критичную часть → экономия токенов

Если у тебя промпт 5000 токенов (длинный прайс-лист + вопрос), повторяй только вопрос:

Copy

Copy

[ДЛИННЫЙ ПРАЙС-ЛИСТ — 4500 токенов]

Найди позицию "Ноутбук ASUS ROG" и назови цену.

Найди позицию "Ноутбук ASUS ROG" и назови цену.

Вместо 10000 токенов (полное повторение) получаешь ~5100. Эффект сохраняется — модель дважды "видит" инструкцию, контекст остаётся в памяти.


💡 Адаптация для классификации с примерами (few-shot):

При few-shot (даёшь примеры правильных ответов) повторяй весь блок — примеры + задачу:

Copy

Copy

Примеры tone of voice бренда:

[Пример 1: текст → оценка]
[Пример 2: текст → оценка]
[Пример 3: текст → оценка]

Оцени новый текст: [текст]

---

Примеры tone of voice бренда:

[Пример 1: текст → оценка]
[Пример 2: текст → оценка]
[Пример 3: текст → оценка]

Оцени новый текст: [текст]

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


Ресурсы

Prompt Repetition Improves Non-Reasoning LLMs — Yaniv Leviathan, Matan Kalman, Yossi Matias (Google Research), февраль 2025

Связанные работы: - Chain-of-Thought Prompting (Wei et al., 2023) — техника "думай по шагам" - Re-Reading Improves Reasoning (Xu et al., 2024) — исследование про пользу повторного чтения вопроса - Repetition Improves Language Model Embeddings (Springer et al., 2024) — повторение улучшает эмбеддинги

🧠 Контент предназначен специально для моего сообщества в телеграме @aiNovaSapiens