Создание ИИ-агента с нуля: Patterns, ReAct и LangGraph
Изучите основные концепции, лежащие в основе ИИ-агентов — планирование, использование инструментов, рефлексия и шаблон ReAct — а также то, как LangChain и LangGraph помогают создавать такие агенты вручную.
Системы ИИ больше не ограничиваются ответами на отдельные вопросы. Благодаря агентам ИИ модель может планировать последовательность действий, использовать внешние инструменты, оценивать полученные результаты и выполнять задачи, требующие нескольких шагов для завершения.
Что делает что-то агентом ИИ?
Стандартная модель ИИ реагирует на один запрос и выдает один ответ. Агент ИИ действует более активно. Он может:
- Понять, чего на самом деле хочет пользователь
- Разделить эту цель на последовательность действий
- Выбрать и использовать подходящие инструменты
- Проанализировать результаты работы этих инструментов
- Продолжать работу до полного завершения задачи
Возьмем в пример виртуального планировщика поездок, который составляет двухдневную поездку в Канди. Ему необходимо собрать информацию из разных источников, а затем преобразовать её в практический маршрут, а не просто описать его в общих чертах.
Как выглядит рабочий процесс агента
Многие реальные задачи слишком сложны для выполнения за один проход. Рабочий процесс агента решает эту проблему путем разделения задачи на отдельные этапы.
К типичным этапам относятся:
- Планирование
- Исследование
- Написание
- Проверка
- Усовершенствование
Такая структура работы позволяет агенту использовать результаты предыдущих этапов и постоянно совершенствовать свой окончательный ответ.
Повторяющиеся шаблоны в проектировании агентов
При проектировании ИИ-агентов используется несколько устоявшихся шаблонов:
- Планирование: разделение одной крупной задачи на набор более мелких.
- Использование инструментов: обращение к внешним ресурсам, таким как калькуляторы, поисковые системы или базы данных.
- Рефлексия: проверка качества чернового ответа и его усовершенствование.
Эти паттерны дают агентам возможность решать проблемы, которые сложнее для решения с помощью одного лишь обмена запросом и ответом.
Роль LangChain и LangGraph
LangChain предоставляет компоненты, необходимые для создания приложений на основе языковых моделей, включая шаблоны запросов, интеграцию с инструментами и соединители с различными моделями.
LangGraph объединяет отдельные действия в целостную цепочку. Он особенно полезен, когда агенту требуются циклы, постоянная память, вызовы инструментов или возможность вмешательства человека.
Чтобы подвести итог различиям:
- LangChain предоставляет компоненты.
Понимание шаблона ReAct
Шаблон ReAct сочетает в себе процесс рассуждений и действий.
Агент, следующий этому шаблону, циклически выполняет следующие действия:
- Рассуждение о том, что делать дальше
- Выполнение действия
- Проверка результата
- Рассуждение о следующем шаге
Этот цикл продолжается до тех пор, пока агент не будет уверен в возможности получения окончательного ответа.
Цикл ReAct объединяет процессы мышления, действия, наблюдения и предоставления окончательного результата.
Ручное создание простого агента
Рассмотрим возможность создания минимального агента, оснащенного двумя инструментами:
- Инструмент для поиска среднего веса породы собак
- Инструмент для выполнения сложения
Представьте, что пользователь задаёт вопрос примерно такого содержания: сколько будет весить собака породы бордер-колли и шотландский терьер, если сложить их веса.
Столкнувшись с такой просьбой, агент выполняет короткую последовательность действий:
- Смотрим вес бордер-колли: 37 фунтов
- Смотрим вес шотландского терьера: 20 фунтов
- Проводим вычисление с помощью калькулятора по формуле
37 + 20 - Сообщаем общий результат: 57 фунтов
Этот пример показывает, как агент объединяет несколько вызовов инструментов вместо того, чтобы просто догадываться о ответе.
Разделение работы между моделью и средой выполнения
Языковая модель и окружающий её Python-код выполняют отдельные части задачи.
LLM отвечает за:
- Понимание сути заданного вопроса
Среда выполнения Python занимается следующим:
- Фактической работой выбранных инструментов
- Отслеживанием результатов
- Управлением циклом, управляющим агентом
- Подачей результатов работы инструментов обратно в модель
Короче говоря, модель решает, что необходимо сделать, а код на Python выполняет это.
Преобразование цикла в автоматизированный процесс
Вместо того чтобы вручную запускать каждый вызов инструмента, можно автоматизировать весь цикл агента. Система проверяет, хочет ли модель вызвать инструмент:
- Если да, этот инструмент выполняется.
- Результат передается обратно в модель.
- Как только больше не требуются инструменты, агент возвращает окончательный ответ.
Автоматизация цикла в таком виде превращает агента в инструмент, который можно использовать для множества различных запросов пользователей, а не просто в одноразовый скрипт.
Основные моменты, которые следует запомнить
- Агенты ИИ решают задачи, выполняя последовательность шагов.
- Рабочие процессы с участием агентов основаны на планировании, вызове инструментов, наблюдении и постоянной отладке.
- Распространённые шаблоны проектирования включают планирование, использование инструментов, рефлексию, координацию нескольких агентов и управление памятью.
- LangChain предоставляет базовые элементы для создания приложений ИИ.
- LangGraph отвечает за организацию связей между этими элементами в рабочем процессе.
- Подход ReAct объединяет процессы рассуждения, действий и анализа результатов.
- Большие языковые модели принимают решения, в то время как среда выполнения на Python обеспечивает их реализацию.
- Автоматизированный цикл агента продолжает вызывать инструменты до завершения задачи.
Эти основы лежат в основе создания более сложных агентов с использованием LangGraph в будущем.
Следующий этап развития ИИ — это не просто получение более качественных ответов, а создание систем, способных самостоятельно принимать правильные действия.
Связанные статьи
- Что на самом деле автоматизирует LangChain после создания цикла агента — Объясняется, как LangChain, LangGraph и подобные SDK-инструменты используют тот же основной цикл агента, созданный с нуля, и когда использование фреймворка помогает, а когда мешает.