A LiveKit hangügynökei munka közben is beszélhetnek

A LiveKit olyan aszinkron eszközöket mutatott be hangügynökökhöz, amelyek hosszabb háttérműveletek alatt is fenntartják a beszélgetést. Az ügynök azonnal visszajelezhet, állapotfrissítéseket mondhat, és szükség esetén le is állíthatja a futó feladatot.
- A livekit-agents 1.6.0 verziója vezette be az aszinkron eszközöket.
- A ctx.update() azonnali állapotfrissítést ad a lassú műveletekhez.
- A ctx.with_filler() a köztes csendes szakaszokat fedi le.
- A CANCELLABLE jelzővel a felhasználó megszakíthatja a futó feladatot.
- Az on_duplicate="reject" segít elkerülni a visszatérítés ismételt indítását.
A hosszú művelet eddig csendet okozott
A LiveKit július 7-i útmutatója egy visszatérő problémát mutat be: amikor egy ügyfél visszatérítést kér, a hangügynök meghív egy eszközt, amely lekérdezi a rendelési rendszert, majd elindítja a visszatérítést. Ha a háttérrendszer körülbelül tizenöt másodperc alatt válaszol, a hagyományos függvényeszköz a teljes beszélgetést blokkolja.
Ebben az időszakban az ügynök nem mondja, hogy várni kell, és előrehaladást sem jelez. A LiveKit szerint az ügyfél ezt könnyen úgy értelmezheti, hogy megszakadt a hívás, ezért még a visszatérítés befejezése előtt bontja a kapcsolatot. A vállalat szerint a lassú háttérrendszer önmagában nem a probléma, hiszen valós rendszerek időnként lassúak. A gond az, hogy a normál eszköz futása közben a beszélgetés nem haladhat tovább.
A ctx.update() azonnal átadja a vezérlést
A LiveKit megoldásának kulcsa a ctx.update() metódus, amely a livekit-agents 1.6.0 verziójával jelent meg. A kiadás 2026. június 11-én érkezett. A metódus első meghívása az üzenetet ideiglenes eszköz-visszatérési értékként továbbítja a nyelvi modellnek, és nem blokkolóvá teszi a futó eszközt.
Így az ügynök a lassú művelet indulása után rögtön mondhatja például, hogy megkezdte a visszatérítést. A háttérben közben folytatódik a rendelés ellenőrzése és a fizetési művelet. Később újabb állapotfrissítések kerülhetnek a beszélgetés kontextusába, és az ügynök akkor adhatja elő ezeket, amikor ő és az ügyfél is tétlen.
A LiveKit példájában a ctx.with_filler() egy második haladási csatornát ad. Ez közvetlenül hangot játszik le a munkavégzés közbeni csendes szakaszokban, a nyelvi modell megkerülésével. A fejlesztő rögzített mondatot vagy váltakozó üzeneteket adhat meg, valamint beállíthatja a késleltetést, az ismétlések közötti időt és a lépések maximális számát.
A vállalat szerint a példában ugyanaz a háttérrendszer és ugyanazok a késleltetések szerepelnek. A blokkoló változat nagyjából tizennégy másodpercnyi csend után egyetlen zárómondatot ad, az aszinkron változat viszont egy másodpercen belül reagál, majd végig narrálja a folyamatot.
A feladat lemondása és a dupla visszatérítés elkerülése
Az aszinkron műveletek hosszabb futása miatt a felhasználó közben meg is gondolhatja magát. A LiveKit ehhez a ToolFlag.CANCELLABLE jelzőt kínálja. Ha egy regisztrált eszköz lemondható, a keretrendszer automatikusan két kiegészítő eszközt tesz elérhetővé a nyelvi modell számára: a get_running_tasks() felsorolja az éppen futó lemondható feladatokat, a cancel_task(call_id) pedig azonosító alapján megszakítja a kiválasztottat.
A lemondás az eszközben asyncio.CancelledError kivételt vált ki. A funkció külön engedélyezendő, mivel sok írási művelet nem biztonságosan szakítható félbe. A visszatérítés példájában a LiveKit szándékosan két szakaszra bontja a folyamatot: a rendelés ellenőrzése olvasási művelet, a pénzmozgást végző visszatérítés pedig külön lépés.
A példakód az ismételt meghívások kezelésére az on_duplicate="reject" beállítást is használja. Ennek célja, hogy a futó feladat mellett az ügynök ne indítsa el újra ugyanazt a visszatérítést.
A fejlesztők már az 1.6-os verziótól használhatják
Az útmutató a livekit-agents>=1.6 verzióra épül, a beszédfelismeréshez, a nyelvi modellhez és a beszédszintézishez pedig LiveKit Inference szolgáltatást használ. A bemutató determinisztikus, utánzó háttérrendszerrel működik, ezért a példákhoz a LiveKit kulcsain kívül nincs szükség külső szolgáltatásra. A szükséges hitelesítési adatok a LIVEKIT_URL, a LIVEKIT_API_KEY és a LIVEKIT_API_SECRET.
A LiveKit szerint a fejlesztők körülbelül harminc másodperc alatt létrehozhatnak egy működő hangügynök-vázat az lk agent init my-agent --template agent-starter-python paranccsal, majd a leglassabb eszközbe beilleszthetik a ctx.update() hívást. A felhasználói oldalon ez azt jelenti, hogy a hosszú háttérmunka alatt a hívás nem marad magyarázat nélküli csendben, miközben az ügyfél továbbra is beszélhet az ügynökkel.
LiveKit: Async tools for voice agents: keep talking while work runs


