Dobički:
- Nastavite nadzor dostopa (ACL), ki filtrira pridobivanje na podlagi pooblastila uporabnika
- Pisanje trdne predloge za poziv, ki pravilno postavi kontekst in vprašanje uporabnika
- Vadba neodvisnosti vprašanj in upravljanja zgodovine v večkrožnih pogovorih
Vzpostavili smo arhitekturo; Zdaj pa naredimo to varno, dosledno in pogovorno. V tej enoti so tri kritične teme: (1) nadzor dostopa, ki filtrira iskanje na podlagi avtoritete uporabnika, (2) robustna predloga za poziv, ki pravilno postavi kontekst in vprašanje, (3) neodvisnost vprašanja in upravljanje zgodovine pogovorov v klepetu z več krogi. Brez teh treh bo pomočnik bodisi razkril podatke, dajal nedosledne odgovore ali pa se razpadel pri dodatnih vprašanjih.
Nadzor dostopa: nepooblaščeni podatki ne smejo nikoli prispeti
Največje tveganje v podjetju: dokument, ki ga uporabnik ne bi smel videti, priteče v odgovor. Zelo pogosta začetniška napaka je, da "modelu poveš, naj 'prikaže skrite dokumente' ob pozivu." To ni varno. Model lahko pozabi navodilo ali pa se mu lahko takojšnja injekcija izogne. Pravilno mesto je faza iskanja: nepooblaščenega kosa sploh ne bi smeli prinesti.
To lahko storite tako, da uporabite metapodatke organa (oddelek, vloga, raven zasebnosti), ki jih vnesete v vsak del kot filter med iskanjem. Na ravni aplikacije varno določite, kdo je uporabnik (identiteta in vloge), in klicu dodate filter ACL (Access Control List).
# Filtrirano po pridobitvi pooblastila (konceptualni)uporabnik = avtentikacija(seja) # overjeno iz zaupanja vrednega vira = uporabnik.vloge + ["vsi"] # npr. ["HR", "admin"]result = vektor_db.search( vektor=embed(question), top_k=20, filter={"permission_group": {"in": allowed}, # samo dovoljeni deli "privacy": {"lte": user.level}} # pod nivojem)
Pozor: nikoli ne prosite modela za pooblastilo in se ne zanašajte na poziv. Identiteta in avtoriteta sta določena na zaupanja vrednem sloju aplikacije; Filter za iskanje je obvezen, hitro navodilo je samo dodatna plast. "Napisal sem v pozivu" ni varnost.
Trdna predloga poziva
Predloga poziva je okostje, ki združuje kontekst, uporabniško vprašanje in navodila za vedenje iz pridobivanja. Deli dobre predloge: opis vloge/naloge, pravila obnašanja (prizemljitev, dovoljenje Ne vem, zahteva za vir, ton), kontekst, vprašanje.
Ste kadrovski asistent podjetja. Vaša naloga je odgovarjati SAMO na vprašanja zaposlenih na podlagi naslednjega KONTEKSTA. Pravila: - Če odgovor ni jasno v kontekstu, napišite "Nisem našel informacij o tem v dokumentaciji, preverite pri kadrovski ekipi". Ne ugibajte, ne izmišljujte. – Če si viri v kontekstu nasprotujejo, vzemite uradno politiko kot osnovo in navedite protislovje. – Dodajte vir, na katerega se zanašate, kot [Vir: datoteka, razdelek] na koncu vsake trditve. – Odgovorite v kratkem, jasnem in strokovnem jeziku. OZADJE:{numbered_parts}VPRAŠANJE: {user_question}
Oštevilčenje delov konteksta ([1], [2], ...) olajša citiranje modela. Prav tako napišite vir na začetku vsakega dela, da ga model lahko pravilno navede.
Namig: predloga poziva naj bo stalna in vedno postavite spremenljivke (kontekst, vprašanje) na ista mesta. Fiksna predloga poveča možnost testiranja in zmanjša stroške zahvaljujoč hitremu predpomnjenju v nekaterih sistemih.
OZADJE:[1] (Vir: ik_el_kitabi.pdf, razdelek 5.2) Letni plačani dopust je 14 dni...[2] (Vir: ik_el_kitabi.pdf, oddelek 5.4) Dopust je 20 dni za osebe z več kot 5 leti delovne dobe...
Šibek poziv / močan poziv
Šibko (brez ozemljitve, brez vira, mešana identiteta):
Uporabite te dokumente in odgovorite na vprašanje: {parts}Uporabnik: {question}# Težava: model gre izven konteksta, si izmišljuje, ne navaja virov, # se obnaša poljubno v nasprotju.
Močna (vloga + pravila + oštevilčen kontekst + vir obvezen):
Vi ste ... Samo zanesite se na KONTEKST. V nasprotnem primeru recite "ne vem". V konfliktu izberite uradno politiko. Vsaki trditvi dodajte [Vir: ...]. KONTEKST: [1]... [2]... VPRAŠANJE: {vprašanje}# Rezultat: odgovor, ki je zvest kontekstu, izvira iz vira in pravilno obvladuje protislovje.
Večkratno upravljanje pogovorov
Pravi uporabnik ne postavi niti enega vprašanja in pusti pri miru; govori. "Koliko dni letnega dopusta imam?" → “Kaj pa 6-letni zaposleni?” → "Kako se prijavim?" Samo drugo in tretje vprašanje sta brez pomena; odvisno od prejšnjega konteksta.
Rešiti morate dve težavi. Prvi je za iskanje: naj bo nadaljnje vprašanje neodvisno (prepisovanje vprašanja). "Kaj pa 6-letni zaposleni?" → "Koliko dni letnega dopusta pripada delavcu 6 let?" Iščete s tem neodvisnim vprašanjem. Drugi je za proizvodnjo: modelu posredujete tudi zgodovino pogovorov, tako da se dosledno nadaljuje.
# Dvostopenjski: neodvisno → iskanje → generiraj z zgodovino (konceptualno) independent = model.uret( "Uporabi zgodovino pogovora, da bo vprašanje samo po sebi razumljivo:\nZgodovina: {history}\nVprašanje: {follow_question}") context = retrieval(independent) # iskanje z neodvisnim questionanswer = model.uret(prompt(context, history, follow_question))
Ko zgodovina raste (dolg pogovor), postane pošiljanje vsega naenkrat drago in zapolni kontekstno okno. Rešitev: povzemite prejšnje kroge ali obdržite zadnjih N krogov in zmanjšajte prejšnje na seštevek. Tako ostanejo stroški pod nadzorom in doslednost.
Stanje
problem
rešitev
Nadaljnje vprašanje nima konteksta
Iskanje brez pomena
Naj bo vprašanje neodvisno (prepiši)
dolg klepet
Stroški in okna nabreknejo
Povzetek preteklih tur
Uporabnik je spremenil temo
Stari kontekst se okuži
Zmanjšajte pretekli vpliv na novo temo
Pooblastila se lahko med izleti razlikujejo
Nevarnost puščanja
Ponovno uporabite filter ACL vsak krog
Trije mini kovčki
Primer 1 — »Varnostna« zmota s pozivom. Podjetje je pomočniku dalo zaupne dokumente o plači, ki jih je lahko vprašal kdor koli, vendar je na poziv napisalo le "ne daj podatkov o plači". Model je razkril razpon plač, ko je uporabnik vprašanje zastavil na zaokrožen način. Ko je bil filter ACL dodan v iskanje (deli plače samo za vlogo HR), je bilo puščanje popolnoma zaprto; ker dela nikoli več ne prinesejo.
Primer 2 – Zalezovanje brez konteksta. V asistentu za podporo uporabnik vpraša "obdobje vračila?" → “kaj pa pokvarjen izdelek?” Sistem je za »pokvarjen izdelek« prinesel nepomembne dele. Ko je bila dodana neodvisnost vprašanj ("Kako dolgo je obdobje vračila pokvarjenega izdelka?"), se je stopnja pravilnih odgovorov povečala s 44 % na 90 %.
Primer 3 – Zatečena preteklost. V 30 krogih klepetov s pomočnikom je vsak klic poslal celotno zgodovino; Cena se je povečevala 3-krat na krog, odzivi pa so se upočasnjevali. Ko smo prešli na strukturo, ki je ohranila zadnjih 6 krogov in povzela prejšnje, se je strošek žetona znižal za 62 % in doslednost je bila ohranjena.
Pogoste napake
- Prepuščanje avtoritete pozivu: Model pozabi/zaobide; Filter ACL je obvezen pri pridobivanju.
- Brez naštevanja konteksta: model ne more navesti pravilnega vira.
- Neodvisnost od nadaljnjega vprašanja: Iskanje brez pomena.
- Pošiljanje celotne zgodovine na slepo: eksplodira v stroških in zamudah; povzeti.
- Nezapis protislovnega pravila: model lahko nezanesljiv vir predstavi kot uradnega.
Če povzamem
- Nadzor dostopa je implementiran s filtrom metapodatkov v fazi iskanja; Nikoli ne prinašajte nedovoljenih delov.
- Identiteta in avtoriteta sta določena na sloju zaupanja vredne aplikacije; Hitro navodilo je le dodatna plast obrambe.
- Robustna predloga poziva vključuje vlogo, pravila obnašanja (prizemljitev, ne poznam dovoljenja, vir, konflikt), oštevilčen kontekst in vprašanje.
- V pogovoru z več krogi so nadaljnja vprašanja ločena in model ustvari skladne odgovore z zgodovino.
- S povzemanjem dolge zgodovine sta okno stroškov in konteksta pod nadzorom; ACL se znova uporabi vsak krog.
Aplikacijska naloga
(1) Določite vsaj tri avtorizacijske skupine za lastnega pomočnika (npr. vsi, oddelek, vodja) in v tabelo vpišite, katera vrsta dokumenta je odprta kateri skupini. (2) Prilagodite in napišite zgornjo predlogo poziva glede na svojo vlogo in ton; Oštevilčite kontekst in navedite vir. (3) Napišite realističen scenarij pogovora v treh krogih (vprašanje → nadaljevanje → nadaljevanje) in ročno ustvarite neodvisne različice vsakega nadaljnjega vprašanja. (4) V enem stavku razložite, zakaj je treba filter ACL znova uporabiti vsak krog v tem scenariju.
kontrolni seznam
- [ ] Implementiram nadzor dostopa s filtrom za iskanje, preprosto se ne zanašam na poziv.
- [ ] Svoji predlogi poziva dodam ozemljitev, dovoljenje Ne vem, vir in pravilo konflikta.
- [ ] Dele konteksta oštevilčim in navedem reference.
- [ ] Nadaljnja vprašanja pred iskanjem naredim neodvisna.
- [ ] Upravljam stroške in okno s povzemanjem dolge zgodovine pogovorov.