The AsyncCallbackManagerfortoolrun و CallbackManagerfortoolrun كلاهما مكونان يستخدمان في إطار Langchain لإدارة عمليات الاسترداد أثناء تنفيذ الأدوات ، لكنهما يختلفان بشكل أساسي في تعاملهما مع العمليات غير المتزامنة.
الاختلافات الرئيسية
1. التنفيذ غير المتزامن مقابل التنفيذ المتزامن:
- تم تصميم AsyncCallbackManagerfortoolrun خصيصًا للعمليات غير المتزامنة. يسمح بتنفيذ عدم الحظر ، مما يعني أنه أثناء انتظار عملية واحدة (على سبيل المثال ، لإكمال مهمة I/O) ، يمكن أن تستمر المهام الأخرى. هذا مفيد بشكل خاص في السيناريوهات التي يمكن أن تحدث فيها عمليات متعددة في وقت واحد دون انتظار أن ينتهي كل منها بالتتابع [1] [6].
- CallbackManagerfortoolrun ، من ناحية أخرى ، متزامن. هذا يعني أنه ينفذ المهام بطريقة حظر ، حيث يجب أن تكتمل كل عملية قبل بدء التشغيل التالي. يمكن أن يؤدي ذلك إلى أداء أبطأ في السيناريوهات حيث يمكن أن تعمل المهام بطريقة أخرى بشكل متزامن [5] [6].
2. توقيعات الطريقة:
- يتم مسبوقة الأساليب في asynccallbackmanagerfortoolrun بـ "Async" ، مثل "Async On_text" و `async on_tool_end` ، مما يشير إلى أن هذه الطرق تهدف إلى استخدامها مع` في الانتظار ويمكن أن تعود نتائج قابلة للانتظار [1].
- على النقيض من ذلك ، فإن أساليب CallbackManagerfortoolrun لا تحتوي على بادئة "غير متزامنة" ، مما يعكس طبيعتها المتزامنة. إنهم ينفذون على الفور ولا يدعمون آلية "الانتظار" [2] [5].
3. استخدام الحالات:
- المدير غير المتزامن أكثر ملاءمة للتطبيقات التي تتطلب إنتاجية عالية واستجابة ، مثل خوادم الويب أو التطبيقات التي تتعامل مع طلبات المستخدم المتعددة في وقت واحد [4] [6].
- قد يكون المدير المتزامن أكثر ملاءمة للتطبيقات الأكثر بساطة حيث تكون العمليات واضحة ولا تحتاج إلى التشغيل بشكل متزامن ، وبالتالي تبسيط نموذج البرمجة [5].
باختصار ، يعتمد الاختيار بين استخدام asynccallbackmanagerfortoolrun و pallbackmanagerfortoolrun إلى حد كبير على ما إذا كان تطبيقك يتطلب قدرات غير متزامنة أو إذا كان بإمكانه العمل بشكل فعال مع المعالجة المتزامنة.
الاستشهادات:
[1] https://api.python.langchain.com/en/latest/callbacks/langchain_core.callbacks.manager.asyncallbackmanagerfortoolrun.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-difference-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]