Курс по созданию AI-агентов от Hugging Face (часть 1-я)

photo 2025 02 23 00 19 48

Перед вами не обычный курс по ИИ, а курс, благодаря которому вы сможете создать ИИ-агента.

I. «Что такое агент?»

(Источник: What is an Agent?)

Введение

В этой секции вы познакомитесь с понятием агента и его применениями в искусственном интеллекте.

Пример: агент Альфред
Представьте, что Альфред — это агент. Когда вы говорите:

«Альфред, принесите мне кофе»,
Альфред сначала понимает запрос, затем планирует свои действия:

  1. Пойти на кухню
  2. Использовать кофемашину
  3. Приготовить кофе
  4. Принести кофе обратно
3109b58f 0f45 404f 9cce 04a331553234

Таким образом, агент сочетает в себе возможности рассуждения, планирования и взаимодействия с окружением. Агент получает своё название, потому что обладает «агентностью» — способностью действовать во внешнем мире.

cee87a64 3dcb 4950 ac34 9126b2d9d984

Формальное определение:

Агент — это система, использующая ИИ-модель для взаимодействия с окружающей средой с целью достижения заданной пользователем цели. Она объединяет рассуждение, планирование и выполнение действий (часто посредством вызова внешних инструментов).

У агента выделяются две основные составляющие:

  1. Мозг (ИИ-модель): отвечает за размышления и планирование.
  2. Тело (набор возможностей и инструментов): определяет, что агент умеет делать.
9ed7bf56 cfdc 484b 855a 65846c111c96

Модель использовала инструмент генерации изображений для создания этого изображения.
Подробнее об инструментах мы узнаем в разделе «Инструменты».

Какие задачи может выполнять агент?

Агент может выполнять любую задачу, которую мы реализуем с помощью инструментов для осуществления действий.

Например, если я напишу агента, который будет выступать в роли моего личного помощника (например, как Siri) на моем компьютере, и попрошу его «отправить электронное письмо моему менеджеру с просьбой перенести сегодняшнюю встречу», я могу предоставить ему некоторый код для отправки писем. Это станет новым инструментом, который агент сможет использовать всякий раз, когда потребуется отправить электронное письмо. Мы можем написать его на Python:

pythonCopydef send_message_to(recipient, message):
    """Полезная функция для отправки электронного письма получателю"""
    ...

Как мы увидим, большая языковая модель (LLM) сгенерирует код для выполнения этого инструмента, когда это будет необходимо, и таким образом выполнит поставленную задачу.

pythonCopysend_message_to("Manager", "Can we postpone today's meeting?")

Дизайн инструментов имеет большое значение и существенно влияет на качество работы вашего агента. Для некоторых задач потребуется разработать очень специфические инструменты, в то время как другие могут быть решены с помощью универсальных средств, например, «web_search».

Обратите внимание, что действия (Actions) не то же самое, что инструменты. Например, одно действие может включать использование нескольких инструментов для его выполнения.

Предоставление агенту возможности взаимодействовать с окружающей средой открывает реальные возможности для использования как компаниями, так и отдельными пользователями.


Пример 1: Личные виртуальные помощники

Виртуальные помощники, такие как Siri, Alexa или Google Assistant, работают как агенты, когда они взаимодействуют с пользователями в их цифровой среде.

Они принимают запросы пользователей, анализируют контекст, извлекают информацию из баз данных и предоставляют ответы или инициируют действия (например, устанавливают напоминания, отправляют сообщения или управляют умными устройствами).


Пример 2: Чат-боты службы поддержки

Многие компании развертывают чат-боты, которые действуют как агенты, общаясь с клиентами на естественном языке.

Эти агенты могут отвечать на вопросы, направлять пользователей при устранении неполадок, создавать заявки в внутренних базах данных или даже завершать транзакции.

Их заранее заданные цели могут включать улучшение удовлетворенности клиентов, сокращение времени ожидания или повышение коэффициента конверсии продаж. Путем прямого взаимодействия с клиентами, изучения диалогов и адаптации своих ответов со временем, они демонстрируют основные принципы работы агента.


