Курс по созданию AI-агентов от Hugging Face (Часть Вторая)
Перевел (с сокращениями) для телеграм канала @prompt_design (подписывайтесь)
Введение в агентные фреймворки
Добро пожаловать во второй модуль курса, в котором мы рассмотрим различные агентные фреймворки, позволяющие создавать мощные агентные приложения.
- Когда следует использовать агентный фреймворк?
- Модули агентных фреймворков
- Введение в smolagents
- Что такое smolagents?
- Типы агентов в smolagents
- Кодовые агенты
- Агенты с вызовом инструментов
- Инструменты
- Агенты для извлечения информации
- Мультиагентные системы
- Агенты с поддержкой компьютерного зрения
Когда следует использовать агентный фреймворк?
Агентный фреймворк не всегда необходим при создании приложений на основе больших языковых моделей (LLM). Такие фреймворки предоставляют гибкость в организации рабочего процесса для эффективного решения конкретной задачи, однако часто достаточно заранее определённых рабочих процессов.
Если подход к созданию агента достаточно прост, например, представляет собой цепочку подсказок, использование обычного кода может быть вполне достаточным. Преимущество такого решения заключается в том, что разработчик сохраняет полный контроль над системой и лучше понимает её работу, без лишних абстракций.
Однако, когда рабочий процесс становится более сложным — например, когда LLM должен вызывать функции или когда задействовано несколько агентов — такие абстракции оказываются весьма полезными.
Исходя из этого, можно выделить несколько необходимых возможностей для агентного фреймворка:
- Движок LLM, обеспечивающий работу системы.
- Список инструментов, к которым агент имеет доступ.
- Парсер для извлечения вызовов инструментов из вывода LLM.
- Системная подсказка, синхронизированная с парсером.
- Система памяти.
- Логирование ошибок и механизмы повторных попыток для контроля ошибок LLM.
Мы рассмотрим, как эти вопросы решаются в различных фреймворках, включая smolagents
, LlamaIndex
и LangGraph
.
Модули агентных фреймворков
smolagents
Агентный фреймворк, разработанный Hugging Face.
Автор: Sergio Paniego – Hugging Face, X, LinkedIn
Для обновлений смотрите репозиторий на GitHub.
Введение в smolagents
Добро пожаловать в этот модуль, в котором вы научитесь создавать эффективных агентов с использованием библиотеки smolagents — лёгкого фреймворка для создания способных ИИ-агентов.
smolagents — это библиотека от Hugging Face. Если вам понравится материал, поддержите проект, поставив звезду на репозитории smolagents.
Обзор модуля
В данном модуле представлен всесторонний обзор ключевых концепций и практических стратегий построения интеллектуальных агентов с использованием библиотеки smolagents.
При наличии множества доступных open-source фреймворков важно понимать, какие компоненты и возможности делают smolagents полезным вариантом, а также когда может оказаться предпочтительнее выбрать другое решение.
Мы рассмотрим следующие типы агентов:
- CodeAgents — агенты, ориентированные на задачи разработки программного обеспечения, которые генерируют Python-код для выполнения действий.
- ToolCallingAgents — агенты, которые вместо кода создают JSON или текстовые фрагменты, требующие парсинга и интерпретации для выполнения действий.
- Retrieval Agents — агенты, способные осуществлять поиск, синтезировать и извлекать информацию из различных источников.
Кроме того, модуль охватывает темы оркестрации нескольких агентов и интеграции возможностей компьютерного зрения и веб-браузинга, что открывает новые возможности для динамичных и контекстно-осведомлённых приложений.
В этом модуле возвращается Альфред — агент из первого модуля. На этот раз он использует фреймворк smolagents для своих внутренних процессов. Вместе мы изучим ключевые концепции этого фреймворка, пока Альфред решает различные задачи. Ему предстоит организовать вечеринку в усадьбе Уэйна, пока семья Уэйн отсутствует, и у него предвидится масса дел. Присоединяйтесь, чтобы узнать, как он справляется с этими задачами с помощью smolagents!
В рамках данного модуля вы научитесь создавать ИИ-агентов с помощью библиотеки smolagents. Ваши агенты смогут осуществлять поиск данных, выполнять код и взаимодействовать с веб-страницами, а также комбинировать несколько агентов для создания более мощных систем.
Содержание модуля:
1️⃣ Почему стоит использовать smolagents
smolagents — один из множества доступных open-source фреймворков для разработки приложений на базе ИИ-агентов. Альтернативные решения, такие как LlamaIndex и LangGraph, также рассматриваются в других модулях курса. Здесь мы обсудим преимущества и недостатки smolagents, чтобы вы могли принять обоснованное решение, основываясь на требованиях вашего проекта.
2️⃣ CodeAgents
CodeAgents — это основной тип агентов в smolagents. Вместо генерации JSON или текстовых фрагментов, эти агенты создают Python-код для выполнения действий. В этом разделе модуля вы узнаете о назначении и принципах работы CodeAgents и познакомитесь с практическими примерами их использования.
3️⃣ ToolCallingAgents
ToolCallingAgents — второй тип агентов, поддерживаемых smolagents. В отличие от CodeAgents, которые генерируют Python-код, эти агенты используют JSON или текстовые блоки, которые система должна парсить и интерпретировать для выполнения действий. В данном разделе рассмотрены особенности работы ToolCallingAgents, их отличия от CodeAgents и приведён пример их применения.
4️⃣ Инструменты
Как мы уже видели в модуле 1, инструменты представляют собой функции, которые может использовать языковая модель в агентной системе, и являются основными строительными блоками поведения агента. В этом разделе вы узнаете, как создавать инструменты, какова их структура, а также ознакомитесь с различными методами реализации с помощью класса Tool
или декоратора @tool
. Вы также узнаете о стандартном наборе инструментов, способах их обмена с сообществом и загрузке инструментов, созданных другими участниками сообщества.
5️⃣ Retrieval Agents
Retrieval agents позволяют моделям получать доступ к базам знаний, что даёт возможность осуществлять поиск, синтезировать и извлекать информацию из нескольких источников. Они используют векторные хранилища для эффективного поиска и реализуют паттерны Retrieval-Augmented Generation (RAG). Эти агенты особенно полезны для интеграции веб-поиска с пользовательскими базами знаний, сохраняя при этом контекст беседы посредством систем памяти. В этом разделе обсуждаются стратегии реализации, включая механизмы резервного копирования для надёжного извлечения информации.
6️⃣ Мультиагентные системы
Эффективное оркестрирование нескольких агентов имеет решающее значение для построения мощных мультиагентных систем. Объединяя агентов с различными возможностями — например, агента веб-поиска с агентом для выполнения кода — можно создать более сложные и эффективные решения. Этот раздел посвящён проектированию, реализации и управлению мультиагентными системами с целью максимизации их эффективности и надёжности.
7️⃣ Агенты с возможностями зрения и браузера
Агенты с поддержкой зрения расширяют традиционные возможности, интегрируя модели "Vision-Language" (VLM), что позволяет им обрабатывать и интерпретировать визуальную информацию. В данном разделе вы узнаете, как разрабатывать и интегрировать агентов, основанных на VLM, что открывает доступ к таким функциям, как визуальное рассуждение, анализ данных и мультимодальное взаимодействие. Мы также создадим агента для браузера, способного осуществлять поиск в интернете и извлекать из него информацию.
Ресурсы
- Документация smolagents — официальная документация по библиотеке smolagents.
- Building Effective Agents — исследовательская работа о архитектурах агентов.
- Agent Guidelines — рекомендации по построению надёжных агентов.
- LangGraph Agents — дополнительные примеры реализации агентов.
- Function Calling Guide — руководство по использованию вызовов функций в LLM.
- RAG Best Practices — рекомендации по реализации эффективных схем RAG.
Что такое smolagents?
smolagents — это простой, но мощный фреймворк для создания ИИ-агентов. Он предоставляет LLM (большим языковым моделям) возможность взаимодействовать с реальным миром, например, осуществлять поиск или генерировать изображения.
Как мы узнали в модуле 1, ИИ-агенты — это программы, которые используют LLM для генерации «мыслей» на основе «наблюдений» с целью выполнения «действий». Давайте рассмотрим, как эта идея реализована в smolagents.
Ключевые преимущества smolagents
- Простота: Минимальная сложность кода и абстракций, что делает фреймворк лёгким для понимания, внедрения и расширения.
- Гибкая поддержка LLM: Работает с любыми LLM благодаря интеграции с инструментами Hugging Face и внешними API.
- Подход «код в приоритете»: Первоклассная поддержка Code Agents, которые пишут свои действия непосредственно в виде кода, что устраняет необходимость в парсинге и упрощает вызов инструментов.
- Интеграция с HF Hub: Бесшовная интеграция с Hugging Face Hub позволяет использовать Gradio Spaces в качестве инструментов.
Когда использовать smolagents?
Учитывая перечисленные преимущества, smolagents идеально подходит, если:
- Вам требуется лёгкое и минимальное решение.
- Вы хотите быстро экспериментировать без сложных настроек.
- Логика вашего приложения достаточно проста.
Код против JSON-действий
В отличие от других фреймворков, где агенты записывают действия в формате JSON, smolagents делает упор на вызовы инструментов в виде кода, что упрощает процесс выполнения. Это связано с тем, что отсутствует необходимость парсить JSON для создания кода, который вызывает инструменты — вывод можно выполнить напрямую.
Для подробного ознакомления с разницей между кодовыми и JSON-действиями вы можете вернуться к разделу «Actions» в модуле 1.
Типы агентов в smolagents
Агенты в smolagents работают в несколько этапов.
Каждый MultiStepAgent выполняет:
Помимо основного типа агента — CodeAgent, smolagents также поддерживает ToolCallingAgent, который записывает вызовы инструментов в формате JSON.
В следующих разделах мы рассмотрим каждый тип агента более подробно.
Для определения инструментов в smolagents используется декоратор @tool
, который оборачивает Python-функцию, или применяется класс Tool
.
Интеграция моделей в smolagents
smolagents поддерживает гибкую интеграцию LLM, позволяя использовать любую вызываемую модель, соответствующую определённым критериям. Фреймворк предоставляет несколько предопределённых классов для упрощения подключения моделей:
- TransformersModel: Реализует локальный pipeline из библиотеки
transformers
для бесшовной интеграции. - HfApiModel: Поддерживает безсерверные вызовы inference через инфраструктуру Hugging Face или через сторонних провайдеров.
- LiteLLMModel: Использует LiteLLM для лёгкого взаимодействия с моделями.
- OpenAIServerModel: Подключается к любому сервису, предлагающему интерфейс OpenAI API.
- AzureOpenAIServerModel: Обеспечивает интеграцию с любым развертыванием Azure OpenAI.
Эта гибкость позволяет разработчикам выбрать наиболее подходящую модель и сервис для их конкретных задач, а также облегчает эксперименты.
Теперь, когда мы разобрались, почему и когда стоит использовать smolagents, давайте погрузимся глубже в возможности этой мощной библиотеки!
Ресурсы
- smolagents Blog — введение в smolagents и особенности работы с кодом.
Кодовые агенты
В этом разделе мы рассмотрим кодовые агенты — основной тип агентов в smolagents, которые генерируют Python-код для выполнения действий. Такой подход позволяет избежать необходимости парсинга JSON или текстовых блоков, поскольку сгенерированный код можно сразу выполнить.
Как работают кодовые агенты
Кодовые агенты работают по схеме многократных шагов. Каждый шаг включает в себя:
- Мысль: агент формирует промежуточное рассуждение, чтобы определить, какое действие требуется выполнить;
- Действие: агент генерирует Python-код, который вызывает нужную функцию или инструмент.
Преимущество такого подхода заключается в том, что вы получаете непосредственно исполняемый код, что упрощает интеграцию с Python-средой, облегчает отладку и повышает надёжность системы.
Ключевые преимущества
- Упрощённое взаимодействие с инструментами: вместо генерации JSON, который потом необходимо парсить, агент напрямую формирует код для вызова функций.
- Полноценное использование возможностей Python: благодаря генерации кода агент может использовать всю мощь языка Python, включая условные конструкции, циклы и другие возможности.
- Минимизация ошибок парсинга: исключается необходимость обработки промежуточных форматов данных, что снижает вероятность ошибок.
Агенты с вызовом инструментов (ToolCallingAgents)
В отличие от CodeAgents, которые генерируют исполняемый Python-код для непосредственного вызова функций, ToolCallingAgents создают действия в виде структурированных JSON или текстовых блоков. Эти агенты предназначены для ситуаций, когда полезно иметь явную, стандартизированную структуру вывода, которую затем система может распарсить для определения того, какой инструмент вызвать и с какими параметрами.
Как работают ToolCallingAgents
ToolCallingAgents следуют общей схеме многошаговых агентов, аналогичной подходу CodeAgents, но с ключевым отличием:
- Мысль: агент формирует промежуточное рассуждение, определяя, какое действие необходимо выполнить.
- Действие: вместо генерации кода агент выдаёт структурированный вывод (обычно в формате JSON), который описывает вызов определённого инструмента и передаваемые параметры.
Такой подход обеспечивает несколько преимуществ:
- Стандартизация: использование формата JSON позволяет легко обрабатывать и валидировать вывод, что полезно для интеграции с различными инструментами и сервисами.
- Упрощённый парсинг: наличие чётко структурированных данных снижает риск ошибок при интерпретации результатов, поскольку система получает данные в предсказуемом формате.
Когда применять ToolCallingAgents
ToolCallingAgents особенно полезны, если:
- Вы хотите обеспечить строгую структурированность действий агента.
- Требуется интегрировать агентов в систему, где важно разделять логику формирования действия и его исполнения.
- Необходим контроль над параметрами, передаваемыми в вызовы инструментов, что упрощает отладку и расширение функциональности.
Отличительные особенности
- Код против JSON-действий: в отличие от подхода CodeAgents, здесь отсутствует необходимость сразу исполнять сгенерированный код. Вместо этого система анализирует JSON-вывод, извлекает информацию о необходимом инструменте и параметрах, а затем выполняет соответствующий вызов.
- Гибкость реализации: такой метод позволяет легко комбинировать различные типы агентов в одной системе, где одни агенты отвечают за генерацию текста, а другие — за его структурированный анализ и выполнение.
Инструменты
Инструменты — это основные строительные блоки поведения агента в smolagents. Они представляют собой функции, которые агент может вызывать для выполнения различных действий, например, для получения данных, выполнения вычислений или взаимодействия с внешними API.
Определение инструментов
В smolagents инструменты можно определять двумя основными способами:
- Декоратор
@tool
Позволяет обернуть обычную Python-функцию, превращая её в инструмент, который агент сможет вызвать. Такой подход упрощает процесс создания инструмента, поскольку декоратор автоматически регистрирует функцию в системе. - Класс
Tool
Предоставляет объектно-ориентированный способ создания инструментов. Использование класса может быть полезно, если необходимо добавить дополнительную логику или настройки для конкретного инструмента.
Назначение инструментов
- Выполнять внешние действия: запускать поисковые запросы, генерировать изображения, обращаться к веб-сервисам и выполнять другие задачи.
- Расширять функциональность: за счёт простоты создания и интеграции собственных инструментов, можно легко добавлять новые возможности в систему.
- Обеспечивать модульность: каждый инструмент отвечает за узкую задачу, что упрощает отладку, поддержку и расширение функционала агента.
Использование инструментов в smolagents
В процессе работы агента инструменты вызываются в рамках многошагового процесса. После генерации «мысли» агент принимает решение о том, какой инструмент требуется вызвать, а затем формирует соответствующий вызов (в виде кода или структурированного JSON, в зависимости от типа агента). Это позволяет:
- Стандартизировать взаимодействие: наличие чётко определённого интерфейса для инструментов упрощает их интеграцию и использование в различных сценариях.
- Снизить вероятность ошибок: благодаря единообразному способу определения и вызова инструментов уменьшается риск неверной интерпретации команд.
Кроме того, инструменты могут объединяться в общий «набор инструментов» (toolbox), который затем можно использовать в агенте для решения широкого спектра задач. Это даёт возможность делиться инструментами с сообществом и повторно использовать их в разных проектах.
Агенты для извлечения информации (Retrieval Agents)
В этом разделе рассматривается, как агенты для извлечения информации (retrieval agents) в smolagents позволяют моделям получать доступ к внешним источникам знаний, осуществлять поиск, синтезировать и извлекать релевантную информацию из различных баз данных или веб-источников.
Основные возможности Retrieval Agents
- Поиск и извлечение данных:
Эти агенты обрабатывают входящие запросы, осуществляют поиск нужной информации в базе знаний и интегрируют полученные данные в процесс генерации ответа. - Использование векторных хранилищ:
Для эффективного поиска информации retrieval agents задействуют векторные хранилища, что позволяет находить релевантные данные даже среди большого объёма информации. - Реализация паттерна Retrieval-Augmented Generation (RAG):
Интеграция результатов поиска с процессом генерации ответов обеспечивает актуальность и точность вырабатываемой информацией, расширяя возможности базовой модели. - Интеграция с внешними источниками:
Retrieval agents могут работать как с веб-поиском, так и с другими специализированными базами данных, что позволяет модели получать свежую и специфическую информацию, недоступную в её базовом обучении. - Сохранение контекста:
Благодаря системам памяти, агенты сохраняют контекст взаимодействия, что помогает поддерживать последовательность и актуальность извлекаемой информации на протяжении всей сессии. - Надёжность за счёт резервных механизмов:
Встроенные механизмы резервного копирования позволяют обеспечить стабильное извлечение информации даже при временной недоступности источников или возникновении ошибок.
Когда использовать Retrieval Agents?
Retrieval agents особенно полезны, если:
- Вам необходимо дополнить ответы модели свежими или специфичными данными, отсутствующими в базовой модели.
- Требуется интеграция с внешними источниками информации для улучшения качества ответов.
- Важно поддерживать актуальный контекст в диалогах или сложных информационных запросах.
Мультиагентные системы
В этом разделе мы рассмотрим, как объединение нескольких агентов может повысить эффективность и надёжность ваших приложений. Когда одна система или агент не справляется с комплексной задачей, мультиагентный подход позволяет распределить обязанности между специализированными агентами, что способствует более качественному и масштабируемому решению.
Основные концепции
- Разделение обязанностей:
Каждый агент в системе берет на себя конкретную задачу, будь то поиск информации, генерация кода или вызов инструментов. Такое разделение позволяет оптимизировать выполнение сложных операций. - Координация и обмен информацией:
Для успешного взаимодействия агентов важна налаженная коммуникация. Система обеспечивает обмен данными через общую память или другие механизмы, что помогает согласовывать действия агентов и поддерживать общий контекст задачи. - Повышенная надёжность:
Если один агент сталкивается с ошибкой или перегрузкой, другие агенты могут подхватить его функции. Это делает систему устойчивой к сбоям и позволяет продолжать работу без значительных потерь в производительности.
Реализация в smolagents
В smolagents мультиагентная система организована следующим образом:
- Многошаговый процесс:
Каждый агент выполняет отдельный шаг: сначала он генерирует «мысль», затем производит вызов соответствующего инструмента. Такая последовательность позволяет более чётко контролировать логику выполнения. - Комбинирование результатов:
Результаты работы различных агентов могут объединяться посредством общей системы памяти, что помогает сохранять контекст и улучшает качество итогового решения. - Гибкость конфигурации:
Вы можете комбинировать агентов с различными специализациями (например, агенты, генерирующие код, и агенты, вызывающие инструменты) для создания комплексных и адаптивных систем, способных решать широкий спектр задач.
Применение мультиагентных систем
Мультиагентные системы особенно полезны, если:
- Задача сложна и требует распределения работы между несколькими специализированными компонентами.
- Необходимо обеспечить высокую отказоустойчивость системы.
- Важно параллельно обрабатывать различные аспекты запроса или задачи, чтобы сократить время отклика и повысить качество решения.
Агенты с поддержкой компьютерного зрения
Добро пожаловать в раздел, посвящённый агентам с поддержкой зрения. В этом модуле мы изучим, как расширить возможности ваших агентов за счёт интеграции компьютерного зрения и браузерных функций.
Обзор раздела
Агенты с поддержкой зрения позволяют вашим системам не только обрабатывать текстовую информацию, но и анализировать визуальные данные. Это открывает новые возможности, такие как:
- Генерация описаний изображений: создание текстовых описаний по содержимому изображения.
- Распознавание объектов: определение и классификация объектов на изображениях.
- Мультимодальное взаимодействие: объединение визуальной и текстовой информации для более глубокого понимания контекста.
В этом модуле вы узнаете, как разрабатывать агентов, способных работать с визуальными данными, используя модели типа Vision-Language (VLM), а также как интегрировать их с функциями браузера для извлечения и обработки информации с веб-страниц.
Ключевые преимущества
- Расширенные возможности восприятия: благодаря обработке визуальных данных агенты получают более полное представление о контексте задачи.
- Инновационные сценарии использования: применение анализа изображений позволяет решать задачи, связанные с классификацией, обнаружением объектов и генерацией описаний, что может значительно улучшить взаимодействие с пользователем.
- Гибкость интеграции: визуальные агенты легко комбинируются с другими типами агентов, создавая комплексные системы, способные обрабатывать как текстовую, так и визуальную информацию.