Fonik
Έργα | | Σύνδεσμοι:

Προσωπικός AI βοηθός email: ένας Python MCP server με τοπικά embeddings και ChromaDB εντοπίζει τις πιο όμοιες παλιές απαντήσεις μου, και ένα LLM συντάσσει νέες στο δικό μου ύφος. Τίποτα δεν αποστέλλεται χωρίς έλεγχο.
Κατάσταση: λειτουργικό, σκόπιμα private. Το Fonik είναι ένα εργαλείο που έφτιαξα για το δικό μου inbox: συντάσσει απαντήσεις για το πανεπιστημιακό μου email στο ύφος γραφής μου, αντλώντας από τα χρόνια των απαντήσεων που έχω ήδη στείλει. Το πλήρες workflow λειτουργεί end-to-end πάνω στο πραγματικό mailbox, από την ανάκτηση μέχρι το έτοιμο πρόχειρο που περιμένει σε έναν φάκελο της αλληλογραφίας.
Με μια ματιά
| Αφορά | Το δικό μου inbox: πανεπιστημιακό email, σχεδόν εξ ολοκλήρου στα ελληνικά |
| Stack | Python MCP server, τοπικά embeddings, ChromaDB, IMAP |
| Corpus | 3.655 δικές μου ανταλλαγές email (2018-2026), σε τοπικό ευρετήριο |
| Απόρρητο | Corpus και embeddings δεν φεύγουν ποτέ από το μηχάνημα: το LLM βλέπει μόνο το εκάστοτε email και λίγες όμοιες ανταλλαγές |
| Ασφάλεια | Τίποτα δεν αποστέλλεται αυτόματα: κάθε πρόχειρο περιμένει σε φάκελο τον έλεγχό μου |
Το πρόβλημα
Στο inbox ενός πανεπιστημιακού εκπαιδευτικού οι φοιτητές ρωτούν πολύ συχνά τα ίδια πράγματα: βαθμολογίες, προθεσμίες, οργανωτικά των μαθημάτων, συντονισμός πτυχιακών. Λαμβάνω 5 με 10 emails την ημέρα, και στα απεσταλμένα μου υπάρχουν χρόνια απαντήσεων που ήδη αποτυπώνουν το ύφος μου, τις διατυπώσεις μου και την τυπική μου απάντηση σε κάθε είδος ερώτησης. Το κουραστικό κομμάτι δεν είναι το διάβασμα: είναι να γράφω ξανά την ίδια απάντηση με μικρές παραλλαγές.
Τα έτοιμα εργαλεία δεν ταιριάζουν σε αυτό το πρόβλημα. Το πανεπιστημιακό mail τρέχει σε on-premises Exchange server, οπότε η μόνη προγραμματιστική πρόσβαση είναι το σκέτο IMAP: δεν υπάρχει Gmail ή Microsoft 365 API για να συνδεθούν τα συνηθισμένα AI προϊόντα email. Το περιεχόμενο είναι ελληνικό, κάτι που οι γενικοί βοηθοί δεν χειρίζονται καλά. Και η αλληλογραφία ενός πανεπιστημιακού inbox δεν πρέπει να παραδοθεί ολόκληρη σε μια cloud υπηρεσία. Οι τρεις αυτοί περιορισμοί μαζί (IMAP, ελληνικά, απόρρητο) απέκλεισαν όσα εργαλεία εξέτασα και όρισαν αυτό που έφτιαξα τελικά.
Η προσέγγιση
Το Fonik μαθαίνει το ύφος μου με ανάκτηση (retrieval), όχι με εκπαίδευση μοντέλου. Κάθε απάντηση που έχω στείλει αντιστοιχίζεται με το email που απαντούσε και γίνεται indexed σε ένα τοπικό vector store. Για κάθε νέο email, το σύστημα εντοπίζει τις πιο όμοιες παλιές ανταλλαγές μου και τις δίνει στο LLM ως παραδείγματα. Το πρόχειρο που προκύπτει είναι γραμμένο όπως θα το έγραφα εγώ, διαμορφωμένο από τον τρόπο που έχω απαντήσει στο παρελθόν στο ίδιο είδος ερώτησης. Σε σύγκριση με το fine-tuning ενός μοντέλου, η προσέγγιση αυτή δεν χρειάζεται GPU, μένει διαφανής (μπορώ να δω ακριβώς σε ποια παραδείγματα βασίστηκε κάθε πρόχειρο) και ενημερώνεται απλώς με την προσθήκη της νέας αλληλογραφίας στο ευρετήριο.
Η αρχιτεκτονική είναι σκόπιμα λιτή. Το Fonik είναι ένας Python MCP (Model Context Protocol) server: ένα σύνολο εργαλείων email, από λήψη και αναζήτηση μέχρι παρακολούθηση thread και αποθήκευση πρόχειρων, διαθέσιμο σε ένα LLM agent. Δεν υπάρχει bot, daemon στο παρασκήνιο ή web interface: το user interface είναι μια συνεδρία Claude Code, και το ίδιο το mailbox είναι η “μοναδική πηγή αλήθειας” (single source of truth). Το αρχικό design είχε Telegram bot, orchestrator και προγραμματισμένο pipeline. Όλα αυτά αφαιρέθηκαν όταν έγινε σαφές ότι μια συνεδρία agent με τα σωστά εργαλεία είναι ήδη από μόνη της ο βοηθός.
Τοπικό από κατασκευή
Η δουλειά που αφορά το απόρρητο γίνεται εξ ολοκλήρου στο μηχάνημά μου. Το πολύγλωσσο μοντέλο embeddings, επιλεγμένο μετά από συγκριτική αξιολόγηση σε ελληνικά email (μηνύματα με συγγενές νόημα πρέπει να ομαδοποιούνται ανεξάρτητα από τη διατύπωσή τους), τρέχει τοπικά σε CPU, το vector store είναι ένας τοπικός κατάλογος ChromaDB, και το corpus δεν φεύγει ποτέ από εκεί. Μόνο τη στιγμή της σύνταξης φτάνει κάτι στο LLM: το email που απαντιέται και οι πέντε πιο όμοιες παλιές ανταλλαγές, ένα μικρό και ελεγχόμενο κομμάτι. Η ανάκτηση γίνεται με βάση το περιεχόμενο, όχι τον αποστολέα, και οι φοιτητές εμφανίζονται ως απρόσωπες διευθύνσεις μητρώου, όχι με ονόματα. Πέρα από την ίδια την κλήση του LLM δεν υπάρχει πουθενά cloud στο σύστημα, και η μόνιμη θέση του θα είναι ένα mini PC χαμηλής κατανάλωσης (Intel N100 CPU), πάντα ανοιχτό και προσβάσιμο μέσω SSH.
Η κατασκευή
Το άχαρο μισό της δουλειάς ήταν το ίδιο το mailbox. Ο Exchange server επιστρέφει μηνύματα μόνο σε HTML και σε μείγμα ελληνικών encodings, περιορίζει τις αναζητήσεις στα 250 αποτελέσματα, και “θάβει” κάθε απάντηση κάτω από το quoted ιστορικό του thread. Η εισαγωγή έγινε μήνα προς μήνα για να παρακαμφθεί το όριο της αναζήτησης, το quoted κείμενο αφαιρέθηκε ώστε να γίνεται indexed μόνο το νέο περιεχόμενο, και κάθε απεσταλμένη απάντηση αντιστοιχίστηκε με το email που απαντούσε μέσω των threading headers, με ποσοστό επιτυχίας 92,7% στα πρόσφατα έτη. Το αποτέλεσμα είναι ένα corpus από 3.655 καθαρά ζεύγη ερώτησης-απάντησης, από οκτώ χρόνια αλληλογραφίας με φοιτητές και συναδέλφους.
Στην πράξη
Η ροή είναι σύντομη: βλέπω τι είναι αδιάβαστο, διαλέγω τα emails που αξίζουν απάντηση, ζητώ πρόχειρα. Κάθε πρόχειρο συντάσσεται ως κανονική απάντηση, με σωστά threading headers και το quoted πρωτότυπο από κάτω, και αποθηκεύεται μέσω IMAP σε ειδικό φάκελο. Από εκεί εμφανίζεται σε κάθε mail client και κάθε συσκευή: το διαβάζω, διορθώνω ό,τι χρειάζεται, και το στέλνω ο ίδιος. Στην πρώτη πλήρη δοκιμή σε πραγματικό email, η ανάκτηση εντόπισε παλιές ανταλλαγές για το ίδιο ακριβώς μάθημα με ομοιότητα 0,92, και το πρόχειρο επέστρεψε σωστά ενταγμένο στο thread, στο ύφος μου, να περιμένει στον φάκελο.
Το Fonik ξεκίνησε πάνω απ’ όλα από γνήσια περιέργεια: ήθελα να δω αν ένα τέτοιο σύστημα μπορεί να σχεδιαστεί και να υλοποιηθεί ώστε να είναι αποτελεσματικό και αποδοτικό. Ήταν ένα ενδιαφέρον project, που τελικά αποδείχθηκε και χρήσιμο.