Vienetas 6 / 11

Prieigos kontrolė, greitas šablonas ir pokalbių valdymas

Pelnas:

  • Nustatykite prieigos kontrolę (ACL), kuri filtruoja gavimą pagal vartotojo teisę
  • Rašyti tvirtą raginimo šabloną, kuris teisingai pateikia kontekstą ir vartotojo klausimą
  • Klausimų nepriklausomumo ir istorijos valdymo praktikavimas kelių ratų pokalbiuose

Sukūrėme architektūrą; Dabar paverskime tai saugiu, nuosekliu ir bendraujančiu. Šiame skyriuje yra trys svarbios temos: (1) prieigos kontrolė, kuri filtruoja paiešką pagal vartotojo įgaliojimus, (2) patikimas raginimo šablonas, kuris teisingai pateikia kontekstą ir klausimą, (3) klausimų nepriklausomumas ir pokalbių istorijos valdymas kelių raundų pokalbyje. Be šių trijų asistentas nutekės duomenis, pateiks nenuoseklius atsakymus arba išsiskirs dėl tolesnių klausimų.

Prieigos kontrolė: neleistini duomenys niekada neturėtų atvykti

Didžiausia įmonės rizika: dokumentas, kurio vartotojas neturėtų matyti, patenka į atsakymą. Labai dažna pradedančiųjų klaida yra „prašant modeliui nurodyti „rodyti paslėptus dokumentus“. Tai nėra saugu. Modelis gali pamiršti nurodymą arba greitas įpurškimas gali jo išvengti. Tinkama vieta yra paėmimo fazė: neleistino kūrinio apskritai negalima įnešti.

Tai galima padaryti naudojant autoriteto metaduomenis (departamentą, vaidmenį, privatumo lygį), kuriuos įdėjote kiekvienai daliai kaip filtrą paieškos metu. Galite saugiai nustatyti, kas yra vartotojas (tapatybė ir vaidmenys) programos lygmenyje, ir į skambutį įtraukite ACL (prieigos valdymo sąrašo) filtrą.

# Filtruota pagal autoritetą, nuskaitymą (konceptualų) vartotojas = autentifikuoti(sesija) # autentifikuotas iš patikimo šaltinio = user.roles + ["visi"] # pvz. ["HR", "admin"]result = vektor_db.search(vektori=įterpti(klausimas), top_k=20, filtras={"permission_group": {"in": leidžiama}, # tik leidžiamos dalys "privatumas": {"lte": user.level}} # žemiau lygio)

Atsargiai: niekada neprašykite modelio autoriteto ir nepasikliaukite raginimu. Tapatybė ir įgaliojimai nustatomi patikimame programos lygyje; Atkūrimo filtras yra privalomas, greita instrukcija yra tik papildomas sluoksnis. „Rašiau į raginimą“ nėra saugumas.

Tvirtas raginimo šablonas

Raginimo šablonas yra skeletas, sujungiantis kontekstą, vartotojo klausimą ir elgesio instrukcijas iš paieškos. Gero šablono dalys: vaidmens/užduoties aprašymas, elgesio taisyklės (įžeminimas, leidimo nežinau, resursų užklausa, tonas), kontekstas, klausimas.

Esate įmonės personalo padėjėjas. Jūsų darbas yra atsakyti į darbuotojų klausimus TIK remiantis šiuo KONTEKSTU. Taisyklės: - Jei atsakymas nėra aiškus kontekste, parašykite „Dokumentacijoje neradau informacijos apie tai, pasitarkite su personalo komanda“. Nespėliokite, negalvokite.- Jei kontekste esantys šaltiniai prieštarauja, remkitės oficialia politika ir nurodykite prieštaravimą.- Kiekvieno teiginio pabaigoje pridėkite šaltinį, kuriuo remiatės, kaip [Šaltinis: byla, skyrius].- Atsakykite trumpa, aiškia ir profesionalia kalba. KONTEKSTAS:{numbered_parts}KLAUSIMAS: {user_question}

Kontekstinių dalių numeravimas ([1], [2], ...) palengvina modelio citavimą. Be to, kiekvieno kūrinio pradžioje parašykite šaltinį, kad modelis galėtų teisingai jį cituoti.

