Enhed 6 / 11

Adgangskontrol, promptskabelon og samtalestyring

Gevinster:

  • Konfigurer adgangskontrol (ACL), der filtrerer hentning baseret på brugerautoritet
  • At skrive en solid promptskabelon, der placerer konteksten og brugerspørgsmålet korrekt
  • Øvelse af spørgsmålsuafhængighed og historiestyring i multi-runde samtaler

Vi etablerede arkitekturen; Lad os nu gøre det sikkert, konsekvent og samtaleagtigt. Der er tre kritiske emner i denne enhed: (1) adgangskontrol, der filtrerer hentning baseret på brugerens autoritet, (2) en robust promptskabelon, der placerer konteksten og spørgsmålet korrekt, (3) spørgsmål om uafhængighed og håndtering af samtalehistorik i multi-round chat. Uden disse tre vil en assistent enten lække data, give inkonsistente svar eller falde fra hinanden på opfølgende spørgsmål.

Adgangskontrol: Uautoriserede data bør aldrig komme

Virksomhedens største risiko: Et dokument, som en bruger ikke bør se, lækker ind i svaret. En meget almindelig begynderfejl er at "bede modellen om at 'vise skjulte dokumenter' ved prompten." Dette er ikke sikkert. Modellen glemmer muligvis en instruktion, eller en hurtig injektion kan undgå den. Det korrekte sted er genfindingsfasen: det uautoriserede stykke bør slet ikke bringes ind.

Måden at gøre dette på er at anvende de autoritetsmetadata (afdeling, rolle, privatlivsniveau), du sætter på hver del som et filter under søgningen. Du bestemmer sikkert, hvem brugeren er (identitet og roller) på applikationslaget og tilføjer et ACL-filter (Access Control List) til opkaldet.

# Filtreret efter autorisationshentning (konceptuel) bruger = godkend(session) # godkendt fra betroet kilde = bruger.roller + ["alle"] # f.eks. ["HR", "admin"]result = vektor_db.search( vektor=embed(question), top_k=20, filter={"permission_group": {"in": allow}, # kun tilladte dele "privacy": {"lte": user.level}} # under niveauet)

Forsigtig: Spørg aldrig modellen om autoritet eller stol på prompten. Identitet og autoritet bestemmes på det betroede lag af applikationen; Hentningsfilteret er obligatorisk, den hurtige instruktion er blot et ekstra lag. "Jeg skrev det i prompten" er ikke sikkerhed.

Solid prompt skabelon

Promptskabelonen er skelettet, der samler konteksten, brugerspørgsmålet og adfærdsinstruktionerne fra hentning. Dele af en god skabelon: rolle-/opgavebeskrivelse, adfærdsregler (grounding, jeg kender ikke tilladelse, ressourceanmodning, tone), kontekst, spørgsmål.

Du er en virksomheds HR-assistent. Din opgave er KUN at besvare medarbejderspørgsmål baseret på følgende KONTEKST. Regler:- Hvis svaret ikke er tydeligt i sammenhængen, skriv "Jeg kunne ikke finde information om dette i dokumentationen, tjek med HR-teamet". Lad være med at gætte, lad være med at gøre op.- Hvis kilderne i sammenhængen er i konflikt, tag den officielle politik som grundlag og angiv selvmodsigelsen.- Tilføj den kilde, du stoler på, som [Kilde: fil, afsnit] i slutningen af ​​hver påstand.- Besvar i et kort, klart og professionelt sprog. KONTEKST:{numbered_parts}SPØRGSMÅL: {user_question}

Nummerering af kontekstdelene ([1], [2], ...) gør det lettere at citere modellen. Skriv også kilden i begyndelsen af ​​hvert stykke, så modellen kan citere det korrekt.

Tip: Hold promptskabelonen konstant og placer altid variabler (kontekst, spørgsmål) de samme steder. En fast skabelon både øger testbarheden og reducerer omkostningerne takket være hurtig caching i nogle systemer.

KONTEKST:[1] (Kilde: ik_el_kitabi.pdf, afsnit 5.2) Årlig betalt orlov er 14 dage...[2] (Kilde: ik_el_kitabi.pdf, afsnit 5.4) Orlov er 20 dage for personer med mere end 5 års anciennitet...

Svag prompt / stærk prompt

Svag (ingen jordforbindelse, ingen kilde, identitet blandet):

Brug disse dokumenter og besvar spørgsmålet: {parts}Bruger: {spørgsmål}# Problem: modellen går ud af kontekst, gør op, citerer ikke kilder, # opfører sig vilkårligt i modstrid.

Stærk (rolle + regler + nummereret kontekst + kilde obligatorisk):

Du er... Bare stol på KONTEKST. Ellers skal du sige "Jeg ved det ikke". I konflikt, vælg officiel politik. Tilføj [Kilde: ...] til hver påstand. KONTEKST: [1]... [2]... SPØRGSMÅL: {spørgsmål}# Resultat: svar, der er trofast over for konteksten, hentet og håndterer modsigelsen korrekt.

Multi-Tour Samtale Management

En rigtig bruger stiller ikke et eneste spørgsmål og lader det være; taler. "Hvor mange dages årlig ferie har jeg?" → "Hvad med den 6-årige medarbejder?" → "Hvordan ansøger jeg om det?" Alene det andet og tredje spørgsmål er meningsløse; afhænger af den tidligere kontekst.

