ai-agents-for-beginners

Σχεδιασμός Πολλαπλών Πρακτόρων

(Κάντε κλικ στην εικόνα παραπάνω για να δείτε το βίντεο αυτής της ενότητας)

Μεταγνώση σε Πράκτορες Τεχνητής Νοημοσύνης

Εισαγωγή

Καλώς ήρθατε στο μάθημα σχετικά με τη μεταγνώση σε πράκτορες τεχνητής νοημοσύνης! Αυτό το κεφάλαιο έχει σχεδιαστεί για αρχάριους που ενδιαφέρονται για το πώς οι πράκτορες ΤΝ μπορούν να σκέφτονται για τις δικές τους διαδικασίες σκέψης. Μέχρι το τέλος αυτού του μαθήματος, θα κατανοείτε βασικές έννοιες και θα είστε εξοπλισμένοι με πρακτικά παραδείγματα για να εφαρμόσετε τη μεταγνώση στο σχεδιασμό πρακτόρων ΤΝ.

Στόχοι Μάθησης

Μετά την ολοκλήρωση αυτού του μαθήματος, θα μπορείτε να:

  1. Κατανοήσετε τις επιπτώσεις των βρόχων λογικής στον ορισμό των πρακτόρων.
  2. Χρησιμοποιήσετε τεχνικές προγραμματισμού και αξιολόγησης για την υποστήριξη αυτοδιορθωτικών πρακτόρων.
  3. Δημιουργήσετε τους δικούς σας πράκτορες ικανούς να χειρίζονται κώδικα για την ολοκλήρωση εργασιών.

Εισαγωγή στη Μεταγνώση

Η μεταγνώση αναφέρεται στις ανώτερες γνωστικές διαδικασίες που περιλαμβάνουν το να σκέφτεται κανείς για τη δική του σκέψη. Για τους πράκτορες ΤΝ, αυτό σημαίνει την ικανότητα να αξιολογούν και να προσαρμόζουν τις ενέργειές τους βάσει αυτογνωσίας και προηγούμενων εμπειριών. Η μεταγνώση, ή “σκέψη για τη σκέψη,” είναι μια σημαντική έννοια στην ανάπτυξη συστημάτων πρακτόρων τεχνητής νοημοσύνης. Περιλαμβάνει τα συστήματα ΤΝ που είναι ενήμερα για τις εσωτερικές διαδικασίες τους και μπορούν να παρακολουθούν, να ρυθμίζουν και να προσαρμόζουν τη συμπεριφορά τους ανάλογα. Όπως κάνουμε όταν διαβάζουμε τον χώρο ή εξετάζουμε ένα πρόβλημα. Αυτή η αυτογνωσία μπορεί να βοηθήσει τα συστήματα ΤΝ να λαμβάνουν καλύτερες αποφάσεις, να εντοπίζουν λάθη και να βελτιώνουν την απόδοσή τους με την πάροδο του χρόνου - επιστρέφοντας ξανά στη δοκιμασία Turing και τη συζήτηση για το αν η ΤΝ θα κυριαρχήσει.

Στο πλαίσιο των συστημάτων πρακτόρων ΤΝ, η μεταγνώση μπορεί να βοηθήσει στην αντιμετώπιση αρκετών προκλήσεων, όπως:

Τι είναι η Μεταγνώση;

Η μεταγνώση, ή “σκέψη για τη σκέψη,” είναι μια γνωστική διαδικασία ανώτερου επιπέδου που περιλαμβάνει αυτογνωσία και αυτορρύθμιση των γνωστικών διαδικασιών. Στο πεδίο της ΤΝ, η μεταγνώση δίνει τη δυνατότητα στους πράκτορες να αξιολογούν και να προσαρμόζουν τις στρατηγικές και τις ενέργειές τους, οδηγώντας σε βελτιωμένες ικανότητες επίλυσης προβλημάτων και λήψης αποφάσεων. Με την κατανόηση της μεταγνώσης, μπορείτε να σχεδιάσετε πράκτορες ΤΝ που είναι όχι μόνο πιο έξυπνοι αλλά και πιο προσαρμοστικοί και αποδοτικοί. Στην αληθινή μεταγνώση, θα βλέπατε την ΤΝ να συλλογίζεται ρητά για τη δική της λογική.

Παράδειγμα: «Προτεραιοποίησα τα φθηνότερα αεροπορικά γιατί… ίσως χάνω απευθείας πτήσεις, οπότε ας κάνω ξανά έλεγχο.» Παρακολουθεί πώς ή γιατί επέλεξε μια συγκεκριμένη διαδρομή.

Σημασία της Μεταγνώσης στους Πράκτορες ΤΝ

Η μεταγνώση παίζει κρίσιμο ρόλο στο σχεδιασμό πρακτόρων ΤΝ για αρκετούς λόγους:

Σημασία της Μεταγνώσης

Συνιστώσες ενός Πράκτορα ΤΝ

Πριν εισέλθουμε σε μεταγνωστικές διεργασίες, είναι σημαντικό να κατανοήσουμε τις βασικές συνιστώσες ενός πράκτορα ΤΝ. Ένας πράκτορας ΤΝ συνήθως αποτελείται από:

Αυτές οι συνιστώσες συνεργάζονται για να δημιουργήσουν μια “μονάδα εμπειρογνωμοσύνης” που μπορεί να εκτελεί συγκεκριμένες εργασίες.

Παράδειγμα: Σκεφτείτε έναν ταξιδιωτικό πράκτορα, υπηρεσίες πρακτόρων που όχι μόνο προγραμματίζουν τις διακοπές σας αλλά και προσαρμόζουν τη διαδρομή βάσει πραγματικών δεδομένων και προηγούμενων εμπειριών πελατών.

Παράδειγμα: Μεταγνώση σε Υπηρεσία Ταξιδιωτικού Πράκτορα

Φανταστείτε ότι σχεδιάζετε μια υπηρεσία ταξιδιωτικού πράκτορα με τεχνητή νοημοσύνη. Αυτός ο πράκτορας, “Ταξιδιωτικός Πράκτορας,” βοηθά τους χρήστες στον προγραμματισμό των διακοπών τους. Για να ενσωματώσετε τη μεταγνώση, ο Ταξιδιωτικός Πράκτορας πρέπει να αξιολογεί και να προσαρμόζει τις ενέργειές του βάσει αυτογνωσίας και προηγούμενων εμπειριών. Δείτε πώς η μεταγνώση μπορεί να παίξει ρόλο:

Τρέχουσα Εργασία

Η τρέχουσα εργασία είναι να βοηθήσει έναν χρήστη να προγραμματίσει ένα ταξίδι στο Παρίσι.

Βήματα για την Ολοκλήρωση της Εργασίας

  1. Συλλογή Προτιμήσεων Χρήστη: Ρωτήστε τον χρήστη για τις ημερομηνίες ταξιδιού, τον προϋπολογισμό, τα ενδιαφέροντά του (π.χ. μουσεία, κουζίνα, ψώνια) και τυχόν συγκεκριμένες απαιτήσεις.
  2. Ανάκτηση Πληροφοριών: Αναζητήστε επιλογές πτήσεων, καταλυμάτων, αξιοθέατων και εστιατορίων που ταιριάζουν στις προτιμήσεις του χρήστη.
  3. Δημιουργία Προτάσεων: Παρέχετε ένα εξατομικευμένο πρόγραμμα με λεπτομέρειες πτήσεων, ξενοδοχεία και προτεινόμενες δραστηριότητες.
  4. Προσαρμογή βάσει Ανατροφοδότησης: Ζητήστε από τον χρήστη σχολιασμό για τις προτάσεις και κάντε τις απαραίτητες προσαρμογές.

Απαιτούμενοι Πόροι

Εμπειρία και Αυτοαντανάκλαση

Ο Ταξιδιωτικός Πράκτορας χρησιμοποιεί τη μεταγνώση για να αξιολογήσει τις επιδόσεις του και να μάθει από προηγούμενες εμπειρίες. Για παράδειγμα:

  1. Ανάλυση Ανατροφοδότησης Χρήστη: Ο Ταξιδιωτικός Πράκτορας εξετάζει τα σχόλια των χρηστών για να καθορίσει ποιες προτάσεις ήταν επιτυχημένες και ποιες όχι. Προσαρμόζει τις μελλοντικές του προτάσεις ανάλογα.
  2. Προσαρμοστικότητα: Εάν ένας χρήστης έχει αναφέρει προηγουμένως ότι δεν του αρέσουν οι πολυσύχναστοι χώροι, ο Ταξιδιωτικός Πράκτορας θα αποφεύγει να προτείνει δημοφιλή τουριστικά σημεία κατά τις ώρες αιχμής στο μέλλον.
  3. Διόρθωση Λαθών: Αν ο Ταξιδιωτικός Πράκτορας έκανε λάθος σε μια προηγούμενη κράτηση, όπως να προτείνει ξενοδοχείο που ήταν πλήρως κλεισμένο, μαθαίνει να ελέγχει αυστηρότερα τη διαθεσιμότητα πριν κάνει προτάσεις.

Πρακτικό Παράδειγμα Κώδικα

Εδώ είναι ένα απλοποιημένο παράδειγμα κώδικα που ενσωματώνει τη μεταγνώση στον Ταξιδιωτικό Πράκτορα:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        # Αναζήτηση πτήσεων, ξενοδοχείων και αξιοθεάτων βάσει προτιμήσεων
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        # Ανάλυση σχολίων και προσαρμογή μελλοντικών προτάσεων
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)

# Παράδειγμα χρήσης
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
travel_agent.adjust_based_on_feedback(feedback)

Γιατί η Μεταγνώση Έχει Σημασία

Ενσωματώνοντας τη μεταγνώση, ο Ταξιδιωτικός Πράκτορας μπορεί να παρέχει πιο προσωποποιημένες και ακριβείς ταξιδιωτικές προτάσεις, βελτιώνοντας τη συνολική εμπειρία χρήστη.


2. Προγραμματισμός σε Πράκτορες