Patarimas: laikykite nuolatinį raginimo šabloną ir visada įdėkite kintamuosius (kontekstą, klausimą) tose pačiose vietose. Fiksuotas šablonas padidina testavimą ir sumažina išlaidas, nes kai kuriose sistemose greitai kaupiama talpykloje.

KONTEKSTAS:[1] (Šaltinis: ik_el_kitabi.pdf, 5.2 skyrius) Kasmetinės mokamos atostogos yra 14 dienų...[2] (Šaltinis: ik_el_kitabi.pdf, 5.4 skyrius) Žmonėms, turintiems daugiau nei 5 metų darbo stažą, atostogos yra 20 dienų...

Silpnas raginimas / stiprus raginimas

Silpna (nėra įžeminimo, nėra šaltinio, tapatybė sumaišyta):

Naudokite šiuos dokumentus ir atsakykite į klausimą: {parts}Vartotojas: {klausimas}# Problema: modelis iškrenta iš konteksto, sugalvoja, nenurodo šaltinių, # elgiasi savavališkai prieštaringai.

Stiprus (vaidmuo + taisyklės + sunumeruotas kontekstas + šaltinis privalomas):

Jūs esate... Tiesiog pasikliaukite KONTEKSTU. Kitu atveju pasakykite „nežinau“. Kilus konfliktui, pasirinkite oficialią politiką. Prie kiekvieno teiginio pridėkite [Šaltinis: ...].KONTEKSTAS: [1]... [2]... KLAUSIMAS: {klausimas}# Rezultatas: atsakymas, atitinkantis kontekstą, pagrįstas ir teisingai valdantis prieštaravimą.

Kelių kelionių pokalbių valdymas

Tikras vartotojas neužduoda nė vieno klausimo ir nepalieka jo ramybėje; kalba. "Kiek dienų turiu kasmetinių atostogų?" → „O kaip su 6 metų darbuotoja? → „Kaip pateikti paraišką? Vien antrasis ir trečiasis klausimai yra beprasmiai; priklauso nuo ankstesnio konteksto.

Turite išspręsti dvi problemas. Pirmasis skirtas atkurti: padarykite tolesnį klausimą nepriklausomą (klausimo perrašymas). „O kaip su 6 metų darbuotoja? → "Kiek dienų kasmetinių atostogų turi 6 metų darbuotojas?" Jūs ieškote šiuo nepriklausomu klausimu. Antrasis skirtas gamybai: modeliui taip pat suteikiate pokalbio istoriją, kad ji tęstųsi nuosekliai.

# Dviejų žingsnių: nepriklausomybė → paieška → generuoti su istorija (konceptuali) nepriklausomas = model.uret( "Naudokite pokalbių istoriją, kad klausimas būtų suprantamas atskirai:\nIstorija: {istorija}\nKlausimas: {follow_question}") kontekstas = paieška(nepriklausomas) # paieška su nepriklausomu klausimo atsakymu istorija = model.uret(prompt, follow)

Istorijai plečiantis (ilgas pokalbis), jos siuntimas vienu metu tampa brangus ir užpildo konteksto langą. Sprendimas: apibendrinti ankstesnius turus arba pasilikti paskutinius N, o ankstesnius sumažinti iki suvestinės. Taigi išlaidos išlieka kontroliuojamos ir išlaikomas nuoseklumas.

Būsena

problema

Sprendimas

Tolesnis klausimas neturi konteksto

Atkūrimo paieškos beprasmės

Padarykite klausimą nepriklausomą (perrašykite)

ilgas pokalbis

Kaina ir langas išsipučia

Ankstesnių kelionių santrauka

Vartotojas pakeitė temą

Senas kontekstas užsikrečia

Sumažinkite ankstesnę įtaką naujai temai

Įgaliojimai įvairiose kelionėse gali skirtis

Nutekėjimo pavojus

Kiekvieną kartą naudokite ACL filtrą

Trys mini dėklai