Du skal løse to problemer. Den første er til genfinding: gør opfølgningsspørgsmålet uafhængigt (omskrivning af spørgsmål). "Hvad med den 6-årige medarbejder?" → "Hvor mange dages årlig ferie har en medarbejder på 6 år ret til?" Du søger med dette uafhængige spørgsmål. Den anden er til produktion: Du giver også samtalehistorikken til modellen, så den fortsætter konsekvent.

# To-trin: uafhængig → søg → generér med historie (konceptuel) uafhængig = model.uret( "Brug samtalehistorikken til at gøre spørgsmålet forståeligt i sig selv:\nHistorie: {historie}\nSpørgsmål: {følge_spørgsmål}") context = genfinding(uafhængig) # søg med uafhængigt spørgsmålsvar = model.uret(prompt), follow_

Efterhånden som historien vokser (lang samtale), bliver det dyrt at sende det hele ad gangen og fylder kontekstvinduet. Løsning: opsummer de foregående runder eller behold de sidste N runder og reducer de foregående til opsummeringen. Dermed forbliver omkostningerne under kontrol, og konsistensen opretholdes.

Status

problem

Løsning

Opfølgende spørgsmål har ingen sammenhæng

Hentesøgninger meningsløse

Gør spørgsmålet uafhængigt (omskriv)

lang chat

Omkostninger og vindue svulmer

Oversigt over tidligere ture

Brugeren skiftede emne

Gammel kontekst bliver inficeret

Reducer tidligere indflydelse på nyt emne

Autoriteten kan variere mellem ture

Risiko for lækage

Påfør ACL-filter igen hver runde

Tre mini etuier

Case 1 - "Sikkerhed" fejlslutning med prompt. Et firma lagde fortrolige løndokumenter på en assistent, som enhver kunne spørge, men skrev kun "giv ikke lønoplysninger" på prompten. Modellen lækkede lønintervallet, da en bruger stillede spørgsmålet i en rundkørsel. Da ACL-filteret blev tilføjet til afhentningen (løndele kun til HR-rollen), var lækagen helt lukket; fordi delen er aldrig bragt længere.

Case 2 — Kontekstløs stalking. I en supportassistent spørger brugeren "returperiode?" → "hvad med det ødelagte produkt?" Systemet bragte irrelevante dele til det "brudte produkt". Da spørgsmålsuafhængighed blev tilføjet ("Hvor lang er returperioden for et ødelagt produkt?"), steg den korrekte svarprocent fra 44 % til 90 %.

Case 3 - Hævet fortid. I 30 runder af chats med en assistent sendte hvert opkald hele historien; Omkostningerne steg 3 gange pr. runde, og svarene blev langsommere. Da vi skiftede til en struktur, der holdt de sidste 6 runder og opsummerede de foregående, faldt token-omkostningerne med 62%, og konsistensen blev opretholdt.

Almindelige fejl

  • Overlader autoritet til prompten: Model glemmer/omgår; ACL-filter er obligatorisk ved hentning.
  • Uden at opregne konteksten: Modellen kan ikke citere den korrekte kilde.
  • Ikke uafhængig af opfølgningsspørgsmålet: Hentning søger meningsløst.
  • Sender al historie blindt: Eksploderer i omkostninger og forsinkelse; sammenfatte.
  • Ikke at skrive modsigelsesreglen: Modellen kan præsentere den upålidelige kilde som officiel.

Sammenfattende

  • Adgangskontrol implementeres med et metadatafilter under genfindingsfasen; Uautoriserede dele må aldrig medbringes.
  • Identitet og autoritet bestemmes på det betroede applikationslag; Den hurtige instruktion er blot et ekstra lag af forsvar.
  • Robust promptskabelon inkluderer rolle, adfærdsregler (jordforbindelse, ved ikke-tilladelse, kilde, konflikt), nummereret kontekst og spørgsmål.
  • I multi-runde samtale afkobles opfølgende spørgsmål, og modellen producerer konsistente svar med historie.
  • Ved at opsummere den lange historie holdes omkostnings- og kontekstvinduet under kontrol; ACL genanvendes hver runde.

Ansøgningsopgave

(1) Definer mindst tre autorisationsgrupper for din egen assistent (fx alle, afdeling, leder) og skriv i en tabel, hvilken dokumenttype der er åben for hvilken gruppe. (2) Tilpas og skriv ovenstående promptskabelon i henhold til din egen rolle og tone; Gør konteksten nummereret og kilde. (3) Skriv et realistisk samtalescenarie i tre runder (spørgsmål → opfølgning → opfølgning) og generer manuelt uafhængige versioner af hvert opfølgende spørgsmål. (4) Forklar i én sætning, hvorfor ACL-filteret skal genanvendes hver runde i dette scenarie.

tjekliste

  • [ ] Jeg implementerer adgangskontrol med et genfindingsfilter, jeg stoler bare ikke på prompten.
  • [ ] Jeg tilføjer jordforbindelse, jeg kender ikke tilladelse, kilde og konfliktregel til min promptskabelon.
  • [ ] Jeg giver kontekstdelene nummereret og refereret.
  • [ ] Jeg gør opfølgende spørgsmål uafhængige inden hentning.
  • [ ] Jeg administrerer omkostningerne og vinduet ved at opsummere den lange samtalehistorik.