Ο προγραμματισμός είναι μια κρίσιμη συνιστώσα της συμπεριφοράς ενός πράκτορα ΤΝ. Περιλαμβάνει το σχεδιασμό των βημάτων που απαιτούνται για την επίτευξη ενός στόχου, λαμβάνοντας υπόψη την τρέχουσα κατάσταση, τους πόρους και πιθανά εμπόδια.

Στοιχεία του Προγραμματισμού

Παράδειγμα: Ακολουθούν τα βήματα που πρέπει να ακολουθήσει ο Ταξιδιωτικός Πράκτορας για να βοηθήσει αποτελεσματικά έναν χρήστη στον προγραμματισμό του ταξιδιού του:

Βήματα για τον Ταξιδιωτικό Πράκτορα

  1. Συλλογή Προτιμήσεων Χρήστη
    • Ρωτήστε τον χρήστη για λεπτομέρειες σχετικά με τις ημερομηνίες ταξιδιού, τον προϋπολογισμό, τα ενδιαφέροντά του και τυχόν συγκεκριμένες απαιτήσεις.
    • Παραδείγματα: “Πότε σκοπεύετε να ταξιδέψετε;” “Ποιο είναι το εύρος του προϋπολογισμού σας;” “Τι δραστηριότητες απολαμβάνετε στις διακοπές;”
  2. Ανάκτηση Πληροφοριών
    • Αναζητήστε σχετικές επιλογές ταξιδιού βάσει των προτιμήσεων του χρήστη.
    • Πτήσεις: Εντοπίστε διαθέσιμες πτήσεις εντός προϋπολογισμού και προτιμώμενων ημερομηνιών.
    • Καταλύματα: Βρείτε ξενοδοχεία ή ενοικιαζόμενα που ταιριάζουν στις προτιμήσεις τοποθεσίας, τιμής και παροχών.
    • Αξιοθέατα και Εστιατόρια: Εντοπίστε δημοφιλή αξιοθέατα, δραστηριότητες και επιλογές φαγητού που ταιριάζουν στα ενδιαφέροντα του χρήστη.
  3. Δημιουργία Προτάσεων
    • Συντάξτε τις ανακτηθείσες πληροφορίες σε ένα εξατομικευμένο πρόγραμμα.
    • Παρέχετε λεπτομέρειες όπως επιλογές πτήσεων, κρατήσεις ξενοδοχείων και προτεινόμενες δραστηριότητες, προσαρμόζοντας τις προτάσεις στις προτιμήσεις του χρήστη.
  4. Παρουσίαση του Προγράμματος στον Χρήστη
    • Μοιραστείτε το προτεινόμενο πρόγραμμα με τον χρήστη για να το αξιολογήσει.
    • Παράδειγμα: “Ακολουθεί ένα προτεινόμενο πρόγραμμα για το ταξίδι σας στο Παρίσι. Περιλαμβάνει λεπτομέρειες πτήσεων, κρατήσεις ξενοδοχείων και λίστα με προτεινόμενες δραστηριότητες και εστιατόρια. Πείτε μου τη γνώμη σας!”
  5. Συλλογή Ανατροφοδότησης
    • Ζητήστε από τον χρήστη να σχολιάσει το προτεινόμενο πρόγραμμα.
    • Παραδείγματα: “Σας αρέσουν οι επιλογές πτήσεων;” “Είναι το ξενοδοχείο κατάλληλο για τις ανάγκες σας;” “Υπάρχουν δραστηριότητες που θέλετε να προσθέσετε ή να αφαιρέσετε;”
  6. Προσαρμογή βάσει Ανατροφοδότησης
    • Τροποποιήστε το πρόγραμμα με βάση τα σχόλια του χρήστη.
    • Κάντε τις απαραίτητες αλλαγές στις προτάσεις πτήσεων, καταλύματος και δραστηριοτήτων ώστε να ανταποκρίνονται καλύτερα στις προτιμήσεις του χρήστη.
  7. Τελική Επιβεβαίωση
    • Παρουσιάστε το ενημερωμένο πρόγραμμα για τελική επιβεβαίωση από τον χρήστη.
    • Παράδειγμα: “Έκανα τις αλλαγές βάσει των σχολίων σας. Ορίστε το ενημερωμένο πρόγραμμα. Είναι όλα εντάξει για εσάς;”
  8. Κράτηση και Επιβεβαίωση
    • Μόλις ο χρήστης εγκρίνει το πρόγραμμα, προχωρήστε στην κράτηση πτήσεων, καταλυμάτων και τυχόν προγραμματισμένων δραστηριοτήτων.
    • Στείλτε τα στοιχεία επιβεβαίωσης στον χρήστη.
  9. Παροχή Συνεχούς Υποστήριξης
    • Παραμείνετε διαθέσιμοι για να βοηθήσετε τον χρήστη με τυχόν αλλαγές ή επιπλέον αιτήματα πριν και κατά τη διάρκεια του ταξιδιού.
    • Παράδειγμα: “Αν χρειαστείτε περαιτέρω βοήθεια κατά τη διάρκεια του ταξιδιού σας, μη διστάσετε να επικοινωνήσετε μαζί μου οποιαδήποτε στιγμή!”

Παράδειγμα Αλληλεπίδρασης

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)

# Παράδειγμα χρήσης μέσα σε ένα αίτημα booing
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
travel_agent.adjust_based_on_feedback(feedback)

3. Σύστημα Διόρθωσης RAG

Αρχικά, ας ξεκινήσουμε κατανοώντας τη διαφορά μεταξύ Εργαλείου RAG και Προληπτικού Φορτώματος Πλαισίου

RAG έναντι Φορτώματος Πλαισίου

Ανάκτηση-Ενισχυμένη Γεννήτρια (RAG)

Το RAG συνδυάζει ένα σύστημα ανάκτησης με ένα γεννητικό μοντέλο. Όταν γίνεται ένα ερώτημα, το σύστημα ανάκτησης αντλεί σχετικά έγγραφα ή δεδομένα από εξωτερική πηγή και αυτή η ανακτημένη πληροφορία χρησιμοποιείται για την ενίσχυση της εισόδου στο γεννητικό μοντέλο. Αυτό βοηθά το μοντέλο να παράγει πιο ακριβείς και σχετικές απαντήσεις.

Σε ένα σύστημα RAG, ο πράκτορας ανακτά σχετικές πληροφορίες από μια βάση γνώσης και τις χρησιμοποιεί για να δημιουργήσει κατάλληλες απαντήσεις ή ενέργειες.

Προσέγγιση Διορθωτικού RAG

Η προσέγγιση Διορθωτικού RAG εστιάζει στη χρήση τεχνικών RAG για τη διόρθωση λαθών και τη βελτίωση της ακρίβειας των πρακτόρων ΤΝ. Αυτό περιλαμβάνει:

  1. Τεχνική Προτροπής: Χρησιμοποίηση συγκεκριμένων προτροπών για να κατευθύνει τον πράκτορα στην ανάκτηση σχετικών πληροφοριών.
  2. Εργαλείο: Εφαρμογή αλγορίθμων και μηχανισμών που επιτρέπουν στον πράκτορα να αξιολογεί τη σχετικότητα των ανακτηθέντων πληροφοριών και να παράγει ακριβείς απαντήσεις.
  3. Αξιολόγηση: Συνεχής αξιολόγηση της απόδοσης του πράκτορα και προσαρμογές για βελτίωση της ακρίβειας και αποδοτικότητας.

Παράδειγμα: Διορθωτικό RAG σε Πράκτορα Αναζήτησης

Σκεφτείτε έναν πράκτορα αναζήτησης που αντλεί πληροφορίες από το διαδίκτυο για να απαντήσει σε ερωτήματα χρηστών. Η προσέγγιση Διορθωτικού RAG μπορεί να περιλαμβάνει:

  1. Τεχνική Προτροπής: Διατύπωση ερωτημάτων αναζήτησης βάσει της εισόδου του χρήστη.
  2. Εργαλείο: Χρήση επεξεργασίας φυσικής γλώσσας και αλγορίθμων μηχανικής μάθησης για ταξινόμηση και φιλτράρισμα των αποτελεσμάτων.
  3. Αξιολόγηση: Ανάλυση της ανατροφοδότησης των χρηστών για εντοπισμό και διόρθωση ανακρίβειών.

Διορθωτικό RAG στον Ταξιδιωτικό Πράκτορα

Η Διορθωτική RAG (Retrieval-Augmented Generation) ενισχύει την ικανότητα της ΤΝ να ανακτά και να παράγει πληροφορίες διορθώνοντας τυχόν ανακρίβειες. Ας δούμε πώς ο Ταξιδιωτικός Πράκτορας μπορεί να χρησιμοποιήσει την προσέγγιση Διορθωτικού RAG για να παρέχει πιο ακριβείς και σχετικές ταξιδιωτικές προτάσεις.

Αυτό περιλαμβάνει:

