Nem kell hozzá agent

Nem kell hozzá agent

Közzétéve: 2026. augusztus 11.

Nézd meg videón

Ugyanez a tartalom YouTube-on is elérhető angolul, ha inkább videóban hallanád.

Megnézem YouTube-on

Nemrég az egyik ügyfelemnek volt egy problémája: gyorsabban gyűltek a support ticketek, mint ahogy azokat triázsolni tudták volna.

Valakinek el kellett olvasnia mindegyiket, kitalálnia a kategóriát, és a megfelelő queue-ba irányítania.

Lévén 2026-ot írunk, egy AI agenthez nyúltak, mert hallották, hogy a nagyok közül is páran ezt az utat követik.

Az egész ötlet tök egyszerűnek tűnt: adjunk az LLM-nek egy ticketet, egy pár tool-t, és egy célt: "irányítsd a megfelelő helyre", aztán oldja meg a többit magától.

Eltelt három hét, és volt is egy működő prototípusuk. Csakhogy az lassú volt, elég drága, és időnként egy-egy számlázási kérdést a security csapathoz irányított valamiért, amit aztán senki nem tudott visszafejteni a trace logokból.

Aztán valaki megemberelte magát, elővette a régi ticketeket, tréningezett egy betonegyszerű szöveg-klasszifikálót tizennyolc hónapnyi ilyen routing-döntésen, és a hét végére előállt egy megoldással, ami gyorsabb, olcsóbb és kiszámíthatóbb volt.

A mögöttes technológia borzasztóan unalmas volt.

És pontosan ez volt a lényeg.

A klasszifikáció egy olyan probléma, amit a supervised learning már évtizedek óta megoldott.

Ehhez pedig nem kell LLM, AI, agentek, vagy bármi hasonló.


Task, goal, és a különbség, ami tényleg számít

Az egyik legegyszerűbb módja eldönteni, hogy szükség van-e arra a bizonyos agentre, ha feltesszük ezt az egyszerű kérdést:

Le tudom írni a helyes outputot mint az input függvényét?

Egy task ugyanis nem más, mint egy fix input-output leképezés. Vegyük ezt a ticketet:

A számlámon kétszer szerepel ugyanaz az előfizetési díj.
Vissza tudjátok téríteni a duplikációt?

Legyen a kimenet:

billing

Hát bizony ez nem más, mint egy sima függvény:

def classify(ticket):
    return model.predict(ticket)

Nincs benne se állapot, se elágazás, nem kell döntenie arról, mi legyen a következő lépés, és azt sem kell megvizsgálnia, mi lett egy lépés eredménye, mielőtt eldöntené, mi jöjjön utána. Ennyi az egész:

Egy goal viszont lényegesen más állat: egy kimenetelt ír le anélkül, hogy előírná az odáig vezető utat.

Mondjuk így:

Oldd meg ennek az ügyfélnek a problémáját.

Ez akár ilyesmit is jelenthet:

A következő lépés ugyanis mindig attól függ, mit derítünk ki menet közben - és itt kezd el igazán érdekessé válni egy agent.

Csakhogy itt van a csapda is.

Az "Irányítsd a ticketet a megfelelő helyre" úgy hangzik, mint egy goal, hiszen utasításként van megfogalmazva.

Csak épp nem feltétlenül az.

Ha ugyanis minden egyes tickethez pontosan egyetlen helyes routing-döntés tartozik, a probléma alapjában véve még mindig ez marad:

Csak épp felszólító módban van megfogalmazva, magyarul vagy angolul, teljesen mindegy.

A különbség tehát nem attól függ, mennyire nyitottnak hangzik a mondat.

Attól függ, hogy a válaszhoz vezető utat futásidőben kell-e felfedezni.

És ez a különbség maga a lényeg.


Egy egyszerű teszt

Mielőtt agenthez nyúlnánk, érdemes megpróbálni felírni a problémát egyetlen függvényként.

Például:

