Logo image of Arcanum12thArcanum12th

Мой личный экзамен: как я создал MVP LLM-агента на Google ADK

Создание MVP LLM агента с помощью Google ADK

  1. Авторы
  2. Курсы
Количество просмотров11
прочтений11 прочтений
Мой личный экзамен: как я создал MVP LLM-агента на Google ADK

На протяжении нескольких лет я работаю в качестве технического директора в ASRP, компании, которая разрабатывает образовательные проекты и исследует новые подходы в EdTech. Одной из наших ключевых областей стало тестирование возможностей Google ADK в образовательных сценариях и создание прототипа интеллектуальной системы оценки знаний. В этом проекте моя роль заключалась в том, чтобы выступать в качестве главного архитектора и инженера — от проектирования концепции до реализации ключевых модулей системы.

Особенности Google ADK

Для создания агента я выбрал Google ADK (Agent Development Kit) — рамку, специально разработанную для создания систем с агентами LLM. Документация Google ADK подчеркивает, что LlmAgent служит «мыслящей частью» приложения: он использует мощь LLM для рассуждений, понимания естественного языка, принятия решений и генерации ответов [1].

В дополнение к LlmAgent, Google ADK предоставляет инструменты для строго определенных последовательностей выполнения. Например, SequentialAgent является агентом рабочего процесса, который выполняет вложенные подагенты в фиксированном порядке [2]. По сути, он обеспечивает выполнение задач шаг за шагом, точно так, как указано. В своих экспериментах я сначала полагался на LlmAgent с расширенными инструкциями и рассуждениями внутри модели, но позже перешел к явной оркестрации через код: подключение подагентов и инструментов (AgentTool) для поддержания процесса под внешним контролем.

Архитектурные решения

В первой версии я пытался уместить всю бизнес-логику в один LlmAgent: я тщательно описал роль агента, цели и ожидания и полагался на саму LLM для выполнения всех вычислений и оценки ответов студентов. Этот подход позволил быстро создать рабочий прототип, но его ограничения вскоре стали очевидны: модель стала «перегруженной» длинными инструкциями и контекстом, потребление токенов на запрос возросло, и отладка такого «монолитного» решения оказалась сложной [3].

Постепенно я перешел к более модульной архитектуре: система была разделена на несколько агентов и этапов. Например, один LlmAgent отвечал за генерацию вопросов, другой за оценку и анализ ответов, а третий за создание комментариев и подсказок. Для соединения этих этапов я использовал ПоследовательныйАгент и ПараллельныйАгент: первый обеспечивал выполнение шагов в правильном порядке, в то время как второй позволял независимым задачам выполняться одновременно. Этот многопользовательский подход помог снизить нагрузку на каждого отдельного агента и сделал процессы более надежными. Разделение задач также позволило создать более стабильные цепочки обработки для обработки ответов и упростило тестирование каждого модуля.

Эволюция архитектуры агентов: от монолита к модульности

По мере роста диалога и накопления сессии объем передаваемого текста быстро увеличивался, что приводило к росту вычислительных затрат. Чтобы решить эту проблему, я реализовал оптимизацию на уровне токенов. Вместо того чтобы отправлять всю историю чата на каждом шаге, я начал активно использовать функции памяти. Вместо того чтобы хранить весь диалог в контексте, я сохранял ключевую информацию в ctx.session.state и в сервисе памяти ADK (например, InMemoryMemoryService). Это сделало возможным исключение повторяющихся частей из запросов и сокращение использования токенов. Более того, я разбивал сложные задачи на более мелкие шаги и использовал более короткие подсказки, чтобы избежать перегрузки модели.

Технические проблемы и инженерные уловки

Модель иногда выдавала неожиданные или неполные ответы, поэтому мне пришлось добавить дополнительную валидацию. Например, я определил строгие проверки формата в инструкциях: после получения вывода агента-оценщика система проверяла, соответствовал ли он ожидаемой структуре (например, действительный JSON или четкая схема). Если формат был нарушен, скрипт "переспрашивал" модель с уточняющими подсказками.

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

Еще одной инженерной уловкой было использование встроенных инструментов ADK. Я активно использовал AgentTool: по сути, превращая одного агента в инструмент для другого. Это дало нам гибкость — основной LlmAgent мог динамически вызывать подагентов в зависимости от запроса. Этот подход позволил нам объединить сильные стороны различных моделей внутри одной единой логики.

Чтобы оптимизировать генерацию, я использовал потоковую передачу, где это было уместно, и тонко настраивал параметры модели (temperature, max_output_tokens, и т.д.). На критических этапах я устанавливал temperature=0, чтобы обеспечить детерминированные выходные данные. Я также хранил ключевые результаты (output_key) в сессии, чтобы их можно было передавать от одного агента к другому без избыточного дублирования текста.

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

Эволюция роли CTO 

Баланс между кодом и стратегией

Во время разработки моя роль значительно расширилась. Сначала я в основном сосредоточился на инженерных задачах: проектировании архитектуры, написании кода и экспериментах с моделями. Но по мере быстрого роста проекта мне пришлось переключиться на управление. Я обнаружил, что не только проектирую системы, но и создаю команду разработчиков, делегирую задачи и контролирую выполнение. Я все больше участвовал в планировании проекта, согласовывая сроки с партнерами, управляя бюджетом и обучая коллег работать с новыми инструментами.

