TL;DR
Исследование показало, что главный драйвер улучшения ответов LLM — добавление Chain-of-Thought (пошаговых рассуждений). После этого дальнейшая оптимизация промпта (подбор формулировок, few-shot примеры, автоматические оптимизаторы) даёт минимальный эффект. Переход от обычного промпта к CoT дал +3.6% точности, а переход от CoT к продвинутым оптимизаторам — всего +0.1%.
Стандартные бенчмарки занижают возможности моделей в среднем на 4%. Без CoT модели чувствительны к формулировке промпта — небольшие изменения в инструкциях меняют результат. Это создаёт иллюзию, что нужно долго подбирать "идеальный промпт". На самом деле проблема не в формулировке, а в отсутствии пространства для рассуждений.
CoT работает как буфер между промптом и ответом: модель сначала генерирует цепочку мыслей, и уже из неё выводит финальный ответ. Когда цепочка рассуждений сформирована, конкретные слова в промпте почти не влияют на результат. Это объясняет, почему после добавления CoT сложные оптимизаторы промптов дают ничтожный прирост.
Схема метода
БЕЗ CoT:
Промпт → Ответ
(ответ сильно зависит от формулировки промпта)
С CoT:
Промпт → Цепочка рассуждений (τ) → Ответ
(цепочка "поглощает" вариативность промпта, ответ стабилен)
Практический вывод: Не трать время на подбор формулировок — добавь "рассуждай пошагово".
Пример применения
Задача: Маркетолог готовит обоснование бюджета на рекламу для директора. Нужно рассчитать ROI кампании.
Было (без CoT):
Рассчитай ROI рекламной кампании: потратили 150 000 ₽, получили 47 заявок, средний чек 12 000 ₽, конверсия в продажу 30%.
Стало (с CoT):
Рассчитай ROI рекламной кампании. Рассуждай пошагово, показывай каждый этап расчёта.
Данные:
- Бюджет: 150 000 ₽
- Заявки: 47
- Средний чек: 12 000 ₽
- Конверсия в продажу: 30%
Результат: Модель покажет цепочку: количество продаж (47 × 0.3 = 14), выручка (14 × 12 000 = 168 000 ₽), прибыль (168 000 − 150 000 = 18 000 ₽), ROI ((18 000 / 150 000) × 100% = 12%). С CoT ответ стабилен даже если переформулировать промпт — добавить синонимы, поменять порядок данных, убрать форматирование.
Почему это работает
Слабость LLM: Без пространства для рассуждений модель "прыгает" сразу к ответу. При этом она чувствительна к формулировке — синонимы, порядок слов, даже пунктуация могут изменить результат. Это создаёт иллюзию, что нужен "идеальный промпт".
Сильная сторона LLM: Модели хорошо следуют явной структуре. Когда инструкция требует показать шаги — модель их показывает. И эти шаги создают контекст, из которого логично следует ответ.
Как CoT использует это: Цепочка рассуждений становится "промежуточным представлением" задачи. Она фиксирует суть проблемы независимо от того, как был сформулирован промпт. Математически: p(ответ | вход, промпт) ≈ p(ответ | вход, цепочка_рассуждений) — после генерации цепочки промпт почти не влияет на финальный ответ.
Рычаги управления:
- Уровень детализации рассуждений: "кратко" vs "подробно" — влияет на длину и глубину цепочки
- Формат вывода: "покажи шаги" vs "только финальный ответ" — для отладки полезно видеть шаги
- Структура: пронумерованные шаги vs свободная форма — нумерация помогает на сложных задачах
Шаблон промпта
{задача}
Рассуждай пошагово. Покажи каждый этап решения, затем дай финальный ответ.
Плейсхолдеры:
{задача}— описание задачи с исходными данными
Вариация для сложных задач:
{задача}
Реши задачу пошагово:
1. Определи, что нужно найти
2. Выпиши известные данные
3. Выбери метод решения
4. Выполни расчёты
5. Проверь результат
6. Дай финальный ответ
Ограничения
⚠️ Потолок знаний: Если модель не знает факты — CoT не поможет. На бенчмарке Medec (обнаружение медицинских ошибок) CoT дал минимальный прирост, потому что задача упирается в знания, а не в рассуждения.
⚠️ Уже высокий baseline: Если модель и так справляется на 90%+ (HeadQA), CoT почти не улучшает результат — модель уже близка к потолку.
⚠️ Модели с встроенным reasoning: o3 Mini (с нативным режимом рассуждений) получает меньший прирост от CoT (+2% vs +5% у других моделей) — рассуждения уже "встроены".
⚠️ Токены: CoT увеличивает длину ответа. Zero-Shot CoT добавляет ~164 токена к промпту, а few-shot оптимизаторы — до 1700+ токенов. Для простых задач это избыточно.
Как исследовали
Команда из Стэнфорда интегрировала DSPy (фреймворк для структурированных промптов) с HELM (стандартная система бенчмарков). Проверяли 4 модели (Claude 3.7 Sonnet, Gemini 2.0 Flash, GPT-4o, o3 Mini) на 7 бенчмарках — от математики (GSM8K) до медицинских расчётов (MedCalc-Bench).
Ключевое открытие: Переход от baseline к Zero-Shot CoT дал основной прирост (64.9% → 68.5%). Дальнейшая оптимизация через BFRS и MIPROv2 — практически ничего (68.5% → 68.6%). Это означает, что сложные оптимизаторы промптов становятся бесполезны после добавления CoT.
Интересная находка: на 3 из 7 бенчмарков рейтинги моделей перевернулись при использовании CoT. Например, на MMLU-Pro o3 Mini был лучше Claude на baseline, но Claude обогнал o3 Mini с CoT. Это показывает, что без CoT бенчмарки искажают реальные возможности моделей.
Теоретическое объяснение: авторы доказали через information bottleneck, что цепочка рассуждений создаёт марковскую цепь (промпт → цепочка → ответ), где ответ условно независим от промпта при фиксированной цепочке. Проще говоря: CoT "поглощает" вариативность промпта.
Ресурсы
Работа: "Structured Prompting Enables More Robust Evaluation of Language Models"
Код:
- DSPy+HELM интеграция: github.com/stanford-crfm/helm/pull/3893
- Pipeline оптимизации: github.com/StanfordMIMI/dspy-helm
Авторы: Asad Aali, Muhammad Ahmed Mohsin, Vasiliki Bikia и др., Stanford University
Связанные работы: DSPy (Khattab et al., 2023), HELM (Liang et al., 2022), Chain-of-Thought (Wei et al., 2022)
Адаптации и экстраполяции
💡 Адаптация для проверки гипотез: Принцип "CoT стабилизирует ответ" можно использовать для проверки надёжности своих промптов. Если без CoT ответ меняется от переформулировки — промпт нестабилен. Добавь CoT и проверь снова.
# Тест стабильности промпта
Вариант А: {твой промпт, версия 1}
Вариант Б: {твой промпт, версия 2 — переформулирован}
Если ответы разные → добавь "рассуждай пошагово" и повтори тест.
🔧 Техника: минимальный CoT для экономии токенов
Вместо развёрнутых инструкций:
# Было (много токенов):
Реши задачу пошагово. На каждом этапе объясни свои действия. Покажи промежуточные результаты.
# Стало (минимум токенов):
Рассуждай кратко, затем ответ.
Даже минимальная инструкция на CoT даёт основной эффект стабилизации.
🔧 Техника: CoT для задач с неочевидным решением
Когда не знаешь, какой метод использовать:
{задача}
Сначала определи, какой подход лучше для этой задачи. Затем примени его пошагово.
Модель сама выберет метод в цепочке рассуждений — это надёжнее, чем пытаться угадать "правильную" формулировку промпта.