Βήματα για την Εφαρμογή Διορθωτικού RAG στον Ταξιδιωτικό Πράκτορα

  1. Αρχική Αλληλεπίδραση με Χρήστη
    • Ο Ταξιδιωτικός Πράκτορας συλλέγει αρχικές προτιμήσεις από τον χρήστη, όπως προορισμό, ημερομηνίες ταξιδιού, προϋπολογισμό και ενδιαφέροντα.
    • Παράδειγμα:

      preferences = {
          "destination": "Paris",
          "dates": "2025-04-01 to 2025-04-10",
          "budget": "moderate",
          "interests": ["museums", "cuisine"]
      }
      
  2. Ανάκτηση Πληροφοριών
    • Ο Ταξιδιωτικός Πράκτορας ανακτά πληροφορίες για πτήσεις, καταλύματα, αξιοθέατα και εστιατόρια βάσει των προτιμήσεων του χρήστη.
    • Παράδειγμα:

      flights = search_flights(preferences)
      hotels = search_hotels(preferences)
      attractions = search_attractions(preferences)
      
  3. Δημιουργία Αρχικών Προτάσεων
    • Ο Ταξιδιωτικός Πράκτορας χρησιμοποιεί τις ανακτηθείσες πληροφορίες για να δημιουργήσει ένα εξατομικευμένο πρόγραμμα.
    • Παράδειγμα:

      itinerary = create_itinerary(flights, hotels, attractions)
      print("Suggested Itinerary:", itinerary)
      
  4. Συλλογή Ανατροφοδότησης Χρήστη
    • Ο Ταξιδιωτικός Πράκτορας ζητά από τον χρήστη σχόλια για τις αρχικές προτάσεις.
    • Παράδειγμα:

      feedback = {
          "liked": ["Louvre Museum"],
          "disliked": ["Eiffel Tower (too crowded)"]
      }
      
  5. Διαδικασία Διορθωτικού RAG
    • Τεχνική Προτροπής: Ο Ταξιδιωτικός Πράκτορας διαμορφώνει νέα ερωτήματα αναζήτησης βασισμένα στην ανατροφοδότηση του χρήστη.
      • Παράδειγμα:

        if "disliked" in feedback:
            preferences["avoid"] = feedback["disliked"]
        
    • Εργαλείο: Ο Ταξιδιωτικός Πράκτορας χρησιμοποιεί αλγορίθμους για την ταξινόμηση και φιλτράρισμα των νέων αποτελεσμάτων, δίνοντας έμφαση στη σχετικότητα με βάση τα σχόλια.
      • Παράδειγμα:

        new_attractions = search_attractions(preferences)
        new_itinerary = create_itinerary(flights, hotels, new_attractions)
        print("Updated Itinerary:", new_itinerary)
        
    • Αξιολόγηση: Ο Ταξιδιωτικός Πράκτορας αξιολογεί συνεχώς τη σχετικότητα και ακρίβεια των προτάσεών του αναλύοντας την ανατροφοδότηση και πραγματοποιώντας προσαρμογές.
      • Παράδειγμα:

        def adjust_preferences(preferences, feedback):
            if "liked" in feedback:
                preferences["favorites"] = feedback["liked"]
            if "disliked" in feedback:
                preferences["avoid"] = feedback["disliked"]
            return preferences
        
        preferences = adjust_preferences(preferences, feedback)
        

Πρακτικό Παράδειγμα

Εδώ είναι ένα απλοποιημένο παράδειγμα Python που ενσωματώνει την προσέγγιση Διορθωτικού RAG στον Ταξιδιωτικό Πράκτορα:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)
        new_itinerary = self.generate_recommendations()
        return new_itinerary

# Παράδειγμα χρήσης
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
new_itinerary = travel_agent.adjust_based_on_feedback(feedback)
print("Updated Itinerary:", new_itinerary)

Προληπτικό Φόρτωμα Πλαισίου

Η Προληπτική Φόρτωση Πλαισίου περιλαμβάνει τη φόρτωση σχετικού πλαισίου ή πληροφοριών υπόβαθρου στο μοντέλο πριν από την επεξεργασία ενός αιτήματος. Αυτό σημαίνει ότι το μοντέλο έχει πρόσβαση σε αυτές τις πληροφορίες από την αρχή, κάτι που μπορεί να το βοηθήσει να παράγει πιο ενημερωμένες απαντήσεις χωρίς να χρειάζεται να ανακτήσει επιπλέον δεδομένα κατά τη διάρκεια της διαδικασίας.

Εδώ είναι ένα απλοποιημένο παράδειγμα για το πώς μπορεί να μοιάζει μια προληπτική φόρτωση πλαισίου για μια εφαρμογή ταξιδιωτικού πράκτορα σε Python:

class TravelAgent:
    def __init__(self):
        # Προφορτώστε δημοφιλείς προορισμούς και τις πληροφορίες τους
        self.context = {
            "Paris": {"country": "France", "currency": "Euro", "language": "French", "attractions": ["Eiffel Tower", "Louvre Museum"]},
            "Tokyo": {"country": "Japan", "currency": "Yen", "language": "Japanese", "attractions": ["Tokyo Tower", "Shibuya Crossing"]},
            "New York": {"country": "USA", "currency": "Dollar", "language": "English", "attractions": ["Statue of Liberty", "Times Square"]},
            "Sydney": {"country": "Australia", "currency": "Dollar", "language": "English", "attractions": ["Sydney Opera House", "Bondi Beach"]}
        }

    def get_destination_info(self, destination):
        # Ανάκτηση πληροφοριών προορισμού από το προφορτωμένο πλαίσιο
        info = self.context.get(destination)
        if info:
            return f"{destination}:\nCountry: {info['country']}\nCurrency: {info['currency']}\nLanguage: {info['language']}\nAttractions: {', '.join(info['attractions'])}"
        else:
            return f"Sorry, we don't have information on {destination}."

# Παράδειγμα χρήσης
travel_agent = TravelAgent()
print(travel_agent.get_destination_info("Paris"))
print(travel_agent.get_destination_info("Tokyo"))

Επεξήγηση

  1. Αρχικοποίηση (__init__ μέθοδος): Η κλάση TravelAgent προφορτώνει ένα λεξικό που περιέχει πληροφορίες για δημοφιλείς προορισμούς όπως το Παρίσι, το Τόκιο, η Νέα Υόρκη και το Σίδνεϊ. Αυτό το λεξικό περιλαμβάνει λεπτομέρειες όπως η χώρα, το νόμισμα, η γλώσσα και τα κύρια αξιοθέατα για κάθε προορισμό.

  2. Ανάκτηση Πληροφοριών (get_destination_info μέθοδος): Όταν ένας χρήστης κάνει ερώτηση για έναν συγκεκριμένο προορισμό, η μέθοδος get_destination_info αναζητεί τις σχετικές πληροφορίες από το προφορτωμένο λεξικό πλαισίου.

Με την προφόρτωση του πλαισίου, η εφαρμογή ταξιδιωτικού πράκτορα μπορεί να απαντά γρήγορα στα ερωτήματα των χρηστών χωρίς να χρειάζεται να ανακτήσει αυτές τις πληροφορίες από εξωτερική πηγή σε πραγματικό χρόνο. Αυτό κάνει την εφαρμογή πιο αποδοτική και ανταποκρινόμενη.

Εκκίνηση του Σχεδίου με έναν Στόχο πριν την Επανάληψη

Η εκκίνηση ενός σχεδίου με έναν στόχο περιλαμβάνει την αρχική καθορισμένη επιδίωξη ή τον επιθυμητό αποτέλεσμα στο μυαλό. Με τον ορισμό αυτού του στόχου εκ των προτέρων, το μοντέλο μπορεί να τον χρησιμοποιήσει ως κατευθυντήρια αρχή καθ’ όλη τη διάρκεια της διαδικασίας επανάληψης. Αυτό βοηθά να εξασφαλιστεί ότι κάθε επανάληψη πλησιάζει στην επίτευξη του επιθυμητού αποτελέσματος, καθιστώντας τη διαδικασία πιο αποτελεσματική και εστιασμένη.

Εδώ είναι ένα παράδειγμα για το πώς μπορείτε να εκκινήσετε ένα ταξιδιωτικό σχέδιο με στόχο πριν την επανάληψη για έναν ταξιδιωτικό πράκτορα σε Python:

Σενάριο

Ένας ταξιδιωτικός πράκτορας θέλει να προγραμματίσει μια εξατομικευμένη διακοπή για έναν πελάτη. Ο στόχος είναι να δημιουργηθεί ένα πρόγραμμα ταξιδιού που μεγιστοποιεί την ικανοποίηση του πελάτη βάσει των προτιμήσεων και του προϋπολογισμού του.

Βήματα

  1. Ορισμός των προτιμήσεων και του προϋπολογισμού του πελάτη.
  2. Εκκίνηση του αρχικού σχεδίου βάσει αυτών των προτιμήσεων.
  3. Επανάληψη για βελτίωση του σχεδίου, βελτιστοποιώντας την ικανοποίηση του πελάτη.

Κώδικας Python

class TravelAgent:
    def __init__(self, destinations):
        self.destinations = destinations

    def bootstrap_plan(self, preferences, budget):
        plan = []
        total_cost = 0

        for destination in self.destinations:
            if total_cost + destination['cost'] <= budget and self.match_preferences(destination, preferences):
                plan.append(destination)
                total_cost += destination['cost']

        return plan

    def match_preferences(self, destination, preferences):
        for key, value in preferences.items():
            if destination.get(key) != value:
                return False
        return True

    def iterate_plan(self, plan, preferences, budget):
        for i in range(len(plan)):
            for destination in self.destinations:
                if destination not in plan and self.match_preferences(destination, preferences) and self.calculate_cost(plan, destination) <= budget:
                    plan[i] = destination
                    break
        return plan

    def calculate_cost(self, plan, new_destination):
        return sum(destination['cost'] for destination in plan) + new_destination['cost']

# Παράδειγμα χρήσης
destinations = [
    {"name": "Paris", "cost": 1000, "activity": "sightseeing"},
    {"name": "Tokyo", "cost": 1200, "activity": "shopping"},
    {"name": "New York", "cost": 900, "activity": "sightseeing"},
    {"name": "Sydney", "cost": 1100, "activity": "beach"},
]

preferences = {"activity": "sightseeing"}
budget = 2000

travel_agent = TravelAgent(destinations)
initial_plan = travel_agent.bootstrap_plan(preferences, budget)
print("Initial Plan:", initial_plan)

refined_plan = travel_agent.iterate_plan(initial_plan, preferences, budget)
print("Refined Plan:", refined_plan)

