Галоўная / Артыкулы

Агенты Google ADK: адаптаванне ад аднаго агента Gemini да запуску ў Cloud Run

Google ADK адаптаванне ад агента Gemini да працы: інструменты, агенты як інструменты, последовальныя практыкі, локальныя тэсты, а таксама размешчэнне ў Cloud Run і Vertex AI Agent Engine.

Выдавец: REACTAPP.TOP7 хв чытання1614 слоў

Крыніцы: Introduction to Agentic AI with Google ADK

Масштабныя мовныя мадэлі змянілі спосаб прыемкі програмнага забезпечэння людзьмі, але наступны крок стосуецца не столькі розумнейшых чатоў, сколькі сістэм, якія можаюць рассуждаваць, вызываць інструменты, працаваць разам і самостоятэльна выкананыць цэлыя робочыя працэсы. Гэта тэрытарыя агентных AI. Калі класычны прыстаўка выдае адну запітанне і чакае аднай адпаведзі, агент сам адлучвае, што робіць далей: ён можа вызваць API, запрашаць інформацыю, перадаць падзадачу спецыялісту або вярнуць структураваны рэзультат.

Кіт для разработкі агентоў Google (ADK) — гэта практычная парадка для выучэння гэтага. Ён дазволяе ствараць агентоў на мадэлях Gemini, выклікваць функцыі Python як інструменты, коордынаваць калькі агентоў і размістыць іх у Google Cloud. Наступныя раздзелы прагледваюць працэс, пры якому ад аднаго агента пераходзіць да размішчэння ў воблаку.

Ад запітанняў да агентоў

Традыцыяныя прыкладнікі на базе LLM працуююць за прынцыпам «запытка-адказ». Вы ставіце запытку, мадэль адказвае, і на гэтам усё. У агентнай схеме мадэль знаходзіцца ўнутрь большага сістэмы выканання. Яна можа мець цілі, выбіраць інструменты, взаімадзейваць з 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]
)

Хутчэй, мадэль разумее запіт, але замест таго, каб сама выконваць арыметычныя вычысленні, яна перадае ўсе вычысленні функцыі. LLM выконвае логічныя манёвры, а інструмент — фактычна выконанне. Такое раздзелення ёсць аднай з аснов серйозных корпоратыўскіх рашэнняў.

Рэальныя сістэмы рэдка калі паслугоўваюцься аднім інструментам. Асістэнт можа вызываць 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 адразу з Cloud Run задае інтэрфейс ADK. Рэзультатам являецца сервіс AI, які можна размясціць, а не проста іграшка для нотбука.

Адкрыцье 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, і працэс яўляецца чыстым, якім бы ні было там, што відбываецца пад спадом.

Чаму гэта важна

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

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