Zyski:
- Skonfiguruj kontrolę dostępu (ACL), która filtruje pobieranie na podstawie uprawnień użytkownika
- Napisanie solidnego szablonu podpowiedzi, który poprawnie umieszcza kontekst i pytanie użytkownika
- Ćwiczenie niezależności pytań i zarządzania historią w rozmowach wielorundowych
Ustaliliśmy architekturę; Teraz zróbmy to bezpiecznie, spójnie i konwersacyjnie. W tej części znajdują się trzy kluczowe tematy: (1) kontrola dostępu, która filtruje pobieranie w oparciu o uprawnienia użytkownika, (2) solidny szablon podpowiedzi, który poprawnie umieszcza kontekst i pytanie, (3) niezależność pytań i zarządzanie historią rozmów w czacie wielorundowym. Bez tych trzech asystent albo wycieknie dane, będzie udzielał niespójnych odpowiedzi, albo załamie się przy kolejnych pytaniach.
Kontrola dostępu: Nieautoryzowane dane nigdy nie powinny dotrzeć
Największe ryzyko w przedsiębiorstwie: dokument, którego użytkownik nie powinien widzieć, wycieka do odpowiedzi. Bardzo częstym błędem początkujących jest „powiedzenie modelowi, aby po znaku zachęty„ pokazał ukryte dokumenty ”. To nie jest bezpieczne. Model może zapomnieć o instrukcji lub szybki zastrzyk może ją ominąć. Właściwym miejscem jest faza odzyskiwania: nieautoryzowanego elementu nie należy w ogóle przynosić.
Można to zrobić, stosując metadane uprawnień (dział, rola, poziom prywatności), które umieszczasz w każdej części jako filtr podczas wyszukiwania. Bezpiecznie określasz kim jest użytkownik (tożsamość i role) w warstwie aplikacji i dodajesz do połączenia filtr ACL (Access Control List).
# Filtrowane według odzyskiwania uprawnień (koncepcyjny) użytkownik = uwierzytelnienie (sesja) # uwierzytelnione z zaufanego źródła = user.roles + ["wszyscy"] # np. ["HR", "admin"]result = vektor_db.search( vektor=embed(pytanie), top_k=20, filter={"permission_group": {"in": dozwolone}, # tylko dozwolone części "privacy": {"lte": user.level}} # poniżej poziomu)
Uwaga: Nigdy nie proś modela o autorytet ani nie polegaj na podpowiedziach. Tożsamość i uprawnienia są ustalane w zaufanej warstwie aplikacji; Filtr pobierania jest obowiązkowy, instrukcja podpowiedzi to tylko dodatkowa warstwa. „Napisałem to w wierszu” nie oznacza bezpieczeństwa.
Solidny szablon podpowiedzi
Szablon podpowiedzi to szkielet, który łączy kontekst, pytanie użytkownika i instrukcje dotyczące zachowania z pobrania. Części dobrego szablonu: opis roli/zadania, zasady postępowania (podstawa, nie wiem, pozwolenie, prośba o zasoby, ton), kontekst, pytanie.
Jesteś asystentem HR w korporacji. Twoim zadaniem jest odpowiadanie na pytania pracowników WYŁĄCZNIE w oparciu o następujący KONTEKST. Zasady: - Jeśli odpowiedź nie jest jasno osadzona w kontekście, napisz „Nie znalazłem informacji na ten temat w dokumentacji, skontaktuj się z działem HR”. Nie zgaduj, nie wymyślaj.- Jeśli źródła w kontekście są sprzeczne, oprzyj się na oficjalnej polityce i określ sprzeczność.- Dodaj źródło, na którym się opierasz, jako [Źródło: plik, sekcja] na końcu każdego roszczenia.- Odpowiedz krótkim, jasnym i profesjonalnym językiem. KONTEKST:{numbered_parts}PYTANIE: {user_question}
Numeracja części kontekstu ([1], [2], ...) ułatwia przytoczenie modelu. Na początku każdego utworu napisz także źródło, aby modelka mogła je poprawnie zacytować.
Wskazówka: Zachowaj stały szablon podpowiedzi i zawsze umieszczaj zmienne (kontekst, pytanie) w tych samych miejscach. Stały szablon zarówno zwiększa testowalność, jak i zmniejsza koszty dzięki szybkiemu buforowaniu w niektórych systemach.
KONTEKST:[1] (Źródło: ik_el_kitabi.pdf, sekcja 5.2) Coroczny płatny urlop wynosi 14 dni...[2] (Źródło: ik_el_kitabi.pdf, sekcja 5.4) Urlop wynosi 20 dni dla osób ze stażem pracy dłuższym niż 5 lat...
Słaba podpowiedź/silna podpowiedź
Słabe (brak uziemienia, brak źródła, tożsamość mieszana):
Skorzystaj z tych dokumentów i odpowiedz na pytanie: {parts}Użytkownik: {question}# Problem: model wyrwany z kontekstu, wymyśla, nie cytuje źródeł, # zachowuje się arbitralnie w sprzeczności.
Silny (rola + reguły + numerowany kontekst + obowiązkowe źródło):
Jesteś... Po prostu polegaj na KONTEKŚCIE. W przeciwnym razie powiedz „nie wiem”. W przypadku konfliktu wybierz oficjalną politykę. Dodaj [Źródło: ...] do każdego twierdzenia.CONTEXT: [1]... [2]... PYTANIE: {pytanie}# Wynik: odpowiedź wierna kontekstowi, oparta na źródłach i prawidłowo zarządzająca sprzecznością.
Zarządzanie rozmowami podczas wielu wycieczek
Prawdziwy użytkownik nie zadaje ani jednego pytania i nie zostawia go w spokoju; mówi. „Ile dni urlopu corocznego mi przysługuje?” → „A co z 6-letnim pracownikiem?” → „Jak się o to ubiegać?” Same pytania drugie i trzecie są bez znaczenia; zależy od poprzedniego kontekstu.
Musisz rozwiązać dwa problemy. Pierwsza dotyczy odzyskiwania: uniezależnij pytanie uzupełniające (przepisanie pytania). „A co z 6-letnim pracownikiem?” → „Ile dni urlopu przysługuje pracownikowi z 6-letnim stażem?” Wyszukujesz za pomocą tego niezależnego pytania. Drugi jest przeznaczony do produkcji: przekazujesz także modelowi historię rozmów, aby była spójna.
# Dwuetapowy: niezależność → wyszukiwanie → generowanie z historią (koncepcyjną) niezależność = model.uret( "Użyj historii konwersacji, aby pytanie samo w sobie było zrozumiałe:\nHistoria: {history}\nPytanie: {follow_question}") kontekst = pobieranie (niezależne) # wyszukiwanie z niezależnym pytaniemodpowiedź = model.uret(prompt(context, history, follow_question))
W miarę narastania historii (długa rozmowa) wysyłanie jej całości na raz staje się kosztowne i wypełnia okno kontekstowe. Rozwiązanie: podsumuj poprzednie rundy lub zachowaj N ostatnich rund i sprowadź poprzednie do podsumowania. Dzięki temu koszty pozostają pod kontrolą i zachowana jest spójność.
Stan
problemu
Rozwiązanie
Pytanie uzupełniające nie ma kontekstu
Wyszukiwanie wyszukiwania bez znaczenia
Uniezależnij pytanie (przepisz)
długa rozmowa
Koszty i okna rosną
Podsumowanie poprzednich wycieczek
Użytkownik zmienił temat
Stary kontekst zostaje zainfekowany
Zmniejsz dotychczasowy wpływ na nowy temat
Autorytet może się różnić w zależności od wycieczki
Ryzyko wycieku
Ponownie zastosuj filtr ACL w każdej rundzie
Trzy mini etui
Przypadek 1 — Błąd „bezpieczeństwa” z podpowiedzią. Firma umieściła asystentowi poufne dokumenty dotyczące wynagrodzenia, o które każdy mógł zapytać, ale w monicie napisała jedynie „nie podawać informacji o zarobkach”. Modelka ujawniła zakres wynagrodzeń, gdy użytkownik zadał pytanie w okrężny sposób. Kiedy do pobierania dodano filtr ACL (części płacowe tylko do roli HR), wyciek został całkowicie zamknięty; ponieważ część nigdy już nie jest dostarczana.
Przypadek 2 — Stalking bezkontekstowy. W asystencie wsparcia użytkownik pyta „okres zwrotu?” → „co z uszkodzonym produktem?” System dostarczał nieistotne części do „zepsutego produktu”. Po dodaniu niezależności pytań („Jak długi jest okres zwrotu zepsutego produktu?”), odsetek prawidłowych odpowiedzi wzrósł z 44% do 90%.
Przypadek 3 — Spuchnięta przeszłość. W 30 rundach rozmów z asystentem przy każdym połączeniu przesyłana była cała historia; Koszt rósł 3 razy na rundę, a reakcje spadały. Kiedy przeszliśmy na strukturę, która zachowała ostatnie 6 rund i podsumowała poprzednie, koszt tokena spadł o 62%, a spójność została zachowana.
Typowe błędy
- Pozostawienie uprawnień monitowi: Model zapomina/pomija; Filtr ACL jest obowiązkowy przy pobieraniu.
- Nie wymieniając kontekstu: Model nie może podać prawidłowego źródła.
- Brak niezależności pytania uzupełniającego: wyszukiwanie wyszukiwania jest bezcelowe.
- Wysyłanie całej historii na ślepo: Eksplozja kosztów i opóźnień; streszczać.
- Nie zapisanie zasady sprzeczności: Model może przedstawiać niewiarygodne źródło jako oficjalne.
Podsumowując
- Kontrola dostępu realizowana jest za pomocą filtra metadanych na etapie pobierania; Nigdy nie należy przynosić nieautoryzowanych części.
- Tożsamość i uprawnienia są określane w warstwie zaufanej aplikacji; Szybka instrukcja to tylko dodatkowa warstwa obrony.
- Solidny szablon podpowiedzi zawiera rolę, zasady postępowania (podstawa, pozwolenie na nie wiem, źródło, konflikt), ponumerowany kontekst i pytanie.
- W wielorundowej rozmowie pytania uzupełniające są oddzielone, a model daje spójne odpowiedzi z historią.
- Podsumowując długą historię, okno kosztów i kontekstu jest pod kontrolą; ACL jest nakładana ponownie w każdej rundzie.
Zadanie aplikacji
(1) Zdefiniuj przynajmniej trzy grupy uprawnień dla własnego asystenta (np. wszyscy, dział, menadżer) i wpisz w tabelce, jaki typ dokumentu jest otwarty dla której grupy. (2) Dostosuj i napisz powyższy szablon podpowiedzi zgodnie ze swoją rolą i tonem; Ponumeruj kontekst i podaj jego źródła. (3) Napisz realistyczny scenariusz rozmowy składający się z trzech rund (pytanie → kontynuacja → kontynuacja) i ręcznie wygeneruj niezależne wersje każdego pytania uzupełniającego. (4) Wyjaśnij w jednym zdaniu, dlaczego w tym scenariuszu należy ponownie zastosować filtr ACL w każdej rundzie.
lista kontrolna
- [ ] Implementuję kontrolę dostępu z filtrem wyszukiwania, po prostu nie polegam na podpowiedziach.
- [ ] Dodaję uziemienie, nie znam uprawnień, źródło i regułę konfliktu do mojego szablonu podpowiedzi.
- [ ] Podaję części kontekstu ponumerowane i przywoływane.
- [ ] Uniezależniam pytania uzupełniające przed pobraniem.
- [ ] Zarządzam kosztami i oknem podsumowując długą historię rozmów.