Jedinica 6 / 11

Kontrola pristupa, Prompt Template i upravljanje razgovorom

Dobici:

  • Postavite kontrolu pristupa (ACL) koja filtrira preuzimanje na osnovu ovlaštenja korisnika
  • Pisanje čvrstog predloška upita koji ispravno postavlja kontekst i korisničko pitanje
  • Vježbanje pitanja nezavisnosti i upravljanja istorijom u višekružnim razgovorima

Uspostavili smo arhitekturu; Sada učinimo to sigurnim, dosljednim i razgovornim. Postoje tri kritične teme u ovoj jedinici: (1) kontrola pristupa koja filtrira pronalaženje na osnovu autoriteta korisnika, (2) robusni predložak prompta koji ispravno postavlja kontekst i pitanje, (3) nezavisnost pitanja i upravljanje istorijom razgovora u razgovoru sa više krugova. Bez ova tri, asistent će ili procuriti podatke, dati nedosljedne odgovore ili će se raspasti na naknadnim pitanjima.

Kontrola pristupa: Neovlašteni podaci nikada ne bi trebali stići

Najveći rizik preduzeća: Dokument koji korisnik ne bi trebao vidjeti propušta u odgovor. Vrlo česta početnička greška je "kazati modelu da 'pokaže skrivene dokumente' na prompt." Ovo nije sigurno. Model može zaboraviti instrukciju ili je hitna injekcija može izbjeći. Pravo mjesto je faza preuzimanja: neovlašteni komad uopće ne treba unositi.

Način da to uradite je da primenite metapodatke autoriteta (odeljenje, uloga, nivo privatnosti) koje ste stavili na svaki deo kao filter tokom pretrage. Sigurno određujete tko je korisnik (identitet i uloge) na sloju aplikacije i pozivu dodajete filter ACL (Lista kontrole pristupa).

# Filtriran po autoritetu preuzimanja (konceptualni)user = authenticate(session) # autentificiran iz pouzdanog izvora = user.roles + ["svi"] # npr. ["HR", "admin"]rezultat = vektor_db.search( vektor=embed(pitanje), top_k=20, filter={"permission_group": {"in": dozvoljeno}, # dozvoljeni samo dijelovi "privatnost": {"lte": user.level}} # ispod nivoa)

Oprez: Nikada nemojte tražiti od modela ovlaštenje ili se oslanjati na upit. Identitet i ovlaštenje se određuju na pouzdanom sloju aplikacije; Filter za pronalaženje je obavezan, brza instrukcija je samo dodatni sloj. "Napisao sam to u promptu" nije sigurnost.

Solid Prompt Template

Predložak upita je kostur koji objedinjuje kontekst, korisničko pitanje i upute o ponašanju iz preuzimanja. Dijelovi dobrog šablona: opis uloge/zadatka, pravila ponašanja (osnova, ne znam dozvolu, zahtjev za resurse, ton), kontekst, pitanje.

Vi ste korporativni HR asistent. Vaš posao je da odgovarate na pitanja zaposlenih SAMO na osnovu sljedećeg KONTEKSTA. Pravila: - Ako odgovor nije jasan u kontekstu napišite "Nisam mogao pronaći informaciju o ovome u dokumentaciji, provjerite sa HR timom". Ne pogađajte, ne izmišljajte.- Ako se izvori u kontekstu sukobljavaju, uzmite zvaničnu politiku kao osnovu i navedite kontradikciju.- Dodajte izvor na koji se oslanjate kao [Izvor: fajl, odjeljak] na kraju svake tvrdnje.- Odgovorite kratkim, jasnim i profesionalnim jezikom. KONTEKST:{numbered_parts}PITANJE: {user_question}

Numerisanjem delova konteksta ([1], [2], ...) je lakše citirati model. Također, napišite izvor na početku svakog dijela kako bi ga model mogao ispravno citirati.

Savjet: Održavajte šablon prompt konstantnim i uvijek postavljajte varijable (kontekst, pitanje) na ista mjesta. Fiksni šablon istovremeno povećava mogućnost testiranja i smanjuje troškove zahvaljujući brzom keširanju u nekim sistemima.

KONTEKST:[1] (Izvor: ik_el_kitabi.pdf, Odjeljak 5.2) Godišnje plaćeno odsustvo je 14 dana...[2] (Izvor: ik_el_kitabi.pdf, Odjeljak 5.4) Odsustvo je 20 dana za osobe sa više od 5 godina radnog staža...

Slaba prompt / jaka prompt

Slab (bez uzemljenja, bez izvora, pomiješan identitet):

Koristite ove dokumente i odgovorite na pitanje: {parts}Korisnik: {question}# Problem: model izlazi iz konteksta, izmišlja, ne citira izvore, # ponaša se proizvoljno u kontradikciji.

Jaka (uloga + pravila + numerisani kontekst + izvor obavezan):

Vi ste... Samo se oslonite na KONTEKST. U suprotnom, recite "ne znam". U sukobu, izaberite zvaničnu politiku. Dodajte [Izvor: ...] svakoj tvrdnji. KONTEKST: [1]... [2]... PITANJE: {pitanje}# Rezultat: odgovor koji je vjeran kontekstu, izvor i ispravno upravlja kontradikcijom.

Multi-Tour Conversation Management

Pravi korisnik ne postavlja nijedno pitanje i ne ostavlja ga na miru; govori. "Koliko dana godišnjeg odmora imam?" → „Šta je sa 6-godišnjim radnikom?“ → „Kako da se prijavim za to?“ Samo drugo i treće pitanje su besmislene; zavisi od prethodnog konteksta.

