Chain of Thought

CoT (Chain of Thought) — техника, где модель просят сначала выписать рассуждения, и лишь затем выдать вердикт. Помогает на сложных задачах, где «мгновенный» ответ хуже. Родственная техника борьбы с шумом — self-consistency: запустить несколько генераций (n=3) и выбрать ответ голосованием (majority vote).

Суть

Вместо «дай сразу ответ» — «порассуждай по шагам, потом сделай вывод». Удобно просить вывод в 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: весь текст
    }

Связано с