Σχεδιασμός και Υλοποίηση εξειδικευμένου chatbot για διαδικτυακές πλατφόρμες
54
3.4 Πλαίσια λογισμικού για την ανάπτυξη εφαρμογών RAG
Πριν από τα επιμέρους πλαίσια, αξίζει να αναφερθεί η ίδια η γλώσσα προγραμματισμού
πάνω στην οποία χτίστηκε η εφαρμογή. Όλος ο κώδικας του συστήματος γράφτηκε σε Python,
και συγκεκριμένα στην έκδοση 3.12.3 [66], [67]. Η επιλογή αυτή δεν ήταν τυχαία. Η Python
έχει αναδειχθεί η κυρίαρχη γλώσσα της μηχανικής μάθησης και της επεξεργασίας φυσικής
γλώσσας, και σχεδόν ολόκληρο το οικοσύστημα εργαλείων που χρειαστήκαμε, από τις
ασύγχρονες βιβλιοθήκες δικτύου και την εξαγωγή περιεχομένου μέχρι τις βιβλιοθήκες
πρόσβασης στο Ollama και τη ChromaDB και το πλαίσιο διεπαφής Chainlit, διατίθεται πρώτα
και κυρίως για Python [68]. Η αναγνωσιμότητα της γλώσσας και η ταχύτητα ανάπτυξης που
προσφέρει μας επέτρεψαν να δοκιμάσουμε γρήγορα διαφορετικές σχεδιαστικές επιλογές, κάτι
ιδιαίτερα χρήσιμο σε μια ερευνητική εργασία όπου η αρχιτεκτονική άλλαξε αρκετές φορές
στην πορεία.
Θα μπορούσε να αντιτείνει κανείς ότι μια γλώσσα χαμηλότερου επιπέδου, όπως η C++ ή η
Rust, θα έδινε ταχύτερη εκτέλεση. Στην πράξη όμως το βαρύ υπολογιστικό φορτίο, δηλαδή ο
συμπερασμός των γλωσσικών μοντέλων, δεν εκτελείται στον δικό μας κώδικα αλλά μέσα στο
Ollama [21], που στηρίζεται στη γραμμένη σε C++ βιβλιοθήκη llama.cpp [65]. Έτσι ο κώδικάς
μας αναλαμβάνει κυρίως τον συντονισμό της ροής, μια εργασία όπου η ταχύτητα της γλώσσας
μετράει ελάχιστα ενώ η ευκολία ανάπτυξης μετράει πολύ. Άλλες επιλογές, όπως η JavaScript
με το Node.js ή η Go, είναι ισχυρές στο κομμάτι των διαδικτυακών υπηρεσιών, υστερούν όμως
αισθητά σε ώριμες βιβλιοθήκες μηχανικής μάθησης και επεξεργασίας κειμένου σε σχέση με
την Python [68]. Για τους λόγους αυτούς, η Python αποτέλεσε τη φυσική επιλογή ως γλώσσα
ενορχήστρωσης ολόκληρου του συστήματος, αφήνοντας τα κρίσιμα για την απόδοση τμήματα
σε μεταγλωττισμένα εργαλεία που καλούνται από αυτήν.
Στο επίπεδο της εφαρμογής, το πιο γνωστό πλαίσιο λογισμικού για συστήματα RAG είναι
το LangChain [62]. Πρόκειται για μια βιβλιοθήκη Python που προσφέρει έτοιμα δομικά
στοιχεία για κάθε στάδιο ενός αγωγού RAG: από τη φόρτωση και τον τεμαχισμό των εγγράφων