Суть
Вместо «дай сразу ответ» — «порассуждай по шагам, потом сделай вывод». Удобно просить вывод в JSON: сначала поле с рассуждениями, затем поле с вердиктом — так и качество выше, и парсить легко.
Зачем это нужно
Сложную задачу модель «не может принять мгновенно». CoT даёт ей развернуть логику → меньше ошибок. Бонус: по выписанным рассуждениям видно, что именно идёт не так (отладка промпта). CoT — это форма управляемого «усилия». На простых задачах CoT избыточен: это режим Deliberate/high-effort, который оправдан только для меньшинства задач; для простого хватает Reflexive/Standard (см. Reasoning Effort).
Как работает
- CoT: в промпте просим «сначала рассуждения, затем вердикт (одной цифрой/меткой)». Структурируем как JSON
{reasoning, verdict}. - Self-consistency: одна и та же задача гоняется n раз (например, n=3), вердикты агрегируются голосованием (major vote) → стабильнее (n=3 — практический дефолт; каждый доп. прогон кратно умножает стоимость, выше поднимают редко). Дополнительно можно агрегировать с разными few-shot примерами (Few Shot Prompting).
- Открытые/дешёвые модели (32B) удобно запускать «несколько штук для голосования».
- ⚠️ Осторожно с самокоррекцией (self-reflection): попытка исправить ответ может создать новую ошибку или «когнитивный диссонанс» — см. нюанс в Reasoning Effort.
- Extended thinking (Claude 3.7/4) — нативный режим рассуждения: модель добавляет
thinking tagsи scratchpad перед ответом («дать время подумать»). - Транскрипт мышления для отладки: ход рассуждения можно анализировать, чтобы понять, где промпт сбивает модель — сильный инструмент промпт-инжиниринга.
- Структурный вариант — Schema Guided Reasoning (SGR): вместо текстовой просьбы «думай по шагам» порядок полей схемы (
BaseModel) сам задаёт шаги рассуждения и валидирует каждый — типизированная форма CoT с предсказуемым выводом. - Нюанс Anthropic: extended thinking называют «костылём для промпт-инжиниринга» — при хорошем промпте долгое раздумье может и не требоваться (контраст со взглядом «CoT — фундаментальный метод качества»).
Пример
Промпт: "Реши задачу. Сначала пошагово порассуждай в поле reasoning,
затем дай итог в поле answer. Формат: JSON."
n=3 запуска → answers = [B, B, C] → major vote → B
«Канал мышления» (структурный CoT в коде агента): модель отвечает тегами <thinking>…</thinking> и <answer>…</answer>; рассуждения парсятся отдельно — видны для отладки промпта, но в UI идёт только answer.
import re
def extract_thoughts(raw):
think = re.search(r"<thinking>(.*?)</thinking>", raw, re.DOTALL)
ans = re.search(r"<answer>(.*?)</answer>", raw, re.DOTALL)
return {
"thinking": think.group(1).strip() if think else "", # для отладки, скрыто от юзера
"answer": ans.group(1).strip() if ans else raw.strip(), # fallback: весь текст
}
Связано с
- Prompt Engineering — CoT как техника внутри промпта
- Reasoning Effort — CoT = глубина рассуждения = управляемый ресурс
- Few Shot Prompting — комбинируется с примерами
- Schema Guided Reasoning — структурная, типизированная форма CoT