CRUD Chatbot που «μαθαίνει» από τον χρήστη (έκδοση 10) – Απλή εξήγηση & γρήγορη χρήση
Python script και επιμέλεια άρθρου: Tryfon Papadopoulos
Ο παρακάτω κώδικας φτιάχνει έναν απλό chatbot κονσόλας που:
- απαντά σε ερωτήσεις από μια βάση γνώσης (JSON),
- μαθαίνει νέες απαντήσεις όταν δεν ξέρει,
- επιτρέπει Αναζήτηση/Προβολή/Επεξεργασία/Διαγραφή (CRUD) ερωτήσεων,
- κάνει ασαφή αντιστοίχιση (fuzzy match) με υποστήριξη ελληνικών (χωρίς τόνους, αδιαφορεί για πεζά/κεφαλαία, «ς/σ»),
- μπορεί να στείλει email με έτοιμο θέμα/κείμενο,
- και να εξάγει το ιστορικό συνομιλίας σε αρχείο.
Τι χρειάζομαι;
- Python 3
- Ένα αρχείο γνώσεων (JSON) στη θέση που ορίζει ο κώδικας:
KB_PATH = r”c:\PythonPrograms\build_chatbot\knowledge_base.json”
Αν δεν υπάρχει, δημιουργήστε το με περιεχόμενο:
{ “questions”: [] }
- Σε macOS/Linux αλλάξτε το KB_PATH σε μια δική σας διαδρομή, π.χ. /Users/…/knowledge_base.json.)
- (Προαιρετικό) Για αποστολή email μέσω Outlook: εγκατεστημένο Outlook και το πακέτο pywin32. Χωρίς αυτά, γίνεται fallback σε mailto: του προεπιλεγμένου email client (πιθανό όριο μεγέθους σώματος).
Δείτε το σχετικό βίντεο…
Πώς το τρέχω;
Windows: Άνοιξε Γραμμή Εντολών/PowerShell στον φάκελο του script και τρέξε:
py build_chatbot_10.py
macOS/Linux:
python3 build_chatbot_10.py
Στην αρχή σε ρωτά αν θέλεις οδηγίες. Πληκτρολόγησε yes/y/nai για να εμφανιστούν.
Πώς δουλεύει (με απλά λόγια);
1.Φόρτωση/Αποθήκευση γνώσεων
Διαβάζει/γράφει ένα JSON με δομή:
2.Αναζήτηση & Αντιστοίχιση
Όταν ρωτήσεις κάτι, αφαιρεί τόνους, ενοποιεί «ς/σ», αγνοεί πεζά/κεφαλαία και κάνει ασαφή σύγκριση (difflib) με τις αποθηκευμένες ερωτήσεις. Αν βρει μια ή περισσότερες ερωτήσεις με τους όρους που έχεις ζητήσει, επιστρέφει τις ερωτήσεις που τις εμπεριέχουν με αλφαβητική σειρά.
3.Μάθηση (Learn)
Αν δεν ξέρει την απάντηση, σου ζητά να την γράψεις (είναι δυνατή η καταχώρηση πολλαπλών γραμμών):
- Γράφεις κανονικά (με κενές γραμμές αν θέλεις).
- Τελειώνεις με submit ή μια τελεία . μόνη της.
- Αν θες να ακυρώσεις, γράψε skip_question.
Η νέα Q/A αποθηκεύεται αυτόματα στο JSON.
4.CRUD εντολές (διαχείριση Q/A)
- show_questions → Εμφανίζει όλες τις ερωτήσεις ταξινομημένες (και δίνει αρίθμηση).
- search_questions ή search_terms → Ζητά όρους (π.χ. tutorial, chatbot) και εμφανίζει όσες ερωτήσεις τους περιέχουν.
- answer_<αριθμός> ή απλά ο αριθμός (π.χ. 3) → Δείχνει την απάντηση της αντίστοιχης ερώτησης από την τελευταία λίστα.
- edit_<αριθμός> → Επεξεργασία ερώτησης/απάντησης.
- Για την απάντηση, ανοίγει εξωτερικό editor:
- Windows: Notepad (κλείνεις το Notepad και πατάς Enter στην κονσόλα).
- macOS/Linux: χρησιμοποιεί $VISUAL/$EDITOR, αλλιώς δοκιμάζει nano ή vi.
- Για την απάντηση, ανοίγει εξωτερικό editor:
- delete_<αριθμός> → Διαγραφή ερώτησης (ζητά επιβεβαίωση με πληκτρολόγηση DELETE).
5.Αποστολή Email
- send_email_<αριθμός> → Ανοίγει παράθυρο σύνταξης email με Θέμα = Ερώτηση και Σώμα = Απάντηση.
Προτιμά Outlook μέσω COM (αν υπάρχει), αλλιώς ανοίγει τον προεπιλεγμένο client με mailto: (ίσως κόψει πολύ μεγάλα κείμενα).
6.Εξαγωγή συνομιλίας
- export_chat → Αποθηκεύει όλη τη συνομιλία (ερωτήσεις/απαντήσεις/εντολές) ως .txt με timestamp στον φάκελο του script.
- Έξοδος
- quit → Τερματισμός.
Χρήσιμα tips
- Η αντιστοίχιση στα ελληνικά είναι ανθεκτική: αγνοεί τόνους, διαφορά πεζών/κεφαλαίων και το «ς/σ».
- Αν πάρεις σφάλμα ότι δεν βρίσκει το knowledge_base.json, δημιούργησέ το εσύ (δες παραπάνω) ή άλλαξε το KB_PATH.
- Για καλύτερη εμπειρία επεξεργασίας απαντήσεων σε macOS/Linux, όρισε μεταβλητές περιβάλλοντος EDITOR ή VISUAL (π.χ. export EDITOR=code για VS Code CLI).
Παράδειγμα ροής
- Γράφω: Πώς τρέχω το πρόγραμμα;
- Αν υπάρχει σχετική ερώτηση, παίρνω απάντηση.
- Αν δεν υπάρχει, το bot ζητά να του δώσω απάντηση → γράφω κείμενο → submit → αποθηκεύεται.
- Γράφω: show_questions → βλέπω λίστα.
- Γράφω: answer_2 (ή 2) → παίρνω την απάντηση της 2ης.
- Γράφω: edit_2 → αλλάζω την ερώτηση/απάντηση.
- Γράφω: send_email_2 → ανοίγει email με έτοιμο θέμα/σώμα.
- Γράφω: export_chat → αποθηκεύει το ιστορικό.
- Γράφω: quit → έξοδος.
Με αυτά, μπορείς να το τρέξεις, να το φορτώσεις γνώσεις και να το χρησιμοποιείς σαν προσωπικό, εξελισσόμενο helpdesk για τις δικές σου ερωτήσεις–απαντήσεις.




Comments are closed.