Перейти к содержанию
Innovialabs

Chain-of-thought: как заставить LLM рассуждать по шагам

Практика3 мин

Коротко

Chain-of-thought — это просьба к модели сначала рассуждать по шагам, а потом давать ответ; это помогает в задачах с расчётами, логикой и несколькими условиями. В продакшене рассуждение отделяют тегами или полями JSON и показывают пользователю только итог.

Что такое chain-of-thought и когда он помогает

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

CoT обычно помогает в задачах, где ответ нельзя выдать сразу:

  • расчёты: суммы, скидки, сроки, конвертация единиц;
  • логика с несколькими условиями: «подходит ли клиент под тариф, если…»;
  • анализ документа: найти противоречия, сверить данные из разных мест;
  • классификация со сложными правилами, где важно учесть исключения.

Где CoT почти бесполезен: простое извлечение факта, перевод, короткий ответ по шаблону. Там он только увеличивает длину ответа, задержку и стоимость.

Многие современные модели умеют рассуждать сами (так называемые reasoning-модели или режим «расширенного мышления»). Для них явная просьба «думай по шагам» часто не нужна — достаточно включить соответствующий режим через API.

Как запросить рассуждение

Простой вариант

Добавьте в промпт инструкцию: «Сначала рассуди по шагам, затем дай ответ». Это уже меняет поведение модели.

Структурированный вариант

Лучше задать конкретные шаги и отделить рассуждение от ответа:

Определи, положена ли клиенту бесплатная доставка.

Правила: {правила}
Заказ: {данные заказа}

Сначала в теге <thinking> по шагам:
1. Выпиши сумму заказа и город.
2. Проверь каждое правило.
3. Учти исключения.

Затем в теге <answer> дай только "да" или "нет" и одно предложение причины.

С примерами

Можно совместить с few-shot: в примерах показать короткое рассуждение и ответ. Модель повторит стиль рассуждения.

Как скрыть рассуждение в продакшене

Пользователю чат-бота не нужно видеть черновик модели. Варианты:

СпособКак работаетКогда подходит
ТегиРассуждение в <thinking>, ответ в <answer>; код показывает только <answer>Простой текстовый вывод
Поля JSON{"reasoning": "...", "answer": "..."}; в интерфейс уходит только answerИнтеграции, API
Два запросаПервый запрос рассуждает, второй формулирует ответ для пользователяКогда нужен отполированный текст
Встроенный режим рассужденийМодель думает в отдельном блоке ответа APIЕсли модель это поддерживает

Пример разбора ответа:

import re

def extract_answer(text: str) -> str:
    match = re.search(r"<answer>(.*?)</answer>", text, re.DOTALL)
    return match.group(1).strip() if match else ""

Если тег не найден — не показывайте пользователю весь сырой текст. Повторите запрос или верните нейтральное сообщение об ошибке.

Типичные ошибки

  • CoT везде. Пошаговое рассуждение в простых задачах только тратит токены.
  • Рассуждение после ответа. Если модель сначала пишет ответ, а потом «обосновывает» его, точность не растёт. Рассуждение должно идти до ответа.
  • Рассуждение видно пользователю. Черновик может содержать сомнения, внутренние правила и лишние детали.
  • Вера в рассуждение как в доказательство. Шаги выглядят логично, но могут содержать ошибку. Для критичных расчётов проверяйте результат кодом.
  • Нет лимита. Без ограничений рассуждение может быть очень длинным. Задайте конкретные шаги или ограничьте объём.

Как понять, что CoT действительно помогает

  1. Соберите набор тестовых задач с известными ответами.
  2. Сравните точность с CoT и без него.
  3. Учтите цену: длину ответа и время отклика.
  4. Оставьте CoT только там, где выигрыш в качестве стоит этих затрат.

Частые вопросы

Обычно явная просьба рассуждать им не нужна: они делают это сами. Но полезно по-прежнему чётко описывать задачу, критерии и формат ответа.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.