Dobici:
- Postavite kontrolu pristupa (ACL) koja filtrira dohvaćanje na temelju ovlaštenja korisnika
- Pisanje solidnog predloška upita koji ispravno postavlja kontekst i pitanje korisnika
- Vježbanje neovisnosti pitanja i upravljanja poviješću u višekružnim razgovorima
Uspostavili smo arhitekturu; Sada učinimo to sigurnim, dosljednim i razgovorljivim. Postoje tri kritične teme u ovoj jedinici: (1) kontrola pristupa koja filtrira dohvaćanje na temelju autoriteta korisnika, (2) robustan predložak upita koji ispravno postavlja kontekst i pitanje, (3) neovisnost pitanja i upravljanje poviješću razgovora u više rundi chata. Bez ovo troje, pomoćnik će ili curiti podatke, davati nedosljedne odgovore ili se raspasti na dodatnim pitanjima.
Kontrola pristupa: neovlašteni podaci nikada ne bi smjeli stići
Najveći rizik za poduzeće: Dokument koji korisnik ne bi trebao vidjeti curi u odgovor. Vrlo česta početnička pogreška je "reći modelu da 'pokaže skrivene dokumente' na upit." Ovo nije sigurno. Model može zaboraviti upute ili ih brza injekcija može izbjeći. Ispravno mjesto je faza preuzimanja: neovlašteni komad se uopće ne smije unositi.
Način da to učinite je da primijenite metapodatke autoriteta (odjel, uloga, razina privatnosti) koje ste stavili na svaki dio kao filtar tijekom pretraživanja. Sigurno određujete tko je korisnik (identitet i uloge) na aplikacijskom sloju i pozivu dodajete ACL (Access Control List) filtar.
# Filtrirano dohvaćanjem ovlaštenja (konceptualni)korisnik = autentificiraj(sesija) # autentificiran iz pouzdanog izvora = korisnik.uloge + ["svi"] # npr. ["HR", "admin"]result = vektor_db.search( vektor=embed(question), top_k=20, filter={"permission_group": {"in": allowed}, # samo dopušteni dijelovi "privacy": {"lte": user.level}} # ispod razine)
Oprez: Nikada ne pitajte model za autoritet niti se oslanjajte na upit. Identitet i ovlaštenje određuju se na pouzdanom sloju aplikacije; Filtar za dohvaćanje je obavezan, brza uputa samo je dodatni sloj. "Napisao sam to u upitu" nije sigurnost.
Čvrsti predložak upita
Predložak upita kostur je koji spaja kontekst, korisničko pitanje i upute o ponašanju iz dohvaćanja. Dijelovi dobrog predloška: opis uloge/zadatka, pravila ponašanja (prizemljenje, ne znam dopuštenje, zahtjev za resursima, ton), kontekst, pitanje.
Vi ste korporativni HR asistent. Vaš posao je odgovarati na pitanja zaposlenika SAMO na temelju sljedećeg KONTEKSTA. Pravila:- Ako odgovor nije jasno u kontekstu, napišite "Nisam mogao pronaći informacije o tome u dokumentaciji, provjerite s timom za ljudske resurse". Nemojte nagađati, nemojte izmišljati.- Ako su izvori u kontekstu sukoba, uzmite službenu politiku kao osnovu i navedite kontradikciju.- Dodajte izvor na koji se oslanjate kao [Izvor: datoteka, odjeljak] na kraju svake tvrdnje.- Odgovorite kratkim, jasnim i profesionalnim jezikom. KONTEKST:{numbered_parts}PITANJE: {user_question}
Numeriranje dijelova konteksta ([1], [2], ...) olakšava citiranje modela. Također, napišite izvor na početku svakog djela kako bi ga model mogao ispravno citirati.
Savjet: Zadržite predložak upita konstantnim i uvijek postavljajte varijable (kontekst, pitanje) na ista mjesta. Fiksni predložak povećava mogućnost testiranja i smanjuje troškove zahvaljujući brzom predmemoriranju u nekim sustavima.
KONTEKST:[1] (Izvor: ik_el_kitabi.pdf, Odjeljak 5.2) Godišnji plaćeni dopust je 14 dana...[2] (Izvor: ik_el_kitabi.pdf, odjeljak 5.4) Dopust je 20 dana za osobe s više od 5 godina radnog staža...
Slab upit / Jak upit
Slab (bez uzemljenja, bez izvora, miješani identitet):
Koristite ove dokumente i odgovorite na pitanje: {parts}Korisnik: {question}# Problem: model izlazi iz konteksta, izmišlja, ne navodi izvore, # ponaša se proizvoljno u kontradikciji.
Jaka (uloga + pravila + numerirani kontekst + obavezan izvor):
Vi ste... Samo se oslonite na KONTEKST. U protivnom recite "ne znam". U sukobu odaberite službenu politiku. Dodajte [Izvor: ...] svakoj tvrdnji. KONTEKST: [1]... [2]... PITANJE: {pitanje}# Rezultat: odgovor koji je vjeran kontekstu, izvoru i ispravno upravlja kontradikcijom.
Upravljanje razgovorima s više obilazaka
Pravi korisnik ne postavlja niti jedno pitanje i ostavlja ga na miru; govori. "Koliko dana godišnjeg odmora imam?" → “Što je sa 6-godišnjim zaposlenikom?” → “Kako se prijaviti za to?” Samo drugo i treće pitanje su besmisleni; ovisi o prethodnom kontekstu.
Trebate riješiti dva problema. Prvi je za dohvaćanje: neka naknadno pitanje bude neovisno (prepisivanje pitanja). "Što je sa 6-godišnjim zaposlenikom?" → "Na koliko dana godišnjeg odmora ima pravo zaposlenik od 6 godina?" Tražite ovim neovisnim pitanjem. Drugi je za proizvodnju: također dajete povijest razgovora modelu tako da se dosljedno nastavlja.
# Dva koraka: neovisno → pretraživanje → generiraj s poviješću (konceptualno) neovisno = model.uret( "Koristite povijest razgovora da pitanje bude razumljivo samo po sebi:\nPovijest: {povijest}\nPitanje: {follow_question}") context = retrieval(independent) # pretraživanje s neovisnim questionanswer = model.uret(prompt(context, history, follow_question))
Kako povijest raste (dug razgovor), slanje svih odjednom postaje skupo i ispunjava kontekstni prozor. Rješenje: sažeti prethodne runde ili zadržati zadnjih N rundi i svesti prethodne na sažetak. Stoga troškovi ostaju pod kontrolom i održava se dosljednost.
Status
problem
Rješenje
Naknadno pitanje nema kontekst
Pretrage za pronalaženje besmislene
Učinite pitanje neovisnim (prepišite)
dugo čavrljanje
Troškovi i prozori rastu
Sažetak prošlih turneja
Korisnik promijenio temu
Stari kontekst se zarazi
Smanjite prošli utjecaj na novu temu
Vlast se može razlikovati od ture do ture
Opasnost od curenja
Ponovno primijenite ACL filtar svake runde
Tri mini kućišta
Slučaj 1 — "Sigurnosna" pogreška s upitom. Tvrtka je asistentu stavila povjerljive dokumente o plaći koje je svatko mogao pitati, ali je na upit samo napisala "nemoj davati podatke o plaći". Model je otkrio raspon plaća kada je korisnik postavio pitanje na zaobilazan način. Kada je ACL filtar dodan dohvaćanju (dijelovi plaće samo za ulogu HR), curenje je potpuno zatvoreno; jer dio se više nikad ne donosi.
Slučaj 2 — Uhođenje bez konteksta. U asistentu za podršku, korisnik pita "razdoblje povrata?" → “što je s pokvarenim proizvodom?” Sustav je za "pokvareni proizvod" donosio nebitne dijelove. Kada je dodana neovisnost pitanja ("Koliko je dugo razdoblje povrata za pokvareni proizvod?"), stopa točnih odgovora porasla je s 44% na 90%.
Slučaj 3 — Natečena prošlost. U 30 krugova razgovora s pomoćnikom, svaki poziv poslao je cijelu povijest; Trošak se povećavao 3 puta po krugu, a odgovori su se usporavali. Kad smo se prebacili na strukturu koja je zadržala zadnjih 6 krugova i sažela prethodne, cijena tokena pala je za 62% i dosljednost je održana.
Uobičajene greške
- Prepuštanje autoriteta upitu: Model zaboravlja/zaobilazi; ACL filtar je obavezan pri dohvaćanju.
- Nenabrajanje konteksta: model ne može citirati točan izvor.
- Ne osamostaljivanje sljedećeg pitanja: Dohvaćanje traži besmisleno.
- Slanje cijele povijesti na slijepo: Eksplodira u troškovima i kašnjenju; rezimirati.
- Nezapisivanje pravila kontradiktornosti: model može prikazati nepouzdan izvor kao službeni.
Ukratko
- Kontrola pristupa implementirana je filtrom metapodataka tijekom faze dohvaćanja; Nikada se ne smiju donositi neovlašteni dijelovi.
- Identitet i ovlaštenje određuju se na sloju pouzdane aplikacije; Brza uputa samo je dodatni sloj obrane.
- Robustan predložak upita uključuje ulogu, pravila ponašanja (prizemljenje, ne znam dopuštenje, izvor, sukob), numerirani kontekst i pitanje.
- U višekružnom razgovoru dodatna pitanja su odvojena i model daje dosljedne odgovore s poviješću.
- Sažimanjem duge povijesti, prozor troškova i konteksta drži se pod kontrolom; ACL se ponovno primjenjuje u svakoj rundi.
Zadatak aplikacije
(1) Definirajte najmanje tri autorizacijske grupe za vlastitog pomoćnika (npr. svi, odjel, voditelj) i upišite u tablicu koja vrsta dokumenta je otvorena kojoj grupi. (2) Prilagodite i napišite gornji predložak upita prema vlastitoj ulozi i tonu; Učinite kontekst numeriranim i izvornim. (3) Napišite realističan scenarij razgovora u tri kruga (pitanje → nastavak → nastavak) i ručno generirajte neovisne verzije svakog naknadnog pitanja. (4) Objasnite jednom rečenicom zašto se ACL filtar treba ponovno primijeniti svaki krug u ovom scenariju.
popis za provjeru
- [ ] Implementiram kontrolu pristupa s filtrom za dohvaćanje, samo se ne oslanjam na upit.
- [ ] Dodajem uzemljenje, dopuštenje ne znam, izvor i pravilo sukoba u svoj predložak upita.
- [ ] Dajem dijelove konteksta označene brojevima i referencama.
- [ ] Naknadna pitanja prije preuzimanja činim neovisnima.
- [ ] Upravljam troškovima i prozorom sažimanjem duge povijesti razgovora.