Главная / Статьи

Агенты Google ADK: от одного агента Gemini до развертывания в Cloud Run

Перевод Google ADK от одного агента Gemini в производственную среду: инструменты, агенты как инструменты, последовательные потоки, локальные тесты, а также развертывание в Cloud Run и Vertex AI Agent Engine.

Издатель: REACTAPP.TOP7 мин чтения1614 слов

Источники: Introduction to Agentic AI with Google ADK

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

Инструментарий разработки агентов от Google (Agent Development Kit, ADK) представляет собой практическую платформу для изучения этой темы. Он позволяет создавать агентов на основе моделей Gemini, использовать функции Python в качестве инструментов, координировать действия нескольких агентов и развертывать их в Google Cloud. В следующих разделах рассматривается процесс от создания одного агента до его развертывания в облаке.

От запросов к агентам

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

Приложение ADK основано на root_agent. Самая простая версия выглядит следующим образом:

from google.adk.agents import Agent

root_agent = Agent(
    name="assistant",
    model="gemini-2.5-flash",
    instruction="You are a helpful assistant"
)

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

Инструменты

То, что определяет агентного ИИ, — это использование инструментов. Без инструментов модель может только генерировать текст, а с ними агент может применять реальную логику. В ADK обычная функция Python превращается в инструмент сразу после того, как она передаётся в конфигурацию агента. Примером может служить агент-калькулятор:

from google.adk.agents import Agent


def calculator(a: float, b: float, operation: str) -> float:
    if operation == "add":
        return a + b

    if operation == "subtract":
        return a - b

    if operation == "multiply":
        return a * b

    if operation == "divide":
        if b == 0:
            raise Exception("Cannot divide by zero")

        return a / b

    raise Exception("Unsupported operation")


root_agent = Agent(
    name="assistant",
    model="gemini-2.5-flash",
    instruction=(
        "You are a helpful assistant with calculator capabilities. "
        "Use the calculator tool for arithmetic. "
        "Supported operations are add, subtract, multiply, divide."
    ),
    tools=[calculator]
)

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

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

from google.adk.agents import Agent


def calculator(a: float, b: float, operation: str) -> float:
    if operation == "add":
        return a + b

    if operation == "subtract":
        return a - b

    if operation == "multiply":
        return a * b

    if operation == "divide":
        if b == 0:
            raise ValueError("Cannot divide by zero.")

        return a / b

    raise ValueError("Unsupported operation.")


def convert_units(value: float, from_unit: str, to_unit: str) -> float:
    from_unit = from_unit.lower()
    to_unit = to_unit.lower()

    if from_unit == "km" and to_unit == "miles":
        return value * 0.621371

    if from_unit == "miles" and to_unit == "km":
        return value / 0.621371

    if from_unit == "celsius" and to_unit == "fahrenheit":
        return value * 9 / 5 + 32

    if from_unit == "fahrenheit" and to_unit == "celsius":
        return (value - 32) * 5 / 9

    raise ValueError("Unsupported unit conversion.")


def get_weather_mock(city: str) -> dict:
    weather_data = {
        "bucharest": {
            "temperature_celsius": 23,
            "condition": "sunny",
            "wind_speed_kmh": 10,
        },
        "london": {
            "temperature_celsius": 16,
            "condition": "rain",
            "wind_speed_kmh": 18,
        },
    }

    key = city.lower()

    if key not in weather_data:
        return {
            "city": city,
            "error": "Weather data not available."
        }

    return {
        "city": city,
        **weather_data[key],
    }


root_agent = Agent(
    name="multi_tool_agent",
    model="gemini-2.5-flash",
    instruction=(
        "You are a practical assistant. "
        "Use the available tools when the user asks for calculations, "
        "unit conversions, or weather information."
    ),
    tools=[
        calculator,
        convert_units,
        get_weather_mock,
    ],
)

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

Агенты как инструменты других агентов

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

from google.adk.agents import LlmAgent
from google.adk.tools import google_search
from google.adk.tools import google_maps_grounding
from google.adk.tools.agent_tool import AgentTool


routing_agent = LlmAgent(
    name="routing_agent",
    model="gemini-2.5-pro",
    instruction="""
    You are a routing agent.
    Use google_maps_grounding to estimate routes and travel times.
    """,
    tools=[google_maps_grounding],
)


discovery_agent = LlmAgent(
    name="discovery_agent",
    model="gemini-2.5-pro",
    instruction="""
    You are a travel discovery agent.
    Use Google Search to find interesting places.
    """,
    tools=[google_search]
)


composer_agent = LlmAgent(
    name="composer_agent",
    model="gemini-2.5-pro",
    instruction="""
    Write a friendly travel itinerary based on the collected information.
    """,
    tools=[]
)


root_agent = LlmAgent(
    name="travel_agent",
    model="gemini-2.5-pro",
    instruction="""
    You are a travel assistant.
    Coordinate discovery, routing, and itinerary composition.
    """,
    tools=[
        AgentTool(discovery_agent),
        AgentTool(routing_agent),
        AgentTool(composer_agent)
    ]
)

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

Структурированные потоки

