/
Вопросы и ответы
/
Промт-инжиниринг
/

Что такое chain-of-thought и зачем заставлять модель думать вслух?

Что такое chain-of-thought и зачем заставлять модель думать вслух?

11 часов назад

Никита Вихров

Ответы

0

Что такое chain-of-thought и зачем заставлять модель думать вслух

Когда модель отвечает сразу — она часто ошибается на задачах, требующих рассуждения. Chain-of-thought (CoT) — техника, при которой модель сначала разбирает задачу по шагам, а потом даёт ответ. Качество растёт, потому что модель не прыгает к выводу, а идёт к нему через промежуточные шаги.


Без CoT — модель спешит и ошибается

from anthropic import Anthropic

client = Anthropic()

# Простая задача на рассуждение
response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=128,
    messages=[{
        "role": "user",
        "content": """У нас есть API с rate limit 1000 запросов в час.
Команда из 8 разработчиков, каждый делает в среднем 3 запроса в минуту во время активной разработки.
Рабочий день — 6 часов активной работы. Хватит ли лимита на всю команду?"""
    }]
)

print(response.content[0].text)
# → "Нет, лимита не хватит."
# Ответ верный, но непроверяемый — не видно расчёта

С CoT — модель показывает ход мысли

response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=512,
    messages=[{
        "role": "user",
        "content": """У нас есть API с rate limit 1000 запросов в час.
Команда из 8 разработчиков, каждый делает в среднем 3 запроса в минуту во время активной разработки.
Рабочий день — 6 часов активной работы. Хватит ли лимита на всю команду?

Думай пошагово, показывай расчёты."""
    }]
)

print(response.content[0].text)
# → Шаг 1: Запросов от одного разработчика в час: 3 × 60 = 180
#   Шаг 2: Запросов от команды в час: 180 × 8 = 1440
#   Шаг 3: Лимит — 1000 запросов в час
#   Шаг 4: 1440 > 1000, лимит будет превышен в 1.44 раза
#   Вывод: лимита не хватит. Нужно либо поднять лимит, либо добавить кэширование.

Теперь видно, где ошибка если она есть. И легче проверить.


Как запускать CoT

Три способа, от простого к сложному:

1. Простая инструкция

# Добавь в конец вопроса
"Думай пошагово."
"Разбери задачу по шагам, потом дай ответ."
"Объясни ход рассуждений."

2. Через системный промпт

system = """Перед каждым ответом:
1. Разбери задачу на составные части
2. Реши каждую часть по очереди
3. Дай финальный ответ после рассуждения

Формат:
<reasoning>
... ход мысли ...
</reasoning>
<answer>
... финальный ответ ...
</answer>"""

3. Few-shot CoT — показываешь пример рассуждения

prompt = """Вопрос: Если функция выполняется 50ms и вызывается 20 раз в секунду, какова нагрузка?
Ответ: 
Шаг 1: Время на один вызов — 50ms = 0.05 секунды
Шаг 2: Вызовов в секунду — 20
Шаг 3: Суммарное время — 0.05 × 20 = 1 секунда
Нагрузка составляет 100% одного ядра. Нужна оптимизация или распараллеливание.

Вопрос: {новый вопрос}
Ответ:"""

Когда CoT не нужен

CoT увеличивает количество токенов — а значит время ответа и стоимость. Для простых задач он избыточен.

# Не нужен CoT:
"Переведи на английский: Привет мир"
"Классифицируй отзыв: positive/negative/neutral"
"Исправь опечатки в тексте"

# Нужен CoT:
"Найди баг в этом коде и объясни почему он возникает"
"Спроектируй схему базы данных для этих требований"
"Оцени архитектурные риски этого решения"

Правило: если задача требует нескольких шагов рассуждения или могут быть ошибки в промежуточных вычислениях — используй CoT. Если задача простая и однозначная — не используй.


Скрытый CoT — думаем внутри тегов

Иногда хочется получить только финальный ответ, но с качеством CoT. Просишь модель думать внутри тегов, которые потом обрезаешь:

response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    system="""Перед ответом думай внутри тегов <thinking>...</thinking>.
Пользователю показывай только то, что после тегов.""",
    messages=[{"role": "user", "content": question}]
)

raw = response.content[0].text

# Убираем thinking из финального ответа
import re
answer = re.sub(r'<thinking>.*?</thinking>', '', raw, flags=re.DOTALL).strip()

11 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845