background image

 

Νικόλαος Λυμπιτάκης, Κατασκευή ενός RAG Chatbot για 
Ξενοδοχειακή Υποστήριξη 

 

 
 

 

55 

if 'memory' not in st.session_state: 
    # memory_key: Το όνοµα της µεταβλητής στο prompt template 

({chat_history})    

    # input_key: Καθορίζει ποια µεταβλητή εισόδου αποτελεί το µήνυµα 

#του χρήστη

 

( υπάρχουν 3 µεταβλητές: language, examples, input)       

st.session_state.memory = ConversationBufferWindowMemory( 
        k=5,  

        memory_key=“chat_history”,  

        input_key=“input” 

    )

 

 

Εικόνα 22 : Kώδικας από app.py 

 

 

Το  αντικείμενο  “memory”  περνά  ως  όρισμα  στην  κύρια  λογική  του  πράκτορα 

(handle_user_input),    όπου  και  ενσωματώνεται  στον  “AgentExecutor”  του  script 

chatbot_logic.py. Κατά τη δημιουργία του prompt, το ιστορικό της συνομιλίας εισάγεται 

δυναμικά  μέσω  της  μεταβλητής  {chat_history},  επιτρέποντας  στο  γλωσσικό  μοντέλο  να 

βλέπει τα προηγούμενα μηνύματα και να προσαρμόζει τις απαντήσεις του αναλόγως. 

 
4.4.4  Ο Agent και η Λογική της Συνομιλίας 
 
 

Η καρδιά του συστήματος βρίσκεται στη συνάρτηση handle_user_input(), η οποία 

ενορχηστρώνει  τη  λειτουργία  του  πράκτορα  (agent)  και  διαχειρίζεται  τη  ροή  της 

συνομιλίας. Σε αυτό το στάδιο, συνδυάζονται όλα τα επιμέρους συστατικά: το γλωσσικό 

μοντέλο (LLM), τα εργαλεία (tools), η μνήμη (memory) και η μηχανική προτροπών (prompt 

engineering), προκειμένου να παραχθεί μια τελική, συνεκτική απάντηση προς τον χρήστη. 

 

Η  διαδικασία  ξεκινά  με  την  αρχικοποίηση  του  γλωσσικού  μοντέλου,  όπου 

χρησιμοποιείται η κλάση “ChatOpenAI” του langChain ρυθμισμένο να επικοινωνεί με το 

μοντέλο “deepseek-chat”. Στη συνέχεια, καθορίζεται η λίστα των διαθέσιμων εργαλείων 

(tools),  τα  οποία  περιλαμβάνουν  λειτουργίες  για  ανάκτηση  πληροφοριών  από  τα  vector 

stores  (FAQ,  κριτικές,  σημεία  ενδιαφέροντος)  και  από  τη  βάση  δεδομένων  SQL 

(διαθεσιμότητα και πληροφορίες δωματίων). 

 

Κρίσιμο ρόλο διαδραματίζει η ανάκτηση παραδειγμάτων (good examples) από το 

“good_examples_vector_store”.  Πριν  από  την  εκτέλεση  του  πράκτορα,  το  σύστημα 

αναζητά  παρόμοια  ερωτήματα  από  το  παρελθόν.  Εάν  βρεθούν  σχετικά  παραδείγματα, 

ενσωματώνονται  στην  προτροπή  (prompt),  παρέχοντας  στο  μοντέλο  πρότυπα  “σωστών” 

απαντήσεων. Μάλιστα, έχει δοθεί ρητή οδηγία στο μοντέλο: εάν η ερώτηση του χρήστη 

απαντάται  άμεσα  από  τα  παραδείγματα,  να  παρακάμψει  τη  χρήση  εργαλείων  και  να 

απαντήσει απευθείας, εξοικονομώντας πόρους και χρόνο.