Επεξήγηση Κώδικα

  1. Αρχικοποίηση (__init__ μέθοδος): Η κλάση TravelAgent αρχικοποιείται με μια λίστα πιθανών προορισμών, καθένας με χαρακτηριστικά όπως όνομα, κόστος και τύπος δραστηριότητας.

  2. Εκκίνηση Σχεδίου (bootstrap_plan μέθοδος): Αυτή η μέθοδος δημιουργεί ένα αρχικό σχέδιο ταξιδιού βάσει των προτιμήσεων και του προϋπολογισμού του πελάτη. Διατρέχει τη λίστα προορισμών και προσθέτει αυτούς στο σχέδιο εάν ταιριάζουν με τις προτιμήσεις του πελάτη και είναι εντός προϋπολογισμού.

  3. Ταιριάσματα Προτιμήσεων (match_preferences μέθοδος): Αυτή η μέθοδος ελέγχει εάν ένας προορισμός ταιριάζει με τις προτιμήσεις του πελάτη.

  4. Επανάληψη Σχεδίου (iterate_plan μέθοδος): Αυτή η μέθοδος βελτιστοποιεί το αρχικό σχέδιο προσπαθώντας να αντικαταστήσει κάθε προορισμό στο σχέδιο με έναν καλύτερο ταίριασμα, λαμβάνοντας υπόψη τις προτιμήσεις και τους περιορισμούς προϋπολογισμού του πελάτη.

  5. Υπολογισμός Κόστους (calculate_cost μέθοδος): Αυτή η μέθοδος υπολογίζει το συνολικό κόστος του τρέχοντος σχεδίου, συμπεριλαμβανομένου και ενός πιθανώς νέου προορισμού.

Παράδειγμα Χρήσης

Με την εκκίνηση του σχεδίου με έναν σαφή στόχο (π.χ., μεγιστοποίηση της ικανοποίησης του πελάτη) και την επανάληψη για την βελτίωση του σχεδίου, ο ταξιδιωτικός πράκτορας μπορεί να δημιουργήσει ένα εξατομικευμένο και βελτιστοποιημένο πρόγραμμα ταξιδιού για τον πελάτη. Αυτή η προσέγγιση εγγυάται ότι το ταξιδιωτικό σχέδιο ευθυγραμμίζεται με τις προτιμήσεις και τον προϋπολογισμό του πελάτη από την αρχή και βελτιώνεται με κάθε επανάληψη.

Εκμετάλλευση των LLM για Επαναταξινόμηση και Βαθμολογία

Τα Μεγάλα Γλωσσικά Μοντέλα (LLMs) μπορούν να χρησιμοποιηθούν για επαναταξινόμηση και βαθμολόγηση αξιολογώντας τη σχετικότητα και την ποιότητα των ανακτηθέντων εγγράφων ή των παραγόμενων απαντήσεων. Δείτε πώς λειτουργεί:

Ανάκτηση: Το αρχικό βήμα ανάκτησης φέρνει ένα σύνολο υποψήφιων εγγράφων ή απαντήσεων με βάση το ερώτημα.

Επαναταξινόμηση: Το LLM αξιολογεί αυτούς τους υποψήφιους και τους επαναταξινομεί βάσει της σχετικότητας και ποιότητας. Αυτό το βήμα διασφαλίζει ότι η πιο σχετική και υψηλής ποιότητας πληροφορία παρουσιάζεται πρώτη.

Βαθμολόγηση: Το LLM αποδίδει βαθμολογίες σε κάθε υποψήφιο, αντανακλώντας τη σχετικότητα και την ποιότητα τους. Αυτό βοηθά στην επιλογή της καλύτερης απάντησης ή εγγράφου για τον χρήστη.

Με την αξιοποίηση των LLM για επαναταξινόμηση και βαθμολόγηση, το σύστημα μπορεί να παρέχει πιο ακριβείς και σχετικές πληροφορίες στο πλαίσιο, βελτιώνοντας τη συνολική εμπειρία του χρήστη.

Εδώ είναι ένα παράδειγμα για το πώς ένας ταξιδιωτικός πράκτορας μπορεί να χρησιμοποιήσει ένα Μεγάλο Γλωσσικό Μοντέλο (LLM) για επαναταξινόμηση και βαθμολόγηση ταξιδιωτικών προορισμών βάσει των προτιμήσεων χρήστη σε Python:

Σενάριο - Ταξίδι βάσει Προτιμήσεων

Ένας ταξιδιωτικός πράκτορας θέλει να προτείνει τους καλύτερους ταξιδιωτικούς προορισμούς σε έναν πελάτη βάσει των προτιμήσεών του. Το LLM θα βοηθήσει στην επαναταξινόμηση και βαθμολόγηση των προορισμών ώστε να παρουσιάζονται οι πιο σχετικές επιλογές.

Βήματα:

  1. Συλλογή προτιμήσεων χρήστη.
  2. Ανάκτηση λίστας πιθανών ταξιδιωτικών προορισμών.
  3. Χρήση του LLM για επαναταξινόμηση και βαθμολόγηση των προορισμών βάσει των προτιμήσεων του χρήστη.

Εδώ μπορείτε να ενημερώσετε το προηγούμενο παράδειγμα ώστε να χρησιμοποιεί τις Υπηρεσίες Azure OpenAI:

Απαιτήσεις

  1. Πρέπει να έχετε συνδρομή Azure.
  2. Δημιουργήστε έναν πόρο Azure OpenAI και αποκτήστε το API key σας.

Παράδειγμα Κώδικα Python

import requests
import json

class TravelAgent:
    def __init__(self, destinations):
        self.destinations = destinations

    def get_recommendations(self, preferences, api_key, endpoint):
        # Δημιουργήστε ένα προτροπή για το Azure OpenAI
        prompt = self.generate_prompt(preferences)
        
        # Ορίστε κεφαλίδες και περιεχόμενο για το αίτημα
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {api_key}'
        }
        payload = {
            "prompt": prompt,
            "max_tokens": 150,
            "temperature": 0.7
        }
        
        # Καλέστε το API του Azure OpenAI για να λάβετε τους αναμεταταγμένους και βαθμολογημένους προορισμούς
        response = requests.post(endpoint, headers=headers, json=payload)
        response_data = response.json()
        
        # Εξαγάγετε και επιστρέψτε τις προτάσεις
        recommendations = response_data['choices'][0]['text'].strip().split('\n')
        return recommendations

    def generate_prompt(self, preferences):
        prompt = "Here are the travel destinations ranked and scored based on the following user preferences:\n"
        for key, value in preferences.items():
            prompt += f"{key}: {value}\n"
        prompt += "\nDestinations:\n"
        for destination in self.destinations:
            prompt += f"- {destination['name']}: {destination['description']}\n"
        return prompt

# Παράδειγμα χρήσης
destinations = [
    {"name": "Paris", "description": "City of lights, known for its art, fashion, and culture."},
    {"name": "Tokyo", "description": "Vibrant city, famous for its modernity and traditional temples."},
    {"name": "New York", "description": "The city that never sleeps, with iconic landmarks and diverse culture."},
    {"name": "Sydney", "description": "Beautiful harbour city, known for its opera house and stunning beaches."},
]

preferences = {"activity": "sightseeing", "culture": "diverse"}
api_key = 'your_azure_openai_api_key'
endpoint = 'https://your-endpoint.com/openai/deployments/your-deployment-name/completions?api-version=2022-12-01'

travel_agent = TravelAgent(destinations)
recommendations = travel_agent.get_recommendations(preferences, api_key, endpoint)
print("Recommended Destinations:")
for rec in recommendations:
    print(rec)

Επεξήγηση Κώδικα - Preference Booker

  1. Αρχικοποίηση: Η κλάση TravelAgent αρχικοποιείται με μια λίστα πιθανών ταξιδιωτικών προορισμών, καθένας με χαρακτηριστικά όπως όνομα και περιγραφή.

  2. Λήψη Προτάσεων (get_recommendations μέθοδος): Αυτή η μέθοδος δημιουργεί ένα prompt για την υπηρεσία Azure OpenAI βάσει των προτιμήσεων του χρήστη και κάνει ένα HTTP POST αίτημα στο Azure OpenAI API για να λάβει επαναταξινομημένους και βαθμολογημένους προορισμούς.

  3. Δημιουργία Prompt (generate_prompt μέθοδος): Αυτή η μέθοδος κατασκευάζει ένα prompt για το Azure OpenAI, συμπεριλαμβανομένων των προτιμήσεων του χρήστη και της λίστας προορισμών. Το prompt καθοδηγεί το μοντέλο να επαναταξινομήσει και να βαθμολογήσει τους προορισμούς βάσει των παρεχόμενων προτιμήσεων.

  4. Κλήση API: Η βιβλιοθήκη requests χρησιμοποιείται για να κάνει ένα HTTP POST αίτημα στο endpoint του Azure OpenAI API. Η απάντηση περιέχει τους επαναταξινομημένους και βαθμολογημένους προορισμούς.

  5. Παράδειγμα Χρήσης: Ο ταξιδιωτικός πράκτορας συλλέγει τις προτιμήσεις χρήστη (π.χ., ενδιαφέρον για αξιοθέατα και ποικιλία πολιτισμών) και χρησιμοποιεί την υπηρεσία Azure OpenAI για να λάβει επαναταξινομημένες και βαθμολογημένες προτάσεις για ταξιδιωτικούς προορισμούς.

Βεβαιωθείτε ότι έχετε αντικαταστήσει το your_azure_openai_api_key με το πραγματικό κλειδί API Azure OpenAI και το https://your-endpoint.com/... με το πραγματικό URL του endpoint της ανάπτυξης Azure OpenAI.

Με την αξιοποίηση του LLM για επαναταξινόμηση και βαθμολόγηση, ο ταξιδιωτικός πράκτορας μπορεί να προσφέρει πιο εξατομικευμένες και σχετικές ταξιδιωτικές προτάσεις στους πελάτες, ενισχύοντας τη συνολική εμπειρία τους.

RAG: Τεχνική Prompting έναντι Εργαλείου

Το Retrieval-Augmented Generation (RAG) μπορεί να είναι τόσο μια τεχνική prompting όσο και ένα εργαλείο στην ανάπτυξη πρακτόρων AI. Η κατανόηση της διάκρισης μεταξύ των δύο μπορεί να σας βοηθήσει να αξιοποιήσετε το RAG πιο αποτελεσματικά στα έργα σας.

RAG ως Τεχνική Prompting

Τι είναι;

