Workflows
A workflow egy vizuális térképe annak, hogy az ügynöke mit kell hogy csináljon lépésről lépésre — ki beszél először, mit kérdezzen, mikor ágazzon el, mikor irányítsa át a hívást és mikor adja át egy másik ügynöknek. Ezt egy vásznon építi fel, csomópontokat helyez el és összeköti őket.
Használjon workflow-t, ha egyetlen prompt nem elég — ha a hívásnak világos szakaszai vannak («először minősíteni, aztán részleteket gyűjteni, aztán foglalni vagy átirányítani»), ha determinisztikus útválasztásra van szüksége a hívó válaszai alapján (nem «az AI általában megoldja»), vagy ha egy ügynöknek át kell adnia egy darab munkát egy specialistának.
A prompt egy hosszú utasítás. Az ügynök egyszer elolvassa és a hívás egész ideje alatt használja. A workflow sok kis utasítás, csomópontonként egy, közöttük explicit átmenetekkel. A gráf vezeti a hívást — minden csomópont ügynöke csak a saját szeletét birtokolja.
Ha az ügynöke már jól működik egyetlen prompttal, nincs szüksége workflow-ra. Akkor forduljon workflowshoz, amikor a promptba elkezd «ha X akkor Y» szabályokat halmozni, és azok megbízhatatlanná válnak.
A szerkesztő
A workflow szerkesztő saját fülön él az ügynök oldalán. Egy vásznat lát alapértelmezetten Start és End csomóponttal. Csomópontokat ad hozzá az eszköztárból, a vászonra húzza őket és élekkel köti össze.
A jobb oldali panel attól függően változik, mit választ ki:
- Kattintás egy csomópontra — megnyitja a beállítások paneljét (prompt, mezők, extrakciós változók stb.).
- Kattintás egy élre — megnyitja a triggerének beállításait (AI decides / Condition / Always).
- A Variables panel (gomb az eszköztárban) felsorolja a workflow minden változóját egy kattintással a csomóponthoz, ami beállítja vagy olvassa.
Futtasson Test Call-t a böngészőben közvetlenül a szerkesztőből — egy fénylő szentjánosbogár élőben követi a pozíciót, hogy lássa, pontosan melyik csomópont aktív bármelyik pillanatban.
A workflowsok három állapotúak:
- Draft — szerkeszthető, még nincs élesben. Használja Test Call-t a teszteléshez.
- Active — éles valós hívásokhoz. Az ügynök ezt a workflow-t használja a következő hívástól.
- Template — újrahasznosítható sablon, soha nem közvetlenül ügynökhöz kötve. Több ügynökön példányosíthatja.
Csomópontok
Minden csomópont egy lépés a beszélgetésben. Különböző csomóponttípusok különböző dolgokat csinálnak — egyesek beszélnek, mások hallgatnak, mások útválasztanak, mások eszközöket futtatnak.
Agent
Az Agent csomópont egy workflow-szakasz szíve. Amikor a gráf elér egy Agent csomóponthoz, az az ügynök átveszi a szót és vezeti a beszélgetést, amíg valami el nem indít egy átmenetet.
Az Agent csomópont személyiségét és feladatát közvetlenül a vásznon konfigurálja (a Prompt fül megnyílik a csomópontra kattintva) — ez a prompt annak a résznek szól a beszélgetésből, nem az egész hívásnak. Tudásbázisokat és eszközöket is csatolhat csomópontonként.
Greeting — a nyitó sor. Ha ez a belépő csomópont (az első megálló a Start után), ez az első dolog, amit a hívó hall.
Amikor egy gráf irányít egy hívást, az ügynök fő promptja (a Model fülön lévő) lecserélődik az aktív csomópont promptjára. Ez szándékos — a gráf birtokolja a személyiséget és a feladatot szakaszonként, nem egy fix prompt versenyez vele.
Subagent
A subagent egy segítő, amely inline fut — átveszi a beszélgetést egy adott feladatra, aztán visszaadja az eredményt annak, aki meghívta.
A subagentek jól működnek, ha egy munkadarab újrahasznosítható vagy különállónak érződik: «ellenőrizd a hívó azonosságát», «gyűjts szállítási címet», «minősíts egy leadet SPIN módszerrel». A szülő ügynök meghívja a subagentet, az megteszi a dolgát, jelent egy eredményt, a szülő folytatja onnan, ahol abbahagyta.
A Subagent csomópontoknak ugyanazok a fülei vannak, mint egy Agent csomópontnak (Prompt, Knowledge, Tools, Actions) — a szerkesztő automatikusan létrehoz egy rejtett backing-ügynököt önnek. Ezt a rejtett ügynököt nem látja a fő listájában és nem számít bele a tervének ügynök-limitjébe.
Return variable — a mező, ahol a subagent eredményét tárolja (pl. identity_verified, lead_score).
Message (Say)
A Say csomópont egy fix sort mond — nincs AI-kör, nincs improvizáció. Használja átmenetekhez («Egy pillanat, átkapcsolom…»), kötelező jogi nyilatkozatokhoz vagy előre meghatározott megerősítésekhez, ahol a szavak számítanak.
Text — mit mondani. Támogatja a {{variable}} tokeneket a befogott értékek beillesztéséhez, pl. "Köszönöm {{first_name}}, lefoglaltam Önnek {{appointment_time}} időpontra."
Egy Say csomópont elhasználja a kört — az ügynök nem ad hozzá semmit a tetejére.
Gather Input
Egy Gather Input csomópont kérdést tesz fel és változóba fogja a hívó válaszát.
Prompt — a felteendő kérdés. Támogatja a {{tokens}}-eket.
Variable — a mező neve, ahol a választ tárolja.
Használja minden alkalommal, amikor egy konkrét értékre van szüksége a folytatás előtt — email, számlaszám, személyek száma, probléma kategóriája. A következő hívó-kör lesz az érték; közvetlenül utána Condition éllel elágazhat rajta.
Update State
Egy Update State csomópont egy vagy több értéket ír a workflow változókba beszéd vagy kérdezés nélkül. Használja alapértékek előbeállítására, haladási flagek megjelölésére vagy értékek komponálására korábbi lépésekből.
Variable / Value — egy kulcs-érték pár. More variables (optional) — további kulcs-érték párok.
Mind a kulcsok, mind az értékek támogatják a {{tokens}}-eket, tehát új értékeket komponálhat meglévőkből.
Condition
A Condition csomópont egy tisztán útválasztó csomópont — nem beszél, nem kérdez, egyszerűen elküldi a hívást azon a kimenő ágon, amelyik illeszkedik.
Maga a feltétel minden kimenő élen él, nem a csomóponton — lásd Condition élek alább.
Használjon Condition csomópontot, ha tiszta «fan-out» pontot szeretne a gráfjában: sok ág, amely egy változó értékétől függ. Az Agent csomópontok éleire helyezett feltételekhez képest egy dedikált Condition csomópont az útválasztási logikát vizuálisan nyilvánvalóvá teszi.
Tool
A Tool csomópont lefuttatja az ügynök csatlakoztatott eszközei közül az egyiket gráflépésként — anélkül, hogy az AI-nak szava lenne a hívásban. Használja, ha tényt szeretne, nem beszélgetést: «keresd meg ezt az ügyfelet», «ellenőrizd a készletet», «GET az aktuális időjárást».
Választhat:
- Az ügynök meglévő eszközeinek egyikét (naptár lekérdezés, tudásbázis-keresés, integráció specifikus művelete), vagy
- Beállíthat egy inline HTTP hívást közvetlenül a csomópontban (URL, módszer, fejlécek, paraméterek, body).
Az eszköz válasza elérhetővé válik minden lefelé lévő csomópont számára. Ha a válasz egy JSON objektum, minden felső szintű mező saját változóvá válik — egy olyan válasz, mint a {"is_known": true, "tier": "gold"} mind az is_known-t, mind a tier-t megírja, hogy elágazhasson rajtuk.
Minden szövegmező a Tool csomópontban — URL, fejléc értékek, body — támogatja a {{tokens}}-eket. Beleilleszthet egy változót egy URL útvonalba, fejlécbe vagy bodyba kódírás nélkül.
Ha egy eszközhívás meghiúsul (HTTP hiba, timeout, hálózat), a csomópont naplózza a hibát és a gráf folytatódik — adatok nélkül. Tervezze meg a lefelé lévő feltételeit a «nincs érték» eset kezelésére.
Integration
Az Integration csomópont a Tool fókuszált változata csatlakoztatott külső szolgáltatásokhoz — Google Calendar, Outlook, HubSpot. Kiválasztja a szolgáltatót és a konkrét műveletet (pl. check_availability, create_event), megadja a paramétereket, és a csomópont determinisztikusan hívja az integrációt.
Ha az integráció nincs csatlakoztatva ezen az ügynökön, a csomópont művelet nélkül átmegy — a gráfja folytatódik. Ellenőrizze a lefelé lévő feltételeket a «nem futott» esetre.
Phone Transfer
A Phone Transfer csomópont átirányítja a hívást (warm transfer) egy külső telefonszámra. Sikeres átirányítás után a hívás elhagyta a workflow-ját — az ügynöke már nincs a vonalban.
Number — célállomás nemzetközi formátumban, + előtaggal (pl. +15551234567). Támogatja a {{tokens}}-eket, így a célállomás származhat egy korábbi lépésből (pl. a «melyik irodával kapcsoljam?» kérdésre adott válasz).
Ha az átirányítás nem megy át (érvénytelen szám, nincs válasz, nincs beállítva telefonkapcsolat), a gráf visszalép és az aktuális ügynök a vonalban marad. A beszélgetés normálisan folytatódik — az ügynök elnézést kérhet és megpróbálhat egy másik utat.
End Call
Az End Call csomópont zárja le — az ügynök elmondja a konfigurált zárást és aztán leteszi. Használja tiszta terminusként a «minden kész» ágakhoz vagy a «nem tudunk segíteni, sajnáljuk» ághoz egy nehéz Conditionből.
Nem igényel konfigurációt egy bemenő élen kívül.
Workflow újrahasznosítása (Sub-workflow)
A Sub-workflow csomópont arra van fenntartva, hogy egy másik workflow-t algráfként ágyazzon be. Ez a csomópont a szerkesztőben van, de még nincs teljesen bekötve — a gráf úgy megy át rajta, hogy nem csinál semmit. Ne támaszkodjon rá éles hívásokhoz. Aktiváljuk, amikor kiadjuk az újrahasznosítható algráfokat.
Élek (Kapcsolatok)
Egy csomópontot a következővel egy éllel köt össze. Az él triggere dönti el, mikor indul el az átmenet.
Három trigger van:
| Trigger | Ki dönt | Mikor indul |
|---|---|---|
| AI decides | Az AI | Amikor a beszélgetés ezt teszi a természetes következő lépéssé. Az AI kap egy «átmenet eszközt», amelyet hívhat. |
| Condition | A runtime | Amikor egy változó illeszkedik egy szabályhoz, amelyet írt. Az AI válasza előtt értékelődik. |
| Always | A runtime | Feltétel nélkül — amint a forrás csomópont befejeződik. Nincs hívó-bemenet, nincs AI. |
AI decides (intent-alapú)
Használja az AI decides-t, amikor csak az AI tud dönteni, mikor váltani — «ha a hívó árakról kérdez, irányítsd át az értékesítési ügynökhöz», «ha panasznak hangzik, futtasd a bocsánatkérő subagentet».
Egy rövid intent leírást ír az élre (pl. «A hívó árakról kérdez vagy upgrade-elni akar»). Az AI ezt egy eszközként látja az intenttel címkézve, és a beszélgetés alapján dönt, hogy meghívja-e. Ha több AI-decides él van jelen, az AI legfeljebb egyet választ körönként.
Condition (determinisztikus elágazás)
Használja a Condition-t, ha azt akarja, hogy a gráf — nem az AI — döntsön egy ismert tény alapján: «ha lead_score > 7, küldd a closerhez; egyébként udvariasan zárj».
A Conditions az AI válasza előtt értékelődik, így mindig nyer az AI ellen abban a körben. Az AI nem tud felülírni egy feltételt, amely illeszkedik.
Egy feltételt ezekkel az operátorokkal építhet:
| Operátor | Jelentés | Példa |
|---|---|---|
| equals | pontos egyezés (case-insensitive szövegnél) | intent equals "billing" |
| not equals | nem egyezik | status not equals "active" |
| contains | részsztring egyezés (case-insensitive) | feedback contains "broken" |
| greater than | numerikus > | lead_score greater than 7 |
| less than | numerikus < | wait_minutes less than 5 |
Klauzulákat is kombinálhat All (mindegyiknek illeszkednie kell — AND) vagy Any (legalább egynek illeszkednie kell — OR) segítségével, és egymásba ágyazhatja őket. Egy olyan szabály, mint «a hívó ismert és a tier-je gold vagy premium» a következő lesz:
All:
- is_known equals true
- Any:
- tier equals gold
- tier equals premium
Ha egy olyan változóra hivatkozik, amely még nincs beállítva (pl. az AI sosem gyűjtötte), az arra vonatkozó feltételek mindig kudarcot vallanak — nincs hiba, egyszerűen nem illeszkednek. Tehát loyalty_tier equals "gold" hamisat ad vissza, ha loyalty_tier sosem volt beállítva. Tervezze meg az ágait ennek kezelésére — általában egy else ággal (lásd alább).
Else ág — ha egyik feltétel sem illeszkedik
Ha több Condition éle van egy csomópontból kimenően és egyik sem illeszkedik, a hívás a legalacsonyabb prioritású nem-Condition élre esik (Always vagy egy AI-decides él). Ha egyáltalán nincs fallback, az AI visszanyeri az irányítást és szabadon folytathat.
Gyakori minta: több Conditions az ismert utakhoz plusz egy Always él egy catch-all-ra (mondj valamit, aztán End Call vagy átirányítás).
Always (auto-advance)
Használja az Always-t, ha a következő lépés feltétel nélküli — nincs döntés, nincs hívó-bemenet. Két természetes felhasználás:
- Lépések láncolása: SAY → UPDATE_STATE → SAY → TOOL → Condition. Minden lépés befejeződik és az Always él azonnal továbblép.
- Auto-előrelépés azután, hogy az ügynök befejezte a beszédet: egy kimenő Always éllel rendelkező Agent csomópont azt jelenti, hogy «amint az AI abbahagyja a beszédet, lépj tovább» — anélkül, hogy a hívónak válaszolnia kellene. Hasznos monológ-szerű folyamatokhoz, mint egy bemutató ügynök, aki elmondja és átmegy a következő szekcióra.
A Condition és az Always (a determinisztikusak) mindig nyernek az AI decides ellen. Ha egy Condition illeszkedik, az AI átmenet eszközei figyelmen kívül maradnak abban a körben. Ez lehetővé teszi, hogy olyan szabályokat írjon, amelyeket az AI nem tud megkerülni.
Változók
A változók a workflow memóriája. A workflow-ban a legtöbb dolog vagy egy változót állít be, vagy olvas egyet.
Változók deklarálása
A Variables panel (gomb az eszköztárban) megmutatja a workflow minden változóját azokkal a lépésekkel, amelyek beállítják vagy olvassák. Kattintson egy változóra, hogy egy setterhez ugorjon; ez a leggyorsabb módja annak, hogy megtalálja, hol megy valami félre.
Változót alapértékkel deklarálhat a panelben — hasznos olyan flagekhez, mint az escalated=false, amelyeknek a kezdetektől létezniük kell, hogy a feltételei ne bukjanak el csendben «hiány» miatt.
Hogyan állítódnak be a változók
| Forrás | Példa |
|---|---|
| Alapértékek (a Variables panelben deklarálva) | escalated = false beállítva a hívás kezdete előtt |
| Gather Input | A hívó beszélt válasza a csomópont változójába kerül |
| Update State | Egy értéket ír (literál vagy {{tokens}}-ekkel komponált) közvetlenül |
| Tool / Integration eredmény | A teljes válasz a csomópont neve alatt tárolódik; ha a válasz JSON objektum, minden felső szintű mező szintén saját változóvá válik |
| Subagent return | Amit a subagent véglegesít, a subagent csomópont return változójában tárolódik |
Változók olvasása — {{tokens}}
Bárhol, ahol szöveget írhat egy csomópontban — Agent prompt, Say szöveg, Gather prompt, Tool URL/body/fejlécek, Phone Transfer szám, Update State érték, feltétel értékek — beilleszthet egy {{variable}}-t, és runtime-ban behelyettesítődik.
A pontos útvonalak is működnek beágyazott adatokhoz — pl. ha egy Tool válasz {"customer": {"name": "Anna", "tier": "gold"}} volt, olvashatja a {{customer.name}}-t vagy {{customer.tier}}-t.
Ha egy token egy nem létező változóra hivatkozik, a szó szerinti szöveg {{name}} úgy marad, ahogy van (nincs kifehérítve). Ez szándékos — megkönnyíti a hibás template-ek észrevételét egy test call során, ahelyett, hogy csendben lenyelné őket.
Gyakori minták
Minősítsd → Ágazz el → Útválaszt
Start
└─ Agent (greeting + qualify)
└─ Gather Input (intent)
└─ Condition: intent == "sales" → Agent (sales)
└─ Condition: intent == "support" → Subagent (triage)
└─ Always (catch-all) → Say "Let me connect you" → Phone Transfer
Keress → Személyre szab
Start
└─ Tool (CRM lookup, writes is_known, name, tier)
└─ Condition: is_known == true → Agent (warm greeting with {{name}})
└─ Always (else) → Agent (cold greeting)
Újrahasznosítható helper (Subagent side-trip)
Agent (main conversation)
└─ AI decides: "Caller mentions an address" → Subagent (address collector)
└─ on finish: result = full_address
└─ Agent continues with {{full_address}}
Mi van zárolva egy workflow-vezérelt hívás során
Néhány alapérték változik, amikor egy gráf irányítja a hívást:
- A nyelv zárolva van arra, amelyet a workflow első ügynöke használ. Az AI nem válthat nyelvet hívás közben. Ez megakadályozza, hogy a modell rossz nyelvre csússzon át egy zajos körön.
- Az ügynök fő promptja le van cserélve az aktív csomópont promptjára. Ez a «a gráf birtokolja a personát» szabály — lásd warning Agent alatt.
- Az első üzenet a belépő csomópont greetingjéből származik, nem az ügynök «Begin Message» mezőjéből.
Loop-védelem — Step Budget
Minden workflow-nak van egy maximális átmenetszáma hívásonként (alapértelmezetten 25). Minden alkalommal, amikor a gráf új csomóponthoz vált, a számláló eggyel csökken. Amikor eléri a nullát, a runtime leáll az átmenetekkel, hogy megakadályozza az elszabadult ciklusokat.
Választhat egy fallback csomópontot erre az esetre (általában egy Phone Transfer vagy End Call) — a hívás oda terelődik, amint a budget elfogy.
Ritkán kell erre gondolnia — biztonsági háló véletlen ciklusba zárt gráfokhoz. Ha normál használat közben eléri, valószínűleg van egy ciklus valahol.
Tesztelés
A szerkesztő Test Call gombja böngészőhívást nyit a workflow aktuális draftjával. Amíg fut, egy fénylő szentjánosbogár mozog a csomópontok között a vásznon, hogy lássa, pontosan hol van a hívás. A szerkesztő zárolva van egy test call alatt, hogy a módosítások ne deszinkronizálják az élő állapotot.
Használja a Test Call-t a következők ellenőrzésére:
- A feltételei a várt értékekhez illeszkednek (nézze meg, hogy a szentjánosbogár átugrik-e egy olyan ágat, amelyről azt hitte, hogy aktiválódik).
- A tokenjei helyesen behelyettesítődnek (figyeljen egy lógó
{{name}}-re, ha egy érték nem volt beállítva). - Az eszközhibák szépen degradálódnak (a fallback útvonala valóban aktiválódik).
Hibák, amelyeket ismerni kell
| Helyzet | Mi történik |
|---|---|
| Tool / Integration hívás meghiúsul | A gráf folytatódik az adatok nélkül. A lefelé lévő feltételeinek kezelniük kell a hiányzó változót. |
| Phone Transfer meghiúsul (érvénytelen szám, nincs válasz, nincs beállítva telefonkapcsolat) | A gráf visszalép, az aktuális ügynök a vonalban marad, és a beszélgetés normálisan folytatódik. |
| A subagent nem indul el | A side-trip megszakad, a szülő ügynök a vonalban marad, és egy rövid hiba-sor hangzik el. |
{{missing_variable}} szövegben | Szó szerint marad a kimenetben — könnyű észrevenni test call során. |
| Sub-workflow csomópont | Jelenleg úgy megy át rajta, hogy nem csinál semmit. Egyelőre ne támaszkodjon rá. |
| Step budget kimerült | A fallback csomópontra terel, ha be van állítva, egyébként az AI visszanyeri az irányítást. |
Mikor NE használjon Workflow-t
A workflows hatékonyak, de nem minden ügynökhöz a megfelelő válasz. Maradjon egyetlen promptnál, amikor:
- A beszélgetés nyílt («válaszolni a hívó kérdéseire a termékeinkről»).
- Nincs világos elágazási logikája — a legtöbb döntés ítélet, amelyeket az AI jól kezel.
- Csak egy Agent csomópontot és egy End Call-t írna — ez csak egy prompt extra lépésekkel.
Forduljon workflow-hoz, amikor:
- Felvázolhatja a hívást folyamatábraként három vagy több különálló szakasszal.
- Legalább egy determinisztikus elágazásra van szüksége egy változón (egy Condition).
- Egy beszélgetésdarabot újra akar hasznosítani több ügynök között (egy subagent).
- Már «ha a hívó X-et mond, akkor Y-t csinál» szabályokat halmoz egy promptban és nem megbízhatóak.