background image

 

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

 

 
 

 

48 

 

 
 
 

4.4  Λογική  Chatbot  -  Υλοποίηση  του  RAG  Pipeline  με  χρήση 
LangChain 

4.4.1  Δημιουργία Εργαλείων (Tools) για Ανάκτηση Πληροφοριών 
 

Η  ικανότητα  του  πράκτορα  να  παρέχει  ακριβείς  και  τεκμηριωμένες  πληροφορίες 

στο  πλαίσιο  της  λειτουργίας  του  ως  συστήματος  RAG,  βασίζεται  στην  υλοποίηση 

εξειδικευμένων εργαλείων. Τα εργαλεία αυτά αποτελούν το συνδετικό κρίκο μεταξύ του 

μεγάλου  γλωσσικού  μοντέλου  και  των  εξωτερικών  πηγών  δεδομένων,  επιτρέποντας  την 

ανάκτηση  πληροφοριών  σε  πραγματικό  χρόνο  από  διανυσματικές  και  σχεσιακές  βάσεις 

δεδομένων. Η υλοποίησή τους πραγματοποιήθηκε με τη χρήση του διακοσμητή (decorator) 

“@tool”  της  βιβλιοθήκης  LangChain,  ο  οποίος  επιτρέπει  τη  μετατροπή  τυπικών 

συναρτήσεων  Python  σε  λειτουργικές  μονάδες  που  ο  πράκτορας  μπορεί  να  καλέσει 

αυτόνομα.

 Η επιλογή του κατάλληλου εργαλείου από το μοντέλο δεν περιορίζεται στην 

ανάγνωση του ονόματος της συνάρτησης, αλλά βασίζεται καθοριστικά στην ανάλυση της 

περιγραφής (docstring) που συνοδεύει κάθε εργαλείο 

[17]

 . Το LangChain μεταφέρει στο 

LLM μια λίστα με τα ονόματα και τις λεπτομερείς περιγραφές των συναρτήσεων, και το 

μοντέλο  επιλέγει  εκείνο  που  ταιριάζει  περισσότερο  στο  αίτημα  του  χρήστη  βάσει  του 

κειμένου της περιγραφής. Αυτό σημαίνει ότι ακόμη και αν το όνομα μιας συνάρτησης είναι 

ασαφές,  η  ύπαρξη  ενός  λεπτομερούς  docstring  επιτρέπει  στο  μοντέλο  να  κατανοήσει  τη 

λειτουργικότητα  και  τις  παραμέτρους  του  εργαλείου,  διασφαλίζοντας  την  ορθή  λήψη 

αποφάσεων κατά τη διαδικασία της συλλογιστικής (reasoning). 

 

Το πρώτο και βασικότερο εργαλείο ανάκτησης είναι η συνάρτηση get_faq_answer() 

(εικόνα 19) , η οποία είναι υπεύθυνη για την παροχή απαντήσεων σε συχνά ερωτήματα των 

χρηστών. Η λειτουργία της βασίζεται στην αναζήτηση σημασιολογικής ομοιότητας εντός 

της διανυσματικής βάσης δεδομένων FAQ. 

 

@tool 

def get_faq_answer(question: str) -> str: 
    “““ 

    Searches the hotel's FAQ for an answer to a specific question using 

vector similarity search. 

    “““ 

    if faq_vector_store: 
        results = faq_vector_store.similarity_search(question, k=3)