Πώς λειτουργεί:

  1. Διατύπωση Prompts: Δημιουργία καλά δομημένων prompts ή ερωτημάτων βάσει της εκάστοτε εργασίας ή της εισόδου του χρήστη.
  2. Ανάκτηση Πληροφοριών: Χρήση των prompts για αναζήτηση σχετικών δεδομένων από μια προϋπάρχουσα βάση γνώσεων ή σύνολο δεδομένων.
  3. Παραγωγή Απάντησης: Συνδυασμός των ανακτηθέντων πληροφοριών με γενετικά μοντέλα AI για παραγωγή ολοκληρωμένης και συνεκτικής απάντησης.

Παράδειγμα σε Ταξιδιωτικό Πράκτορα:

RAG ως Εργαλείο

Τι είναι;

Πώς λειτουργεί:

  1. Ενσωμάτωση: Ενσωματώστε το RAG στην αρχιτεκτονική του πράκτορα AI, επιτρέποντας την αυτόματη διαχείριση των εργασιών ανάκτησης και παραγωγής.
  2. Αυτοματοποίηση: Το εργαλείο διαχειρίζεται ολόκληρη τη διαδικασία, από τη λήψη της εισόδου χρήστη έως την παραγωγή της τελικής απάντησης, χωρίς να απαιτούνται ρητά prompts για κάθε βήμα.
  3. Αποδοτικότητα: Βελτιώνει την απόδοση του πράκτορα με τη συνοχή της διαδικασίας ανάκτησης και παραγωγής, επιτρέποντας ταχύτερες και πιο ακριβείς απαντήσεις.

Παράδειγμα σε Ταξιδιωτικό Πράκτορα:

Σύγκριση

Στοιχείο Τεχνική Prompting Εργαλείο
Χειροκίνητη έναντι Αυτόματης Χειροκίνητη διαμόρφωση prompts για κάθε ερώτημα. Αυτοματοποιημένη διαδικασία ανάκτησης και παραγωγής.
Έλεγχος Προσφέρει περισσότερο έλεγχο στη διαδικασία ανάκτησης. Απλοποιεί και αυτοματοποιεί τη διαδικασία ανάκτησης και παραγωγής.
Ευελιξία Επιτρέπει εξατομικευμένα prompts βάσει συγκεκριμένων αναγκών. Αποδοτικότερο για υλοποιήσεις μεγάλης κλίμακας.
Πολυπλοκότητα Απαιτεί δημιουργία και ρύθμιση των prompts. Πιο εύκολο στην ενσωμάτωση σε αρχιτεκτονική πράκτορα AI.

Πρακτικά Παραδείγματα

Παράδειγμα Τεχνικής Prompting:

def search_museums_in_paris():
    prompt = "Find top museums in Paris"
    search_results = search_web(prompt)
    return search_results

museums = search_museums_in_paris()
print("Top Museums in Paris:", museums)

Παράδειγμα Εργαλείου:

class Travel_Agent:
    def __init__(self):
        self.rag_tool = RAGTool()

    def get_museums_in_paris(self):
        user_input = "I want to visit museums in Paris."
        response = self.rag_tool.retrieve_and_generate(user_input)
        return response

travel_agent = Travel_Agent()
museums = travel_agent.get_museums_in_paris()
print("Top Museums in Paris:", museums)

Αξιολόγηση Σχετικότητας

Η αξιολόγηση της σχετικότητας είναι ένας κρίσιμος τομέας απόδοσης ενός πράκτορα AI. Διασφαλίζει ότι οι πληροφορίες που ανακτώνται και παράγονται από τον πράκτορα είναι κατάλληλες, ακριβείς και χρήσιμες για τον χρήστη. Ας εξερευνήσουμε πώς να αξιολογούμε τη σχετικότητα στους πράκτορες AI, συμπεριλαμβανομένων πρακτικών παραδειγμάτων και τεχνικών.

Κύριες Έννοιες στην Αξιολόγηση Σχετικότητας

  1. Επίγνωση Πλαισίου:
    • Ο πράκτορας πρέπει να κατανοεί το πλαίσιο του ερωτήματος του χρήστη για να ανακτά και να παράγει σχετικές πληροφορίες.
    • Παράδειγμα: Αν ένας χρήστης ζητά “τα καλύτερα εστιατόρια στο Παρίσι”, ο πράκτορας πρέπει να λάβει υπόψη τις προτιμήσεις του χρήστη, όπως τύπο κουζίνας και προϋπολογισμό.
  2. Ακρίβεια:
    • Οι πληροφορίες που παρέχει ο πράκτορας πρέπει να είναι ορθές και ενημερωμένες.
    • Παράδειγμα: Σύσταση για καταστήματα που είναι ανοιχτά αυτή τη στιγμή με καλές κριτικές αντί για παλιές ή κλειστές επιλογές.
  3. Δόλος Χρήστη:
    • Ο πράκτορας πρέπει να υποθέτει τον δόλο πίσω από το ερώτημα για να παρέχει τις πιο σχετικές πληροφορίες.
    • Παράδειγμα: Αν ένας χρήστης ζητά “ξενοδοχεία οικονομικής κατηγορίας”, ο πράκτορας πρέπει να δώσει προτεραιότητα σε προσιτές επιλογές.
  4. Βρόχος Ανάδρασης:
    • Η συνεχής συλλογή και ανάλυση ανάδρασης από τον χρήστη βοηθά τον πράκτορα να βελτιώσει τις διαδικασίες αξιολόγησης σχετικότητας.
    • Παράδειγμα: Ενσωμάτωση βαθμολογιών και σχόλιων χρηστών για προηγούμενες προτάσεις ώστε να βελτιωθούν οι μελλοντικές απαντήσεις.

Πρακτικές Τεχνικές Αξιολόγησης Σχετικότητας

  1. Βαθμολόγηση Σχετικότητας:
    • Ανάθεση βαθμολογίας σε κάθε ανακτηθέν στοιχείο με βάση το πόσο καλά ταιριάζει με το ερώτημα και τις προτιμήσεις του χρήστη.
    • Παράδειγμα:

      def relevance_score(item, query):
          score = 0
          if item['category'] in query['interests']:
              score += 1
          if item['price'] <= query['budget']:
              score += 1
          if item['location'] == query['destination']:
              score += 1
          return score
      
  2. Φιλτράρισμα και Ταξινόμηση:
    • Φιλτράρισμα των άσχετων στοιχείων και ταξινόμηση των υπολοίπων με βάση τις βαθμολογίες σχετικότητας.
    • Παράδειγμα:

      def filter_and_rank(items, query):
          ranked_items = sorted(items, key=lambda item: relevance_score(item, query), reverse=True)
          return ranked_items[:10]  # Επιστρέψτε τα 10 κορυφαία σχετικά αντικείμενα
      
  3. Επεξεργασία Φυσικής Γλώσσας (NLP):
    • Χρήση τεχνικών NLP για να κατανοηθεί το ερώτημα του χρήστη και να ανακτηθούν σχετικές πληροφορίες.
    • Παράδειγμα:

      def process_query(query):
          # Χρησιμοποιήστε την Επεξεργασία Φυσικής Γλώσσας (NLP) για να εξαγάγετε βασικές πληροφορίες από το ερώτημα του χρήστη
          processed_query = nlp(query)
          return processed_query
      
  4. Ενσωμάτωση Ανάδρασης Χρηστών:
    • Συλλογή ανάδρασης από τον χρήστη σχετικά με τις παρεχόμενες προτάσεις και χρήση αυτής για τη βελτίωση της αξιολόγησης στο μέλλον.
    • Παράδειγμα:

      def adjust_based_on_feedback(feedback, items):
          for item in items:
              if item['name'] in feedback['liked']:
                  item['relevance'] += 1
              if item['name'] in feedback['disliked']:
                  item['relevance'] -= 1
          return items
      

Παράδειγμα: Αξιολόγηση Σχετικότητας στον Ταξιδιωτικό Πράκτορα

Εδώ είναι ένα πρακτικό παράδειγμα του πώς ο Travel Agent μπορεί να αξιολογήσει τη σχετικότητα των ταξιδιωτικών προτάσεων:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        ranked_hotels = self.filter_and_rank(hotels, self.user_preferences)
        itinerary = create_itinerary(flights, ranked_hotels, attractions)
        return itinerary

    def filter_and_rank(self, items, query):
        ranked_items = sorted(items, key=lambda item: self.relevance_score(item, query), reverse=True)
        return ranked_items[:10]  # Επιστρέψτε τα 10 πιο σχετικά στοιχεία

    def relevance_score(self, item, query):
        score = 0
        if item['category'] in query['interests']:
            score += 1
        if item['price'] <= query['budget']:
            score += 1
        if item['location'] == query['destination']:
            score += 1
        return score

    def adjust_based_on_feedback(self, feedback, items):
        for item in items:
            if item['name'] in feedback['liked']:
                item['relevance'] += 1
            if item['name'] in feedback['disliked']:
                item['relevance'] -= 1
        return items

# Παράδειγμα χρήσης
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_items = travel_agent.adjust_based_on_feedback(feedback, itinerary['hotels'])
print("Updated Itinerary with Feedback:", updated_items)

Αναζήτηση με Δόλο

Η αναζήτηση με δόλο περιλαμβάνει την κατανόηση και ερμηνεία του υποβόσκοντος σκοπού ή στόχου πίσω από το ερώτημα του χρήστη, ώστε να ανακτηθούν και να παραχθούν οι πιο σχετικές και χρήσιμες πληροφορίες. Αυτή η προσέγγιση ξεπερνά την απλή αντιστοίχιση όρων και εστιάζει στην κατανόηση των πραγματικών αναγκών και του πλαισίου του χρήστη.

