AI Agent End to End — семинар

1. Чему вы научитесь

AI Agent Vibe Full Stack

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

Этот семинар предлагает структурированную, воспроизводимую методологию сотрудничества с ИИ на каждом этапе профессионального жизненного цикла разработки программного обеспечения (SDLC). Вы перейдете от написания кода построчно к роли технического директора — архитектора с видением и генерального подрядчика, использующего ИИ для точной реализации этого видения. 🚀

демо

По завершении этого урока вы получите:

  • Преобразовал высокоуровневую идею в облачную архитектуру с использованием искусственного интеллекта.
  • Разработал полноценный бэкэнд на Python с целевыми, специфическими запросами.
  • Использовал ИИ в качестве партнера по программированию для отладки и исправления кода.
  • Создание модульных тестов, включая заглушки, было поручено искусственному интеллекту.
  • Создана готовая к использованию в производственной среде инфраструктура как код (IaC) с помощью Terraform.
  • Создал полноценный конвейер CI/CD в GitHub Actions с помощью одного запроса.
  • Осуществляйте мониторинг и управление вашим работающим приложением с помощью инструментов управления на основе искусственного интеллекта.

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

2. Предварительные условия и настройка

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

Для работы наших ИИ-агентов нам необходимы две вещи: проект Google Cloud, который обеспечит основу, и ключ API Gemini для доступа к мощным моделям Google.

Шаг 1: Активируйте платежный аккаунт

  • Для развертывания вам потребуется пополнить свой платежный аккаунт на 5 долларов. Убедитесь, что вы активировали свою учетную запись Gmail .

Шаг 2: Создайте новый проект GCP.

создать новую учетную запись GCP

  • Откройте левую панель, нажмите Billing , проверьте, связана ли учетная запись для выставления счетов с этой учетной записью GCP.

Свяжите платежный аккаунт с аккаунтом GCP.

Если вы видите эту страницу, перейдите в раздел manage billing account , выберите пробную версию Google Cloud Trial One и свяжите её с этим аккаунтом.

Шаг 3: Сгенерируйте свой API-ключ Gemini

Прежде чем получить ключ, вам необходимо его иметь.

  • Перейдите в Google AI Studio: https://aistudio.google.com/
  • Войдите в систему, используя свою учетную запись Gmail .
  • Нажмите кнопку «Получить ключ API» , которая обычно находится в левой панели навигации или в правом верхнем углу. Создайте ключ API в новом проекте.
  • В диалоговом окне «Ключи API» нажмите «Создать ключ API в новом проекте». Создайте ключ API в новом проекте.
  • Выберите новый созданный вами проект, в котором настроен платежный аккаунт. Выберите новый проект

Выберите новый проект1

  • Для вас будет сгенерирован новый API-ключ.

ключ API

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

Аутентификация GitHub

Чтобы открыть Cloud Shell, перейдите в консоль Google Cloud и в правом верхнем углу нажмите кнопку «Активировать Cloud Shell».

Шаг 1: Откройте Cloud Shell

👉Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud (это значок терминала в верхней части панели Cloud Shell). cloud-shell.png

👉Нажмите на кнопку «Открыть редактор» (она выглядит как открытая папка с карандашом). Это откроет редактор кода Cloud Shell в окне. Слева вы увидите файловый менеджер. open-editor.png

👉После открытия редактора откройте терминал в облачной IDE.

03-05-new-terminal.png

👉💻 В терминале убедитесь, что вы уже авторизованы и что проект настроен на ваш идентификатор проекта, используя следующую команду:

gcloud auth list

Шаг 2: Аутентификация через GitHub и создание форка.

Аутентификация через GitHub:

👉💻 Скопируйте и вставьте команду в свой облачный терминал:

gh auth login
  • В поле "Где вы используете GitHub?" выберите "GitHub.com".
  • «Какой протокол вы предпочитаете использовать для операций Git на этом хосте?», выберите «HTTPS».
  • «Аутентифицировать Git с помощью учетных данных GitHub?», выберите «Да».
  • «Как вы хотите авторизовать GitHub CLI?», выберите «Войти через веб-браузер».

Важно!! Пока не нажимайте клавишу «Enter». git1.png

Скопируйте код с терминала на страницу подтверждения входа.

git2.png