1 atvejis – „Saugumo“ klaida su raginimu. Įmonė padėjėjui padėjo slaptus atlyginimo dokumentus, kurių galėjo paklausti bet kas, bet ragelyje tik parašė „neteikite informacijos apie atlyginimą“. Modelis nutekino atlyginimų diapazoną, kai vartotojas uždavė klausimą apvaliu būdu. Pridėjus ACL filtrą prie paieškos (atlyginimo dalys tik prie HR vaidmens), nuotėkis buvo visiškai uždarytas; nes dalis daugiau niekada neatnešama.

2 atvejis – persekiojimas be konteksto. Pagalbos asistente vartotojas klausia "grįžimo laikotarpis?" → "o kaip sugedęs produktas?" Sistema atnešė „sugedusiam produktui“ nereikšmingų dalių. Pridėjus klausimo nepriklausomumą („Kiek yra sugedusios prekės grąžinimo laikotarpis?“), teisingų atsakymų rodiklis padidėjo nuo 44% iki 90%.

3 atvejis – išpūsta praeitis. Per 30 pokalbių su asistentu raundų kiekvienas skambutis išsiųsdavo visą istoriją; Kaina išaugo 3 kartus per raundą, o atsakymai lėtėjo. Kai perėjome prie struktūros, kuri išlaikė paskutinius 6 raundus ir apibendrino ankstesnius, žetonų kaina sumažėjo 62%, o nuoseklumas išliko.

Dažnos klaidos

  • Autoriteto palikimas raginimui: modelis pamiršta/apeina; ACL filtras yra privalomas nuskaitant.
  • Neįvardijamas kontekstas: modelis negali nurodyti teisingo šaltinio.
  • Nepriklausomai nuo tolesnio klausimo: paieškos ieško beprasmiška.
  • Visos istorijos siuntimas aklai: sprogsta kaina ir vėlavimas; apibendrinti.
  • Nerašoma prieštaravimo taisyklės: Modelis gali pateikti nepatikimą šaltinį kaip oficialų.

Apibendrinant

  • Prieigos kontrolė įgyvendinama metaduomenų filtru paieškos fazės metu; Niekada negalima atsinešti neleistinų dalių.
  • Tapatybė ir įgaliojimai nustatomi patikimame taikomosios programos lygmenyje; Greitas nurodymas yra tik papildomas gynybos sluoksnis.
  • Tvirtas raginimo šablonas apima vaidmenį, elgesio taisykles (įžeminimas, nežinia leidimo, šaltinis, konfliktas), sunumeruotas kontekstas ir klausimas.
  • Kelių pokalbių metu tolesni klausimai atsiejami ir modelis pateikia nuoseklius atsakymus su istorija.
  • Apibendrinant ilgą istoriją, kainos ir konteksto langas yra kontroliuojamas; ACL iš naujo taikomas kiekvieną kartą.

Taikymo užduotis

(1) Apibrėžkite bent tris savo asistento įgaliojimų grupes (pvz., visi, skyrius, vadovas) ir lentelėje parašykite, kuris dokumento tipas kuriai grupei yra atviras. (2) Pritaikykite ir parašykite aukščiau pateiktą raginimo šabloną pagal savo vaidmenį ir toną; Sunumeruokite kontekstą ir nurodykite šaltinį. (3) Parašykite trijų raundų tikrovišką pokalbio scenarijų (klausimas → tolesni veiksmai → tolesni veiksmai) ir rankiniu būdu sukurkite nepriklausomas kiekvieno tolesnio klausimo versijas. (4) Vienu sakiniu paaiškinkite, kodėl ACL filtras turėtų būti iš naujo taikomas kiekvieną kartą pagal šį scenarijų.

kontrolinis sąrašas

  • [ ] Prieigos kontrolę įgyvendinu su paieškos filtru, tik nepasitikiu raginimu.
  • [ ] Pridedu įžeminimą, aš nežinau leidimo, šaltinio ir konflikto taisyklės prie savo raginimo šablono.
  • [ ] Pateikiu kontekstines dalis sunumeruotas ir nurodytas.
  • [ ] Tolesnius klausimus paverčiau nepriklausomais prieš gaudamas.
  • [ ] Apibendrindamas ilgą pokalbių istoriją, tvarkau išlaidas ir langą.