Пример 3: Неперсонажный ИИ в видеоигре

ИИ-агенты, работающие на основе LLM, могут сделать неперсонажных персонажей (NPC) более динамичными и непредсказуемыми.

Вместо того чтобы следовать жестким схемам поведения, они могут реагировать в зависимости от контекста, адаптироваться к взаимодействиям с игроками и генерировать более тонкие диалоги. Такая гибкость помогает создавать более живых и увлекательных персонажей, которые развиваются вместе с действиями игрока.


В итоге

Агент — это система, которая использует ИИ-модель (обычно LLM) в качестве своего основного механизма рассуждения для того, чтобы:

  • Понимать естественный язык: интерпретировать и отвечать на инструкции человека осмысленно.
  • Рассуждать и планировать: анализировать информацию, принимать решения и разрабатывать стратегии для решения задач.
  • Взаимодействовать с окружающей средой: собирать информацию, выполнять действия и наблюдать за результатами этих действий.

Теперь, когда у вас сложилось прочное понимание того, что такое агенты, давайте закрепим эти знания с помощью небольшой неоценочной викторины. После этого мы углубимся в «мозг агента»: большие языковые модели (LLM).


II. «Что такое LLM?»

(Источник: What are LLMs?)

e694e3d5 b8a3 4660 9643 86584f20b904

Основные сведения о LLM

В предыдущем разделе было сказано, что каждому агенту необходима ИИ-модель, и наиболее часто для этих целей используются большие языковые модели (LLM). Здесь вы узнаете, что такое LLM и как они работают.

Определение LLM:
Большая языковая модель (LLM) — это тип ИИ-модели, которая отлично понимает и генерирует человеческий язык. Она обучается на огромном количестве текстовых данных, изучая закономерности, структуру и нюансы языка. Обычно такие модели имеют миллионы (а зачастую миллиарды) параметров и основаны на архитектуре Transformer, впервые популяризированной после выхода модели BERT в 2018 году.

Типы архитектур Transformer:

  1. Энкодеры: принимают текст на входе и создают плотное представление (эмбеддинг). Пример — BERT.
  2. Декодеры: генерируют последовательность токенов один за другим. Пример — LLaMA.
  3. Seq2Seq (энкодер–декодер): сначала обрабатывают входную последовательность, а затем генерируют выход. Примеры — T5, BART.
e9844a05 61a8 4248 992d 2d7f1a8ad6b4

Принцип работы LLM:
Цель модели — предсказать следующий токен, учитывая предыдущую последовательность. «Токен» можно рассматривать как часть слова (не всегда целое слово). Например, вместо 600 000 слов модель может использовать словарь из 32 000 токенов.

Также у LLM есть специальные токены, которые используются для обозначения начала и конца последовательности, сообщений или других структурных элементов. Эти специальные токены различаются у разных моделей (например, у GPT-4 это <|endoftext|>, у Llama — <|eot_id|>).

Декодирование:
Модель последовательно генерирует текст до тех пор, пока не встретит специальный токен конца последовательности (EOS). При этом могут использоваться стратегии, такие как выбор токена с максимальным счётом или beam search, когда оценивается несколько вариантов.

7326ff9f 327a 4396 8d80 09e078723b93

LLM обучаются методом автогрессии (выход одной итерации становится входом следующей) и сначала обучаются на предсказании следующего токена, а затем могут дообучаться для решения конкретных задач.

Важно правильно формулировать запросы к LLM
Учитывая, что единственная задача LLM — предсказывать следующий токен, анализируя каждый входной токен и определяя, какие из них являются «важными», формулировка вашего входного текста имеет решающее значение.

Входная последовательность, которую вы предоставляете LLM, называется «промтом». Тщательная проработка промта облегчает направление генерации LLM к желаемому результату.

Как LLM используются в AI-агентах?
LLM являются ключевым компонентом AI-агентов, обеспечивая основу для понимания и генерации человеческого языка.