Не каждый процесс должен быть полностью автономным, поскольку бизнес-системы часто нуждаются в структуре. Типичная последовательность включает планирование, затем выполнение и, наконец, отчетность. ADK реализует это с помощью последовательных агентов, как в этой цепочке планировщика, исполнителя и отчетчика:

from google.adk.agents import Agent, SequentialAgent
from google.adk.tools import AgentTool


planner_agent = Agent(
    name="planner_agent",
    model="gemini-2.5-flash",
    instruction="""
    Read the user request and create a short execution plan.
    """
)


executor_agent = Agent(
    name="executor_agent",
    model="gemini-2.5-flash",
    instruction="""
    Execute the plan and delegate specialist work.
    """,
    tools=[]
)


report_agent = Agent(
    name="report_agent",
    model="gemini-2.5-flash",
    instruction="""
    Produce the final report based on execution results.
    """
)


root_agent = SequentialAgent(
    name="planner_executor_report_workflow",
    sub_agents=[
        planner_agent,
        executor_agent,
        report_agent,
    ],
)

Локальная разработка

Процесс локальной настройки в ADK происходит быстро. Сначала файл .env задаёт проект Google Cloud, местоположение и параметры использования Vertex AI:

GOOGLE_CLOUD_PROJECT=PROJECT_ID
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_GENAI_USE_VERTEXAI=True

Затем одна команда запускает локальный веб-интерфейс для интерактивной работы с агентами:

adk web

Такой быстрый цикл подходит для экспериментов.

Развертывание в Cloud Run

Локальные тесты имеют свои ограничения, а Cloud Run — один из самых простых способов вывода на производство. Для первого агента выше достаточно короткого файла Dockerfile:

FROM python:3.11-slim

WORKDIR /app

COPY . .

RUN pip install --no-cache-dir -r requirements.txt

CMD ["adk", "web", "--host", "0.0.0.0", "--port", "8080"]

Разверните из исходного кода с помощью gcloud:

gcloud run deploy simple-agent \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --set-env-vars GOOGLE_GENAI_USE_VERTEXAI=TRUE \
  --set-env-vars GOOGLE_CLOUD_PROJECT=PROJECT_ID \
  --set-env-vars GOOGLE_CLOUD_LOCATION=us-central1

После этого найдите URL сервиса:

gcloud run services describe simple-agent \
  --region us-central1 \
  --format='value(status.url)'

Открытие этого URL предоставляет интерфейс ADK непосредственно из Cloud Run. В результате получается сервис ИИ, готовый к развертыванию, а не просто учебный инструмент.

Размещение API с помощью FastAPI

Иногда HTTP-API более подходит, чем интерфейс в браузере, и ADK хорошо работает с FastAPI. Минимальный файл main.py, оборачивающий агент для работы с погодой, выглядит следующим образом:

import uuid

from fastapi import FastAPI
from pydantic import BaseModel

from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.genai import types

from agent import root_agent


app = FastAPI()

session_service = InMemorySessionService()

runner = Runner(
    agent=root_agent,
    app_name="weather_agent_service",
    session_service=session_service,
)


class QueryRequest(BaseModel):
    message: str


@app.post("/weather")
async def weather(request: QueryRequest):

    user_id = "api_user"
    session_id = str(uuid.uuid4())

    await session_service.create_session(
        app_name="weather_agent_service",
        user_id=user_id,
        session_id=session_id,
    )

    content = types.Content(
        role="user",
        parts=[
            types.Part(text=request.message)
        ],
    )

    final_answer = ""

    async for event in runner.run_async(
        user_id=user_id,
        session_id=session_id,
        new_message=content,
    ):
        if event.is_final_response():
            final_answer = event.content.parts[0].text

    return {
        "response": final_answer
    }

Для его развертывания требуется немного иной Dockerfile:

FROM python:3.11-slim

WORKDIR /app

COPY . .

RUN pip install --no-cache-dir -r requirements.txt

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]

Agent Engine

ADK также может быть развернут в Agent Engine от Google — управляемой среде выполнения, созданной для работы корпоративных агентов. Начните с включения необходимых API:

gcloud services enable \
  aiplatform.googleapis.com \
  storage.googleapis.com

Далее создайте бакет для стадионга:

export STAGING_BUCKET="gs://${PROJECT_ID}-agent-staging"

gsutil mb -l us-central1 $STAGING_BUCKET

Затем разверните агента:

adk deploy agent_engine \
--project=$PROJECT_ID \
--region=us-central1 \
--staging_bucket=$STAGING_BUCKET \
basic_agent

Это создаёт ресурс управляемого двигателя рассуждений в Google Cloud, причём процесс остаётся простым, несмотря на множество происходящих в фоновом режиме действий.

Почему это важно

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

ADK является хорошим инструментом для обучения, поскольку постепенно знакомит с этими концепциями. Вы начинаете с одного агента Gemini, добавляете инструменты, соединяете несколько агентов, а затем переходите к корпоративным рабочим процессам с использованием технологий RAG, интеграций MCP, систем оценки и развертывания на GCP. Те же принципы применимы как к примеру калькулятора, так и к многоагентным корпоративным решениям: рассуждения, делегирование задач, оркестрация и выполнение. Программное обеспечение переходит от ответов на вопросы к выполнению функций внутри реальных приложений.