Tree of thought промптинг заставляет языковую модель работать над задачей так, как вы работали бы на бумаге: записать несколько возможных следующих шагов, оценить, какие выглядят перспективными, продолжить их и бросить ветвь, если она никуда не ведёт. Идея пришла из работы Yao et al. 2023, «Tree of Thoughts: Deliberate Problem Solving with Large Language Models». Она расширяет chain of thought промптинг, который идёт по одной линии рассуждения, до поиска по многим линиям.
На этой странице объясняется, как работает исходный метод, есть версия в одном промпте, которую можно попробовать в ChatGPT, Claude или Gemini, и показан цикл в коде для случаев, когда одного промпта мало.
Как работает дерево мыслей
Статья разбивает метод на четыре решения.
- Что считается мыслью. Мысль: это один промежуточный шаг, достаточно маленький, чтобы модель выдала его хорошо, и достаточно большой, чтобы его можно было оценить. В математической головоломке это одно равенство; в задаче на письмо: короткий план.
- Как генерировать мысли. Из текущего частичного решения модель предлагает несколько кандидатов на следующий шаг, либо сэмплируя их независимо, либо перечисляя в одном ответе.
- Как их оценивать. Модель просят оценить каждое частичное решение. В статье использовали два стиля: оценивать каждое состояние отдельно (например, как «точно», «вероятно» или «невозможно») или показать модели несколько состояний и дать ей проголосовать за лучшее.
- Как искать. Программа держит несколько лучших состояний на каждом уровне (поиск в ширину) или идёт по одной ветви вглубь и возвращается, когда оценка говорит, что ветвь безнадёжна (поиск в глубину).
Возьмём задачу из статьи, игру «24»: используя числа 4, 9, 10 и 13 по одному разу и четыре арифметических действия, получить 24. Chain of thought фиксируется на первом равенстве и вынужден с ним жить. Дерево мыслей может попробовать 13 - 9 = 4, 10 - 4 = 6 и 4 + 9 = 13 как первые шаги, спросить модель, из каких оставшихся чисел ещё можно получить 24, отбросить тупик (из 10, 13 и 13 получить 24 нельзя) и прийти к (10 - 4) * (13 - 9) = 24.
Что показала статья
Авторы выбрали три задачи, которые GPT-4 решал с трудом даже с chain of thought, потому что каждая требует планирования или перебора: игру «24», творческое письмо с заданными последними предложениями и мини-кроссворды 5x5. С GPT-4 поиск по дереву решил гораздо больше головоломок «24», чем chain of thought промптинг или сэмплирование нескольких цепочек с выбором ответа большинства, и на двух других задачах тоже показал себя лучше.
Цена: вызовы. Каждый кандидат на шаг и каждая оценка: отдельный запрос, так что одна решённая задача может занять десятки вызовов модели там, где chain of thought стоит один. Этот обмен имеет смысл для трудных задач и не имеет никакого для простых.
Дерево мыслей в одном промпте
Идею можно приблизить одним сообщением: попросить несколько разных подходов, вердикт по каждому с опорой на данные вами факты и развитие только уцелевшего. Вкладки ниже отправляют одну и ту же задачу обоими способами.
Главная причина: физическое расстояние между Австралией и вашим сервером во Франкфурте. Каждый запрос должен дойти до Европы и вернуться, а при 40 запросах на каждую загрузку страницы эта задержка накапливается.
Стандартное решение: CDN (сеть доставки контента). CDN хранит копии вашего сайта на серверах по всему миру, так что австралийские пользователи загружают его с ближайшего узла, а не из Франкфурта. Большинство провайдеров позволяют поставить CDN перед существующим сайтом без изменения кода.
Ещё можно сжать изображения и включить кеширование в браузере, чтобы дополнительно сократить время загрузки.
Прямой ответ не абсурден; он даже учитывает 40 запросов, но берёт первое подходящее объяснение («расстояние») и бежит с ним дальше. Ответ с ветвлением проверил каждое объяснение на соответствие деталям промпта и поэтому заметил, что «один за другим» важнее, чем «Австралия», и что CDN не затронет API-вызовы.
Шаблон для повторного использования
Та же структура работает для выбора архитектуры и планов. Впишите задачу и важные для вас критерии; ответ показан для значений по умолчанию.
Платформа как услуга (управляемый хостинг приложений) Стоимость: умеренная, растёт с трафиком. Настройка: меньше часа из Git-репозитория. Поддержка: низкая, хостинг сам обновляет ОС. Оставить.
Собственный виртуальный сервер Стоимость: самая низкая. Настройка: день на сервер, TLS и менеджер процессов. Поддержка: высокая, обновления и перезапуски на вас. Отбросить для команды из трёх человек.
Serverless-функции Стоимость: очень низкая на малом масштабе. Настройка: умеренная, существующее серверное приложение может потребовать переделки. Поддержка: низкая, но холодные старты добавляют задержку. Оставить как запасной вариант.
Лучший: платформа как услуга. Первые шаги:
- Добавить скрипт запуска и читать порт из переменной окружения.
- Перенести секреты в настройки окружения хостинга.
- Подключить репозиторий и развернуть основную ветку.
- Добавить эндпоинт для проверки работоспособности.
- Настроить оповещение о расходах.
Где одного промпта не хватает
Версия в одном промпте сохраняет словарь метода, но теряет большую часть механики.
- Нет настоящего возврата назад. Модель пишет все ветви и вердикты за один проход. Если шаг 3 выбранной ветви провалится, ничто не вернёт её к шагу 1.
- Судья: сам автор. Тот же ответ, который предложил идею, её же и оценивает, поэтому он склонен выбирать ветвь, которую уже держал в голове. В статье оценка: отдельный вызов, сделанный после того, как кандидаты уже существуют.
- Ветви не независимы. Идеи, перечисленные в одном ответе, влияют друг на друга и часто оказываются вариациями одной темы. Просьба о «действительно разных» подходах, как в шаблоне, этому противодействует, но не устраняет.
- Рассуждающие модели и так ветвятся. Модели, которые думают перед ответом, внутри пробуют и отбрасывают подходы. Им этот промпт добавляет меньше точности; его оставшаяся ценность в том, что вы видите отвергнутые варианты и можете не согласиться с рассуждением.
Настоящий поиск по дереву в коде
Полный метод: цикл в вашей программе. Сгенерировать кандидатов на шаг, оценить каждое частичное решение отдельным вызовом, оставить несколько лучших, повторить. Это минимальная версия с поиском в ширину на Python SDK от OpenAI; та же схема работает с любым провайдером.
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
def ask(prompt, temperature=0.7):
response = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
)
return response.choices[0].message.content.strip()
def propose(problem, path, k=3):
steps = "\n".join(path) or "(none yet)"
prompt = f"Problem: {problem}\nSteps so far:\n{steps}\nPropose the next step only."
return [ask(prompt) for _ in range(k)]
def score(problem, path):
steps = "\n".join(path)
prompt = (f"Problem: {problem}\nPartial solution:\n{steps}\n"
"How likely is this to lead to a correct solution? Reply with a number from 1 to 10 only.")
try:
return float(ask(prompt, temperature=0))
except ValueError:
return 0.0
def tree_of_thought(problem, depth=3, keep=2):
frontier = [[]]
for _ in range(depth):
candidates = [path + [step] for path in frontier for step in propose(problem, path)]
candidates.sort(key=lambda p: score(problem, p), reverse=True)
frontier = candidates[:keep]
return frontier[0]
При depth=3, keep=2 и трёх предложениях на состояние один запуск делает около тридцати вызовов. Для многих задач self-consistency промптинг (несколько полных ответов, голосование большинством) или фиксированная последовательность шагов через цепочку промптов дают большую часть выигрыша за меньшее число вызовов. Беритесь за дерево, когда задача требует перебора: много возможных первых ходов и способ рано распознать тупик.
Часто задаваемые вопросы
Что такое tree of thought промптинг?
Tree of thought (дерево мыслей): это способ решать задачи, при котором модель предлагает несколько возможных следующих шагов, оценивает, насколько перспективен каждый, и продолжает только лучшие ветви, возвращаясь назад, когда ветвь не срабатывает. Он пришёл из статьи 2023 года «Tree of Thoughts: Deliberate Problem Solving with Large Language Models» Yao et al. В статье ветвлением и оценкой управляет программа, которая вызывает модель много раз.
Чем tree of thoughts отличается от chain of thought?
Chain of thought идёт по одной линии рассуждения от начала до конца, поэтому ранняя ошибка доходит до ответа. Tree of thoughts держит несколько частичных решений одновременно, оценивает их и отбрасывает слабые, поэтому может оправиться после неудачного первого шага. Цена: гораздо больше вызовов модели.
Можно ли использовать tree of thoughts в ChatGPT или Claude?
Можно использовать приближение: один промпт, который просит модель перечислить несколько подходов, оценить каждый по вашим критериям, отбросить слабые и развить лучший. Это работает в любом чат-приложении. Это не полный метод, потому что всё происходит в одном ответе, и модель оценивает свои идеи за тот же проход, в котором их написала.
Полезен ли tree of thought промптинг для рассуждающих моделей?
Меньше, чем раньше. Модели, которые думают перед ответом, и так внутри пробуют и отбрасывают подходы, поэтому просьба ветвиться добавляет меньше. Версия в одном промпте всё ещё полезна, когда вы хотите видеть варианты и причины, по которым их отвергли, чтобы проверить суждение самому.
Когда использовать tree of thought промптинг?
Используйте его для задач с несколькими правдоподобными подходами, где первая идея часто оказывается неверной: планирование, выбор архитектуры, диагностика проблемы по симптомам и головоломки, требующие перебора. Для вопроса с одним очевидным путём обычный chain of thought дешевле и не хуже.