Μετάβαση στο περιεχόμενο

Μνήμη και γνώση

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

Έχει τρία επίπεδα και απαντούν σε διαφορετικά ερωτήματα:

  1. Γεγονότα — τι ισχύει (μια σύμβαση, ένα αποτέλεσμα, μια απόφαση).
  2. Πολιτικές — τι πρέπει να κάνουν οι πράκτορες γι’ αυτό (ένας κανονιστικός κανόνας).
  3. Μνήμη εργασίας — τι είχε στη μέση ένας πράκτορας.

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

Ένα MemoryFact είναι μια μονάδα γνώσης με πεδίο έναν χώρο εργασίας και έναν τομέα.

Χαρακτηριστικό Τι είναι
domain Ο τομέας γνώσης (“conventions”, “decisions”, “codebase”)
topic Μια σύντομη ετικέτα θέματος
content Το κείμενο της γνώσης
confidence 0.0–1.0, αρχικοποιείται από την προέλευση και αυξάνεται με εκ νέου αναφορά
memoryType Το είδος του γεγονότος — καθορίζει την καμπύλη χρονικής απομείωσής του
veracity Πώς έγινε γνωστό — τροφοδοτεί τη βεβαιότητα και καθορίζει το μέγεθος κάθε αύξησης από εκ νέου αναφορά
sourceObservationIds Ποιες παρατηρήσεις οδήγησαν σε αυτό
supersededBy Το νεότερο γεγονός που το αντικατέστησε, αν υπάρχει
validUntil, recallCount, mentionCount Σήματα λήξης και χρήσης που χρησιμοποιούνται στην ανάκληση

Οι δύο τελευταίες γραμμές είναι αυτές που οι περισσότεροι προσπερνούν και είναι αυτές που αποφασίζουν ποιο γεγονός θα αναδυθεί. Το memoryType φέρει παραμέτρους χρονικής απομείωσης Weibull ανά τύπο, οπότε μια χρονικά περιορισμένη δέσμευση ξεθωριάζει γρήγορα, ενώ ένα σταθερό γεγονός προφίλ όχι. Το veracity καταγράφει την προέλευση — δηλώθηκε από άνθρωπο (βάρος 1.0), συνήχθη από πράκτορα (0.7), παρήχθη από εργαλείο (0.5), εισήχθη (0.6) — και αυτό το βάρος αρχικοποιεί τη βεβαιότητα εκκίνησης του γεγονότος.

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

Ένα MemoryPolicy είναι ένας κανονιστικός κανόνας που παράγεται από γεγονότα, με πεδίο έναν χώρο εργασίας και έναν τομέα, με σημαία ενεργότητας και προαιρετικό requiredRole.

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

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

Ένας τομέας είναι είτε σε επίπεδο χώρου εργασίας (architecture) είτε με πεδίο ένα αποθετήριο (repo:<slug>/architecture). Το ίδιο όνομα και στα δύο πεδία σημαίνει δύο ανεξάρτητες αποθήκες: ένα γεγονός που ισχύει για μια βάση κώδικα δεν αντικαθιστά αυτό που ισχύει σε επίπεδο χώρου εργασίας. Το search_memory και το προοίμιο της αποστολής κατατάσσουν πρώτη τη μνήμη που αφορά το αποθετήριο όταν ο πράκτορας εργάζεται σε αυτό το αποθετήριο· δεν φιλτράρουν τα υπόλοιπα. Περάστε repo στα propose_fact / propose_policy / search_memory για να γράψετε σε αυτό το πεδίο ή να το ενισχύσετε.

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

Ενότητα με τίτλο «Ο έλεγχος πρόσβασης αποτυγχάνει ανοιχτά στις αναγνώσεις»

Ένα MemoryAccessGrant αντιστοιχίζει έναν ρόλο πράκτορα και έναν τομέα σε ένα από τρία επίπεδα άδειας:

Δικαίωμα Σημασία
none Καμία πρόσβαση
read Μπορεί να αναζητά και να ανακτά γεγονότα
write Απαιτείται από το propose_policy. Οι εγγραφές γεγονότων (propose_fact, supersede_fact) δεν ελέγχονται από παραχωρήσεις

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

Κάθε πράκτορας έχει ένα AgentWorkingMemory: ένα πρόχειρο ελεύθερου κειμένου με κλειδί τον χώρο εργασίας και τον πράκτορα. Επιβιώνει μεταξύ των εκτελέσεων, είναι ιδιωτικό για αυτόν τον πράκτορα και εισάγεται στην προτροπή του σε κάθε αποστολή. Εκεί ζει το «είχα μείνει στη μέση της αναδιάρθρωσης του auth» — η κατάσταση που αξίζει να μεταφερθεί στην επόμενη εκτέλεση αλλά όχι να αναχθεί σε διαρκές γεγονός.

Τι φτάνει πραγματικά στην προτροπή ενός πράκτορα

Ενότητα με τίτλο «Τι φτάνει πραγματικά στην προτροπή ενός πράκτορα»

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

  • Κάθε ενεργή πολιτική του χώρου εργασίας, ως γραμμές - [domain] rule.
  • Η δική του μνήμη εργασίας του πράκτορα, αυτολεξεί.
  • Μια σύντομη λίστα γεγονότων με αντιστοίχιση λέξεων-κλειδιών για αυτή την εργασία — το πολύ πέντε, μέσα σε προϋπολογισμό ~1.200 χαρακτήρων και μόνο όταν η περιγραφή της εργασίας έχει μήκος τουλάχιστον 20 χαρακτήρες. Οι πιο σύντομες εργασίες δεν παίρνουν καθόλου γεγονότα.

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

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

