Промпт Инженерия by Lee Boonstra (Часть 8)

Дерево Мыслей (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?

  1. Рассуждение: LLM анализирует задачу и формирует план действий.
  2. Действие: Модель выполняет действия (например, поиск в интернете) и получает результат.
  3. Обновление: На основе новых данных 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 выполняет цепочку из пяти поисковых запросов:

  1. Определяет состав Metallica (4 участника).
  2. Для каждого участника находит количество детей.
  3. Суммирует результаты и выдаёт итоговый ответ.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

пятнадцать − 7 =

Прокрутить вверх