· 3 min čtení
Vlastní AI agent: FastAPI a Gemini na Google Cloudu
Hotové nástroje jsou super. Jenže dřív nebo později budeš chtít agenta, který dělá přesně to, co potřebuješ ty: volá tvoje funkce, sedí na tvém API a běží ve tvém cloudu. Tady ho postavíš. Python, FastAPI, Gemini přes Google Gen AI SDK a nasazení na Cloud Run.
Agent v tomhle článku umí dvě věci: říct aktuální čas v libovolném pásmu a spočítat cenu s DPH. Na tom pochopíš to hlavní: model sám rozhodne, kterou tvoji funkci zavolá. Zbytek je jen rozšiřování.
Pozn.: Google přejmenoval Vertex AI na Gemini Enterprise Agent Platform. V dokumentaci a v konzoli uvidíš oba názvy.
Co budeš potřebovat
- Python a virtuální prostředí (viz Python a virtualenvwrapper),
- Git (viz Git pro vibecodery),
- projekt na Google Cloudu se zapnutou fakturací,
- nainstalované Google Cloud CLI (
gcloud).
1. Projekt a závislosti
mkdir muj-agent && cd muj-agent
mkvirtualenv muj-agent
git init
requirements.txt:
fastapi[standard]
google-genai
pip install -r requirements.txt
2. Přihlášení a API
gcloud init
gcloud services enable aiplatform.googleapis.com
gcloud auth application-default login
Poslední příkaz vytvoří lokální přihlašovací údaje (Application Default Credentials). SDK je najde samo, žádný klíč do kódu nepíšeš. Tvůj účet potřebuje roli Agent Platform User (roles/aiplatform.user).
Proměnné prostředí, podle kterých SDK pozná, že má jít přes Google Cloud. Ulož si je do .env (a .env patří do .gitignore!):
export GOOGLE_CLOUD_PROJECT=tvuj-projekt
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True
Starší návody používají GOOGLE_GENAI_USE_VERTEXAI=True. Aktuální SDK ji pořád zná, oficiální quickstart ale uvádí GOOGLE_GENAI_USE_ENTERPRISE.
3. Kód agenta
Celý agent je jeden soubor main.py:
import os
from datetime import datetime
from zoneinfo import ZoneInfo
from fastapi import FastAPI, Header, HTTPException
from google import genai
from google.genai import types
from pydantic import BaseModel
MODEL = os.environ.get("GEMINI_MODEL", "gemini-2.5-flash")
API_KEY = os.environ.get("AGENT_API_KEY")
client = genai.Client() # čte GOOGLE_GENAI_USE_ENTERPRISE, GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION
app = FastAPI(title="Vibecoders agent")
def aktualni_cas(mesto: str) -> str:
"""Vrátí aktuální čas pro zadané časové pásmo.
Args:
mesto: IANA název pásma, například Europe/Prague.
"""
return datetime.now(ZoneInfo(mesto)).strftime("%Y-%m-%d %H:%M")
def spocitej_cenu(cena_bez_dph: float, sazba_dph: float = 21.0) -> float:
"""Spočítá cenu s DPH.
Args:
cena_bez_dph: Cena bez DPH v Kč.
sazba_dph: Sazba DPH v procentech.
"""
return round(cena_bez_dph * (1 + sazba_dph / 100), 2)
class Dotaz(BaseModel):
zprava: str
class Odpoved(BaseModel):
odpoved: str
@app.get("/")
def zdravi():
return {"status": "ok"}
@app.post("/chat", response_model=Odpoved)
def chat(dotaz: Dotaz, x_api_key: str | None = Header(default=None)):
if API_KEY and x_api_key != API_KEY:
raise HTTPException(status_code=401, detail="Neplatný klíč")
response = client.models.generate_content(
model=MODEL,
contents=dotaz.zprava,
config=types.GenerateContentConfig(
system_instruction="Jsi stručný asistent. Odpovídej česky.",
tools=[aktualni_cas, spocitej_cenu],
),
)
return Odpoved(odpoved=response.text or "")
Co se tu děje:
genai.Client()si konfiguraci vezme z proměnných prostředí.tools=[aktualni_cas, spocitej_cenu]: obyčejné Python funkce předáš rovnou jako nástroje. SDK z jejich typů a docstringů vyrobí popis pro model, a když se model rozhodne funkci zavolat, SDK ji spustí a výsledek mu vrátí (automatic function calling). Proto piš pořádné docstringy: model podle nich rozhoduje.X-Api-Key: jednoduchá ochrana, ať ti endpoint nevyžírá kredit kdokoli z internetu. Pro produkci zvaž Cloud Run s vyžadovaným IAM přihlášením.GEMINI_MODEL: model si nastavíš proměnnou.gemini-2.5-flashje model z oficiálních příkladů function callingu. Aktuální nabídku modelů si ověř v dokumentaci, mění se rychle.
4. Spusť lokálně
fastapi dev main.py
A zkus ho:
curl -X POST http://127.0.0.1:8000/chat \
-H "Content-Type: application/json" \
-d '{"zprava": "Kolik je v Praze hodin a kolik stojí 1500 Kč s DPH?"}'
Model zavolá obě funkce a odpoví jednou větou. Interaktivní dokumentaci API najdeš na http://127.0.0.1:8000/docs.
Funguje? Commit.
git add main.py requirements.txt .gitignore
git commit -m "AI agent s FastAPI a Gemini"
5. Tajný klíč do Secret Manageru
Klíč AGENT_API_KEY nepatří do kódu ani do příkazové řádky v historii. Ulož ho do Secret Manageru:
gcloud secrets create agent-api-key --replication-policy="automatic"
printf "tvuj-dlouhy-nahodny-klic" | gcloud secrets versions add agent-api-key --data-file=-
Účet, pod kterým služba na Cloud Run běží, potřebuje roli Secret Manager Secret Accessor (roles/secretmanager.secretAccessor) a pro volání Gemini taky roles/aiplatform.user.
6. Nasazení na Cloud Run
Cloud Run umí nasadit přímo ze zdrojáků, Dockerfile psát nemusíš:
gcloud run deploy muj-agent --source . \
--set-env-vars GOOGLE_CLOUD_PROJECT=tvuj-projekt,GOOGLE_CLOUD_LOCATION=global,GOOGLE_GENAI_USE_ENTERPRISE=True \
--set-secrets AGENT_API_KEY=agent-api-key:latest
Na konci dostaneš URL. Volání je stejné jako lokálně, jen přidáš hlavičku X-Api-Key. V cloudu se SDK přihlásí účtem služby automaticky, gcloud auth tam neřešíš.
Kam dál
- Víc nástrojů. Každá nová funkce = nová schopnost agenta. Dotaz do databáze, volání interního API, odeslání e-mailu (tady pozor, akce s dopadem nech potvrdit člověkem).
- Paměť. Pro konverzaci přes víc zpráv použij
client.chats.create(...)a historii si ukládej. - Nech to stavět agenta. Celý tenhle projekt zvládneš zadat Claude Code. Jak na to, máš v Claude Code v praxi. A pokud chceš tým agentů místo jednoho, mrkni na tým AI agentů v Grok Bot.
Zdroje (ověřeno 2026-10-14)
- Google Gen AI SDK pro Python
- Gemini Enterprise Agent Platform: Quickstart (instalace
google-genai, proměnné prostředí,gcloud auth application-default login) - Get started with Gemini Enterprise Agent Platform (role
roles/aiplatform.user) - Function calling (Python funkce v
tools, modelgemini-2.5-flash) - Deploy a FastAPI app to Cloud Run (
fastapi[standard],gcloud run deploy --source .) - Cloud Run: Configure secrets (
--set-secrets,roles/secretmanager.secretAccessor) - Secret Manager: Create and access secrets
- gcloud services enable
Související články
· 6 min čtení
Od promptů k agentům: historie AI engineeringu 2022–2026
Prompt engineering, RAG, AutoGPT, context a harness engineering, MCP. Časová osa pojmů od ChatGPT po dnešek a které z nich už nikdo neříká.
Číst článek →· 8 min čtení
Claude Code vs Cursor vs Codex: co vybrat v roce 2026
Srovnání Claude Code, Cursoru a Codexu z praxe: pracovní styl, kontext, agenti, cena a pro koho se který nástroj hodí. Bez hype, s doporučením.
Číst článek →