Enhet 6 / 11

Tilgangskontroll, ledetekstmal og samtalebehandling

Gevinster:

  • Sett opp tilgangskontroll (ACL) som filtrerer henting basert på brukerautoritet
  • Skrive en solid spørremal som plasserer konteksten og brukerspørsmålet riktig
  • Øve på spørsmålsuavhengighet og historiehåndtering i flerrunde samtaler

Vi etablerte arkitekturen; La oss nå gjøre det trygt, konsistent og samtalevennlig. Det er tre kritiske emner i denne enheten: (1) tilgangskontroll som filtrerer henting basert på brukerens autoritet, (2) en robust forespørselsmal som plasserer konteksten og spørsmålet riktig, (3) spørsmål uavhengighet og samtalehistorikkbehandling i multi-runde chat. Uten disse tre vil en assistent enten lekke data, gi inkonsekvente svar eller falle fra hverandre på oppfølgingsspørsmål.

Tilgangskontroll: Uautoriserte data bør aldri komme

Bedriftens største risiko: Et dokument som en bruker ikke skal se lekker inn i svaret. En veldig vanlig nybegynnerfeil er å "be modellen om å 'vise skjulte dokumenter' ved spørsmålet." Dette er ikke trygt. Modellen kan glemme en instruksjon eller en rask injeksjon kan unngå den. Riktig sted er hentingsfasen: den uautoriserte brikken skal ikke bringes inn i det hele tatt.

Måten å gjøre dette på er å bruke autoritetsmetadata (avdeling, rolle, personvernnivå) du legger på hver del som et filter under søket. Du bestemmer trygt hvem brukeren er (identitet og roller) på applikasjonslaget og legger til et ACL-filter (Access Control List) i samtalen.

# Filtrert etter autoritetsinnhenting (konseptuell) bruker = autentisere(sesjon) # autentisert fra pålitelig kilde = bruker.roller + ["alle"] # f.eks. ["HR", "admin"]result = vektor_db.search( vektor=embed(question), top_k=20, filter={"permission_group": {"in": allow}, # bare tillatte deler "privacy": {"lte": user.level}} # under nivået)

Forsiktig: Spør aldri modellen om autoritet eller stol på ledeteksten. Identitet og autoritet bestemmes på det pålitelige laget av applikasjonen; Hentingsfilteret er obligatorisk, instruksjonen er bare et ekstra lag. "Jeg skrev det i ledeteksten" er ikke sikkerhet.

Solid ledetekstmal

Spørsmålsmalen er skjelettet som samler konteksten, brukerspørsmålet og atferdsinstruksjonene fra hentingen. Deler av en god mal: rolle-/oppgavebeskrivelse, oppførselsregler (jording, jeg vet ikke tillatelse, ressursforespørsel, tone), kontekst, spørsmål.

Du er en bedrifts HR-assistent. Din jobb er å svare på spørsmål fra ansatte KUN basert på følgende KONTEKST. Regler:- Hvis svaret ikke er tydelig i sammenheng, skriv "Jeg fant ikke informasjon om dette i dokumentasjonen, sjekk med HR-teamet". Ikke gjett, ikke gjør opp.- Hvis kildene i konteksten er i konflikt, ta den offisielle politikken til grunn og oppgi selvmotsigelsen.- Legg til kilden du støtter deg på som [Kilde: fil, avsnitt] på slutten av hver påstand.- Svar på et kort, tydelig og profesjonelt språk. KONTEKST:{numbered_parts}SPØRSMÅL: {user_question}

Nummerering av kontekstdelene ([1], [2], ...) gjør det lettere å sitere modellen. Skriv også kilden i begynnelsen av hvert stykke slik at modellen kan sitere den riktig.

Tips: Hold forespørselsmalen konstant og plasser alltid variabler (kontekst, spørsmål) på de samme stedene. En fast mal både øker testbarheten og reduserer kostnadene takket være hurtigbufring i enkelte systemer.

KONTEKST:[1] (Kilde: ik_el_kitabi.pdf, avsnitt 5.2) Årlig betalt permisjon er 14 dager...[2] (Kilde: ik_el_kitabi.pdf, avsnitt 5.4) Permisjon er 20 dager for personer med mer enn 5 års tjeneste...

Svak forespørsel / sterk forespørsel

Svak (ingen jording, ingen kilde, identitet blandet):

Bruk disse dokumentene og svar på spørsmålet: {parts}Bruker: {question}# Problem: modellen går ut av kontekst, gjør opp, siterer ikke kilder, # oppfører seg vilkårlig i motsetning.

Sterk (rolle + regler + nummerert kontekst + kilde obligatorisk):

Du er... Bare stol på KONTEKST. Ellers si "jeg vet ikke". I konflikt, velg offisiell politikk. Legg til [Kilde: ...] til hver påstand. KONTEKST: [1]... [2]... SPØRSMÅL: {question}# Resultat: svar som er tro mot konteksten, hentet og behandler motsetningen riktig.

Multi-Tour Conversation Management

En ekte bruker stiller ikke et eneste spørsmål og lar det være; snakker. "Hvor mange dager årlig permisjon har jeg?" → «Hva med den 6-årige ansatte?» → "Hvordan søker jeg om det?" Det andre og tredje spørsmålet alene er meningsløse; avhenger av forrige kontekst.