def route_ticket(ticket):
    """
    Input:
        ticket: ügyfélszolgálati üzenet

    Output:
        az alábbiak egyike:
        - billing
        - security
        - technical
        - account
    """
    ...

Ha ésszerűen meg tudjuk határozni ezt a függvényt, a következő kérdés már csak ez:

Van történeti példám erre a bemenet-kimenet leképezésre?

Ha igen, akkor valószínűleg nem is agent-problémával, hanem egy sima gépi tanulási feladattal állunk szemben.

Mondjuk így néz ki:

Ez ugyanis tréningadat.

Nem kell egy modellnek tool-inventoryt nyomni a kezébe, és megkérni, hogy fedezze fel, mit is jelent a klasszifikáció.

Egyszerűen meg lehet tanítani neki a leképezést.


Hogy néz ez ki kódban

A tényleges modell meglepően egyszerű is lehet.

Egy klasszikus szövegklasszifikáló pipeline nagyjából így fest:

from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression

model = Pipeline([
    ("features", TfidfVectorizer(
        ngram_range=(1, 2),
        min_df=2
    )),
    ("classifier", LogisticRegression())
])

model.fit(training_tickets, training_labels)

queue = model.predict([
    "Kétszer terheltek meg az előfizetésemért"
])[0]

print(queue)
# billing

Nincs itt se prompt engineering, se tool calling, se agent framework, se beszélgetés-history, se autonóm loop.

Csak egy modell, ami megtanulja ezt:

És ez gyakran pontosan az, amire production környezetben szükség van.

Ráadásul egy confusion matrix-szal remekül mérhető is:

Valódi \ Predikció Bill Sec Tech Account
Bill 940 3 12 5
Sec 2 410 4 1
Tech 8 2 870 9
Account 4 1 7 690

Innentől pontosan látszik, hol hibázik a rendszer.

Ehhez képest egy agent trace valahogy így fest:

Agent trace:
"Először azt gondoltam, hogy ez talán security-probléma..."
"Aztán megnéztem az ügyfelet..."
"Aztán elgondolkodtam a billingen..."
"Aztán úgy döntöttem..."

Az egyik egy confusion matrix.

A másik meg egy detektívregény, amit senki nem kért.


Workflow: control logic, amit egy ember már kigondolt

Sok minden, ami első ránézésre valami komoly döntéshozó rendszert igényelne, valójában csak egy workflow.

Vegyük megint a support routingot.

Lehet, hogy a tényleges folyamat ennyi:

Akár LLM-et is be lehet vetni a klasszifikáláshoz:

category = llm.classify(ticket)

customer = get_customer(ticket.customer_id)

queue = routing_rules(
    category=category,
    customer_tier=customer.tier
)

send_to_queue(ticket, queue)

Ezzel semmi baj nincs.

Csak épp ez így sem feltétlenül lesz agent.

A műveletek sorrendjét, az elágazásokat és a kilépési feltételeket mind egy ember döntötte el előre - a modell csak egy komponens a workflow-ban.

Ez pedig azért fontos különbség, mert a workflow-oknak van egy jelentős mérnöki előnyük:

a control flow látható.

El lehet olvasni a kódot, és meg lehet válaszolni:

Mi történik ezután?

Egy agentnél az erre adható válasz jó eséllyel csak ennyi:

Attól függ, mit dönt a modell.

Ez pedig akkor hasznos, ha a környezet valóban felfedezést igényel.

És sokkal kevésbé hasznos, ha a folyamatot már réges-régen kitaláltuk.


Példa: LLM workflow vs agent

Képzeljük el, hogy egy dolgozó megkérdezi:

"Mi a helyzet a költségtérítésem elbírálásával?"

Egy workflow erre simán elég:

employee = get_employee(user_id)
expense = get_latest_expense(employee.id)
status = get_expense_status(expense.id)

return format_response(status)

Az LLM-et itt legfeljebb arra használjuk, hogy az eredményt természetes nyelvű válasszá alakítsa.

Ez pedig még mindig workflow marad.

Most képzeljük el, hogy a követelmény ehelyett ez:

