Eenheid 6 / 11

Toegangscontrole, promptsjabloon en gespreksbeheer

Winst:

  • Stel toegangscontrole (ACL) in die het ophalen filtert op basis van gebruikersautoriteit
  • Een solide promptsjabloon schrijven die de context en gebruikersvraag correct plaatst
  • Het oefenen van vraagonafhankelijkheid en geschiedenismanagement in meerrondegesprekken

Wij hebben de architectuur vastgesteld; Laten we het nu veilig, consistent en gemoedelijk maken. Er zijn drie cruciale onderwerpen in dit onderdeel: (1) toegangscontrole die het ophalen filtert op basis van de autoriteit van de gebruiker, (2) een robuust promptsjabloon dat de context en vraag correct plaatst, (3) vraagonafhankelijkheid en beheer van de gespreksgeschiedenis in chat met meerdere rondes. Zonder deze drie zal een assistent gegevens lekken, inconsistente antwoorden geven of uit elkaar vallen bij vervolgvragen.

Toegangscontrole: ongeautoriseerde gegevens mogen nooit binnenkomen

Grootste risico voor de onderneming: een document dat een gebruiker niet mag zien, lekt in het antwoord. Een veel voorkomende beginnersfout is om "het model te vertellen 'verborgen documenten weer te geven' bij de prompt." Dit is niet veilig. Het model kan een instructie vergeten of een snelle injectie kan deze ontwijken. De juiste plaats is de terughaalfase: het niet-geautoriseerde stuk mag helemaal niet worden binnengebracht.

De manier om dit te doen is door de metadata van de autoriteit (afdeling, rol, privacyniveau) toe te passen die u tijdens het zoeken op elk onderdeel als filter plaatst. Je bepaalt veilig wie de gebruiker is (identiteit en rollen) op de applicatielaag en voegt een ACL (Access Control List) filter toe aan de oproep.

# Gefilterd op opgehaalde autoriteit (conceptueel)gebruiker = authenticeren(sessie) # geverifieerd vanuit vertrouwde bron = gebruiker.rollen + ["iedereen"] # b.v. ["HR", "admin"]result = vektor_db.search( vektor=embed(vraag), top_k=20, filter={"permission_group": {"in": toegestaan}, # alleen toegestane delen "privacy": {"lte": user.level}} # onder het niveau)

Let op: Vraag het model nooit om autoriteit en vertrouw niet op de prompt. Identiteit en autoriteit worden bepaald op de vertrouwde laag van de applicatie; Het ophaalfilter is verplicht, de promptinstructie is slechts een extra laag. "Ik heb het in de prompt geschreven" is geen beveiliging.

Solide prompt-sjabloon

De promptsjabloon is het skelet dat de context, gebruikersvraag en gedragsinstructies uit het ophalen samenbrengt. Onderdelen van een goed sjabloon: rol-/taakbeschrijving, gedragsregels (gronden, ik weet geen toestemming, verzoek om middelen, toon), context, vraag.

Je bent een corporate HR-assistent. Het is jouw taak om ALLEEN vragen van werknemers te beantwoorden op basis van de volgende CONTEXT. Regels: - Als het antwoord niet duidelijk in de context staat, schrijf dan: "Ik kon hierover geen informatie vinden in de documentatie, neem contact op met het HR-team". Niet raden, niet verzinnen. - Als de bronnen in de context conflicteren, neem dan het officiële beleid als basis en vermeld de tegenstrijdigheid. - Voeg de bron waarop u vertrouwt toe als [Bron: bestand, sectie] aan het einde van elke claim. - Antwoord in een korte, duidelijke en professionele taal. CONTEXT:{numbered_parts}VRAAG: {user_question}

Het nummeren van de contextdelen ([1], [2], ...) maakt het makkelijker om het model te citeren. Schrijf ook de bron aan het begin van elk stuk, zodat het model het correct kan citeren.

Tip: Houd het promptsjabloon constant en plaats variabelen (context, vraag) altijd op dezelfde plaatsen. Een vaste sjabloon verhoogt de testbaarheid en verlaagt de kosten dankzij snelle caching in sommige systemen.

CONTEXT:[1] (Bron: ik_el_kitabi.pdf, sectie 5.2) Jaarlijks betaald verlof bedraagt ​​14 dagen...[2] (Bron: ik_el_kitabi.pdf, paragraaf 5.4) Verlof bedraagt 20 dagen voor mensen met meer dan 5 dienstjaren...

Zwakke prompt/sterke prompt

Zwak (geen basis, geen bron, identiteit gemengd):

Gebruik deze documenten en beantwoord de vraag: {parts}Gebruiker: {vraag}# Probleem: model raakt uit zijn context, verzint iets, citeert geen bronnen, # gedraagt zich willekeurig in tegenspraak.

Sterk (rol + regels + genummerde context + bron verplicht):

Je bent... Vertrouw gewoon op CONTEXT. Zeg anders "Ik weet het niet". Kies bij conflicten voor officieel beleid. Voeg [Bron: ...] toe aan elke claim.CONTEXT: [1]... [2]... VRAAG: {vraag}# Resultaat: antwoord dat trouw is aan de context, afkomstig is en de tegenstrijdigheid correct beheert.

Gespreksbeheer voor meerdere tours

Een echte gebruiker stelt geen enkele vraag en laat deze met rust; spreekt. "Hoeveel vakantiedagen heb ik?" → “Hoe zit het met de 6-jarige werknemer?” → “Hoe vraag ik het aan?” Alleen al de tweede en derde vraag zijn zinloos; hangt af van de vorige context.