Du må løse to problemer. Den første er for gjenfinning: gjør oppfølgingsspørsmålet uavhengig (omskriving av spørsmål). "Hva med den 6-årige ansatte?" → "Hvor mange dager årlig ferie har en ansatt på 6 år rett til?" Du søker med dette uavhengige spørsmålet. Den andre er for produksjon: du gir også samtalehistorikken til modellen slik at den fortsetter konsekvent.

# To-trinn: uavhengiggjør → søk → generer med historikk (konseptuell) uavhengig = model.uret( "Bruk samtalehistorikken for å gjøre spørsmålet forståelig på egen hånd:\nHistorie: {historie}\nSpørsmål: {følge_spørsmål}") context = gjenfinning(uavhengig) # søk med uavhengig spørsmålsvar = model.uret(prompt) follow_

Etter hvert som historien vokser (lang samtale), blir det dyrt å sende alt om gangen og fyller kontekstvinduet. Løsning: oppsummer de forrige rundene eller behold de siste N rundene og reduser de forrige til sammendraget. Dermed forblir kostnadene under kontroll og konsistens opprettholdes.

Status

problem

Løsning

Oppfølgingsspørsmålet har ingen sammenheng

Hentingssøk meningsløst

Gjør spørsmålet uavhengig (skriv om)

lang prat

Kostnader og vinduet sveller

Oppsummering av tidligere turer

Bruker endret emne

Gammel kontekst blir infisert

Reduser tidligere innflytelse på nytt emne

Autoriteten kan variere mellom turene

Fare for lekkasje

Påfør ACL-filteret på nytt hver runde

Tre minivesker

Tilfelle 1 - "Sikkerhet" feilslutning med spørsmål. Et selskap la konfidensielle lønnsdokumenter på en assistent som hvem som helst kunne spørre, men skrev bare "ikke gi lønnsinformasjon" på forespørselen. Modellen lekket lønnsintervallet da en bruker stilte spørsmålet i rundkjøring. Da ACL-filteret ble lagt til uthentingen (lønnsdeler kun til HR-rollen), var lekkasjen helt lukket; fordi delen blir aldri tatt med lenger.

Tilfelle 2 — Kontekstløs forfølgelse. I en støtteassistent spør brukeren "returperiode?" → "hva med det ødelagte produktet?" Systemet brakte irrelevante deler for det "ødelagte produktet". Når spørsmålsuavhengighet ble lagt til ("Hvor lang er returperioden for et ødelagt produkt?"), økte den korrekte svarprosenten fra 44 % til 90 %.

Tilfelle 3 - Hovent fortid. I 30 runder med chatter med en assistent sendte hver samtale hele historien; Kostnadene økte 3 ganger per runde, og svarene ble bremset. Da vi byttet til en struktur som beholdt de siste 6 rundene og oppsummerte de forrige, sank tokenkostnaden med 62 % og konsistensen ble opprettholdt.

Vanlige feil

  • Overlater autoritet til ledeteksten: Modellen glemmer/omgår; ACL-filter er obligatorisk ved henting.
  • Ikke oppregne konteksten: Modellen kan ikke sitere riktig kilde.
  • Ikke uavhengiggjørende oppfølgingsspørsmålet: Henting søker meningsløst.
  • Sender all historikk blind: Eksploderer i kostnad og forsinkelse; oppsummere.
  • Ikke å skrive motsigelsesregelen: Modellen kan presentere den upålitelige kilden som offisiell.

Oppsummert

  • Tilgangskontroll implementeres med et metadatafilter under gjenfinningsfasen; Uautoriserte deler bør aldri tas med.
  • Identitet og autoritet bestemmes på det klarerte applikasjonslaget; Den raske instruksjonen er bare et ekstra lag med forsvar.
  • Robust meldingsmal inkluderer rolle, oppførselsregler (jording, vet ikke tillatelse, kilde, konflikt), nummerert kontekst og spørsmål.
  • I flerrunde samtaler er oppfølgingsspørsmål frakoblet og modellen gir konsistente svar med historie.
  • Ved å oppsummere den lange historien, holdes kostnads- og kontekstvinduet under kontroll; ACL brukes på nytt hver runde.

Søknadsoppgave

(1) Definer minst tre autorisasjonsgrupper for din egen assistent (f.eks. alle, avdeling, leder) og skriv i en tabell hvilken dokumenttype som er åpen for hvilken gruppe. (2) Tilpass og skriv forespørselsmalen ovenfor i henhold til din egen rolle og tone; Gjør konteksten nummerert og kildet. (3) Skriv et realistisk samtalescenario i tre runder (spørsmål → oppfølging → oppfølging) og generer manuelt uavhengige versjoner av hvert oppfølgingsspørsmål. (4) Forklar i én setning hvorfor ACL-filteret skal brukes på nytt hver runde i dette scenariet.

sjekkliste

  • [ ] Jeg implementerer tilgangskontroll med et gjenfinningsfilter, jeg stoler bare ikke på ledeteksten.
  • [ ] Jeg legger til jording, jeg kjenner ikke tillatelse, kilde og konfliktregel i forespørselsmalen min.
  • [ ] Jeg gir kontekstdelene nummerert og referert til.
  • [ ] Jeg gjør oppfølgingsspørsmål uavhengige før henting.
  • [ ] Jeg administrerer kostnadene og vinduet ved å oppsummere den lange samtalehistorikken.