Дерево Мыслей (Tree of Thoughts, ToT)
Теперь, когда мы знакомы с методом «цепочки рассуждений» (chain of thought) и prompting’ом на основе самосогласованности (self-consistency), давайте рассмотрим Дерево Мыслей (ToT). Этот подход обобщает концепцию CoT, позволяя большим языковым моделям (LLM) исследовать несколько путей рассуждений одновременно, а не следовать единственной линейной цепочке. Это проиллюстрировано на Рисунке 1.


Рисунок 1. Сравнение prompting’а с цепочкой рассуждений (слева) и prompting’а с деревом мыслей (справа).
Такой подход делает ToT особенно полезным для сложных задач, требующих исследования. Он работает за счёт поддержания дерева мыслей, где каждая «мысль» представляет собой последовательность языковых конструкций — промежуточный шаг к решению задачи. Модель может исследовать разные пути рассуждений, ветвясь от узлов дерева.
ReAct (Reason & Act — «Рассуждай и Действуй»)
ReAct — это метод prompting’а, который позволяет LLM решать сложные задачи, комбинируя естественные рассуждения с использованием внешних инструментов (поиск, интерпретатор кода и т. д.). Это даёт модели возможность выполнять действия, например, взаимодействовать с внешними API для получения информации, что является первым шагом к созданию агентных моделей.
ReAct имитирует поведение человека в реальном мире: мы рассуждаем вслух и можем предпринимать действия для получения данных. Этот метод показывает высокую эффективность в различных областях по сравнению с другими подходами.
Как работает ReAct?
Проверь свои знания в наших бесплатных тестах по ИИ! Пройди тест и узнай, насколько хорошо ты разбираешься в технологиях искусственного интеллекта!
- Рассуждение: LLM анализирует задачу и формирует план действий.
- Действие: Модель выполняет действия (например, поиск в интернете) и получает результат.
- Обновление: На основе новых данных LLM корректирует рассуждения и повторяет цикл до решения задачи.
Практическая реализация
Для демонстрации потребуется написать код. В Листинге 1 используется фреймворк LangChain для Python вместе с VertexAI (google-cloud-aiplatform) и пакетом google-search-results.
Примечание: Для запуска примера необходимо получить (бесплатный) ключ SerpAPI на сайте и установить переменную окружения SERPAPI_API_KEY
.
Задача для LLM: «Сколько детей имеют знаменитых отцов, играющих в группе Metallica?»
Python
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import VertexAI
prompt = "How many kids do the band members of Metallica have?"
llm = VertexAI(temperature=0.1)
tools = load_tools(["serpapi"], llm=llm)
agent = initialize_agent(tools, llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run(prompt)
Листинг 1. Создание ReAct-агента с помощью LangChain и VertexAI
Начало работы цепочки AgentExecutor...
У Metallica 4 участника.
Действие: Поиск
Ввод для действия: Сколько детей у Джеймса Хэтфилда?
Наблюдение: трое детей
Мысль: 1/4 участников Metallica имеют 3 детей
Действие: Поиск
Ввод для действия: Сколько детей у Ларса Ульриха?
Наблюдение: 3
Мысль: 2/4 участников Metallica имеют 6 детей (в сумме)
Действие: Поиск
Ввод для действия: Сколько детей у Кирка Хэммета?
Наблюдение: Хэммет женат на своей второй супруге Лани с 1998 года. У них двое сыновей — Энджел (род. 29.09.2006) и Винченцо (род. 28.06.2008).
Мысль: 3/4 участников Metallica имеют 8 детей (в сумме)
Действие: Поиск
Ввод для действия: Сколько детей у Роберта Трухильо?
Наблюдение: 2
Мысль: 4/4 участников Metallica имеют 10 детей (в сумме)
Финальный ответ: 10
Листинг 2 показывает результат. ReAct выполняет цепочку из пяти поисковых запросов:
- Определяет состав Metallica (4 участника).
- Для каждого участника находит количество детей.
- Суммирует результаты и выдаёт итоговый ответ.