Το AsyncCallbackManagerfortoolRun και το CallbackManagerfortoolRun είναι και τα δύο εξαρτήματα που χρησιμοποιούνται στο πλαίσιο Langchain για τη διαχείριση των επανάκλησης κατά την εκτέλεση του εργαλείου, αλλά διαφέρουν κυρίως στον χειρισμό των ασύγχρονων επιχειρήσεων.
βασικές διαφορές
1. Ασύγχρονη έναντι σύγχρονης εκτέλεσης:
- Το AsyncCallbackManagerfortoolRun έχει σχεδιαστεί ειδικά για ασύγχρονες επιχειρήσεις. Επιτρέπει την εκτέλεση μη αποκλεισμού, που σημαίνει ότι ενώ μια λειτουργία περιμένει (π.χ. για να ολοκληρωθεί μια εργασία I/O), άλλες εργασίες μπορούν να συνεχίσουν να τρέχουν. Αυτό είναι ιδιαίτερα χρήσιμο σε σενάρια όπου μπορούν να εμφανιστούν πολλαπλές λειτουργίες ταυτόχρονα χωρίς να περιμένουν ο καθένας να τελειώσει διαδοχικά [1] [6].
- Το CallbackManagerfortoolrun, από την άλλη πλευρά, είναι σύγχρονη. Αυτό σημαίνει ότι εκτελεί καθήκοντα με τρόπο αποκλεισμού, όπου κάθε λειτουργία πρέπει να ολοκληρωθεί πριν ξεκινήσει η επόμενη. Αυτό μπορεί να οδηγήσει σε βραδύτερη απόδοση σε σενάρια όπου τα καθήκοντα θα μπορούσαν διαφορετικά να τρέξουν ταυτόχρονα [5] [6].
2. Υπογραφές μεθόδου:
- Οι μέθοδοι στο AsyncCallbackManagerfortoolRun είναι προτιμώμενες με `async`, όπως το` async on_text` και το async on_tool_end`, υποδεικνύοντας ότι αυτές οι μέθοδοι προορίζονται να χρησιμοποιηθούν με `'mauit` και μπορούν να επιστρέψουν τα αναμενόμενα αποτελέσματα [1].
- Αντίθετα, οι μέθοδοι CallbackManagerfortoolRun δεν έχουν το πρόθεμα `async`, αντανακλώντας τη σύγχρονη φύση τους. Εκτελούν αμέσως και δεν υποστηρίζουν τον μηχανισμό «περιμένουν» [2] [5].
3. Χρησιμοποιήστε περιπτώσεις:
- Ο ασύγχρονος διαχειριστής είναι καλύτερα κατάλληλος για εφαρμογές που απαιτούν υψηλή απόδοση και ανταπόκριση, όπως διακομιστές ιστού ή εφαρμογές που χειρίζονται ταυτόχρονα πολλαπλά αιτήματα χρήστη [4] [6].
- Ο σύγχρονος διαχειριστής μπορεί να είναι πιο κατάλληλος για απλούστερες εφαρμογές όπου οι λειτουργίες είναι απλές και δεν χρειάζεται να εκτελούνται ταυτόχρονα, απλοποιώντας έτσι το μοντέλο προγραμματισμού [5].
Συνοπτικά, η επιλογή μεταξύ της χρήσης AsyncCallbackManagerfortoolRun και CallbackManagerfortoolRun εξαρτάται σε μεγάλο βαθμό από το αν η αίτησή σας απαιτεί ασύγχρονες δυνατότητες ή εάν μπορεί να λειτουργήσει αποτελεσματικά με σύγχρονη επεξεργασία.
Αναφορές:
[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] https://www.reddit.com/r/dotnet/comments/fr8hae/is_there_any_benefit_to_asyncawait_if_youre_just/