Az AsyncCallbackManagerfortoolrun és a CallbackManagerfortoolrun egyaránt a Langchain keretrendszerben használják a visszahívások kezelésére a szerszám végrehajtása során, ám ezek elsősorban az aszinkron műveletek kezelésében különböznek egymástól.
kulcsfontosságú különbségek
1. aszinkron vs. szinkron végrehajtás:
- Az AsyncCallbackManagerfortoolrun kifejezetten aszinkron műveletekhez készült. Ez lehetővé teszi a nem blokkoló végrehajtást, ami azt jelenti, hogy míg az egyik művelet vár (például egy I/O feladat elvégzésére), más feladatok folytatódhatnak. Ez különösen hasznos a forgatókönyvekben, ahol több művelet egyszerre fordulhat elő anélkül, hogy mindegyikük egymás utáni befejeződik [1] [6].
- A CallbackManagerfortoolRun viszont szinkron. Ez azt jelenti, hogy blokkolási módon hajtja végre a feladatokat, ahol az egyes műveleteknek a következő megkezdése előtt be kell fejeznie. Ez lassabb teljesítményhez vezethet olyan forgatókönyvekben, ahol a feladatok egyébként egyidejűleg futhatnak [5] [6].
2. Módszer aláírása:
- Az AsyncCallbackManagerfortoolrun módszereit „Async” előtaggal, például „Async on_text” és „Async on_tool_end” előtaggal vannak ellátva, jelezve, hogy ezeket a módszereket „várást” használják, és visszatérhetnek a várható eredményekből [1].
- Ezzel szemben a CallbackManagerfortoolrun módszerek nem rendelkeznek az Async "előtaggal, tükrözve a szinkron természetüket. Azonnal végrehajtják, és nem támogatják a „vár” mechanizmust [2] [5].
3. Használjon eseteket:
- Az aszinkronkezelő jobban megfelel azoknak az alkalmazásoknak, amelyek nagy teljesítményt és reagálást igényelnek, például webszervereket vagy alkalmazásokat, amelyek egyszerre kezelik a több felhasználói kérelmet [4] [6].
- A Synchronous Manager megfelelőbb lehet az egyszerűbb alkalmazásokhoz, ahol a műveletek egyértelműek, és nem kell egyidejűleg futniuk, ezáltal egyszerűsítve a programozási modellt [5].
Összefoglalva: az AsyncCallbackManagerfortoolrun és a CallbackManagerfortoolrun használata közötti választás nagymértékben függ attól, hogy alkalmazásához aszinkron képességeket igényel -e, vagy hatékonyan működhet -e szinkron feldolgozással.
Idézetek:
[1] https://api.python.langchain.com/en/latest/callbacks/langchain_core.callbacks.manager.asynccallbackmanagerfortoolrun.html
[2] https://python.langchain.com/v0.1/docs/modules/tools/custom_tools/
[3] https://blog.langchain.dev/structured-tools/
[4] https://stackoverflow.com/questions/36213948/what-is-the-thefference-between-asynchronous-calls-and-callbacks
[5] https://python.langchain.com/api_reference/core/callbacks.html
[6] https://www.mendix.com/blog/asynchronous-vs-synchronous-programming/
[7] https://github.com/langchain-ai/langchain/discussions/17591
[8] https://www.reddit.com/r/dotnet/comments/fr8hae/is_there_any_benefit_to_asyncawait_if_youre_just/