Το εργαλείο search_memory που βλέπει ο πράκτορας έχει τρεις λειτουργίες και είναι πραγματικά διαφορετικές αναζητήσεις:

  • keyword — μόνο FTS5.
  • semantic — αποτελέσματα BM25 και διανυσματικά, συγχωνευμένα με αμοιβαία συγχώνευση κατάταξης.
  • hybrid (η προεπιλογή) — πολυφωνική ανάκληση: τέσσερις φωνές κατάταξης συγχωνεύονται και μετά διαφοροποιούνται.

Οι τέσσερις φωνές είναι λεξιλογική (FTS), σημασιολογική (διανυσματικό KNN), χρονική (πρόσφατα ενεργά γεγονότα) και γράφου — ένας περίπατος δύο βημάτων πάνω σε επεισοδιακές ακμές από τους ισχυρότερους λεξιλογικούς και σημασιολογικούς σπόρους. Η φωνή του γράφου είναι ο λόγος που υπάρχουν καθόλου οι επεισοδιακές ακμές: αναδεικνύει το γεγονός που είναι συνδεδεμένο με την απάντησή σας χωρίς να ταιριάζει με καμία λέξη σας. Οι φωνές σταθμίζονται από μια ταξινομημένη πρόθεση του ερωτήματος (η σημασιολογική έχει το μεγαλύτερο βάρος από προεπιλογή, μετά ο γράφος και η λεξιλογική, μετά η χρονική), η βαθμολογία κάθε υποψηφίου κλιμακώνεται με τη χρονική απομείωση Weibull, και το σύνολο αποτελεσμάτων διαφοροποιείται με MMR ώστε πέντε επαναδιατυπώσεις ενός γεγονότος να μην εκτοπίζουν τέσσερα διαφορετικά.

Η αναζήτηση μνήμης στην επιφάνεια εργασίας και στον ιστό είναι ξεχωριστή, απλούστερη διαδρομή: η λειτουργία RPC memory_fact.search είναι μόνο FTS5, γιατί ένας λεπτός πελάτης δεν μπορεί να στέλνει ενσωμάτωση ερωτήματος και η υβριδική διαδρομή παραμένει εσωτερική στον κεντρικό υπολογιστή. Έτσι, η κατάταξη που βλέπετε στον περιηγητή μνήμης δεν είναι η κατάταξη που παίρνει ένας πράκτορας από το search_memory. Αυτό είναι αναμενόμενο, όχι σφάλμα, αλλά σημαίνει ότι το «έψαξα και δεν το βρήκα» στο περιβάλλον χρήστη δεν αποτελεί απόδειξη ότι ο πράκτορας δεν θα το βρει.

Ο περιηγητής μνήμης βρίσκεται στις Ρυθμίσεις → Χώρος εργασίας → Μνήμη (/workspaces/<id>/settings/memory), με καρτέλες Γεγονότα, Πολιτικές και Γράφο γνώσης.

Υπάρχει εκεί μια ασυμμετρία που εκπλήσσει: μπορείτε να επεξεργαστείτε και να διαγράψετε μνήμη, αλλά δεν μπορείτε να τη δημιουργήσετε. Ούτε η καρτέλα Γεγονότα ούτε η καρτέλα Πολιτικές έχει δυνατότητα προσθήκης. Η συγγραφή γίνεται από την πλευρά του πράκτορα, μέσω των propose_fact και propose_policy (τα supersede_fact / supersede_policy για αντικατάσταση). Το remember γράφει ένα στοιχείο θερμού επιπέδου περιορισμένο στη συνεδρία, το οποίο το consolidate_memory μπορεί αργότερα να αναγάγει σε γεγονός· τα record_observation και update_my_notes γράφουν το ιδιωτικό πρόχειρο που εισάγεται κατά την αποστολή. Ο περιηγητής είναι επιφάνεια ανασκόπησης και διόρθωσης, όχι συγγραφής — οπότε αν θέλετε ένα γεγονός στη μνήμη, ο τρόπος να το βάλετε εκεί είναι να το πείτε σε έναν πράκτορα.

Δύο λειτουργίες συντήρησης καλούνται επίσης από τον πράκτορα και όχι από χρονοδιάγραμμα: το consolidate_memory συγχωνεύει και κλαδεύει συσσωρευμένα γεγονότα και το harmonize_memory εναρμονίζει πεποιθήσεις που απέκλιναν μεταξύ πρακτόρων. Το list_memory_conflicts δείχνει τι έχει ήδη καταγράψει η ανίχνευση συγκρούσεων. Τίποτα δεν τα εκτελεί για εσάς με χρονοδιακόπτη. Οι αποφάσεις συσκέψεων συγκομίζονται στον τομέα decisions όταν ένα βήμα διατήρησης σύσκεψης τις καταγράψει· αυτό δεν είναι χρονοδιακόπτης σε ολοκληρωμένες εκτελέσεις πρακτόρων.