Σχεδιασμός και Υλοποίηση εξειδικευμένου chatbot για διαδικτυακές πλατφόρμες
49
και με σχετικά μικρό αριθμό παραμέτρων, αρκεί οι ενσωματώσεις να είναι σημασιολογικά
πλούσιες. Παρόμοιες παρατηρήσεις έγιναν και νωρίτερα με το Sentence-BERT [27], που έδειξε
πώς μπορούν να χτιστούν χρήσιμες ενσωματώσεις σε επίπεδο πρότασης πάνω σε
προεκπαιδευμένα BERT μοντέλα. Δηλαδή, ακόμα και η καλύτερη βάση δεδομένων δεν θα
σώσει ένα σύστημα αν οι ενσωματώσεις που της δίνουμε είναι κακής ποιότητας.
Πέρα από τη διανυσματική βάση, το σύστημα χρειάζεται και έναν συμβατικό, σχεσιακό
χώρο αποθήκευσης για στοιχεία που δεν είναι διανύσματα: την κατάσταση του αγωγού
ευρετηρίασης, τη μνήμη ερωτήσεων-απαντήσεων και την ανατροφοδότηση των χρηστών. Για
τον σκοπό αυτό επιλέχθηκε η SQLite [69]. Σε αντίθεση με εξυπηρετητές βάσεων δεδομένων
όπως η PostgreSQL [70] ή η MySQL [71], η SQLite είναι ενσωματωμένη και δεν απαιτεί
ξεχωριστή διεργασία ή ρύθμιση: όλη η βάση ζει σε ένα μόνο τοπικό αρχείο και συνοδεύει ήδη
την Python ως μέρος της τυπικής της βιβλιοθήκης. Για ένα τοπικό σύστημα ενός χρήστη με
μερικές χιλιάδες εγγραφές, αυτή η απλότητα ταιριάζει απόλυτα, ενώ ένας πλήρης εξυπηρετητής
βάσης θα ήταν περιττός και θα πρόσθετε άσκοπη πολυπλοκότητα.
3.3 Εκτέλεση τοπικών μοντέλων Ollama
Η εκτέλεση των γλωσσικών μοντέλων είναι ένα ξεχωριστό κομμάτι του παζλ. Μια εργασία
σαν τη δική μας, που θέλει να αποφύγει εμπορικά APIs, χρειάζεται μια λύση τοπικής
εκτέλεσης. Στον χώρο αυτό κυριαρχούν τρεις προσεγγίσεις. Η πρώτη είναι το llama.cpp, η
βιβλιοθήκη που σηματοδότησε την επανάσταση στην τοπική εκτέλεση μοντέλων με
κβαντοποίηση [59] στα 4 και 5 bits [65]. Η δεύτερη είναι το vLLM [64], που στοχεύει σε
μεγαλύτερη απόδοση με τεχνικές όπως το PagedAttention, αλλά απαιτεί GPU. Η τρίτη είναι το
Ollama, που έρχεται σαν ένα φιλικό περίβλημα πάνω από το llama.cpp και προσφέρει
REST API, αυτόματη διαχείριση μνήμης και ένα μεγάλο μητρώο μοντέλων.
Για τη συγκεκριμένη εργασία επιλέξαμε το Ollama για τρεις λόγους. Παρέχει ένα σταθερό
HTTP API που είναι εύκολο να χρησιμοποιηθεί από οποιαδήποτε γλώσσα προγραμματισμού,