Νικόλαος Λυμπιτάκης, Κατασκευή ενός RAG Chatbot για
Ξενοδοχειακή Υποστήριξη
58
• Μηχανισμός Επανεκτέλεσης (Rerun Logic): Το Streamlit λειτουργεί με έναν μοναδικό
τρόπο όπου ολόκληρος ο κώδικας της Python εκτελείται ξανά από την αρχή κάθε φορά που
ο χρήστης αλληλεπιδρά με ένα widget (π.χ. πατάει ένα κουμπί). Αυτό απλοποιεί τη ροή
δεδομένων, αρκεί να γίνεται σωστή διαχείριση της κατάστασης (Session State).
• Ενσωματωμένα Chat Widgets: Προσφέρει έτοιμα, βελτιστοποιημένα στοιχεία διεπαφής
για εφαρμογές συνομιλίας (st.chat_message, st.chat_input), τα οποία προσφέρουν μια
εμπειρία χρήστη παρόμοια με δημοφιλείς πλατφόρμες (π.χ. ChatGPT).
4.5.2 Διαχείριση Κατάστασης (Session State)
Λόγω του τρόπου λειτουργίας του Streamlit (script rerun), η διατήρηση δεδομένων
μεταξύ των αλληλεπιδράσεων είναι κρίσιμη. Για τον σκοπό αυτό χρησιμοποιείται ο
μηχανισμός st.session_state, ο οποίος λειτουργεί ως ένα αντικείμενο αποθήκευσης
δεδομένων της τρέχουσας συνεδρίας, επιτρέποντας στο σύστημα να διατηρεί πληροφορίες,
όπως το ιστορικό της συνομιλίας, καθ' όλη τη διάρκεια της αλληλεπίδρασης.
Στο αρχείο app.py (εικόνα 26), αρχικοποιούμε τις βασικές μεταβλητές που πρέπει
να διατηρηθούν, όπως η τρέχουσα γλώσσα (lang) και το ιστορικό μηνυμάτων (messages).
# --- ΑΡΧΙΚΟΠΟΙΗΣΗ SESSION STATE ---
if 'lang' not in st.session_state:
st.session_state.lang = "en"
if "messages" not in st.session_state:
st.session_state.messages = []
# Το turn_id είναι 0 για το αρχικό µήνυµα καλωσορίσµατος
st.session_state.messages.append({
"role": "bot",
"message":
UI_TRANSLATIONS[st.session_state.lang]["welcome_message"],
"turn_id": 0
})
Εικόνα 26 : Kώδικας από app.py
4.5.3 Διαχείριση Μνήμης Συνομιλίας (LangChain Memory)
Ένα από τα πιο σημαντικά στοιχεία ενός chatbot είναι η ικανότητα να θυμάται τα
προηγούμενα λεγόμενα. Η μνήμη αυτή δεν αποθηκεύεται απλώς ως κείμενο στην οθόνη,
αλλά ως αντικείμενο ConversationBufferWindowMemory του LangChain (εικόνα 27), το
οποίο τροφοδοτεί το γλωσσικό μοντέλο. Αυτό το αντικείμενο αποθηκεύεται επίσης στο
st.session_state ώστε να μην χάνεται κατά την ανανέωση της σελίδας.
def initialize_conversation():