Когда ты просишь модель оценить прибыль заказа или решить, выгодная ли это сделка — ответ «да/нет» без рассуждения может быть случайной угадайкой. Chain-of-thought (CoT) — это способ попросить модель сначала рассуждать, потом отвечать. На многошаговых задачах это стабильно повышает точность.
Простые задачи: классификация типа лестницы, извлечение поля из текста, проверка регулярки. CoT тут добавляет только задержку и токены.
Перед ответом коротко оцени:
1. Какие материалы нужны по BOM?
2. Сколько часов работы?
3. Есть ли риски (редкое дерево, срок)?
Потом дай итоговую рекомендацию.
Что здесь происходит: рассуждение попадает в ответ вперемешку с итогом. Для отображения пользователю может быть ок, для парсинга кодом — не очень.
Рассуждение положи в <thinking>, финальный вывод — в <recommendation>.
Внутри <recommendation> — валидный JSON:
{"status": "ok"|"risky"|"reject", "reason": string, "margin_pct": number}
Что здесь происходит: рассуждение и результат в разных
тегах. Regex или парсер выдёргивает только JSON из
<recommendation>. Содержимое
<thinking> логируешь для отладки, пользователю не
показываешь.
У Claude в API есть параметр thinking, у OpenAI — семейство o-моделей (o3, o4-mini), которые по умолчанию «думают» перед ответом. Они стоят дороже за вход, но на сложных оценках обычно точнее, чем gpt-5.x + ручной CoT.
val prompt = """
Ты — опытный прораб по производству лестниц. Ревизуй смету, найди
ошибки и недостающие позиции.
Рассуждение положи в <thinking>:
1. Все ли материалы учтены? (основной массив, крепёж, клей, лак)
2. Адекватны ли количества при заданных размерах?
3. Нет ли подозрительно низких или высоких цен?
Итог — в <review>:
{"issues": [{"severity": "low|med|high", "text": "..."}], "summary": "..."}
Смета:
${estimate.toJson()}
""".trimIndent()
Что здесь происходит: ты явно задаёшь модели структуру
рассуждения — три пункта. Модель не пропустит ни один. Затем возвращает
списочный отчёт с уровнями важности. Кодом достаёшь
<review>, парсишь JSON, отображаешь в UI как список
«что проверить перед отправкой клиенту».
На сложных задачах модель Claude 4.6+ может уходить в бесконечное исследование. Если видишь это — добавь:
Выбери подход и придерживайся его. Не пересматривай решение без
новых фактов. Если видишь два варианта — выбери один и доведи.
<thinking>.
Логируй thinking-блоки — это золото для отладки.
<thinking> конечному
пользователю. Это внутреннее. Пользователь видит только
<recommendation>.