Они способны интерпретировать пользовательские инструкции, поддерживать контекст в диалогах, формировать план и определять, какие инструменты использовать.

Подведем итоги
Мы рассмотрели основы того, что такое LLM, как они функционируют и какую роль играют в обеспечении работы AI-агентов.

Теперь, когда мы понимаем, как работают LLM, пришло время посмотреть, как они структурируют свою генерацию в формате диалога.

III. «Сообщения и специальные токены»

(Источник: Messages and Special Tokens)

Структурирование диалогов

При общении с такими системами, как ChatGPT или HuggingChat, пользователь обменивается сообщениями, а не одним длинным запросом. Однако на самом деле все сообщения объединяются в единый промт перед подачей в модель.

Вопрос: Но... когда я общаюсь с ChatGPT или Hugging Chat, я веду диалог, используя чат-сообщения, а не одну длинную последовательность промта.

Ответ: Верно! Но это всего лишь абстракция пользовательского интерфейса. Прежде чем подать данные в LLM, все сообщения из разговора объединяются в один единый промт. Модель не «запоминает» весь диалог — она читает его целиком каждый раз.

478efe30 a93a 4214 ae53 1a23aa4654d0

До сих пор мы обсуждали промты как последовательность токенов, которые подаются в модель. Однако, когда вы общаетесь с такими системами, как ChatGPT или HuggingChat, вы на самом деле обмениваетесь сообщениями. За кулисами эти сообщения объединяются и форматируются в промт, который модель способна понять.

UI и реальный промт:
– Пользователь видит отдельные сообщения, но за кулисами все они конкатенируются в один текст, который получает модель.
– Для структурирования этого процесса используются так называемые чат-шаблоны (chat templates), которые задают формат для сообщений (например, разделение ролей: system, user, assistant).

Пример использования системного сообщения:

pythonCopysystem_message = {
    "role": "system",
    "content": "Вы — профессиональный агент службы поддержки. Всегда будьте вежливы и полезны."
}

Такое сообщение влияет на поведение модели.

Структура разговора:
Разговор состоит из последовательных сообщений от пользователя и помощника. Чат-шаблон преобразует список сообщений в единый строковый промт с использованием специальных токенов (например, <|im_start|>, <|im_end|> для SmolLM2 или другие для Llama).

Пример списка сообщений:

pythonCopyconversation = [
    {"role": "user", "content": "Мне нужна помощь с заказом"},
    {"role": "assistant", "content": "Конечно, предоставьте, пожалуйста, номер заказа."},
    {"role": "user", "content": "ORDER-123"}
]

Этот список затем преобразуется в текст, который подается в модель.


IV. «Что такое инструменты?»

(Источник: What are Tools?)

Роль инструментов в агентах

Инструменты (Tools) – это функции, предоставляемые LLM, позволяющие агенту выполнять действия, выходящие за рамки генерации чистого текста.

Примеры инструментов:

  • Поиск в интернете: позволяет получать актуальную информацию.
  • Генерация изображений: создает картинки по текстовому описанию.
  • Вызов API: для взаимодействия с внешними сервисами (GitHub, YouTube и т. д.).

Хороший инструмент дополняет возможности LLM. Например, для выполнения арифметических операций лучше использовать отдельный калькулятор, чем полагаться на модель.

Как работают инструменты:
LLM генерирует текст, который представляет вызов функции (например, в виде JSON-объекта), описывающий, какой инструмент и с какими параметрами нужно использовать. Затем специальное приложение (агент) анализирует этот вывод, выполняет вызов функции и возвращает результат обратно в диалог.

Пример текстового описания инструмента:

jsonCopy{
  "action": "get_weather",
  "action_input": {"location": "New York"}
}

Чтобы описать инструмент, важно указать его название, описание, типы входных аргументов и тип результата.

Автоформатирование:
Благодаря возможностям Python (например, с использованием декораторов и модуля inspect), можно автоматически генерировать описание инструмента из кода функции.


