์ฝ˜ํ…์ธ ๋กœ ์ด๋™

ADK์šฉ Python ๋น ๋ฅธ ์‹œ์ž‘

์ด ๊ฐ€์ด๋“œ๋Š” ADK(Agent Development Kit) for Python์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

  • Python 3.10 ์ด์ƒ
  • ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ์œ„ํ•œ pip

์„ค์น˜

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ADK๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

pip install google-adk
๊ถŒ์žฅ: Python ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”

Python ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

python3 -m venv .venv

Python ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

.venv\Scripts\activate.bat
.venv\Scripts\Activate.ps1
source .venv/bin/activate

์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

adk create ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ ์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

adk create my_agent

์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ ํƒ์ƒ‰

์ƒ์„ฑ๋œ ์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, agent.py ํŒŒ์ผ์—๋Š” ์—์ด์ „ํŠธ์˜ ์ฃผ์š” ์ œ์–ด ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

my_agent/
    agent.py      # ๋ฉ”์ธ ์—์ด์ „ํŠธ ์ฝ”๋“œ
    .env          # API ํ‚ค ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID
    __init__.py

์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ ์—…๋ฐ์ดํŠธ

agent.py ํŒŒ์ผ์—๋Š” root_agent ์ •์˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ADK ์—์ด์ „ํŠธ์˜ ์œ ์ผํ•œ ํ•„์ˆ˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ๋„๊ตฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ agent.py ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ ์ฝ”๋“œ์— ํ‘œ์‹œ๋œ ๋Œ€๋กœ ์—์ด์ „ํŠธ๊ฐ€ ์‚ฌ์šฉํ•  get_current_time ๋„๊ตฌ๋ฅผ ํฌํ•จํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

from google.adk.agents.llm_agent import Agent

# ๋ชจ์˜ ๋„๊ตฌ ๊ตฌํ˜„
def get_current_time(city: str) -> dict:
    """์ง€์ •๋œ ๋„์‹œ์˜ ํ˜„์žฌ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค."""
    return {"status": "success", "city": city, "time": "์˜ค์ „ 10:30"}

root_agent = Agent(
    model='gemini-flash-latest',
    name='root_agent',
    description="์ง€์ •๋œ ๋„์‹œ์˜ ํ˜„์žฌ ์‹œ๊ฐ„์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.",
    instruction="๋‹น์‹ ์€ ๋„์‹œ์˜ ํ˜„์žฌ ์‹œ๊ฐ„์„ ์•Œ๋ ค์ฃผ๋Š” ์œ ์šฉํ•œ ๋„์šฐ๋ฏธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด 'get_current_time' ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.",
    tools=[get_current_time],
)

API ํ‚ค ์„ค์ •

์ด ํ”„๋กœ์ ํŠธ๋Š” API ํ‚ค๊ฐ€ ํ•„์š”ํ•œ Gemini API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Gemini API ํ‚ค๊ฐ€ ์•„์ง ์—†๋Š” ๊ฒฝ์šฐ Google AI Studio์˜ API ํ‚ค ํŽ˜์ด์ง€์—์„œ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ .env ํŒŒ์ผ์— API ํ‚ค๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: my_agent/.env
echo 'GOOGLE_API_KEY="YOUR_API_KEY"' > .env
์—…๋ฐ์ดํŠธ: my_agent/.env
echo 'GOOGLE_API_KEY="YOUR_API_KEY"' > .env
์—…๋ฐ์ดํŠธ: my_agent/.env
echo GOOGLE_API_KEY="YOUR_API_KEY" > .env
ADK์—์„œ ๋‹ค๋ฅธ AI ๋ชจ๋ธ ์‚ฌ์šฉ

ADK๋Š” ๋‹ค์–‘ํ•œ ์ƒ์„ฑํ˜• AI ๋ชจ๋ธ ์‚ฌ์šฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ADK ์—์ด์ „ํŠธ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋ธ ๋ฐ ์ธ์ฆ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์—์ด์ „ํŠธ ์‹คํ–‰

adk run ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€ํ™”ํ˜• ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ADK ์—์ด์ „ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ adk web ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ADK์—์„œ ์ œ๊ณตํ•˜๋Š” ADK ์›น ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ํ†ตํ•ด ์—์ด์ „ํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‹คํ–‰

adk run ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—์ด์ „ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

adk run my_agent

adk-run.png

์›น ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‹คํ–‰

ADK ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—์ด์ „ํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

adk web --port 8000

Note

my_agent/ ํด๋”๊ฐ€ ํฌํ•จ๋œ ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ์—์ด์ „ํŠธ๊ฐ€ agents/my_agent/ ์•ˆ์— ์žˆ๋Š” ๊ฒฝ์šฐ agents/ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ adk web์„ ์‹คํ–‰ํ•˜์„ธ์š”.

์ด ๋ช…๋ น์€ ์—์ด์ „ํŠธ์šฉ ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” ์›น ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์›น ์ธํ„ฐํŽ˜์ด์Šค๋Š” (http://localhost:8000)์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ผ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ์—์„œ ์—์ด์ „ํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  ์š”์ฒญ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

adk-web-dev-ui-chat.png

์ฃผ์˜: ADK Web์€ ๊ฐœ๋ฐœ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”

ADK Web์€ ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ADK Web์€ ๊ฐœ๋ฐœ ๋ฐ ๋””๋ฒ„๊น… ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋‹ค์Œ: ์—์ด์ „ํŠธ ๋นŒ๋“œ

์ด์ œ ADK๊ฐ€ ์„ค์น˜๋˜์—ˆ๊ณ  ์ฒซ ๋ฒˆ์งธ ์—์ด์ „ํŠธ๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ฏ€๋กœ ์ด์ œ ๋นŒ๋“œ ๊ฐ€์ด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ์—์ด์ „ํŠธ๋ฅผ ๋นŒ๋“œํ•ด ๋ณด์„ธ์š”.