Tree of Thoughts (дерево мыслей) — паттерн deliberate search, в котором система рассматривает несколько альтернативных путей рассуждения, оценивает их и продолжает только перспективные ветки. В 2026 его полезно воспринимать уже не как чисто prompt-технику, а как search orchestration pattern: реальная сила ToT появляется там, где дерево живёт во внешнем workflow, а не только в одном длинном ответе модели.
Представьте, что вы решаете сложную задачу и рассматриваете несколько вариантов: «Можно пойти так... а можно вот так». Вы мысленно прикидываете, куда приведёт каждый путь, и выбираете лучший. Tree of Thoughts заставляет модель делать то же самое — не идти по первому попавшемуся пути, а исследовать несколько вариантов.
Tree of Thoughts — это когда модель не просто рассуждает по шагам (как в CoT), а рассматривает несколько вариантов на каждом шаге, оценивает их перспективность и может отказаться от тупикового пути и вернуться к другому.
Похоже на игру в шахматы: перед ходом вы продумываете несколько вариантов, оцениваете последствия каждого и выбираете лучший.
ПромптClaude Sonnet 4
Задача: Придумай план автоматизации рутинных задач для маленькой пекарни. Бюджет ограничен.
Используй подход «дерево мыслей»:
1. Предложи 3 разных направления автоматизации
2. Для каждого оцени: стоимость, эффект, сложность внедрения
3. Выбери лучший вариант и обоснуй
Ответ модели
Направление 1: Автоматизация заказов (онлайн-форма + уведомления)
Стоимость: низкая (бесплатные инструменты)
Эффект: средний (экономия 1-2 часа/день)
Сложность: низкая
Оценка: перспективно
Направление 2: Автоматизация учёта (1С или аналог)
Стоимость: средняя (подписка + настройка)
Эффект: высокий (полная прозрачность финансов)
Сложность: средняя
Оценка: перспективно, но не первый приоритет
Направление 3: Роботизация производства (тестомес с автоуправлением)
Стоимость: высокая (оборудование)
Эффект: высокий при масштабе
Сложность: высокая
Оценка: не подходит при ограниченном бюджете ✗
Вывод: Начать с Направления 1 (автоматизация заказов) — минимальные вложения, быстрый результат. Затем переходить к Направлению 2.
Подходит для: сложных задач планирования, креативных задач, задач с несколькими возможными решениями, стратегического анализа.
Chain of Thought — мощная техника, но у неё есть ограничение: модель идёт по одному пути рассуждения. Если на каком-то шаге она выбрала неверное направление — вся цепочка может привести к ошибке. Возможности вернуться и попробовать другой путь нет.
Tree of Thoughts решает эту проблему тремя способами:
Yao et al. (2023) формализовали подход, используя два классических алгоритма обхода дерева:
BFS (Breadth-First Search, поиск в ширину) — модель рассматривает все варианты на текущем уровне, оценивает их, оставляет лучшие и переходит к следующему уровню. Хорошо, когда нужно сравнить много вариантов.
DFS (Depth-First Search, поиск в глубину) — модель углубляется по одному пути до конца, и если он тупиковый — возвращается. Хорошо, когда нужно быстро найти хоть какое-то решение.
Сегодня Tree of Thoughts важен скорее как архитектурный шаблон:
внешний рантайм управляет деревом;
модель предлагает продолжения веток;
evaluator или judge помогает prune-ить пространство;
человек или система выбирает stop condition.
Именно поэтому ToT лучше сочетается с workflow engines, traces и evals, чем с идеей "один очень длинный суперпромпт". Сам по себе prompt-only ToT возможен, но его предел наступает быстро.
Классический пример из оригинальной статьи — из четырёх чисел получить 24, используя арифметические операции.
ПромптClaude Sonnet 4
Задача: из чисел 4, 7, 8, 8 получи ровно 24, используя +, −, ×, ÷. Каждое число используй ровно один раз.
Используй метод дерева мыслей:
- Предложи 3 начальных варианта (какие два числа объединить первыми)
- Оцени каждый: какой ближе к цели?
- Продолжи самый перспективный
Задача: IT-стартап хочет выйти на рынок за 6 месяцев с бюджетом 3 млн руб.
Применяй дерево мыслей:
1. Предложи 3 стратегии вывода продукта
2. Для каждой оцени: укладывается ли в бюджет? Реально ли за 6 месяцев? Каков риск?
3. Отсеки нежизнеспособные, выбери лучшую
Ответ модели
Стратегия 1: MVP + запуск через Product Hunt и Telegram-каналы
Бюджет: ~1.5 млн (разработка MVP + маркетинг)
Сроки: 4-5 месяцев — укладывается ✓
Риск: средний (зависим от виральности)
Оценка: перспективно, продолжаем
Стратегия 2: Полноценный продукт + партнёрства с компаниями
Бюджет: ~5 млн (разработка + B2B-продажи)
Сроки: 8-10 месяцев
Риск: высокий (не укладываемся ни в бюджет, ни в сроки)
Оценка: не подходит ✗
Стратегия 3: White-label на базе существующего решения + кастомизация
Бюджет: ~2 млн (лицензия + кастомизация + маркетинг)
Сроки: 3-4 месяца — отлично ✓
Риск: средний (зависимость от платформы)
Оценка: перспективно, но есть зависимость
Сравнение перспективных (1 vs 3):
Стратегия 1: больше контроля, но выше трудоёмкость
Стратегия 3: быстрее, но зависимость от вендора
Рекомендация: Стратегия 1 (MVP + виральный маркетинг). Больше контроля, развиваемая архитектура, укладывается в бюджет.
Придумай название для приложения по изучению иностранных языков.
Используй дерево мыслей:
1. Предложи 3 концепции названия (разные подходы)
2. Для каждой сгенерируй 2 варианта
3. Оцени все по критериям: запоминаемость, доступность домена, ассоциации
4. Выбери лучший
Ответ модели
Концепция A: Метафора путешествия
LinguaTrip → запоминается, но LinguaTrip уже занято ✗
WordWay → просто, но слишком общее
Оценка: средняя
Концепция B: Игровая/дружелюбная
Болтай (Boltai) → ассоциация с разговором, уникально ✓
Слововорот → креативно, но длинное
Оценка: перспективно
Концепция C: Образовательная/серьёзная
LangCore → звучит технически, не для массовой аудитории
СловоМастер → понятно, но скучновато
Оценка: слабая
Финальная оценка:
Болтай: запоминаемость 9/10, уникальность 8/10, ассоциации 9/10
WordWay: запоминаемость 6/10, уникальность 4/10, ассоциации 5/10
Рекомендация: «Болтай» — запоминается, ассоциируется с разговорной практикой, подходит для русскоязычной аудитории.
задач, где ответ либо очевиден, либо лучше решается retrieval plus verification.
Не используйте Tree of Thoughts для задач, где ответ очевиден. Если задача решается одной цепочкой рассуждений — Chain of Thought достаточно. ToT нужен, когда есть несколько возможных путей, и неочевидно, какой из них правильный.
import anthropic
client = anthropic.Anthropic()
def generate_thoughts(
task: str, current_state: str, n: int = 3
) -> list[str]:
"""Генерация n вариантов следующего шага."""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{
"role": "user",
"content": (
f"Задача: {task}\n\n"
f"Текущее состояние:\n{current_state}\n\n"
f"Предложи ровно {n} различных варианта "
"следующего шага. Каждый вариант на новой "
"строке, начиная с номера (1., 2., 3.)."
),
}
],
)
text = message.content[0].text
thoughts = []
for line in text.strip().split("\n"):
line = line.strip()
if line and line[0].isdigit():
# Убираем номер в начале
thought = line.lstrip("0123456789.)- ").strip()
if thought:
thoughts.append(thought)
return thoughts[:n]
def evaluate_thought(
task: str, thought: str
) -> float:
"""Оценка перспективности варианта (0.0 — 1.0)."""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=128,
messages=[
{
"role": "user",
"content": (
f"Задача: {task}\n\n"
f"Предложенный шаг: {thought}\n\n"
"Оцени перспективность этого шага "
"для решения задачи. Ответь одним словом:\n"
"- 'отлично' (очень перспективно)\n"
"- 'хорошо' (может привести к решению)\n"
"- 'плохо' (скорее тупик)"
),
}
],
)
text = message.content[0].text.strip().lower()
if "отлично" in text:
return 1.0
elif "хорошо" in text:
return 0.5
return 0.0
def tree_of_thoughts_bfs(
task: str,
max_depth: int = 3,
beam_width: int = 2,
n_thoughts: int = 3,
) -> str:
"""
Tree of Thoughts с BFS (поиск в ширину).
На каждом уровне:
1. Для каждого текущего пути генерируем n_thoughts вариантов
2. Оцениваем все варианты
3. Оставляем beam_width лучших
"""
# Начальное состояние
current_paths = [("Начало решения.", 1.0)]
for depth in range(max_depth):
candidates = []
for path, score in current_paths:
thoughts = generate_thoughts(task, path, n_thoughts)
for thought in thoughts:
new_path = f"{path}\nШаг {depth + 1}: {thought}"
thought_score = evaluate_thought(task, new_path)
candidates.append((new_path, thought_score))
# Оставляем лучшие
candidates.sort(key=lambda x: x[1], reverse=True)
current_paths = candidates[:beam_width]
if not current_paths:
break
# Возвращаем лучший путь
best_path = current_paths[0][0] if current_paths else "Решение не найдено."
return best_path
result = tree_of_thoughts_bfs(
task="Придумай маркетинговую стратегию для запуска онлайн-курса по Python",
max_depth=3,
beam_width=2,
n_thoughts=3,
)
print(result)
Не устанавливайте слишком большие значения beam_width и max_depth. Каждый шаг — это вызов API. При beam_width=3 и max_depth=4 вы получите десятки вызовов, что дорого и медленно. Начинайте с beam_width=2, max_depth=3.
На задаче «Игра в 24» (данные из оригинальной статьи Yao et al.) Tree of Thoughts превосходит все другие техники с огромным отрывом. Это задача, где критичны поиск и backtracking — именно то, для чего создан ToT.