Je moet twee problemen oplossen. De eerste is voor het ophalen: maak de vervolgvraag onafhankelijk (vraagherschrijven). “Hoe zit het met de 6-jarige werknemer?” → "Op hoeveel vakantiedagen heeft een werknemer van 6 jaar recht?" Je zoekt met deze onafhankelijke vraag. De tweede is voor de productie: je geeft de gespreksgeschiedenis ook aan het model zodat deze consistent doorgaat.

# Tweestaps: onafhankelijk → zoeken → genereren met geschiedenis (conceptueel) independent = model.uret( "Gebruik de gespreksgeschiedenis om de vraag op zichzelf begrijpelijk te maken:\nGeschiedenis: {geschiedenis}\nVraag: {volgvraag}") context = retrieval(onafhankelijk) # zoeken met onafhankelijke vraagantwoord = model.uret(prompt(context, geschiedenis, volgvraag))

Naarmate de geschiedenis groeit (lang gesprek), wordt het allemaal tegelijk verzenden duur en wordt het contextvenster gevuld. Oplossing: vat de voorgaande rondes samen of behoud de laatste N rondes en herleid de vorige tot de samenvatting. Zo blijven de kosten onder controle en wordt de consistentie gehandhaafd.

Status

probleem

Oplossing

Vervolgvraag heeft geen context

Zoekopdrachten zijn zinloos

Maak de vraag onafhankelijk (herschrijf)

lang gesprek

Kosten en vensters stijgen

Samenvatting van eerdere tours

Gebruiker is van onderwerp veranderd

De oude context raakt geïnfecteerd

Verminder de invloed uit het verleden op een nieuw onderwerp

De autoriteit kan per tour variëren

Risico op lekkage

Pas het ACL-filter elke ronde opnieuw toe

Drie mini-hoesjes

Geval 1 – “Veiligheidsfout” met prompt. Een bedrijf plaatste vertrouwelijke salarisdocumenten op een assistent die iedereen kon vragen, maar schreef alleen 'geef geen salarisinformatie' op de prompt. Het model lekte het salarisbereik toen een gebruiker de vraag via een omweg stelde. Toen het ACL-filter werd toegevoegd aan de terugvinding (salarisdelen alleen voor de HR-rol) was het lek volledig gedicht; omdat het onderdeel nooit meer wordt gebracht.

Geval 2 — Contextloos stalken. In een ondersteuningsassistent vraagt ​​de gebruiker "retourperiode?" → “Hoe zit het met het kapotte product?” Het systeem bracht irrelevante onderdelen mee voor het "kapot product". Toen vraagonafhankelijkheid werd toegevoegd (“Hoe lang is de retourtermijn voor een kapot product?”), steeg het juiste antwoordpercentage van 44% naar 90%.

Geval 3 – Gezwollen verleden. In 30 chatrondes met een assistent werd bij elk gesprek de hele geschiedenis verzonden; De kosten stegen driemaal per ronde en de reacties vertraagden. Toen we overschakelden naar een structuur die de laatste zes ronden bijhield en de voorgaande samenvatte, daalden de tokenkosten met 62% en bleef de consistentie behouden.

Veel voorkomende fouten

  • Autoriteit overlaten aan de prompt: Model vergeet/omzeilt; ACL-filter is verplicht bij het ophalen.
  • De context niet opsommen: Het model kan de juiste bron niet vermelden.
  • De vervolgvraag niet onafhankelijk maken: ophaalzoekopdrachten zijn zinloos.
  • De hele geschiedenis blind verzenden: explodeert in kosten en vertraging; samenvatten.
  • Het niet schrijven van de tegenstrijdigheidsregel: het model kan de onbetrouwbare bron als officieel presenteren.

Samengevat

  • Toegangscontrole wordt geïmplementeerd met een metadatafilter tijdens de ophaalfase; Er mogen nooit ongeautoriseerde onderdelen worden meegenomen.
  • Identiteit en autoriteit worden bepaald op de vertrouwde applicatielaag; De snelle instructie is slechts een extra verdedigingslaag.
  • Robuuste promptsjabloon bevat rol, gedragsregels (aarding, weet geen toestemming, bron, conflict), genummerde context en vraag.
  • Bij een gesprek dat uit meerdere rondes bestaat, worden vervolgvragen ontkoppeld en levert het model consistente antwoorden op die aansluiten bij de geschiedenis.
  • Door de lange geschiedenis samen te vatten, worden het kosten- en contextvenster onder controle gehouden; De ACL wordt elke ronde opnieuw toegepast.

Applicatie taak

(1) Definieer minimaal drie autorisatiegroepen voor uw eigen assistent (bijvoorbeeld iedereen, afdeling, manager) en schrijf in een tabel welk documenttype voor welke groep openstaat. (2) Pas het bovenstaande promptsjabloon aan en schrijf het volgens uw eigen rol en toon; Zorg ervoor dat de context is genummerd en gesourced. (3) Schrijf een realistisch gespreksscenario dat uit drie ronden bestaat (vraag → vervolg → vervolg) en genereer handmatig onafhankelijke versies van elke vervolgvraag. (4) Leg in één zin uit waarom het ACL-filter in dit scenario elke ronde opnieuw moet worden toegepast.

controlelijst

  • [ ] Ik implementeer toegangscontrole met een ophaalfilter, ik vertrouw alleen niet op de prompt.
  • [ ] Ik voeg aarding, ik ken geen toestemming, bron en conflictregel toe aan mijn promptsjabloon.
  • [ ] Ik geef de contextdelen genummerd en waarnaar wordt verwezen.
  • [ ] Ik maak vervolgvragen onafhankelijk voordat ze worden opgehaald.
  • [ ] Ik beheer de kosten en het tijdsbestek door de lange gespreksgeschiedenis samen te vatten.