Κύριες Έννοιες στην Αναζήτηση με Δόλο

  1. Κατανόηση Δόλου Χρήστη:
    • Ο δόλος του χρήστη μπορεί να κατηγοριοποιηθεί σε τρεις κύριους τύπους: πληροφοριακό, πλοήγησης και συναλλαγών.
      • Πληροφοριακός Δόλος: Ο χρήστης αναζητά πληροφορίες για ένα θέμα (π.χ., “Ποια είναι τα καλύτερα μουσεία στο Παρίσι;”).
      • Δόλος Πλοήγησης: Ο χρήστης θέλει να μεταβεί σε συγκεκριμένο ιστότοπο ή σελίδα (π.χ., “Επίσημη ιστοσελίδα Μουσείου Λούβρου”).
      • Συναλλακτικός Δόλος: Ο χρήστης επιδιώκει να πραγματοποιήσει μια συναλλαγή, όπως κράτηση πτήσης ή αγορά (π.χ., “Κάνε κράτηση πτήσης για Παρίσι”).
  2. Επίγνωση Πλαισίου:
    • Ο αναλυτικός προσδιορισμός των προηγούμενων αλληλεπιδράσεων, των προτιμήσεων του χρήστη και των συγκεκριμένων λεπτομερειών του τρέχοντος αιτήματος βοηθά στην ακριβή ταυτοποίηση του δόλου.
  3. Επεξεργασία Φυσικής Γλώσσας (NLP):
    • Χρησιμοποιούνται τεχνικές NLP για την κατανόηση και ερμηνεία των φυσικών γλωσσικών ερωτημάτων που παρέχουν οι χρήστες. Αυτό περιλαμβάνει εργασίες όπως αναγνώριση οντοτήτων, ανάλυση συναισθήματος και ανάλυση ερωτημάτων.
  4. Προσωποποίηση:
    • Η προσωποποίηση των αποτελεσμάτων αναζήτησης βασισμένη στο ιστορικό, τις προτιμήσεις και την ανάδραση του χρήστη βελτιώνει τη σχετικότητα των ανακτηθεισών πληροφοριών.

Πρακτικό Παράδειγμα: Αναζήτηση με Δόλο στον Ταξιδιωτικό Πράκτορα

Ας δούμε τον Travel Agent ως παράδειγμα για το πώς μπορεί να υλοποιηθεί η αναζήτηση με δόλο.

  1. Συλλογή Προτιμήσεων Χρήστη

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. Κατανόηση Δόλου Χρήστη

    def identify_intent(query):
        if "book" in query or "purchase" in query:
            return "transactional"
        elif "website" in query or "official" in query:
            return "navigational"
        else:
            return "informational"
    
  3. Επίγνωση Πλαισίου
    def analyze_context(query, user_history):
        # Συνδυάστε το τρέχον ερώτημα με το ιστορικό χρήστη για να κατανοήσετε το πλαίσιο
        context = {
            "current_query": query,
            "user_history": user_history
        }
        return context
    
  4. Αναζήτηση και Προσωποποίηση Αποτελεσμάτων

    def search_with_intent(query, preferences, user_history):
        intent = identify_intent(query)
        context = analyze_context(query, user_history)
        if intent == "informational":
            search_results = search_information(query, preferences)
        elif intent == "navigational":
            search_results = search_navigation(query)
        elif intent == "transactional":
            search_results = search_transaction(query, preferences)
        personalized_results = personalize_results(search_results, user_history)
        return personalized_results
    
    def search_information(query, preferences):
        # Παράδειγμα λογικής αναζήτησης για ενημερωτικό σκοπό
        results = search_web(f"best {preferences['interests']} in {preferences['destination']}")
        return results
    
    def search_navigation(query):
        # Παράδειγμα λογικής αναζήτησης για πλοηγητικό σκοπό
        results = search_web(query)
        return results
    
    def search_transaction(query, preferences):
        # Παράδειγμα λογικής αναζήτησης για συναλλακτικό σκοπό
        results = search_web(f"book {query} to {preferences['destination']}")
        return results
    
    def personalize_results(results, user_history):
        # Παράδειγμα λογικής εξατομίκευσης
        personalized = [result for result in results if result not in user_history]
        return personalized[:10]  # Επιστροφή των 10 κορυφαίων εξατομικευμένων αποτελεσμάτων
    
  5. Παράδειγμα Χρήσης

    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
    user_history = ["Louvre Museum website", "Book flight to Paris"]
    query = "best museums in Paris"
    results = search_with_intent(query, preferences, user_history)
    print("Search Results:", results)
    

4. Δημιουργία Κώδικα ως Εργαλείο

Οι πράκτορες δημιουργίας κώδικα χρησιμοποιούν μοντέλα τεχνητής νοημοσύνης για να γράφουν και να εκτελούν κώδικα, επιλύοντας σύνθετα προβλήματα και αυτοματοποιώντας εργασίες.

Πράκτορες Δημιουργίας Κώδικα

Οι πράκτορες δημιουργίας κώδικα χρησιμοποιούν γενετικά μοντέλα τεχνητής νοημοσύνης για να γράφουν και να εκτελούν κώδικα. Αυτοί οι πράκτορες μπορούν να επιλύουν σύνθετα προβλήματα, να αυτοματοποιούν εργασίες και να παρέχουν πολύτιμες γνώσεις μέσω της δημιουργίας και εκτέλεσης κώδικα σε διάφορες γλώσσες προγραμματισμού.

Πρακτικές Εφαρμογές

  1. Αυτοματοποιημένη Δημιουργία Κώδικα: Δημιουργία αποσπασμάτων κώδικα για συγκεκριμένες εργασίες, όπως ανάλυση δεδομένων, εξαγωγή δεδομένων από το διαδίκτυο ή μηχανική μάθηση.
  2. SQL ως RAG: Χρήση ερωτημάτων SQL για ανάκτηση και χειρισμό δεδομένων από βάσεις δεδομένων.
  3. Επίλυση Προβλημάτων: Δημιουργία και εκτέλεση κώδικα για την επίλυση συγκεκριμένων προβλημάτων, όπως βελτιστοποίηση αλγορίθμων ή ανάλυση δεδομένων.

Παράδειγμα: Πράκτορας Δημιουργίας Κώδικα για Ανάλυση Δεδομένων

Φανταστείτε ότι σχεδιάζετε έναν πράκτορα δημιουργίας κώδικα. Να πώς μπορεί να λειτουργεί:

  1. Εργασία: Ανάλυση ενός συνόλου δεδομένων για την αναγνώριση τάσεων και προτύπων.
  2. Βήματα:
    • Φόρτωση του συνόλου δεδομένων σε εργαλείο ανάλυσης δεδομένων.
    • Δημιουργία ερωτημάτων SQL για φιλτράρισμα και συγκέντρωση των δεδομένων.
    • Εκτέλεση των ερωτημάτων και ανάκτηση αποτελεσμάτων.
    • Χρήση των αποτελεσμάτων για τη δημιουργία οπτικοποιήσεων και συμπερασμάτων.
  3. Απαιτούμενοι Πόροι: Πρόσβαση στο σύνολο δεδομένων, εργαλεία ανάλυσης δεδομένων και δυνατότητες SQL.
  4. Εμπειρία: Χρήση προηγούμενων αποτελεσμάτων ανάλυσης για βελτίωση της ακρίβειας και της σχετικότητας μελλοντικών αναλύσεων.

Παράδειγμα: Πράκτορας Δημιουργίας Κώδικα για Τουριστικό Πράκτορα

Σε αυτό το παράδειγμα, θα σχεδιάσουμε έναν πράκτορα δημιουργίας κώδικα, Τουριστικό Πράκτορα, για να βοηθήσουμε τους χρήστες στον προγραμματισμό των ταξιδιών τους δημιουργώντας και εκτελώντας κώδικα. Αυτός ο πράκτορας μπορεί να χειρίζεται εργασίες όπως αναζήτηση επιλογών ταξιδιού, φιλτράρισμα αποτελεσμάτων και σύνταξη προγράμματος χρησιμοποιώντας γενετική τεχνητή νοημοσύνη.

Επισκόπηση του Πράκτορα Δημιουργίας Κώδικα

  1. Συλλογή Προτιμήσεων Χρήστη: Συλλέγει δεδομένα όπως προορισμός, ημερομηνίες ταξιδιού, προϋπολογισμός και ενδιαφέροντα.
  2. Δημιουργία Κώδικα για Ανάκτηση Δεδομένων: Δημιουργεί αποσπάσματα κώδικα για την ανάκτηση δεδομένων σχετικά με πτήσεις, ξενοδοχεία και αξιοθέατα.
  3. Εκτέλεση Δημιουργημένου Κώδικα: Εκτελεί τον παραγόμενο κώδικα για να αντλήσει πληροφορίες σε πραγματικό χρόνο.
  4. Δημιουργία Προγράμματος Ταξιδιού: Συντάσσει τα αντληθέντα δεδομένα σε προσωποποιημένο ταξιδιωτικό πλάνο.
  5. Προσαρμογή Βάσει Ανατροφοδότησης: Λαμβάνει ανατροφοδότηση από τον χρήστη και αναδημιουργεί τον κώδικα αν χρειάζεται για την αναπροσαρμογή των αποτελεσμάτων.