V. «Понимание AI-агентов через цикл: мысль – действие – наблюдение»

(Источник: Understanding AI Agents through the Thought-Action-Observation Cycle)

Основные компоненты процесса

Агенты работают в непрерывном цикле, состоящем из трёх этапов:

  1. Мысль (Thought): модель определяет следующий шаг.
  2. Действие (Action): агент выполняет действие (например, вызывает инструмент).
  3. Наблюдение (Observation): агент получает обратную связь и анализирует результат.

Пример на базе агента Альфреда (агент для проверки погоды):
Мысль: «Пользователю нужна информация о погоде в Нью-Йорке. Нужно вызвать инструмент get_weather.»
Действие: агент формирует JSON-запрос для вызова инструмента, передавая параметр «location»: «New York».
Наблюдение: агент получает данные, например, «Погода в Нью-Йорке: переменная облачность, 15°C, влажность 60%».
Обновленная мысль: на основе наблюдения агент формирует окончательный ответ.

Таким образом, цикл «мысль → действие → наблюдение» позволяет агенту итеративно уточнять свои действия до достижения цели.


VI. «Мысль: внутреннее рассуждение и подход Re-Act»

(Источник: Thought: Internal Reasoning and the Re-Act Approach)

Внутреннее рассуждение агента

В этой секции описывается, как агент «думает» — то есть, как он анализирует информацию, разбивает сложные задачи на шаги и принимает решения.

Примеры мыслей агента:

  • Планирование: «Нужно разбить задачу на три шага: собрать данные, проанализировать тенденции, составить отчёт.»
  • Анализ: «Судя по сообщению об ошибке, проблема в параметрах подключения к базе данных.»
  • Принятие решения: «С учетом бюджета пользователя, следует рекомендовать средний вариант.»
  • Решение проблемы: «Чтобы оптимизировать код, сначала нужно провести профилирование.»
  • Интеграция памяти: «Пользователь ранее упоминал, что предпочитает Python, поэтому приведу примеры на Python.»
  • Саморефлексия: «Мой предыдущий подход не сработал, стоит попробовать другой метод.»
  • Постановка целей: «Для завершения задачи необходимо сначала установить критерии приемки.»
  • Приоритезация: «Сначала нужно устранить уязвимость в безопасности, а потом добавлять новые функции.»

Подход Re-Act:
Метод Re-Act объединяет рассуждение («Reasoning») с действием («Acting»). Добавление фразы «Давайте подумаем пошагово» помогает модели разбивать задачу на подпроцессы, что снижает число ошибок.

Некоторые модели специально дообучаются так, чтобы генерировать отдельные секции рассуждений, заключенные в специальные токены (например, <think> и </think>).


VII. «Действия: обеспечение взаимодействия агента с окружением»

(Источник: Actions: Enabling the Agent to Engage with Its Environment)

Что такое действия?

Действия – это конкретные шаги, которые агент выполняет для взаимодействия с внешней средой. Они могут быть представлены в структурированном формате (например, JSON или исполняемом коде).

Типы действий:

  • Сбор информации: выполнение веб-поиска, запрос данных из базы.
  • Использование инструментов: вызов API, выполнение расчётов, запуск кода.
  • Взаимодействие с окружением: управление цифровыми интерфейсами или физическими устройствами.
  • Общение: ответы пользователю, передача данных другим агентам.

Метод «Stop and Parse»

Ключевой подход при реализации действий:

  1. Агент выводит действие в заранее определённом формате (например, JSON).
  2. После завершения генерации агент останавливается, чтобы не добавить лишнего текста.
  3. Внешний парсер считывает вывод и извлекает название действия и аргументы.

Пример действия:

jsonCopy{
  "action": "get_weather",
  "action_input": {"location": "New York"}
}

Также существуют «Code Agents», которые генерируют исполняемый код (например, на Python) для выполнения сложных операций.


VIII. «Наблюдение: интеграция обратной связи для анализа и адаптации»