Morate riješiti dva problema. Prvi je za pronalaženje: učinite naknadno pitanje nezavisnim (ponovno pisanje pitanja). “Šta je sa 6-godišnjim zaposlenim?” → "Na koliko dana godišnjeg odmora ima pravo zaposleni od 6 godina?" Tražite sa ovim nezavisnim pitanjem. Drugi je za proizvodnju: također dajete historiju razgovora modelu tako da se dosljedno nastavlja.

# U dva koraka: neovisno → pretraži → generiraj s historijom (konceptualno) nezavisno = model.uret( "Koristite historiju razgovora da pitanje bude razumljivo samo po sebi:\nHistory: {history}\nPitanje: {follow_question}") kontekst = pronalaženje(nezavisno) # pretraživanje sa nezavisnim pitanjem odgovor = model.uret(prompt) follow(context)

Kako istorija raste (dugačak razgovor), slanje svega po jednom postaje skupo i ispunjava prozor konteksta. Rješenje: sumirajte prethodne runde ili zadržite zadnjih N rundi i svedite prethodne na sažetak. Dakle, troškovi ostaju pod kontrolom i konzistentnost se održava.

Status

problem

Rješenje

Naknadno pitanje nema kontekst

Pretraživanje pretraživanja besmisleno

Učinite pitanje nezavisnim (prepišite)

dug chat

Troškovi i prozori rastu

Sažetak prošlih putovanja

Korisnik je promijenio temu

Stari kontekst se inficira

Smanjite uticaj prošlosti na novu temu

Ovlaštenje može varirati između obilazaka

Rizik od curenja

Ponovo primijenite ACL filter svaki krug

Tri mini futrole

Slučaj 1 — „Sigurnosna“ zabluda sa promptom. Kompanija je stavila povjerljive dokumente o plaćama na pomoćnika kojeg je svako mogao pitati, ali je samo napisala "nemoj davati podatke o plati" na upitu. Model je otkrio raspon plata kada je korisnik postavio pitanje na zaobilazni način. Kada je ACL filter dodan u pronalaženje (dijelovi plaće samo za ulogu HR), curenje je potpuno zatvoreno; jer se dio više nikad ne donosi.

Slučaj 2 — Uhođenje bez konteksta. U pomoćniku za podršku, korisnik pita "period povrata?" → „Šta je sa pokvarenim proizvodom?“ Sistem je doneo nebitne delove za "pokvareni proizvod". Kada se doda nezavisnost pitanja ("Koliko je dug period povrata neispravnog proizvoda?"), stopa tačnih odgovora se povećala sa 44% na 90%.

Slučaj 3 — Otečena prošlost. U 30 rundi ćaskanja sa asistentom, svaki poziv je poslao čitavu istoriju; Cijena se povećavala 3 puta po rundi, a odgovori su se usporavali. Kada smo prešli na strukturu koja je zadržala zadnjih 6 rundi i sumirala prethodne, trošak tokena je pao za 62% i konzistentnost je zadržana.

Uobičajene greške

  • Ostavljanje ovlaštenja promptu: Model zaboravlja/zaobilazi; ACL filter je obavezan pri preuzimanju.
  • Ne nabrajanje konteksta: Model ne može citirati tačan izvor.
  • Nezavisnost od naknadnog pitanja: besmislene pretrage traženja.
  • Slanje sve istorije na slijepo: Eksplodira u cijeni i kašnjenju; sumirati.
  • Ne pisati pravilo kontradiktornosti: model može prikazati nepouzdan izvor kao zvaničan.

Ukratko

  • Kontrola pristupa se implementira pomoću filtera metapodataka tokom faze preuzimanja; Nikada se ne smiju donositi nedozvoljeni dijelovi.
  • Identitet i ovlaštenje se određuju na pouzdanom sloju aplikacije; Brza instrukcija je samo dodatni sloj odbrane.
  • Robustan predložak upita uključuje ulogu, pravila ponašanja (utemeljenje, ne znam dozvolu, izvor, sukob), numerisani kontekst i pitanje.
  • U više krugova razgovora, dodatna pitanja su odvojena i model daje konzistentne odgovore s istorijom.
  • Sažimanjem duge istorije, okvir troškova i konteksta se drži pod kontrolom; ACL se ponovo primjenjuje svaki krug.

Zadatak aplikacije

(1) Definirajte najmanje tri autorizacijske grupe za svog pomoćnika (npr. svi, odjel, menadžer) i upišite u tablicu koja vrsta dokumenta je za koju grupu otvorena. (2) Prilagodite i napišite gornji predložak upita prema vlastitoj ulozi i tonu; Neka kontekst bude numerisan i izvor. (3) Napišite realističan scenario razgovora u tri kruga (pitanje → nastavak → nastavak) i ručno generirajte nezavisne verzije svakog dodatnog pitanja. (4) Objasnite u jednoj rečenici zašto ACL filter treba ponovo primijeniti svaki krug u ovom scenariju.

kontrolna lista

  • [ ] Implementiram kontrolu pristupa sa filterom za pronalaženje, samo se ne oslanjam na prompt.
  • [ ] Dodajem uzemljenje, ne znam dozvolu, izvor i pravilo sukoba u svoj predložak upita.
  • [ ] Dajem delove konteksta numerisane i referencirane.
  • [ ] Nezavisna sam dodatna pitanja prije preuzimanja.
  • [ ] Upravljam troškovima i prozorima sumirajući dugu istoriju razgovora.