TL;DR
CAP-CoT — техника, которая заставляет модель генерировать намеренно дефектную версию своих рассуждений, а затем сравнивать её с правильной, чтобы найти и исправить слабые места. Три роли: Решатель строит правильную цепочку, Противник — правдоподобно ошибочную, Арбитр сравнивает обе и выдаёт конкретные пошаговые правки.
Главная боль — CoT-рассуждения ненадёжны. Та же задача, тот же промпт — и модель может дать разный ответ в разных запусках. Проблема глубже: ошибки на ранних шагах незаметно тянут за собой все последующие шаги. Стандартный "думай пошагово" показывает только «как правильно» — и модель не видит, какие именно шаги шаткие. Это как строить тезис в голове: кажется логично, пока не столкнёшься с контраргументом.
CAP-CoT решает это через контраст: если поставить рядом правильное и намеренно дефектное рассуждение, слабые места правильной версии становятся заметны. После 2–3 циклов сравнения и правок промпт Решателя становится значительно устойчивее — и остаётся надёжным даже при высокой "случайности" модели.
Схема метода
ЦИКЛ (повторить 2–3 раза):
ШАГ 1: Решатель → правильная пошаговая цепочка рассуждений
[нумерованные шаги, явные допущения, единый формат]
ШАГ 2: Противник → правдоподобная, но намеренно дефектная цепочка
[выбрать 1–2 типа ошибок: jump / confusion / fuzzy / wrapper]
ШАГ 3: Арбитр → сравнивает обе цепочки, выдаёт:
шаг → тип проблемы → конкретная правка
→ обновляет промпт Решателя (исправить слабые шаги)
→ обновляет промпт Противника (в след. цикле ошибки точнее)
ПОСЛЕ ЦИКЛОВ: Используется только уточнённый промпт Решателя
Все шаги — отдельные запросы. Три роли, но один и тот же LLM.
Пример применения
Задача: Предприниматель решает закрыть офлайн-магазин детских игрушек и перейти полностью на Wildberries. Нужно проверить логику решения перед тем, как подписывать договор аренды склада.
Шаг 1 — Решатель:
Ты — бизнес-аналитик. Рассуждай строго пошагово, нумеруй каждый шаг.
Обозначай допущения явно. Сохраняй единый формат по всей цепочке.
Задача: оцени решение закрыть офлайн-магазин и перейти полностью на Wildberries.
Данные: детские игрушки, средний чек 2 400 ₽, 40 транзакций/день,
аренда 180 000 ₽/мес, Wildberries комиссия 15% + логистика ~8%.
Построй цепочку: финансы → риски → итоговый вывод.
Шаг 2 — Противник:
Ты — бизнес-аналитик. Твоя задача: создать правдоподобную,
но намеренно дефектную версию рассуждений по той же задаче.
Используй эти типы ошибок (выбери 2):
- jump: пропусти ключевой промежуточный шаг
- confusion: перепутай связанные, но разные понятия
- fuzzy: спрячь логическую дыру за расплывчатыми обобщениями
- wrapper: встрой неверный ключевой шаг в грамотно звучащее объяснение
Задача: [та же про магазин и Wildberries]
Важно: рассуждение должно выглядеть убедительно, но содержать
скрытые целевые ошибки.
Шаг 3 — Арбитр:
Сравни две цепочки рассуждений по одной задаче.
[Цепочка А — правильная]:
{вставить результат шага 1}
[Цепочка Б — дефектная]:
{вставить результат шага 2}
Для каждого шага:
Шаг №: [номер] | Цепочка: [А / Б / обе] | Тип проблемы: [пропуск /
смешение / нечёткость / подмена] | Конкретная правка: [что исправить]
Затем: выдай улучшенную Цепочку А с учётом найденных уязвимостей.
Результат: Шаг 1 даст структурированный финансовый анализ. Шаг 2 — внешне похожую цепочку с теми же числами, но со скрытыми дырами (например, Противник может "перепутать" комиссию с маржой или "пропустить" сезонность продаж). Арбитр в шаге 3 разберёт обе версии пошагово и выдаст улучшенный анализ — с теми слабостями, которые реально существовали в первой версии, но были незаметны без контраста.
Почему это работает
LLM хорошо видит чужие ошибки, но плохо — свои. Когда модель генерирует рассуждение, она вероятностно следует тому, что "звучит правильно" на каждом следующем токене. Попросить её найти дыру в уже написанном тексте трудно: та же логика оценивает его как связный — значит, ок. Это не слабость — это принцип работы.
Контраст делает слабые места видимыми. Рядом стоит текст с теми же данными и той же структурой, но скрытыми ошибками. Арбитр сравнивает не "абстрактно", а шаг против шага. Различия — хороший / плохой шаг на одном материале — создают обучающий сигнал. Именно этот принцип работает в контрастном обучении: не "вот правильно", а "вот правильно рядом с похожим неправильным".
Четыре типа ошибок — это рычаги управления Противником: - jump — пропущен ключевой шаг - confusion — перепутаны похожие понятия (комиссия vs маржа, оборот vs прибыль) - fuzzy — логическая дыра спрятана за расплывчатым языком ("в целом, результаты позитивные") - wrapper — неверный вывод обёрнут в грамотное объяснение
Меняй mix типов ошибок — получаешь разные уязвимости на поверхности. Для финансового анализа — confusion + jump, для аргументации — fuzzy + wrapper.
Дополнительные рычаги: - Число циклов — 1 достаточно для быстрой проверки, 2–3 для сложных многошаговых задач - Архетип Противника → дай конкретную роль вместо безликого агента: "CFO, который ищет дыры в юнит-экономике" острее, чем просто "критик" - Формат фидбека Арбитра → добавь "оцени надёжность каждого шага от 0 до 10" → получишь вероятностную карту рисков
Шаблон промпта
Трёхшаговый процесс — три отдельных запроса:
=== ШАГ 1: РЕШАТЕЛЬ ===
Ты — эксперт в области {домен}. Рассуждай строго пошагово,
нумеруй каждый шаг. Обозначай допущения явно.
Сохраняй единый формат по всей цепочке.
Задача: {задача с конкретными данными}
Построй цепочку рассуждений до финального вывода.
=== ШАГ 2: ПРОТИВНИК ===
Ты — эксперт в области {домен}. Создай правдоподобную,
но намеренно дефектную цепочку рассуждений по той же задаче.
Используй типы ошибок: {выбери 1–2 из списка}
- jump: пропусти ключевой промежуточный шаг
- confusion: перепутай связанные, но разные понятия
- fuzzy: спрячь логическую дыру за расплывчатыми обобщениями
- wrapper: встрой неверный ключевой шаг в грамотно звучащее объяснение
Задача: {та же задача}
Важно: рассуждение должно выглядеть убедительно.
=== ШАГ 3: АРБИТР ===
Сравни две цепочки рассуждений по одной задаче.
[Цепочка А — правильная]:
{результат шага 1}
[Цепочка Б — дефектная]:
{результат шага 2}
Для каждого шага в формате:
- Шаг №: [номер]
- Цепочка: [А / Б / обе]
- Тип проблемы: [пропуск / смешение / нечёткость / подмена]
- Конкретная правка: [что именно исправить]
Затем: выдай улучшенную Цепочку А с учётом всех найденных уязвимостей.
Плейсхолдеры:
- {домен} — область задачи: финансовый анализ, юридическая аргументация, стратегия, медицинская логика
- {задача с конкретными данными} — чем конкретнее данные, тем правдоподобнее ошибки Противника
- {выбери 1–2} — для начала попробуй fuzzy + jump: это самые частые и незаметные паттерны
🚀 Быстрый старт — вставь в чат:
Вот шаблон CAP-CoT — метод проверки рассуждений через
состязательный контраст. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит о конкретных данных задачи и домене — потому что Противнику нужны реальные числа и факты, чтобы ошибки прятались правдоподобно внутри той же числовой логики. Без этого Цепочка Б будет очевидно плохой и контраст теряет смысл.
Ограничения
⚠️ Стоимость токенов: Три запроса на цикл × 2–3 цикла = 6–9 сообщений вместо одного. Для простых задач — избыточно.
⚠️ Субъективные задачи: Если нет чёткого "правильно / неправильно" (выбор цвета логотипа, оценка тональности текста), Противник не сможет создать структурированно дефектную цепочку — и контраст теряет смысл.
⚠️ Зависимость от качества модели: Слабые модели генерируют очевидно плохие цепочки — контраст неинформативен. Метод лучше всего работает с сильными моделями: GPT-4o, Claude Sonnet 3.5+.
⚠️ Специализация промпта: Уточнённый промпт Решателя "настраивается" под конкретный класс задач. Для другого типа задач цикл нужно прогонять заново.
Как исследовали
Исследователи взяли три роли — Решатель, Противник, Арбитр — и прогнали шесть бенчмарков на четырёх моделях: от GPT-4o-mini до DeepSeek-V3. Бенчмарки специально подобраны с разным типом сложности: школьная математика (GSM8K), олимпийская математика (MATH), многоходовой QA (HotpotQA) и задачи на длинный контекст (LongBench). Эта разнородность важна — она проверяет, работает ли метод универсально, а не только на одном типе задач.
Самое интересное — тест на температуру. Все базовые методы (AoT, MAD, CCoT) теряли стабильность пропорционально росту температуры: чем выше случайность генерации, тем разбросанней результаты. CAP-CoT после 3 циклов оптимизации держал вариацию ниже 1.0 даже при температуре 0.7–1.0. Это значит, что уточнённый промпт буквально "запекает" логику в инструкцию — случайность модели перестаёт разрушать рассуждение. Промпт становится надёжным независимо от настроек.
Аблация показала чёткий порядок важности: Решатель один → добавить Арбитра → добавить Противника. Каждый шаг улучшал точность, но самый большой прирост давал именно Противник. Без него — просто итеративная правка. С ним — системное обнаружение слабостей через контраст. Само исследование реализовано через LangChain и API, но результат — уточнённый промпт, который работает в любом обычном чате.
Адаптации и экстраполяции
🔧 Техника: безликий агент → конкретный архетип → острее критика
Вместо абстрактного "Противника" дай роль с характером: - Бизнес-решение → Противник = "CFO, который ищет дыры в юнит-экономике и не верит оптимистичным прогнозам" - Юридический аргумент → Противник = "адвокат другой стороны, который строит контраргументы" - Технический план → Противник = "разработчик без контекста проекта, который читает спецификацию впервые"
Конкретная роль сужает пространство ошибок до нужного домена — Противник атакует точнее.
🔧 Техника: один запрос вместо трёх → быстрая проверка
Если три отдельных запроса — много, можно сыграть все роли в одном:
Реши задачу {задача} пошагово. Затем: сыграй роль Противника — создай альтернативную версию своих же рассуждений, используя тип ошибки "fuzzy" (прячь логические дыры за расплывчатым языком). Затем: сравни обе версии пошагово и выдай улучшенную финальную цепочку.Это менее точно — модель знает, что генерирует ошибки, и Противник выходит "мягче". Но для быстрой самопроверки аргумента работает.
🔧 Экстраполяция: CAP-CoT + явная карта рисков
Добавь в Арбитра инструкцию: "оцени надёжность каждого шага по шкале 0–10, где 0 = легко оспорить, 10 = неопровержимо". Получишь не только улучшенную цепочку, но и карту уязвимостей: сразу видно, на каком шаге аргументация держится ненадёжно.
Ресурсы
Название: CAP-CoT: Cycle Adversarial Prompt for Improving Chain of Thoughts in LLM Reasoning
Авторы: Shuxu Chen, Yitian Zhou, Jiaquan Zhang, Haoyu Bian, Aming Wu, Sungyoung Lee, Chaoning Zhang, Hyundong Shin
Организации: Kyung Hee University (Южная Корея), University of Electronic Science and Technology of China (UESTC), Henan Polytechnic University
Смежные работы: Chain-of-Thought (Wei et al.), Contrastive CoT (CCoT), Self-Refine, Tree of Thoughts, Graph of Thoughts, Reflexion, OPRO