(Источник: Observe: Integrating Feedback to Reflect and Adapt)

Роль наблюдений

Наблюдения – это обратная связь, получаемая агентом после выполнения действия. Они позволяют:

  • Получить данные о результате выполненного действия.
  • Добавить новую информацию в текущий контекст (обновить «память»).
  • Адаптировать последующие шаги на основе полученных данных.

Пример:
Если API погоды возвращает «переменная облачность, 15°C, влажность 60%», агент добавляет эту информацию в свою историю и использует её для формирования окончательного ответа.

Наблюдения могут включать системные сообщения, данные об изменениях, результаты вычислений и т. д.

Процесс:

  1. Разобрать действие и выполнить его.
  2. Получить результат и добавить его как наблюдение.
  3. Использовать наблюдение для корректировки дальнейших шагов.

IX. «Библиотека Dummy Agent»

(Источник: Dummy Agent Library)

Назначение Dummy Agent Library

Чтобы не отвлекаться на особенности конкретных фреймворков, в этом блоке используется библиотека «Dummy Agent Library». Цель – сосредоточиться на базовых концепциях агентства, а не на тонкостях реализации.

Основные моменты:

  • Используется простая серверлесс API для доступа к LLM.
  • Приводится пример использования встроенных Python-пакетов (например, datetime, os) для создания простых инструментов.
  • Демонстрируется, как с помощью текстового промта можно описывать инструменты, циклы (мысль → действие → наблюдение) и получать итоговый ответ.

Пример кода показывает, как объединить базовый системный промт с вызовом функции для получения, например, погоды или других данных. В дальнейшем можно будет перейти к использованию более продвинутых библиотек, таких как LangChain, LangGraph и LlamaIndex.


X. «Давайте создадим нашего первого агента с использованием smolagents»

(Источник: Let’s Create Our First Agent Using smolagents)

Введение в smolagents

В этом уроке вы создадите своего первого агента, который сможет выполнять действия (например, генерация изображений, веб-поиск, проверка часового пояса и многое другое) и будет опубликован в Hugging Face Space для демонстрации.

Что такое smolagents?
Это лёгкая библиотека, предназначенная для упрощения разработки агентов. Она абстрагирует многие детали и позволяет сконцентрироваться на поведении агента.

Пошаговое создание агента

  1. Дублирование шаблона Space:
    Вам предложено создать копию шаблона по ссылке, чтобы работать в своём профиле.
  2. Модификация файла app.py:
    В этом файле вы будете добавлять инструменты и настраивать агента.
  3. Примеры инструментов:
    • Пример «my_custom_tool», который можно доработать под свои задачи.
    • Инструмент get_current_time_in_timezone, возвращающий текущее время для заданного часового пояса.
  4. Настройка агента:
    Агент создаётся с использованием класса CodeAgent из smolagents. Вы задаёте модель (например, Qwen/Qwen2.5-Coder-32B-Instruct) через класс HfApiModel, список инструментов, максимальное число шагов и шаблоны промтов (загружаемые из YAML-файла).

Пример полного файла app.py:
(В шаблоне приведён полный исходный код, включая импорты, определение инструментов, создание модели и запуск GradioUI.)

В конце урока вас приглашают экспериментировать: добавляйте новые инструменты, пробуйте другие модели, модифицируйте код и делитесь результатами в канале Discord.


Заключение

В данном переводе представлены все разделы Unit 1 курса Hugging Face Agents Course, начиная от базовых концепций (что такое агент, LLM, сообщения и инструменты) до более сложных процессов (цикл мысль – действие – наблюдение, внутреннее рассуждение, действия, наблюдения) и завершая практическим созданием агента с использованием библиотеки smolagents.

Этот материал даёт фундамент для дальнейшего изучения и создания AI-агентов. Рекомендуется внимательно изучить каждый раздел, опробовать примеры кода и экспериментировать с инструментами, чтобы закрепить полученные знания.

Добавить комментарий

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