После ввода кода вернитесь в терминал Cloud Shell и нажмите Enter, чтобы продолжить.

входить

Шаг 4: Создайте форк и клонируйте репозиторий:

👉💻 Скопируйте и вставьте команду в свой облачный терминал:

gh repo fork cuppibla/storygen-learning --clone=true

3. Архитектура: от идеи до чертежа с помощью облачных технологий.

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

архитектура

Действия

  • Откройте консоль Google Cloud: [https://console.cloud.google.com](Консоль Google Cloud)
  • В правом верхнем углу нажмите «Открыть чат Cloud Assist».

cloud_assist_1

Включить Cloud Assist

  • Нажмите « Get Gemini Assist , затем Enable Cloud Assist at no cost .
  • И начинайте общаться!

cloud_assist_3 Предоставьте Cloud Assist следующие подробные инструкции:

Выскажите свою идею

Generate a Python web application that uses AI to generate children's stories and illustrations. It has Python backend and React frontend host separately on Cloudrun. They communicate through Websocket. It needs to use a generative model for text and another for images. The generated images must be used by Imagen from Vertex AI and stored in a Google Cloud Storage bucket so that frontend can fetch from the bucket to render images. I do not want any load balancer or a database for the story text. We need a solution to store the API key.

Получите план разработки вашего приложения

  • Нажмите «Редактировать дизайн приложения», и вы увидите диаграмму. Нажмите на кнопку в правом верхнем углу «<> Получить код», чтобы загрузить код Terraform.
  • Cloud Assist сгенерирует архитектурную схему. Это наш визуальный план. cloud_assist_4

Этот код не требует никаких действий. Подробнее см. ниже.

Разбираемся в сгенерированном коде Terraform. Вы только что получили полный набор файлов Terraform от Cloud Assist. Пока никаких действий с этим кодом не требуется, но давайте быстро разберем, что это такое и почему он так важен.

Что такое Terraform? Terraform — это инструмент «Инфраструктура как код» (IaC). Представьте его как план вашей облачной среды, написанный на коде. Вместо того чтобы вручную создавать сервисы, хранилище и права доступа через консоль Google Cloud, вы определяете все эти ресурсы в конфигурационных файлах. Затем Terraform считывает ваш план и автоматически создает именно такую ​​среду.

От визуального плана к исполняемому коду. Архитектурная диаграмма, предоставленная Cloud Assist, — это ваш визуальный план. Код Terraform — это машиночитаемая версия того же плана. Это важнейшее звено, которое превращает концепцию проектирования в воспроизводимую, автоматизированную реальность. Определив свою инфраструктуру в коде, вы можете:

  • Автоматизация создания: Надежно создавайте одну и ту же среду снова и снова.
  • Используйте систему контроля версий: отслеживайте изменения в вашей инфраструктуре в Git так же, как и в коде вашего приложения.
  • Предотвращение ошибок: Избегайте ошибок, которые могут возникнуть при работе с веб-интерфейсом.

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

4. Разработка: Введение в Gemini CLI

👉💻 В терминале Cloud Shell перейдите в свой личный каталог.

cd ~/storygen-learning

👉💻 Попробуйте знак зодиака Близнецы впервые.

clear
gemini --model=gemini-2.5-flash

Если система спросит: Do you want to connect Cloud Shell editor to Gemini CLI? , выберите «НЕТ» .

👉✨ У каждого инструмента для Близнецов есть описание. Ознакомьтесь с ним прямо сейчас. В командной строке Близнецов введите:

В Gemini CLI

/help

👉✨ Интерфейс командной строки Gemini обладает собственным набором встроенных возможностей. Чтобы ознакомиться с ними:

В Gemini CLI

/tools

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

👉✨ Клинок «Близнецы» способен удерживать «тактическую осведомленность» (контекст) для управления своими действиями.

В Gemini CLI

/memory show

Сейчас оно пустое, чистый лист.

👉✨ Сначала добавьте в память агента персону. Это определит его область компетенции:

В Gemini CLI

/memory add "I am master at python development"

Запустите команду /memory show еще раз, чтобы убедиться, что ваш модуль Blade усвоил эти данные.

👉✨ Чтобы продемонстрировать, как ссылаться на файлы с помощью символа @, давайте сначала создадим файл «краткого описания задания».

Откройте новое окно терминала и выполните следующую команду, чтобы создать файл задания:

!echo "## Mission Objective: Create Imagen ADK Agent for Story Book" > mission.md

👉✨Теперь отдайте команду Gemini CLI на анализ брифинга и отправку отчета о результатах:

В Gemini CLI

Explain the contents of the file @mission.md

Ваше основное оружие теперь знает свою цель.

👉💻 Нажмите Ctrl+C дважды, чтобы выйти из Gemini CLI.

Обучение:

Как Gemini CLI обретает свои сверхспособности: gemini.md Прежде чем продолжить, важно понять, как Gemini CLI можно адаптировать под конкретный проект. Хотя его можно использовать как универсальный инструмент для чата, его настоящая мощь заключается в специальном конфигурационном файле: gemini.md.

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

  • Персонаж: Вы можете указать ИИ, кем он должен быть. Например: «Вы — опытный разработчик на Python, специализирующийся на Google Cloud». Это сфокусирует его ответы и стиль.
  • Инструменты: Вы можете предоставить ему доступ к определенным файлам (@file.py) или даже к поисковым запросам Google (@google). Это обеспечит ИИ необходимый контекст для ответа на вопросы о коде вашего проекта.
  • Память: Вы можете указать факты или правила, которые ИИ должен всегда помнить для этого проекта, что помогает поддерживать согласованность.

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

5. Разработка: Создание ADK с помощью Gemini CLI

SDLC

Конфигурация среды

Откройте Cloud Shell и нажмите кнопку «Открыть терминал».

  1. Скопируйте шаблон среды:
    cd ~/storygen-learning
    cp ~/storygen-learning/env.template ~/storygen-learning/.env
    

Если вы не нашли файл .env, отобразите его в редакторе (см. скрытый файл).

  • Нажмите на кнопку «Вид» в верхней панели меню.
  • Выберите «Отключить отображение скрытых файлов» .

👉Найдите идентификатор своего проекта Google Cloud:

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

👉Найдите своё имя пользователя на GitHub:

  • Перейдите в свой репозиторий GitHub и найдите своё имя пользователя на GitHub.

03-04-project-id.png

Редактирование файла .env 2. Замените следующие значения в .env :

GOOGLE_API_KEY=[REPLACE YOUR API KEY HERE]
GOOGLE_CLOUD_PROJECT_ID=[REPLACE YOUR PROJECT ID]
GITHUB_USERNAME=[REPLACE YOUR USERNAME]
GENMEDIA_BUCKET=[REPLACE YOUR PROJECT ID]-bucket

например, если идентификатор вашего проекта: testproject , вы должны указать GOOGLE_CLOUD_PROJECT_ID=testproject и GENMEDIA_BUCKET=testproject-bucket

Скрипты настройки

Перейдите в раздел 00_Starting_Here. Откройте новый терминал (не в Gemini CLI).

cd ~/storygen-learning/00_Starting_Here

Выполните полную установку:

./setup-complete.sh

Результаты настройки должны отобразиться в терминале.

Создайте своего первого агента

Перейдите к 01a_First_Agent_Ready. Давайте воспользуемся Gemini CLI для создания агента ADK:**

cd ~/storygen-learning/01a_First_Agent_Ready

Open Gemini CLI

gemini

В окне командной строки Gamini попробуйте ввести следующее:

I need you to help me create a Google ADK (Agent Development Kit) agent for story generation. I'm working on a children's storybook app that generates creative stories with visual scenes.

Please create a complete `agent.py` file that implements an LlmAgent using Google's ADK framework. The agent should:

**Requirements:**
1. Use the `google.adk.agents.LlmAgent` class
2. Use the "gemini-2.5-flash" model (supports streaming)
3. Be named "story_agent"
4. Generate structured stories with exactly 4 scenes each
5. Output valid JSON with story text, main characters, and scene data
6. No tools needed (images are handled separately)

**Agent Specifications:**
- **Model:** gemini-2.5-flash
- **Name:** story_agent  
- **Description:** "Generates creative short stories and accompanying visual keyframes based on user-provided keywords and themes."
**Story Structure Required:**
- Exactly 4 scenes: Setup  Inciting Incident  Climax  Resolution
- 100-200 words total
- Simple, charming language for all audiences
- Natural keyword integration
**JSON Output Format:**

{
  "story": "Complete story text...",
  "main_characters": [
    {
      "name": "Character Name",
      "description": "VERY detailed visual description with specific colors, features, size, etc."
    }
  ],
  "scenes": [
    {
      "index": 1,
      "title": "The Setup",
      "description": "Scene action and setting WITHOUT character descriptions",
      "text": "Story text for this scene"
    }
    // ... 3 more scenes
  ]
}


**Key Instructions for the Agent:**
- Extract 1-2 main characters maximum
- Character descriptions should be extremely detailed and visual
- Scene descriptions focus on ACTION and SETTING only
- Do NOT repeat character appearance in scene descriptions
- Always respond with valid JSON

Please include a complete example in the instructions showing the exact format using keywords like "tiny robot", "lost kitten", "rainy city".

The file should start with necessary imports, define an empty tools list, include a print statement for initialization, and then create the LlmAgent with all the detailed instructions.

Can you create this agent in backend/story_agent/agent.py

После завершения выключите терминал Gemini CLI, нажав сочетание Control+C

—————————————— Необязательно , вы можете перейти к разделу «Решение» ——————————————–

Теперь подтвердите внесенные изменения в веб-интерфейсе ADK.

cd ~/storygen-learning/01a_First_Agent_Ready/backend

source ../../.venv/bin/activate

adk web --port 8080

Для продолжения вам потребуется командная строка.

Запустите веб-сайт

cd ~/storygen-learning/01a_First_Agent_Ready

./start.sh

Если внесенные вами изменения не сработают, вы увидите ошибки в веб-интерфейсе ADK и на веб-сайте.

——————————————— Решение начинается здесь ————————————————

Решение

Завершите предыдущий процесс, нажав Control+C , или откройте другой терминал:

cd ~/storygen-learning/01b_First_Agent_Done

Запустите веб-сайт:

./start.sh

Вы увидите веб-сайт:

веб-сайт

Попробуйте интерфейс ADK: Откройте другой терминал:

cd ~/storygen-learning/01b_First_Agent_Done/backend
source ../../.venv/bin/activate

adk web --port 8080

Вы увидите пользовательский интерфейс ADK, где сможете задавать вопросы агенту.

adkweb

Перед переходом к следующему разделу нажмите Ctrl+C, чтобы завершить процесс.

6. Разработка: Создание ADK с помощью Gemini CLI (метод контекстной инженерии)

Первоначальная настройка

Убедитесь, что мы удалили файл агента, который мы сгенерировали ранее в файле 01a_First_Agent_Ready/backend/story_agent/agent.py:

Перейдите к 01a_First_Agent_Ready. Давайте воспользуемся Gemini CLI для создания агента ADK:**

cd ~/storygen-learning/01a_First_Agent_Ready/backend

Open Gemini CLI

gemini

В окне командной строки Gamini попробуйте ввести следующее:

Summarize the design doc @design.md for me, do not attempt to create file just yet. 

👉💻 Чтобы ненадолго выйти из режима «Близнецы», дважды нажмите Ctrl+C .

👉💻 В терминале выполните следующую команду, чтобы записать файл с инструкциями.

cat << 'EOF' > GEMINI.md
  ### **Coding Guidelines**
  **1. Python Best Practices:**

  *   **Type Hinting:** All function and method signatures should include type hints for arguments and return values.
  *   **Docstrings:** Every module, class, and function should have a docstring explaining its purpose, arguments, and return value, following a consistent format like reStructuredText or 
  Google Style.
  *   **Linter & Formatter:** Use a linter like `ruff` or `pylint` and a code formatter like `black` to enforce a consistent style and catch potential errors.
  *   **Imports:** Organize imports into three groups: standard library, third-party libraries, and local application imports. Sort them alphabetically within each group.
  *   **Naming Conventions:**
      *   `snake_case` for variables, functions, and methods.
      *   `PascalCase` for classes.
      *   `UPPER_SNAKE_CASE` for constants.
  *   **Dependency Management:** All Python dependencies must be listed in a `requirements.txt` file.

  **2. Web APIs (FastAPI):**

  *   **Data Validation:** Use `pydantic` models for request and response data validation.
  *   **Dependency Injection:** Utilize FastAPI's dependency injection system for managing resources like database connections.
  *   **Error Handling:** Implement centralized error handling using middleware or exception handlers.
  *   **Asynchronous Code:** Use `async` and `await` for I/O-bound operations to improve performance.
EOF
cat GEMINI.md

Сформулировав законы, давайте вновь призовем нашего ИИ-партнера и станем свидетелями волшебства этого артефакта.

👉💻 Перезапустите Gemini CLI из каталога shadowblade:

cd ~/storygen-learning/01a_First_Agent_Ready/backend
clear
gemini

👉✨ Теперь попросите Близнецов показать вам, о чём они думают. Руны прочитаны.

/memory show 

👉✨ Это единственная мощная команда, которая создаст вашего агента. Выполните её прямо сейчас:

You are an expert Python developer specializing in the Google Agent Development Kit (ADK). Your task is to write the complete, production-quality code for `agent.py` by following the technical specifications outlined in the provided design document verbatim.

Analyze the design document at `@design.md` and generate the corresponding Python code for `agent.py`.

I need you to generate a Python script based on the provided design document and reference examples. Follow these requirements:

Read the design document carefully - it contains the complete technical specification for the code you need to write
Follow the structure and patterns shown in the reference context files
Adhere to all Python best practices specified in the coding standards document
Implement every requirement mentioned in the design document exactly as specified
Use the exact variable names, function names, and string values mentioned in the specifications

The design document describes the complete architecture, dependencies, configuration, and logic flow. Your generated code must match these specifications precisely while following professional Python coding standards.
Generate clean, production-ready Python code that can be used immediately without modifications.

После завершения выключите терминал Gemini CLI, нажав сочетание Control+C

—————————————— Необязательно , вы можете перейти к разделу «Решение» ——————————————–

Теперь подтвердите внесенные изменения в веб-интерфейсе ADK.

cd ~/storygen-learning/01a_First_Agent_Ready/backend

source ../../.venv/bin/activate

adk web --port 8080

Для продолжения вам потребуется командная строка.

Запустите веб-сайт

cd ~/storygen-learning/01a_First_Agent_Ready

./start.sh

Если внесенные вами изменения не сработают, вы увидите ошибки в веб-интерфейсе ADK и на веб-сайте.

——————————————— Решение начинается здесь ————————————————

Решение

Завершите предыдущий процесс, нажав Control+C , или откройте другой терминал:

cd ~/storygen-learning/01b_First_Agent_Done

Запустите веб-сайт:

./start.sh

Вы увидите веб-сайт:

веб-сайт

Попробуйте интерфейс ADK: Откройте другой терминал:

cd ~/storygen-learning/01b_First_Agent_Done/backend
source ../../.venv/bin/activate

adk web --port 8080

Вы увидите пользовательский интерфейс ADK, где сможете задавать вопросы агенту.

adkweb

Перед переходом к следующему разделу нажмите Ctrl+C, чтобы завершить процесс.

7. Разработка: Создайте собственного агента с помощью Imagen

2adk

Создайте инструмент Imagen (второй агент).

cd ~/storygen-learning/02a_Image_Agent_Ready

Для создания агента генерации образов используйте Gemini CLI:

gemini generate "I need you to help me create a custom Google ADK (Agent Development Kit) agent for image generation. This is different from the story agent - this one handles image generation directly using the BaseAgent pattern for full control over tool execution.

Please create a complete `agent.py` file that implements a custom image generation agent. The agent should:

**Requirements:**
1. Use the `google.adk.agents.BaseAgent` class (NOT LlmAgent)
2. Be named "custom_image_agent" 
3. Directly execute the ImagenTool without LLM intermediation
4. Handle JSON input with scene descriptions and character descriptions
5. Store results in session state for retrieval by main.py
6. Use async generators and yield Events

**Key Specifications:**
- **Class Name:** CustomImageAgent (inherits from BaseAgent)
- **Agent Name:** "custom_image_agent"
- **Tool:** Uses ImagenTool for direct image generation
- **Purpose:** Bypass LLM agent limitations and directly call ImagenTool

**Input Format:**
The agent should handle JSON input like:
{
  "scene_description": "Scene action and setting",
  "character_descriptions": {
    "CharacterName": "detailed visual description"
  }
}


**Core Method:** `async def _run_async_impl(self, ctx: InvocationContext) -> AsyncGenerator[Event, None]:`
   - Extract user message from `ctx.user_content.parts`
   - Parse JSON input or fallback to plain text
   - Extract scene_description and character_descriptions
   - Build image prompt with style prefix: "Children's book cartoon illustration with bright vibrant colors, simple shapes, friendly characters."
   - Include character descriptions for consistency
   - Call `await self.imagen_tool.run()` directly
   - Store results in `ctx.session.state["image_result"]`
   - Yield Event with results


 **Session State:**
   - Store JSON results in `ctx.session.state["image_result"]`
   - Include success/error status
   - Store actual image URLs or error messages

Expected Output Structure:
- Successful results stored as JSON with image URLs
- Error results stored as JSON with error messages
- Results accessible via session state in main.py

Can you create this agent in backend/story_image_agent/agent.py

"

—————————————— Необязательно , вы можете перейти к разделу «Решение» ——————————————–

Теперь подтвердите внесенные изменения в веб-интерфейсе ADK.

cd ~/storygen-learning/02a_Image_Agent_Ready/backend

source ../../.venv/bin/activate

adk web --port 8080

Запустите веб-сайт

cd ~/storygen-learning/02a_Second_Agent_Ready

./start.sh

Если внесенные вами изменения не сработают, вы увидите ошибки в веб-интерфейсе ADK и на веб-сайте.

——————————————— Решение начинается здесь ————————————————

Решение

Завершите предыдущий процесс, нажав Control+C , или откройте другой терминал:

# Open new terminal
cd ~/storygen-learning/02b_Image_Agent_Done

Запустите веб-сайт:

./start.sh

Вы увидите веб-сайт:

веб-сайт

Попробуйте интерфейс ADK: Откройте другой терминал:

# Open new terminal
cd ~/storygen-learning/02b_Image_Agent_Done/backend

source ../../.venv/bin/activate

adk web --port 8080

Вы увидите пользовательский интерфейс ADK, где сможете задавать вопросы агенту:

adkweb

Перед переходом к следующему разделу нажмите Ctrl+C, чтобы завершить процесс.

Обучение

Наш первый агент отлично справлялся с генерацией текста, но теперь нам нужно генерировать изображения. Для этой задачи нам необходим более прямой контроль. Мы не хотим, чтобы LLM решал, создавать ли изображение; мы хотим отдавать ему команду сделать это напрямую. Это идеальная задача для BaseAgent.

В отличие от декларативного LlmAgent, BaseAgent является императивным. Это означает, что вы, разработчик, пишете точную пошаговую логику на Python внутри метода _run_async_impl. Вы полностью контролируете поток выполнения.

Вы выберете BaseAgent, когда вам потребуется:

Детерминированная логика : Агент должен следовать определенной, неизменяемой последовательности шагов.

Прямой запуск инструмента : Вы хотите вызвать инструмент напрямую, без вмешательства LLM.

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

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

8. Тестирование: Оценка агента

Наше приложение работает, но нам необходима автоматизированная система проверок. Эту задачу идеально поручить нашему ИИ-помощнику.

Действия

cd ~/storygen-learning/03a_Agent_Evaluation_Ready/backend

Используйте Gemini CLI для написания комплексных тестов:

Open Gemini CLI

gemini

В окне командной строки Gamini попробуйте ввести следующее:

I need you to create comprehensive test files for my backend/story_agent in Google ADK. I need three specific JSON files that match the testing structure used in ADK evaluation.

**Context:** 
- The story agent generates structured JSON stories with exactly 4 scenes
- It uses LlmAgent with no tools, just direct LLM responses
- Input: Keywords
- Output: JSON with story, main_characters, and scenes arrays

**Files to Create:**

### 1. `story_agent_eval.evalset.json` (Comprehensive Integration Tests)
Create a comprehensive evaluation set with:
- **eval_set_id**: "story_agent_comprehensive_evalset"
- **name**: "Story Agent Comprehensive Evaluation Set" 
- **description**: "Comprehensive evaluation scenarios for story_agent covering various keyword combinations, edge cases, and story quality metrics"


Each eval_case should include:
- Full conversation arrays with invocation_id, user_content, final_response
- Complete expected JSON responses with detailed stories, characters, and 4 scenes
- session_input with app_name "story_agent"
- All fields: story (narrative text), main_characters (with detailed visual descriptions), scenes (with index, title, description, text)

### 2. `story_generation.test.json` (Unit Tests)
Create basic generation tests with:
- **eval_set_id**: "story_agent_basic_generation_tests"
- **name**: "Story Agent Basic Generation Tests"
- **description**: "Unit tests for story_agent focusing on JSON structure compliance, scene generation, and keyword integration"

### 3. `test_config.json` (Evaluation Configuration)
Create test configuration with:
- **criteria**: response_match_score: 0.7, tool_trajectory_avg_score: 1.0
- **custom_evaluators**: 
  - json_structure_validator (validates required fields, scene count, character fields)
  - story_quality_metrics (word count 80-250, keyword integration threshold 0.8)
- **evaluation_notes**: Story agent specifics and trajectory expectations

**Important Requirements:**
1. All responses must be valid, parseable JSON
2. Stories must have exactly 4 scenes with indices 1-4
3. Each scene must have: index, title, description, text
4. Main characters must have detailed visual descriptions
5. No tool_uses expected (empty arrays) since story agent uses direct LLM
6. Word count should be 100-200 words total
7. Keywords must be naturally integrated into the narrative

Please generate all three files with realistic example stories and comprehensive test coverage matching the ADK evaluation format.

—————————————— Необязательно , вы можете перейти к разделу «Решение» ——————————————–

Чтобы ознакомиться с оценкой:

./run_adk_web_persistent.sh

Перейдите на вкладку eval в пользовательском интерфейсе ADK.

Вы должны увидеть веб-интерфейс ADK с возможностью постоянного тестирования.

Ключевой вывод: ИИ — мощный помощник в автоматизации обеспечения качества. Он может взять на себя рутинную работу по написанию тестов, освобождая вас от рутинной работы и позволяя сосредоточиться на разработке новых функций.

——————————————— Решение начинается здесь ————————————————

Решение

  • Перейдите в папку решения:
cd ~/storygen-learning/03b_Agent_Evaluation_Done/backend
  • Откройте веб-интерфейс ADK
./run_adk_web_persistent.sh

Тестовые примеры можно посмотреть на вкладке Eval :

eval1

Здесь можно настроить параметры:

eval2

Результаты оценочного запуска можно посмотреть здесь:

eval3

Обучение

Агент может «работать», то есть выполняться без ошибок, но как узнать, выдает ли он правильный результат? Хороша ли история? Правилен ли формат JSON? Вот тут-то и пригодится оценочная платформа ADK.

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

evalset.json : Это ваш основной набор тестов. Каждый «тестовый случай» в этом файле содержит пример диалога (например, запрос пользователя) и идеальный, «золотой» ответ, который, как вы ожидаете, выдаст агент.

test_config.json : Этот файл определяет правила успешного выполнения. Здесь вы задаете критерии, например:

response_match_score : Насколько точно ответ агента должен соответствовать «эталонному» ответу? (Оценка 1,0 означает, что ответ должен быть идентичен).

custom_evaluators : Вы можете создавать собственные правила, например, «Ответ должен быть в формате JSON» или «Рассказ должен содержать более 100 слов».

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

9. Инфраструктура как код (IaC): создание дома в облаке

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

Что такое Docker?

Docker — это платформа для создания и запуска приложений в контейнерах. Представьте себе контейнер как стандартный транспортный контейнер для программного обеспечения. Он объединяет все необходимое для работы вашего приложения в один изолированный пакет:

  • Сам код приложения
  • Необходимая среда выполнения (например, конкретная версия Python)
  • Все системные инструменты и библиотеки

Затем это контейнеризированное приложение можно запустить на любой машине, на которой установлен Docker, решая классическую проблему "у меня всё работает".

В этом разделе мы попросим Gemini сгенерировать Dockerfile, который представляет собой просто рецепт или план для создания образа контейнера нашего приложения.

процесс развертывания

Действия

cd ~/storygen-learning/04a_Manual_Deployment_Ready

Используйте Gemini CLI для создания Dockerfile для бэкенда: Откройте Gemini CLI

Gemini

В командной строке Gemini попробуйте ввести:

Create a manual deployment plan for my StoryGen app with Google Cloud Platform. I have a Next.js frontend, Python backend, and Terraform infrastructure.

Generate these deployment files:
1. **01-setup.sh** - Environment setup and authentication
2. **02-build-images.sh** - Build and push Docker images to Google Container Registry
3. **03-deploy-infrastructure.sh** - Deploy with Terraform and configure services
4. **load-env.sh** - Load environment variables for deployment

**Requirements:**
- Use Google Cloud Run for both frontend and backend
- Configure Imagen API and storage buckets
- Set up proper IAM permissions
- Use environment variables from .env file
- Include error handling and status checks

Keep scripts simple, well-commented, and production-ready for manual execution.

Решение :

cd ~/storygen-learning/04b_Manual_Deployment_Done

Бегать:

source ../.venv/bin/activate
./01-setup.sh
./02-build-images.sh
./03-deploy-infrastructure.sh

Вы должны увидеть результаты развертывания и создания инфраструктуры.

10. Автоматизация (CI/CD): цифровая сборочная линия

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

CI/CD расшифровывается как непрерывная интеграция и непрерывное развертывание . Это метод автоматической сборки, тестирования и развертывания кода при каждом внесении изменений.

  • Непрерывная интеграция (CI) : это фаза «сборки и тестирования». Как только разработчик отправляет изменения в код в общий репозиторий (например, GitHub), запускается автоматизированная система. Она собирает приложение и запускает все тесты (например, созданные нами оценки агентов), чтобы убедиться, что новый код корректно интегрируется и не содержит ошибок.
  • Непрерывная непрерывная интеграция (CD) : это фаза «выпуска». Если фаза CI проходит успешно, система автоматически развертывает новую, протестированную версию приложения в производственной среде, делая ее доступной для пользователей.

Этот автоматизированный конвейер создает «цифровую сборочную линию», которая быстро, безопасно и надежно доставляет код с компьютера разработчика в продакшн. В этом разделе мы попросим нашего ИИ-помощника построить эту сборочную линию для нас, используя GitHub Actions и Google Cloud Build.

Действия

cd ~/storygen-learning/05a_CICD_Pipeline_Ready

Используйте Gemini CLI для создания конвейера CI/CD с помощью GitHub:

Open Gemini CLI

Gemini

В командной строке Gemini попробуйте ввести:

Create a CI/CD pipeline for my StoryGen app using Google Cloud Build and GitHub integration.

Generate these automation files:
1. **cloudbuild.yaml** (for backend) - Automated build, test, and deploy pipeline
2. **GitHub Actions workflow** - Trigger builds on push/PR
3. **Deployment automation scripts** - Streamlined deployment process

**Requirements:**
- Auto-trigger on GitHub push to main branch
- Build and push Docker images
- Run automated tests if available
- Deploy to Google Cloud Run
- Environment-specific deployments (staging/prod)
- Notification on success/failure

Focus on fully automated deployment with minimal manual intervention. Include proper secret management and rollback capabilities.

——————————————— Решение начинается здесь ————————————————

Решение :

cd ~/storygen-learning/06_Final_Solution/
# Copy the GitHub workflow to parent folder
cp -r 06_Final_Solution/.GitHub ../../../.GitHub

Вернитесь в папку 06_Final_Solution и запустите скрипт:

cd ~/storygen-learning/06_Final_Solution/

./setup-cicd-complete.sh

Вы должны увидеть завершение настройки конвейера CI/CD.

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

git add .
git commit -m "feat: Add backend, IaC, and CI/CD workflow"
git push origin main

Перейдите на вкладку «Действия» в вашем репозитории GitHub, чтобы посмотреть, как выполняется автоматическое развертывание.

11. Операции: Центр управления ИИ

Мы запустили приложение! Но на этом наше путешествие не заканчивается. Это «День 2» — операционная деятельность. Вернемся к Cloud Assist для управления запущенным приложением.

Действия

  1. Перейдите к своему сервису Cloud Run в консоли Google Cloud . Взаимодействуйте с работающим приложением, чтобы сгенерировать трафик и журналы.
  2. Откройте панель Cloud Assist и используйте ее в качестве вспомогательного инструмента, получая подсказки следующего вида:

Анализ логов:

Summarize the errors in my Cloud Run logs for the service 'genai-backend' from the last 15 minutes.

Оптимизация производительности:

My Cloud Run service 'genai-backend' has high startup latency. What are common causes for a Python app and how can I investigate with Cloud Trace?

Оптимизация затрат:

Analyze the costs for my 'genai-backend' service and its GCS bucket. Are there any opportunities to save money?

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