Каждый новый этап проекта стал для меня личным экзаменом. При интеграции новых API или масштабировании системы на Kubernetes мои обязанности выходили далеко за рамки «просто кода» — мне приходилось наставлять команду, распределять роли, заниматься документацией и координировать с бизнес-стороной. Я понял, что быть CTO значит не только быть «техническим архитектором», но и «лидером команды» и «мостом» между разработчиками и бизнесом. Порой мне приходилось выступать в роли наставника и тренера, а в другие моменты — инспектора, обеспечивая качество. Эти новые «экзамены» в управлении проектами и людьми стали неотъемлемой частью моей роли.

Философские размышления

Экзамен как метафора: диалог между человеком и LLM агентом

Создание такого «экзамена» заставило меня задуматься о более широком значении работы. Каждый проект в ИТ ощущается как экзамен: тест на логику, креативность и способность продолжать учиться. Работа с LLM-агентами становится больше похожей на партнерство: они не просто выполняют команды, но вступают в диалог, предлагают идеи или задают уточняющие вопросы. Все больше я вижу их не просто как инструменты, а как коллег — важно давать им четкие задачи, но также оставлять место для собственного «мыслительного процесса» модели.

Я смотрю в будущее EdTech с оптимизмом. Эти системы, безусловно, преобразят образование: личные репетиторы, мгновенная обратная связь, адаптивные курсы. Обучение становится персонализированным — и это меняет правила игры. Вот почему в ASRP мы переносим уроки, извлеченные из прототипов, в наши собственные продукты, включая Arcanum12th платформу. Там LLM-агенты уже поддерживают студентов с заданиями, тестами и интерактивными диалогами. Опыт с ADK стал основой: модульность, память и сценарии диалога были интегрированы в Arcanum12th.

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

10 уроков CTO из AI экзамена

Анализируя свой опыт, я выделил следующие уроки как CTO из моего собственного «AI экзамена».

10 уроков CTO из AI экзамена
  1. Делегируйте задачи через агентов.
    Не пытайтесь упаковать всю логику в одного «суперагента» — такие системы часто рушатся под собственным весом из-за перегруженных инструкций. Команда специализированных агентов обеспечивает лучшую точность и масштабируемость. Разбейте проект на этапы и заверните отдельные функциональности в индивидуальные агенты.
  2. Проектируйте архитектуру с учетом токенов. 
    Ограничьте размер запросов и ответов (настройте max_output_tokens), и используйте состояние сессии и сервисы памяти, чтобы избежать отправки избыточного контекста модели. Это снижает вычислительные затраты и ускоряет систему.
  3. Используйте сильные стороны ADK.
    Помимо LlmAgent, научитесь использовать SequentialAgent и других агентов рабочего процесса — они добавляют надежность и предсказуемость процессам. Преобразуйте агентов в AgentTools для гибкого взаимодействия, чтобы основной агент мог вызвать нужного «специалиста» в нужное время.
  4. Параллелизуйте независимые задачи.
    Если цепочка имеет шаги, которые не зависят друг от друга, выполняйте их параллельно. ADK предлагает ParallelAgent для этого. Например, поиск информации и проверка ответов могут выполняться одновременно, экономя время без ущерба для качества.
  5. Отслеживайте сессию и состояние.
    Храните важные данные (временные результаты, счетчики, ключи вывода) в ctx.session.state. Это делает реализацию более прозрачной и помогает агентам переключать контекст. Четко определите output_key для передачи данных между агентами без ненужного дублирования.
  6. Добавьте обратную связь и валидацию.
    Хороший агент дважды проверяет свою работу: я создал отдельного агента-рецензента, который обеспечивает качество перед доставкой окончательного результата. Это позволяет выявлять ошибки на ранней стадии и способствует итеративному улучшению (например, возвращая "неудачу" и запрашивая доработку).
  7. Логируйте и анализируйте.
    Реализуйте обратные вызовы и логирование (например, AgentOps, Phoenix, или пользовательские решения). Понимание того, как агенты взаимодействуют и сколько ресурсов потребляется, имеет решающее значение для оптимизации и стабильности системы.
  8. Примите эксперименты.
    Работа с ИИ — это непрерывный эксперимент. Модели могут удивлять вас, поэтому терпение и адаптивность имеют решающее значение. Даже неудачные попытки учат нас чему-то новому.
  9. Сотрудничество с ИИ — это новый стандарт.
    Научитесь рассматривать LLM как "коллег": ставьте четкие задачи, проверяйте результаты и объединяйте идеи. Это меняет культуру разработки с чисто человеческой на гибридный подход "человек + ИИ".
  10. Будущее принадлежит обучению.
    С философской точки зрения: инвестируйте в знания и обмен знаниями. Экзамен как проект — это не только урок для студентов, но и для разработчиков. Непрерывное обучение, готовность адаптироваться и способность обучать других — это то, что позволит нам идти в ногу с технологиями.

Я приглашаю всех, кто заинтересован в создании LLM-агентов, присоединиться к моему авторскому курсу. В нем я делюсь практическим опытом разработки, объясняю возможности Google ADK и демонстрирую, как применять описанные здесь техники на практике. Вместе мы научимся строить надежные системы!

Источники

  1. Набор инструментов для разработки агентов — агенты LLM — ссылка.
  2. Набор инструментов для разработки агентов — Последовательные агенты — ссылка.
  3. Шаблоны агентов с ADK (1 агент, 5 способов!) — ссылка.

Вам также может понравиться

+0

Видео контент

21

Уроки

+500

Студенты

Пожалуйста, оформите подписку, чтобы комментировать, или Войти, если у вас уже есть подписка.