Υλοποίηση βήμα προς βήμα

  1. Συλλογή Προτιμήσεων Χρήστη

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. Δημιουργία Κώδικα για Ανάκτηση Δεδομένων

    def generate_code_to_fetch_data(preferences):
        # Παράδειγμα: Δημιουργία κώδικα για αναζήτηση πτήσεων βάσει προτιμήσεων χρήστη
        code = f"""
        def search_flights():
            import requests
            response = requests.get('https://api.example.com/flights', params={preferences})
            return response.json()
        """
        return code
    
    def generate_code_to_fetch_hotels(preferences):
        # Παράδειγμα: Δημιουργία κώδικα για αναζήτηση ξενοδοχείων
        code = f"""
        def search_hotels():
            import requests
            response = requests.get('https://api.example.com/hotels', params={preferences})
            return response.json()
        """
        return code
    
  3. Εκτέλεση Δημιουργημένου Κώδικα

    def execute_code(code):
        # Εκτέλεσε τον παραγόμενο κώδικα χρησιμοποιώντας exec
        exec(code)
        result = locals()
        return result
    
    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "dates": "2025-04-01 to 2025-04-10",
        "budget": "moderate",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
       
    flight_code = generate_code_to_fetch_data(preferences)
    hotel_code = generate_code_to_fetch_hotels(preferences)
       
    flights = execute_code(flight_code)
    hotels = execute_code(hotel_code)
    
    print("Flight Options:", flights)
    print("Hotel Options:", hotels)
    
  4. Δημιουργία Προγράμματος Ταξιδιού

    def generate_itinerary(flights, hotels, attractions):
        itinerary = {
            "flights": flights,
            "hotels": hotels,
            "attractions": attractions
        }
        return itinerary
    
    attractions = search_attractions(preferences)
    itinerary = generate_itinerary(flights, hotels, attractions)
    print("Suggested Itinerary:", itinerary)
    
  5. Προσαρμογή Βάσει Ανατροφοδότησης

    def adjust_based_on_feedback(feedback, preferences):
        # Προσαρμόστε τις προτιμήσεις βάσει των σχολίων του χρήστη
        if "liked" in feedback:
            preferences["favorites"] = feedback["liked"]
        if "disliked" in feedback:
            preferences["avoid"] = feedback["disliked"]
        return preferences
    
    feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
    updated_preferences = adjust_based_on_feedback(feedback, preferences)
       
    # Αναδημιουργήστε και εκτελέστε τον κώδικα με τις ενημερωμένες προτιμήσεις
    updated_flight_code = generate_code_to_fetch_data(updated_preferences)
    updated_hotel_code = generate_code_to_fetch_hotels(updated_preferences)
       
    updated_flights = execute_code(updated_flight_code)
    updated_hotels = execute_code(updated_hotel_code)
       
    updated_itinerary = generate_itinerary(updated_flights, updated_hotels, attractions)
    print("Updated Itinerary:", updated_itinerary)
    

Αξιοποίηση της περιβαλλοντικής επίγνωσης και της λογικής

Η κατανόηση του σχήματος του πίνακα μπορεί να βελτιώσει τη διαδικασία δημιουργίας ερωτημάτων αξιοποιώντας την περιβαλλοντική επίγνωση και τη λογική.

Παρακάτω ένα παράδειγμα για το πώς μπορεί να γίνει αυτό:

  1. Κατανόηση του Σχήματος: Το σύστημα θα κατανοήσει το σχήμα του πίνακα και θα χρησιμοποιήσει αυτές τις πληροφορίες για να θεμελιώσει τη δημιουργία των ερωτημάτων.
  2. Προσαρμογή βάσει Ανατροφοδότησης: Το σύστημα θα προσαρμόσει τις προτιμήσεις του χρήστη βάσει της ανατροφοδότησης και θα λογικεύσει ποια πεδία του σχήματος πρέπει να ενημερωθούν.
  3. Δημιουργία και Εκτέλεση Ερωτημάτων: Το σύστημα θα δημιουργεί και θα εκτελεί ερωτήματα για να αντλήσει ενημερωμένα δεδομένα πτήσεων και ξενοδοχείων βάσει των νέων προτιμήσεων.

Παρακάτω ακολουθεί ένα ενημερωμένο παράδειγμα σε Python που ενσωματώνει αυτές τις έννοιες:

def adjust_based_on_feedback(feedback, preferences, schema):
    # Προσαρμόστε τις προτιμήσεις με βάση τα σχόλια των χρηστών
    if "liked" in feedback:
        preferences["favorites"] = feedback["liked"]
    if "disliked" in feedback:
        preferences["avoid"] = feedback["disliked"]
    # Λογική βασισμένη σε σχήμα για την προσαρμογή άλλων σχετικών προτιμήσεων
    for field in schema:
        if field in preferences:
            preferences[field] = adjust_based_on_environment(feedback, field, schema)
    return preferences

def adjust_based_on_environment(feedback, field, schema):
    # Προσαρμοσμένη λογική για την προσαρμογή προτιμήσεων με βάση το σχήμα και τα σχόλια
    if field in feedback["liked"]:
        return schema[field]["positive_adjustment"]
    elif field in feedback["disliked"]:
        return schema[field]["negative_adjustment"]
    return schema[field]["default"]

def generate_code_to_fetch_data(preferences):
    # Δημιουργία κώδικα για λήψη δεδομένων πτήσεων με βάση τις ενημερωμένες προτιμήσεις
    return f"fetch_flights(preferences={preferences})"

def generate_code_to_fetch_hotels(preferences):
    # Δημιουργία κώδικα για λήψη δεδομένων ξενοδοχείων με βάση τις ενημερωμένες προτιμήσεις
    return f"fetch_hotels(preferences={preferences})"

def execute_code(code):
    # Προσομοίωση εκτέλεσης κώδικα και επιστροφή δοκιμαστικών δεδομένων
    return {"data": f"Executed: {code}"}

def generate_itinerary(flights, hotels, attractions):
    # Δημιουργία προγράμματος ταξιδιού με βάση πτήσεις, ξενοδοχεία και αξιοθέατα
    return {"flights": flights, "hotels": hotels, "attractions": attractions}

# Παράδειγμα σχήματος
schema = {
    "favorites": {"positive_adjustment": "increase", "negative_adjustment": "decrease", "default": "neutral"},
    "avoid": {"positive_adjustment": "decrease", "negative_adjustment": "increase", "default": "neutral"}
}

# Παράδειγμα χρήσης
preferences = {"favorites": "sightseeing", "avoid": "crowded places"}
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_preferences = adjust_based_on_feedback(feedback, preferences, schema)

# Αναδημιουργία και εκτέλεση κώδικα με ενημερωμένες προτιμήσεις
updated_flight_code = generate_code_to_fetch_data(updated_preferences)
updated_hotel_code = generate_code_to_fetch_hotels(updated_preferences)

updated_flights = execute_code(updated_flight_code)
updated_hotels = execute_code(updated_hotel_code)

updated_itinerary = generate_itinerary(updated_flights, updated_hotels, feedback["liked"])
print("Updated Itinerary:", updated_itinerary)

Επεξήγηση - Κράτηση βάσει Ανατροφοδότησης

  1. Επίγνωση Σχήματος: Το λεξικό schema ορίζει πώς θα πρέπει να προσαρμοστούν οι προτιμήσεις βάσει της ανατροφοδότησης. Περιλαμβάνει πεδία όπως favorites και avoid, με αντίστοιχες προσαρμογές.
  2. Προσαρμογή Προτιμήσεων (μέθοδος adjust_based_on_feedback): Αυτή η μέθοδος προσαρμόζει τις προτιμήσεις με βάση την ανατροφοδότηση του χρήστη και το σχήμα.
  3. Προσαρμογές βάσει Περιβάλλοντος (μέθοδος adjust_based_on_environment): Αυτή η μέθοδος εξατομικεύει τις προσαρμογές με βάση το σχήμα και την ανατροφοδότηση.
  4. Δημιουργία και Εκτέλεση Ερωτημάτων: Το σύστημα δημιουργεί κώδικα για να αντλήσει ενημερωμένα δεδομένα πτήσεων και ξενοδοχείων βάσει των προσαρμοσμένων προτιμήσεων και προσομοιώνει την εκτέλεση αυτών των ερωτημάτων.
  5. Δημιουργία Προγράμματος Ταξιδιού: Το σύστημα δημιουργεί ένα ενημερωμένο πρόγραμμα ταξιδιού βάσει των νέων δεδομένων πτήσεων, ξενοδοχείων και αξιοθέατων.

Με τον τρόπο που το σύστημα γίνεται περιβαλλοντικά επίγνωστο και χρησιμοποιεί τη λογική βάσει του σχήματος, μπορεί να δημιουργεί πιο ακριβή και σχετιζόμενα ερωτήματα, οδηγώντας σε καλύτερες ταξιδιωτικές προτάσεις και μια πιο προσωποποιημένη εμπειρία για τον χρήστη.

Χρήση SQL ως Τεχνική Retrieval-Augmented Generation (RAG)

Η SQL (Δομημένη Γλώσσα Ερωτήσεων) είναι ένα ισχυρό εργαλείο για την αλληλεπίδραση με βάσεις δεδομένων. Όταν χρησιμοποιείται ως μέρος μιας προσέγγισης Retrieval-Augmented Generation (RAG), η SQL μπορεί να ανακτά σχετικά δεδομένα από βάσεις δεδομένων για να ενημερώνει και να δημιουργεί απαντήσεις ή ενέργειες σε πράκτορες τεχνητής νοημοσύνης. Ας εξερευνήσουμε πώς η SQL μπορεί να χρησιμοποιηθεί ως τεχνική RAG στο πλαίσιο του Τουριστικού Πράκτορα.

Βασικές Έννοιες

  1. Αλληλεπίδραση με Βάση Δεδομένων:
    • Η SQL χρησιμοποιείται για να ερωτηθεί μια βάση δεδομένων, να ανακτηθούν σχετικές πληροφορίες και να χειριστούν δεδομένα.
    • Παράδειγμα: Ανάκτηση στοιχείων πτήσεων, πληροφοριών ξενοδοχείων και αξιοθέατων από μια ταξιδιωτική βάση δεδομένων.
  2. Ενσωμάτωση με RAG:
    • Τα ερωτήματα SQL δημιουργούνται με βάση τις εισροές και τις προτιμήσεις του χρήστη.
    • Τα ανακτηθέντα δεδομένα χρησιμοποιούνται στη συνέχεια για τη δημιουργία προσωποποιημένων προτάσεων ή ενεργειών.
  3. Δυναμική Δημιουργία Ερωτημάτων:
    • Ο πράκτορας τεχνητής νοημοσύνης δημιουργεί δυναμικά ερωτήματα SQL βάσει του πλαισίου και των αναγκών του χρήστη.
    • Παράδειγμα: Προσαρμογή ερωτημάτων SQL για φιλτράρισμα αποτελεσμάτων ανάλογα με τον προϋπολογισμό, τις ημερομηνίες και τα ενδιαφέροντα.

Εφαρμογές