"Segíts megoldani, bármi is legyen a dolgozó problémája a költségtérítésével."

Az agentnek ekkor már ilyesmit kell tennie:

Az érdekes rész itt nem az, hogy egy LLM be van vonva.

Az érdekes rész az, hogy a következő akció előre nem volt ismert.

Ez már agent-terep.


Ahol egy sima modell veri az agentet

Rengeteg olyan feladatot pitchelnek agent projektként, ami valójában klasszifikációs, regressziós vagy ranking probléma - olyasmi, amit a klasszikus ML már réges-régen jól kezel.

1. Ticket- és email-triázs

Input:

"Le tudom cserélni az előfizetésemhez tartozó bankkártyát?"

Output:

billing

Ez klasszifikáció, semmi több.

Egy történeti ticketeken tréningezett klasszifikáló ide természetes választás.

A rendszernek nem kell azon gondolkodnia, melyik tool-t hívja meg következőnek.


2. Churn prediction

Tegyük fel, hogy azt próbáljuk megjósolni, mekkora eséllyel mondja le egy ügyfél az előfizetést.

Lehet, hogy ezek az adataink:

account_age
monthly_spend
number_of_logins
support_tickets
days_since_last_login
feature_usage

A kimenet lehet:

P(churn) = 0.83

Egy gradient-boosted modell tökéletesen elboldogul ezzel:

model.predict_proba([
    customer_features
])

Egy agent, ami nyomozni kezd az ügyfél account-ja körül, talán tényleg lenyűgöző magyarázatot produkál.

De ha a tényleges követelmény ez:

"Adj egy churn-valószínűséget."

akkor egy milliszekundumos predikciós problémát cseréltünk le egy drága nyomozásra.


3. Csalásdetektálás

A fraud rendszereknek gyakran valami nagyon unalmas és nagyon értékes dologra van szükségük:

Mondjuk így:

risk = fraud_model.predict_proba(transaction_features)[0, 1]

if risk > 0.95:
    block(transaction)
elif risk > 0.75:
    review(transaction)
else:
    approve(transaction)

Itt általában azt akarjuk, hogy ugyanaz a bemenet mindig ugyanazt a döntést eredményezze.

Ha bevezetünk egy autonóm modellt, ami tetszőleges tool-okat vizsgálhat meg, és saját maga találhatja ki a nyomozási stratégiáját, azzal pont azt a fajta változékonyságot visszük be a rendszerbe, amit egy fraud pipeline-ban a legkevésbé szeretnénk.


4. Keresletelőrejelzés

Ha a holnapi keresletet próbáljuk megjósolni egy termékre, a modellnek nagyjából ezekre van szüksége:

történeti kereslet
szezonalitás
hét napja
promóciók
ár
ünnepnapok
időjárás

Majd:

Ez egy forecasting probléma, ahol nincs semmi hasznos szerepe egy olyan agentnek, ami azon töpreng, hogy:

"Meg kéne néznem, mi történt múlt kedden, mielőtt megjóslok bármit."

A modellnek ugyanis már ott van kedd is a training datasetben.


5. Hibadetektálás

Képzeljünk el egy gyártósort, ahol egy kamera minden legyártott alkatrészt megvizsgál.

A bemenet egy kép.

A kimenet:

OK

vagy:

DEFECT

Egy image classifier másodpercek alatt több ezer képkockát ki tud értékelni.

Nem kell hozzá agent, ami ránéz a képre, meghív egy tool-t, elgondolkodik rajta, újragondolja, majd végül klasszifikálja.

A gyárat ugyanis nem érdekli a modell belső monológja.

Csak a hibaarány.


Az agent használatának rejtett költsége

Az agentekkel nem az a probléma, hogy eredendően rosszak lennének.

Hanem hogy minden plusz szabadságfok egy újabb dolog, amit a production rendszernek el kell viselnie.

Vegyünk egy egyszerű klasszifikálót:

Most hasonlítsuk össze egy agenttel:

