Κέρδη:
- Ρυθμίστε τον έλεγχο πρόσβασης (ACL) που φιλτράρει την ανάκτηση με βάση την εξουσία του χρήστη
- Σύνταξη ενός σταθερού προτύπου προτροπής που τοποθετεί σωστά το πλαίσιο και την ερώτηση χρήστη
- Εξάσκηση της ανεξαρτησίας ερωτήσεων και της διαχείρισης του ιστορικού σε συνομιλίες πολλαπλών γύρων
Καθιερώσαμε την αρχιτεκτονική. Τώρα ας το κάνουμε ασφαλές, συνεπές και συνομιλητικό. Υπάρχουν τρία κρίσιμα θέματα σε αυτήν την ενότητα: (1) έλεγχος πρόσβασης που φιλτράρει την ανάκτηση με βάση την εξουσία του χρήστη, (2) ένα ισχυρό πρότυπο προτροπής που τοποθετεί σωστά το πλαίσιο και την ερώτηση, (3) ανεξαρτησία ερωτήσεων και διαχείριση ιστορικού συνομιλιών σε συνομιλία πολλαπλών γύρων. Χωρίς αυτά τα τρία, ένας βοηθός είτε θα διαρρεύσει δεδομένα, θα δώσει ασυνεπείς απαντήσεις ή θα καταρρεύσει σε επακόλουθες ερωτήσεις.
Έλεγχος πρόσβασης: Μη εξουσιοδοτημένα δεδομένα δεν πρέπει να φθάνουν ποτέ
Ο μεγαλύτερος κίνδυνος επιχείρησης: Ένα έγγραφο που ο χρήστης δεν πρέπει να δει διαρροές στην απόκριση. Ένα πολύ συνηθισμένο λάθος αρχαρίων είναι να "λέτε στο μοντέλο να "εμφανίσει κρυφά έγγραφα" αμέσως." Αυτό δεν είναι ασφαλές. Το μοντέλο μπορεί να ξεχάσει μια οδηγία ή μια έγκαιρη ένεση μπορεί να την αποφύγει. Η σωστή θέση είναι η φάση ανάκτησης: το μη εξουσιοδοτημένο κομμάτι δεν πρέπει να φέρεται καθόλου.
Ο τρόπος για να γίνει αυτό είναι να εφαρμόσετε τα μεταδεδομένα αρχής (τμήμα, ρόλος, επίπεδο απορρήτου) που βάζετε σε κάθε μέρος ως φίλτρο κατά την αναζήτηση. Καθορίζετε με ασφάλεια ποιος είναι ο χρήστης (ταυτότητα και ρόλοι) στο επίπεδο εφαρμογής και προσθέτετε ένα φίλτρο ACL (Λίστα Ελέγχου Πρόσβασης) στην κλήση.
# Φιλτράρεται κατά ανάκτηση εξουσιοδότησης (εννοιολογική) χρήστης = έλεγχος ταυτότητας(περίοδος σύνδεσης) # έλεγχος ταυτότητας από αξιόπιστη πηγή = χρήστης.ρόλοι + ["όλοι"] # π.χ. ["HR", "admin"]result = vektor_db.search( vektor=embed(question), top_k=20, filter={"permission_group": {"in": επιτρέπονται}, # μόνο επιτρεπόμενα μέρη "privacy": {"lte": user.level}} # κάτω από το επίπεδο)
Προσοχή: Ποτέ μην ζητάτε εξουσιοδότηση από το μοντέλο και μην βασίζεστε στην προτροπή. Η ταυτότητα και η εξουσία καθορίζονται στο αξιόπιστο επίπεδο της εφαρμογής. Το φίλτρο ανάκτησης είναι υποχρεωτικό, η άμεση οδηγία είναι απλώς ένα επιπλέον στρώμα. Το "το έγραψα στην προτροπή" δεν είναι ασφάλεια.
Στερεό πρότυπο προτροπής
Το πρότυπο προτροπής είναι ο σκελετός που συγκεντρώνει το πλαίσιο, την ερώτηση χρήστη και τις οδηγίες συμπεριφοράς από την ανάκτηση. Μέρη ενός καλού προτύπου: περιγραφή ρόλου/εργασίας, κανόνες συμπεριφοράς (γείωση, δεν ξέρω άδεια, αίτημα πόρων, τόνος), πλαίσιο, ερώτηση.
Είστε εταιρικός βοηθός ανθρώπινου δυναμικού. Η δουλειά σας είναι να απαντάτε σε ερωτήσεις εργαζομένων ΜΟΝΟ με βάση το ακόλουθο ΠΛΑΙΣΙΟ. Κανόνες: - Εάν η απάντηση δεν είναι ξεκάθαρα στο πλαίσιο, γράψτε "Δεν μπόρεσα να βρω πληροφορίες σχετικά με αυτό στην τεκμηρίωση, επικοινωνήστε με την ομάδα HR". Μην μαντεύετε, μην επινοείτε.- Εάν οι πηγές στο πλαίσιο συγκρούονται, λάβετε ως βάση την επίσημη πολιτική και δηλώστε την αντίφαση.- Προσθέστε την πηγή στην οποία βασίζεστε ως [Πηγή: αρχείο, ενότητα] στο τέλος κάθε ισχυρισμού.- Απαντήστε με σύντομη, σαφή και επαγγελματική γλώσσα. ΠΛΑΙΣΙΟ:{numbered_parts}ΕΡΩΤΗΣΗ: {user_question}
Η αρίθμηση των τμημάτων περιβάλλοντος ([1], [2], ...) διευκολύνει την αναφορά του μοντέλου. Επίσης, γράψτε την πηγή στην αρχή κάθε κομματιού, ώστε το μοντέλο να μπορεί να την αναφέρει σωστά.
Συμβουλή: Διατηρείτε σταθερό το πρότυπο προτροπής και τοποθετείτε πάντα μεταβλητές (πλαίσιο, ερώτηση) στα ίδια σημεία. Ένα σταθερό πρότυπο αυξάνει τη δυνατότητα δοκιμής και μειώνει το κόστος χάρη στην άμεση προσωρινή αποθήκευση σε ορισμένα συστήματα.
ΠΛΑΙΣΙΟ:[1] (Πηγή: ik_el_kitabi.pdf, Ενότητα 5.2) Η ετήσια άδεια μετ' αποδοχών είναι 14 ημέρες...[2] (Πηγή: ik_el_kitabi.pdf, Ενότητα 5.4) Η άδεια είναι 20 ημέρες για άτομα με περισσότερα από 5 χρόνια υπηρεσίας...
Αδύναμη προτροπή / Ισχυρή προτροπή
Αδύναμο (χωρίς γείωση, χωρίς πηγή, ανάμεικτη ταυτότητα):
Χρησιμοποιήστε αυτά τα έγγραφα και απαντήστε στην ερώτηση: {parts}Χρήστης: {question}# Πρόβλημα: το μοντέλο βγαίνει εκτός πλαισίου, δημιουργείται, δεν αναφέρει πηγές, # συμπεριφέρεται αυθαίρετα σε αντίφαση.
Ισχυρό (ρόλος + κανόνες + αριθμημένο περιβάλλον + πηγή υποχρεωτικά):
Είστε... Απλά βασιστείτε στο ΠΛΑΙΣΙΟ. Διαφορετικά, πείτε «δεν ξέρω». Σε σύγκρουση, επιλέξτε επίσημη πολιτική. Προσθέστε [Πηγή: ...] σε κάθε αξίωση. ΠΛΑΙΣΙΟ: [1]... [2]... ΕΡΩΤΗΣΗ: {question}# Αποτέλεσμα: απάντηση που είναι πιστή στο πλαίσιο, προέρχεται και διαχειρίζεται σωστά την αντίφαση.
Διαχείριση συνομιλίας πολλαπλών περιηγήσεων
Ένας πραγματικός χρήστης δεν κάνει ούτε μια ερώτηση και να την αφήσει ήσυχη. μιλάει. «Πόσες μέρες ετήσια άδεια έχω;» → «Τι γίνεται με τον 6χρονο υπάλληλο;» → "Πώς μπορώ να κάνω αίτηση για αυτό;" Η δεύτερη και η τρίτη ερώτηση από μόνα τους δεν έχουν νόημα. εξαρτάται από το προηγούμενο πλαίσιο.
Πρέπει να λύσετε δύο προβλήματα. Το πρώτο είναι για ανάκτηση: κάντε την επόμενη ερώτηση ανεξάρτητη (επαναγραφή ερώτησης). «Τι γίνεται με τον 6χρονο υπάλληλο;» → "Πόσες ημέρες ετήσιας άδειας δικαιούται ένας εργαζόμενος 6 ετών;" Ψάχνετε με αυτήν την ανεξάρτητη ερώτηση. Το δεύτερο είναι για παραγωγή: δίνετε επίσης το ιστορικό συνομιλιών στο μοντέλο, ώστε να συνεχίζεται με συνέπεια.
# Δύο βήματα: ανεξαρτητοποίηση → αναζήτηση → δημιουργία με ιστορικό (εννοιολογική) ανεξάρτητα = model.uret( "Χρησιμοποιήστε το ιστορικό συνομιλιών για να κάνετε την ερώτηση κατανοητή από μόνη της:\nΙστορικό: {history}\nΕρώτηση: {follow_question}") context = ανάκτηση(ανεξάρτητη) # αναζήτηση με ανεξάρτητα questionanswer = model.uret(promption history)
Καθώς το ιστορικό μεγαλώνει (μεγάλη συνομιλία), η αποστολή όλων κάθε φορά γίνεται ακριβή και γεμίζει το παράθυρο περιβάλλοντος. Λύση: συνοψίστε τους προηγούμενους γύρους ή κρατήστε τους τελευταίους N γύρους και μειώστε τους προηγούμενους στη σύνοψη. Έτσι, το κόστος παραμένει υπό έλεγχο και διατηρείται η συνέπεια.
Κατάσταση
πρόβλημα
Λύση
Η επακόλουθη ερώτηση δεν έχει πλαίσιο
Οι αναζητήσεις ανάκτησης δεν έχουν νόημα
Κάντε την ερώτηση ανεξάρτητη (ξαναγράψτε)
μακρά συνομιλία
Το κόστος και το παράθυρο διογκώνεται
Περίληψη προηγούμενων περιηγήσεων
Ο χρήστης άλλαξε θέμα
Το παλιό πλαίσιο μολύνεται
Μειώστε την επιρροή του παρελθόντος σε νέο θέμα
Η αρχή μπορεί να διαφέρει μεταξύ των περιηγήσεων
Κίνδυνος διαρροής
Εφαρμόστε ξανά το φίλτρο ACL κάθε γύρο
Τρεις Μίνι Θήκες
Περίπτωση 1 — Πλάνη «ασφάλειας» με προτροπή. Μια εταιρεία έβαλε εμπιστευτικά έγγραφα μισθού σε έναν βοηθό που μπορούσε να ζητήσει ο καθένας, αλλά έγραψε μόνο «μην δίνετε στοιχεία μισθού» στην προτροπή. Το μοντέλο διέρρευσε το εύρος μισθών όταν ένας χρήστης έκανε την ερώτηση κυκλικά. Όταν το φίλτρο ACL προστέθηκε στην ανάκτηση (τμήματα μισθού μόνο στον ρόλο HR), η διαρροή έκλεισε εντελώς. γιατί το μέρος δεν φέρεται ποτέ πια.
Περίπτωση 2 — Παρακολούθηση χωρίς πλαίσιο. Σε έναν βοηθό υποστήριξης, ο χρήστης ρωτά "περίοδος επιστροφής;" → "τι γίνεται με το σπασμένο προϊόν;" Το σύστημα έφερε άσχετα ανταλλακτικά για το «σπασμένο προϊόν». Όταν προστέθηκε η ανεξαρτησία της ερώτησης ("Πόση διάρκεια είναι η περίοδος επιστροφής για ένα σπασμένο προϊόν;", το ποσοστό σωστών απαντήσεων αυξήθηκε από 44% σε 90%.
Περίπτωση 3 — Πρησμένο παρελθόν. Σε 30 γύρους συνομιλιών με έναν βοηθό, κάθε κλήση έστελνε ολόκληρο το ιστορικό. Το κόστος αυξανόταν 3 φορές ανά γύρο και οι απαντήσεις επιβραδύνονταν. Όταν μεταβήκαμε σε μια δομή που κράτησε τους τελευταίους 6 γύρους και συνόψισε τους προηγούμενους, το συμβολικό κόστος μειώθηκε κατά 62% και η συνέπεια διατηρήθηκε.
Συνήθη λάθη
- Αφήνοντας την εξουσία στην προτροπή: Το μοντέλο ξεχνά/παρακάμπτει. Το φίλτρο ACL είναι υποχρεωτικό κατά την ανάκτηση.
- Μη απαρίθμηση του περιβάλλοντος: Το μοντέλο δεν μπορεί να αναφέρει τη σωστή πηγή.
- Μη ανεξαρτησία της επόμενης ερώτησης: Η ανάκτηση αναζητά άσκοπα.
- Αποστολή όλου του ιστορικού τυφλή: Εκρήγνυται σε κόστος και καθυστέρηση. συνοψίζω.
- Μη σύνταξη του κανόνα της αντίφασης: Το μοντέλο μπορεί να παρουσιάσει την αναξιόπιστη πηγή ως επίσημη.
Συνοπτικά
- Ο έλεγχος πρόσβασης υλοποιείται με ένα φίλτρο μεταδεδομένων κατά τη φάση ανάκτησης. Μη εξουσιοδοτημένα εξαρτήματα δεν πρέπει ποτέ να φέρονται.
- Η ταυτότητα και η εξουσία καθορίζονται στο επίπεδο αξιόπιστης εφαρμογής. Η άμεση οδηγία είναι απλώς ένα επιπλέον επίπεδο άμυνας.
- Το ισχυρό πρότυπο προτροπής περιλαμβάνει ρόλο, κανόνες συμπεριφοράς (γείωση, δεν γνωρίζω άδεια, πηγή, σύγκρουση), αριθμημένο πλαίσιο και ερώτηση.
- Στη συνομιλία πολλών γύρων, οι επακόλουθες ερωτήσεις αποσυνδέονται και το μοντέλο παράγει συνεπείς απαντήσεις με την ιστορία.
- Συνοψίζοντας τη μακρά ιστορία, το παράθυρο κόστους και περιβάλλοντος διατηρείται υπό έλεγχο. Το ACL εφαρμόζεται εκ νέου κάθε γύρο.
Εργασία εφαρμογής
(1) Ορίστε τουλάχιστον τρεις ομάδες εξουσιοδότησης για τον δικό σας βοηθό (π.χ. όλοι, τμήμα, διευθυντής) και γράψτε σε έναν πίνακα ποιος τύπος εγγράφου είναι ανοιχτός σε ποια ομάδα. (2) Προσαρμόστε και γράψτε το παραπάνω πρότυπο προτροπής σύμφωνα με τον δικό σας ρόλο και τόνο. Κάντε το περιβάλλον αριθμημένο και προερχόμενο. (3) Γράψτε ένα ρεαλιστικό σενάριο συνομιλίας τριών γύρων (ερώτηση → συνέχεια → συνέχεια) και δημιουργήστε με μη αυτόματο τρόπο ανεξάρτητες εκδόσεις κάθε επόμενης ερώτησης. (4) Εξηγήστε με μία φράση γιατί το φίλτρο ACL θα πρέπει να εφαρμόζεται ξανά σε κάθε γύρο σε αυτό το σενάριο.
λίστα ελέγχου
- [ ] Εφαρμόζω τον έλεγχο πρόσβασης με ένα φίλτρο ανάκτησης, απλώς δεν βασίζομαι στην προτροπή.
- [ ] Προσθέτω γείωση, δεν γνωρίζω άδεια, πηγή και κανόνα διένεξης στο πρότυπο προτροπής μου.
- [ ] Δίνω τα μέρη του περιβάλλοντος αριθμημένα και αναφερόμενα.
- [ ] Κάνω τις επακόλουθες ερωτήσεις ανεξάρτητες πριν από την ανάκτηση.
- [ ] Διαχειρίζομαι το κόστος και το παράθυρο συνοψίζοντας το μακρύ ιστορικό συνομιλιών.