Ako vytvoriť vlastného AI agenta

Workflow a Agent

V AI sfére sa používajú najmä dve pojmy. Workflow (pracovný postup) a agentom. V princípe sa rozlišujú medzi statickým (vopred definovaným) postupom úkonov jazykového modelu a dynamickým postup úkonov na základe promptu. Workflow ma vopred definovaný postup na rozdiel on Agenta, ktorý reaktívne reaguje na prompt pomcou nástrojov (tools).

Workflow (Pracovný postup)

Workflow je statický, vopred definovaný postup krokov, ktoré AI vykonáva v pevnom poradí. Je to ako recept v kuchárskej knihe – máte presne napísané kroky 1, 2, 3… a AI ich vykonáva postupne bez ohľadu na obsah vstupu.Charakteristiky:

  • Pevné poradie krokov
  • Predvídateľný výstup
  • Vhodné pre opakujúce sa úlohy
  • Jednoduchšie na ladenie a kontrolu

Agent

Agent je dynamický a reaktívny – sám rozhoduje, ktoré nástroje použije a v akom poradí, na základe konkrétneho promptu používateľa. Je to ako skúsený kuchár, ktorý sa rozhodne podľa dostupných ingrediencií a požiadaviek hosťa.Charakteristiky:

  • Flexibilné rozhodovanie
  • Používa nástroje podľa potreby
  • Nepredvídateľný postup
  • Adaptuje sa na rôzne situácie

 

Tvorba reaktívneho agenta

Na tvorbu AI agentov máme na výber viacej možnosti. Pár možnosti som už opísal v tomto článku. Pre tento článok som vybral framework LangGraph. Vybral som ho z dôvodu, že je najrozšírenejší framework na tvorbu agentických systémov. Avšak je nevýhodou je, že potrebuje na tvorby programátora.

Cieľom nášho agenta bude reagovať na prompty od používateľa, jazykový model bude využívať nástroje a vracať odpovede. Ako náš model využijeme Gemini flash.

Začneme s vytvorením Python projektu. Budem používať uv package manager.

mkdir blog-ai-react-agent
cd blog-ai-react-agent
uv init

Následne si stiahneme balíky pre náš projekt

uv add langgraph "langchain[google-genai]"

Taktiež si získame náš API kľúč v Google AI studio. S klúčom si vieme vytvoriť reaktívneho agenta v konzole.

# main.py
GEMINI_API_KEY="secret"
from langgraph.prebuilt import create_react_agent
from langchain_google_genai import ChatGoogleGenerativeAI

def main():
    llm = ChatGoogleGenerativeAI(
        model="gemini-2.5-flash",
        google_api_key=GEMINI_API_KEY
    )
    agent = create_react_agent(
        model=llm,
        tools=[],
        prompt="Si veľmi nápomocný asistent. Odpovedaj bez markdown anotácií."
    )

    response = agent.invoke({
        "messages": [
            {
                "role": "user",
                "content": "Koľko metrov má Empire State Building?"
            }
        ]
    })

    print(response["messages"][-1].content)


if __name__ == "__main__":
    main()

Následne si vieme v konzole spustiť základný model s odpoveďou, avšak tento agent nám veľa nepomôže. Preto si ideme vytvoriť tools (nástroje, s ktorými vie pracovať). Preto si ideme pridať jednoduchý nástroj na zistenie počasia a nástroj na zistenie polohy doktora.

import requests

def get_weather(city: str) -> str:
    """Vráti počasie v danom meste"""
    return f"V {city} je polooblačno, 27C a mierný vietor."

def get_doctor_location(doctor: str) -> str:
    """Vráti miesto daného doktora"""
    return f"Doktor {doctor} sa nachádza na 2. poschodí, dvere č. 12."

def main():
    llm = ChatGoogleGenerativeAI(
        model="gemini-2.5-flash",
        google_api_key=GEMINI_API_KEY
    )
    agent = create_react_agent(
        model=llm,
        tools=[
            get_weather,
            get_doctor_location,
        ],
        prompt="Si veľmi nápomocný asistent. Odpovedaj bez markdown anotácií."
    )

    response = agent.invoke({
        "messages": [
            {
                "role": "user",
                "content": "Kde sa nachádza chirurg?" # neskôr skúste zameniť prompt na získanie počasia
            }
        ]
    })

    print(response["messages"][-1].content)


if __name__ == "__main__":
    main()

Avšak tieto nástroje sú primitívne, nižšie je ukážka kompletnejšieho nástroja.

def get_city_geodata(city: str) -> dict:
    """Vráti zemepisnú šírku, dĺžku, vyvýšenie a populáciu na základe názvu miesta."""

    response = requests.get(f"https://geocoding-api.open-meteo.com/v1/search?name={city}&count=10&language=en&format=json")

    return response.json()

Táto funkcia nám vráti geodáta na zo služby open-meteo. Takto môžeme vyžiť napojenie na externé zdroje dát. Pomocou LangChain už máme hotových niekoľko nástrojov, ktoré môžeme využiť – od webových prehliadačov po Wolfram (matematická kalkulačka).

Záver

Vytvorenie AI agenta pomocou LangGraph je len začiatok vašej cesty do sveta agentických systémov. Ukázali sme si základy reaktívneho agenta, ktorý dokáže dynamicky využívať nástroje na základe používateľských požiadaviek. Pre pokročilých odporúčam rozšíriť funkcionalitu pridaním pamäte agenta pre dlhšie konverzácie, implementáciou viacerých špecializovaných agentov, integráciou s databázami a API službami, či vytvorením webového rozhrania pomocou FastAPI. Optimalizácia výkonu zahŕňa caching častých požiadaviek, asynchrónne spracovanie nástrojov a monitoring aktivít agenta.

Ak nemáte programátorské skúsenosti, najlepšou voľbou bude n8n, ktoré ponúka vizuálny workflow editor s drag-and-drop rozhraním.

Komentáre

Pridaj komentár