Minden újabb lépés hozhat magával latency-t, költséget, átmeneti hibákat, rossz tool-választást, hallucinációt, nem-determinisztikus viselkedést, state-management problémákat és observability-komplexitást.

És előbb-utóbb valakinek ezt az egészet el kell magyaráznia annak, aki felel az SLA-ért.

Minél több autonómiát adunk hozzá, annál drágább lesz a hiba.


Ahol egy agent tényleg megéri az árát

Mindettől persze még nem lesz az agent rossz választás mindenhol.

Vannak problémák, ahol az út tényleg nem ismerhető előre.

Vegyünk egy on-call asszisztenst.

Kap egy problémát:

"A checkout szolgáltatás megemelkedett 5xx hibaszámot ad vissza."

Talán ilyen tool-okat kap hozzá:

get_logs()
get_metrics()
get_deployment_history()
get_database_status()
get_feature_flags()
rollback_deployment()

Az agent innen felfedezhet valami ilyesmit:

A lényeg itt az, hogy ezt a pontos workflow-t nem feltétlenül lehetett volna előre megírni.

Az agent a megfigyelésekből fedezi fel az utat.

És ettől lesz hasznos.


A kutatás egy másik példa

Tegyük fel, hogy megkérdezzük:

"Derítsd ki, miért nőttek 30%-kal a felhőköltségeink múlt hónapban."

Itt nincs egyetlen előre meghatározott workflow.

Az agent talán így jut el a válaszig:

A következő kérdés mindig attól függ, mi volt az előző kérdésre a válasz.

Ez alapvetően más, mint ez:

Az előbbi feltárás.

Az utóbbi meg egyszerű leképezés.


A kódolóagentek is jó példák

Egy kódoló agent olyasmit tud csinálni, amivel egy statikus workflow eleve küszködne:

A környezet ugyanis visszajelzést ad az agentnek, ez a visszajelzés pedig megváltoztatja, mit kell tennie ezután.

Technikailag persze elő lehetne sorolni előre minden lehetséges sorrendet.

Ahogy technikailag azt is meg lehetne jósolni, milyen lesz az időjárás, ha minden egyes molekulától megkérdezzük, merre tart.

Csak épp egyik sem különösebben hasznos.


Egy hasznos mentális modell

A három kategóriáról nagyjából így érdemes gondolkodni:

És ez előtt még feltehetünk egy kérdést is:

Tehát a progresszió nagyjából ez:

Modell

Workflow

Agent

A hiba pedig az, ha rögtön a harmadikhoz ugrunk.


A kérdés, amit fel kell tenni, mielőtt agentet építünk

Az a reflex, hogy agenthez nyúljunk, teljesen érthető.

Az agentek érdekesek, jól finanszírozottak, és remekül demóznak.

Egy fix klasszifikáló, valljuk be, nem éppen konferencia-keynote-anyag.

Csakhogy a production rendszerek nem a legdivatosabb architektúráért osztanak pontot.

Azért osztanak pontot:

költség
latency
megbízhatóság
kiszámíthatóság
karbantarthatóság

Szóval mielőtt agent frameworkhöz nyúlnánk, érdemes feltenni a kérdést:

Létezik-e már a leképezés az inputtól a helyes outputig?

Ha igen, jöhet a következő:

Meg tudom-e tanulni ezt a leképezést olyan adatból, ami már megvan?

Ha igen, ott is kezdjük.

Ha a folyamat fix, de tartalmaz néhány intelligens lépést, építsünk workflow-t.

Ha viszont a következő akció valóban attól függ, mit fedez fel a rendszer, akkor jöhet szóba az agent.

A cél ugyanis nem az, hogy a lehető legautonómabb rendszert építsük meg.

A cél az, hogy a legegyszerűbb olyan rendszert használjuk, ami tényleg megoldja a problémát.

Néha ez egy agent.

Néha csak egy LLM-hívás.

Néha egy workflow.

És néha, kicsit ijesztő módon, sima logisztikus regresszió.

Ez megint nem az AI kudarca.

Ez csak a mérnöki hozzáállás.