Παράδειγμα: Πράκτορας ανάλυσης δεδομένων:

  1. Εργασία: Ανάλυση συνόλου δεδομένων για την εύρεση τάσεων.
  2. Βήματα:
    • Φόρτωση του συνόλου δεδομένων.
    • Δημιουργία ερωτημάτων SQL για φιλτράρισμα δεδομένων.
    • Εκτέλεση ερωτημάτων και ανάκτηση αποτελεσμάτων.
    • Δημιουργία οπτικοποιήσεων και συμπερασμάτων.
  3. Πόροι: Πρόσβαση σε σύνολο δεδομένων, δυνατότητες SQL.
  4. Εμπειρία: Χρήση προηγούμενων αποτελεσμάτων για τη βελτίωση μελλοντικών αναλύσεων.

Πρακτικό Παράδειγμα: Χρήση SQL στον Τουριστικό Πράκτορα

  1. Συλλογή Προτιμήσεων Χρήστη

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. Δημιουργία Ερωτημάτων SQL

    def generate_sql_query(table, preferences):
        query = f"SELECT * FROM {table} WHERE "
        conditions = []
        for key, value in preferences.items():
            conditions.append(f"{key}='{value}'")
        query += " AND ".join(conditions)
        return query
    
  3. Εκτέλεση Ερωτημάτων SQL

    import sqlite3
    
    def execute_sql_query(query, database="travel.db"):
        connection = sqlite3.connect(database)
        cursor = connection.cursor()
        cursor.execute(query)
        results = cursor.fetchall()
        connection.close()
        return results
    
  4. Δημιουργία Προτάσεων

    def generate_recommendations(preferences):
        flight_query = generate_sql_query("flights", preferences)
        hotel_query = generate_sql_query("hotels", preferences)
        attraction_query = generate_sql_query("attractions", preferences)
           
        flights = execute_sql_query(flight_query)
        hotels = execute_sql_query(hotel_query)
        attractions = execute_sql_query(attraction_query)
           
        itinerary = {
            "flights": flights,
            "hotels": hotels,
            "attractions": attractions
        }
        return itinerary
    
    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "dates": "2025-04-01 to 2025-04-10",
        "budget": "moderate",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
    itinerary = generate_recommendations(preferences)
    print("Suggested Itinerary:", itinerary)
    

Παράδειγμα Ερωτημάτων SQL

  1. Ερώτημα Πτήσης

    SELECT * FROM flights WHERE destination='Paris' AND dates='2025-04-01 to 2025-04-10' AND budget='moderate';
    
  2. Ερώτημα Ξενοδοχείου

    SELECT * FROM hotels WHERE destination='Paris' AND budget='moderate';
    
  3. Ερώτημα Αξιοθέατων

    SELECT * FROM attractions WHERE destination='Paris' AND interests='museums, cuisine';
    

Αξιοποιώντας τη SQL ως μέρος της τεχνικής Retrieval-Augmented Generation (RAG), πράκτορες τεχνητής νοημοσύνης όπως ο Τουριστικός Πράκτορας μπορούν να ανακτούν δυναμικά και να χρησιμοποιούν σχετικά δεδομένα για να παρέχουν ακριβείς και προσωποποιημένες προτάσεις.

Παράδειγμα Μεταγνωστικής

Για να επιδείξουμε μια υλοποίηση μεταγνωστικής, ας δημιουργήσουμε έναν απλό πράκτορα που αντανακλά στη διαδικασία λήψης αποφάσεών του ενώ επιλύει ένα πρόβλημα. Σε αυτό το παράδειγμα, θα κατασκευάσουμε ένα σύστημα όπου ένας πράκτορας προσπαθεί να βελτιστοποιήσει την επιλογή ξενοδοχείου, αλλά στη συνέχεια αξιολογεί τη λογική του και προσαρμόζει τη στρατηγική του όταν κάνει λάθη ή υποβέλτιστες επιλογές.

Θα το προσομοιώσουμε με ένα βασικό παράδειγμα όπου ο πράκτορας επιλέγει ξενοδοχεία βάσει συνδυασμού τιμής και ποιότητας, αλλά “αντανακλά” στις αποφάσεις του και προσαρμόζεται κατάλληλα.

Πώς αυτό απεικονίζει τη μεταγνωστική:

  1. Αρχική Απόφαση: Ο πράκτορας θα επιλέξει το φθηνότερο ξενοδοχείο, χωρίς να κατανοεί την επίδραση της ποιότητας.
  2. Αντανακλαστικότητα και Αξιολόγηση: Μετά την αρχική επιλογή, ο πράκτορας θα ελέγξει αν το ξενοδοχείο ήταν “κακή” επιλογή βάσει ανατροφοδότησης από τον χρήστη. Αν διαπιστώσει ότι η ποιότητα του ξενοδοχείου ήταν πολύ χαμηλή, θα αναλογιστεί τη λογική του.
  3. Προσαρμογή Στρατηγικής: Ο πράκτορας προσαρμόζει τη στρατηγική του με βάση την αντανακλαστικότητα, αλλάζοντας από “φθηνότερο” σε “υψηλότερης_ποιότητας”, βελτιώνοντας έτσι τη διαδικασία λήψης αποφάσεων σε μελλοντικές επαναλήψεις.

Ακολουθεί ένα παράδειγμα:

class HotelRecommendationAgent:
    def __init__(self):
        self.previous_choices = []  # Αποθηκεύει τα ξενοδοχεία που επιλέχθηκαν προηγουμένως
        self.corrected_choices = []  # Αποθηκεύει τις διορθωμένες επιλογές
        self.recommendation_strategies = ['cheapest', 'highest_quality']  # Διαθέσιμες στρατηγικές

    def recommend_hotel(self, hotels, strategy):
        """
        Recommend a hotel based on the chosen strategy.
        The strategy can either be 'cheapest' or 'highest_quality'.
        """
        if strategy == 'cheapest':
            recommended = min(hotels, key=lambda x: x['price'])
        elif strategy == 'highest_quality':
            recommended = max(hotels, key=lambda x: x['quality'])
        else:
            recommended = None
        self.previous_choices.append((strategy, recommended))
        return recommended

    def reflect_on_choice(self):
        """
        Reflect on the last choice made and decide if the agent should adjust its strategy.
        The agent considers if the previous choice led to a poor outcome.
        """
        if not self.previous_choices:
            return "No choices made yet."

        last_choice_strategy, last_choice = self.previous_choices[-1]
        # Ας υποθέσουμε ότι έχουμε κάποια ανατροφοδότηση χρήστη που μας λέει αν η τελευταία επιλογή ήταν καλή ή όχι
        user_feedback = self.get_user_feedback(last_choice)

        if user_feedback == "bad":
            # Προσαρμόζει τη στρατηγική αν η προηγούμενη επιλογή ήταν ανεπαρκής
            new_strategy = 'highest_quality' if last_choice_strategy == 'cheapest' else 'cheapest'
            self.corrected_choices.append((new_strategy, last_choice))
            return f"Reflecting on choice. Adjusting strategy to {new_strategy}."
        else:
            return "The choice was good. No need to adjust."

    def get_user_feedback(self, hotel):
        """
        Simulate user feedback based on hotel attributes.
        For simplicity, assume if the hotel is too cheap, the feedback is "bad".
        If the hotel has quality less than 7, feedback is "bad".
        """
        if hotel['price'] < 100 or hotel['quality'] < 7:
            return "bad"
        return "good"

# Προσομοιώνει μια λίστα ξενοδοχείων (τιμή και ποιότητα)
hotels = [
    {'name': 'Budget Inn', 'price': 80, 'quality': 6},
    {'name': 'Comfort Suites', 'price': 120, 'quality': 8},
    {'name': 'Luxury Stay', 'price': 200, 'quality': 9}
]

# Δημιουργεί έναν πράκτορα
agent = HotelRecommendationAgent()

# Βήμα 1: Ο πράκτορας προτείνει ένα ξενοδοχείο χρησιμοποιώντας τη στρατηγική "το φθηνότερο"
recommended_hotel = agent.recommend_hotel(hotels, 'cheapest')
print(f"Recommended hotel (cheapest): {recommended_hotel['name']}")

# Βήμα 2: Ο πράκτορας εξετάζει την επιλογή και προσαρμόζει τη στρατηγική αν χρειαστεί
reflection_result = agent.reflect_on_choice()
print(reflection_result)

# Βήμα 3: Ο πράκτορας προτείνει ξανά, αυτή τη φορά χρησιμοποιώντας τη ρυθμισμένη στρατηγική
adjusted_recommendation = agent.recommend_hotel(hotels, 'highest_quality')
print(f"Adjusted hotel recommendation (highest_quality): {adjusted_recommendation['name']}")

Ικανότητες Μεταγνωστικής των Πρακτόρων

Το κλειδί εδώ είναι η ικανότητα του πράκτορα να:

Αυτή είναι μια απλή μορφή μεταγνωστικής όπου το σύστημα μπορεί να προσαρμόζει τη διαδικασία λογικής του βάσει εσωτερικής ανατροφοδότησης.

Συμπέρασμα

Η μεταγνωστική είναι ένα ισχυρό εργαλείο που μπορεί να ενισχύσει σημαντικά τις δυνατότητες των πρακτόρων τεχνητής νοημοσύνης. Ενσωματώνοντας μεταγνωστικές διαδικασίες, μπορείτε να σχεδιάσετε πράκτορες που είναι πιο έξυπνοι, προσαρμοστικοί και αποδοτικοί. Χρησιμοποιήστε τους πρόσθετους πόρους για να εξερευνήσετε περαιτέρω τον συναρπαστικό κόσμο της μεταγνωστικής στους πράκτορες AI.

Έχετε περισσότερες ερωτήσεις για το Πρότυπο Σχεδιασμού Μεταγνωστικής;

Ενταχθείτε στον Microsoft Foundry Discord για να γνωρίσετε άλλους μαθητευόμενους, να παρακολουθήσετε ώρες γραφείου και να λύσετε τις απορίες σας σχετικά με τους Πράκτορες AI.

Προηγούμενο Μάθημα

Πολυπρακτορικό Πρότυπο Σχεδιασμού

Επόμενο Μάθημα

Πράκτορες AI στην Παραγωγή


Αποποίηση ευθυνών:
Το παρόν έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η επίσημη πηγή. Για κρίσιμες πληροφορίες συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.