تختلف عملية التهيئة لـ "AsyncCallbackManagerfortoolrun" و "PallbackManagerFortoolrun" في مكتبة Langchain في المقام الأول في التعامل معها مع العمليات غير المتزامنة.
asynccallbackmanagerfortoolrun
** التهيئة:
- تم تصميم "AsyncCallbackManagerfortoolrun` لإدارة عمليات الاسترجاعات غير المتزامنة أثناء تنفيذ الأدوات. تتم تهيئتها بعدة معلمات ، بما في ذلك:
- `Run_id`: معرف فريد للتشغيل.
- "معالجات": قائمة من معالجات رد الاتصال التي سيتم استدعاؤها أثناء التشغيل.
- `inrendable_handlers` ،` parent_run_id` ، `tags` ، `inclitable_tags` ، metadata` ، و` inlorditable_metadata`: المعلمات الاختيارية التي تسمح بتكوينات أكثر تعقيدًا وإدارة البيانات أثناء تنفيذ المصروفات غير المتزامنة [1] [2].
** العمليات غير المتزامنة:
- يتيح هذا المدير أن تكون العمليات غير محظورة ، مما يعني أنه يمكنه التعامل مع مهام متعددة في وقت واحد دون انتظار إكمال كل واحدة قبل بدء التشغيل التالي. هذا مفيد بشكل خاص في السيناريوهات حيث قد تستغرق المهام كميات مختلفة من الوقت لإكمالها ، لأنها تعزز الإنتاجية والاستجابة [8].
CallbackManagerfortoolrun
** التهيئة:
- "CallbackManagerfortoolrun" ، من ناحية أخرى ، مخصص للعمليات المتزامنة. يشترك في توقيع تهيئة مماثل ، ويقبل المعلمات مثل "Run_id` و" المعالجات "وغيرها ، ولكنه يعمل تحت نموذج متزامن [9].
** العمليات المتزامنة:
- في هذه الحالة ، تعمل العمليات ؛ يجب أن تكتمل كل مهمة قبل بدء التشغيل التالي. يمكن أن يؤدي ذلك إلى عدم الكفاءة عند التعامل مع المهام التي لها أوقات تنفيذ متغيرة ، حيث يمكن إبطاء العملية بأكملها من خلال مهمة واحدة طويلة الأمد [8].
ملخص الاختلافات
- لا يتزامن المتزامن مقابل المتزامن: يكمن الاختلاف الأساسي في نموذجها التشغيلي `asyncallbackmanagerfortoolrun` في التنفيذ غير المحظور بينما يتبع" callbackmanagerfortoolrun` نهج الحجب.
- الآثار المترتبة على الأداء: يعد مدير Async أكثر ملاءمة للبيئات عالية الإنتاجية حيث تحتاج مهام متعددة إلى معالجة متزامنة ، في حين أن مدير المزامنة قد يكون أكثر بساطة ولكن يمكن أن يؤدي إلى الأداء الكلي الأبطأ بسبب طبيعته الحظر.
تبرز هذه الاختلافات كيفية تصميم كل مدير لحالات الاستخدام المحددة في إطار Langchain ، مما يسمح للمطورين باختيار النموذج المناسب بناءً على متطلبات تطبيقهم.
الاستشهادات:
[1] https://api.python.langchain.com/en/latest/core/callbacks/langchain_core.callbacks.manager.asyncallbackmanagerfortoolrun.html
[2] https://api.python.langchain.com/en/latest/callbacks/langchain_core.callbacks.manager.asyncallbackmanagerfortoolrun.html
[3] https://sj-langchain.readthedocs.io/en/latest/callbacks/langchain.callbacks.manager.asyncallbackmanagerfortoolrun.html
[4]
[5] https://github.com/langchain-ai/langchain/issues/6828
[6] https://thomaslevesque.com/tags/async/
[7] https://stackoverflow.com/questions/26268870/initialize-async-only-once-pattern
[8] https://www.mendix.com/blog/asynchronous-vs-synchronous-programming/
[9] https://github.com/langchain-ai/langchain/blob/master/libs/core/langchain_core/callbacks/manager.py