Câștiguri:
- Configurați controlul accesului (ACL) care filtrează recuperarea în funcție de autoritatea utilizatorului
- Scrierea unui șablon de prompt solid care plasează corect contextul și întrebarea utilizatorului
- Exersarea independenței întrebărilor și gestionarea istoriei în conversații cu mai multe runde
Noi am stabilit arhitectura; Acum haideți să o facem sigură, consecventă și conversațională. Există trei subiecte critice în această unitate: (1) controlul accesului care filtrează recuperarea în funcție de autoritatea utilizatorului, (2) un șablon de prompt robust care plasează corect contextul și întrebarea, (3) independența întrebărilor și gestionarea istoricului conversațiilor în chat-ul cu mai multe runde. Fără aceste trei, un asistent fie va scurge date, va da răspunsuri inconsecvente, fie va strica la întrebările ulterioare.
Controlul accesului: Datele neautorizate nu ar trebui să sosească niciodată
Cel mai mare risc al întreprinderii: un document pe care un utilizator nu ar trebui să-l vadă scurge în răspuns. O greșeală foarte frecventă pentru începători este „să-i spuneți modelului să „arată documentele ascunse” la solicitare”. Acest lucru nu este sigur. Modelul poate uita o instrucțiune sau o injecție promptă o poate sustrage. Locul corect este faza de recuperare: piesa neautorizată nu trebuie adusă deloc.
Modul de a face acest lucru este să aplici metadatele de autoritate (departament, rol, nivel de confidențialitate) pe care le-ai pus pe fiecare parte ca filtru în timpul căutării. Determinați în siguranță cine este utilizatorul (identitate și roluri) la nivelul aplicației și adăugați un filtru ACL (Lista de control al accesului) la apel.
# Filtrat de regăsire autoritate (conceptual) utilizator = autentificare(sesiune) # autentificat din sursa de încredere = user.roles + [„toată lumea”] # de ex. ["HR", "admin"]rezultat = vektor_db.search( vektor=embed(intrebare), top_k=20, filter={"permission_group": {"in": allowed}, # numai părți permise "privacy": {"lte": user.level}} # sub nivelul)
Atenție: Nu cereți niciodată autoritate modelului și nu vă bazați pe prompt. Identitatea și autoritatea sunt determinate la nivelul de încredere al aplicației; Filtrul de recuperare este obligatoriu, instrucțiunea promptă este doar un strat suplimentar. „Am scris-o în prompt” nu este securitate.
Șablon de prompt solid
Șablonul prompt este scheletul care reunește contextul, întrebarea utilizatorului și instrucțiunile de comportament din recuperare. Părți ale unui șablon bun: descrierea rolului/sarcinii, reguli de conduită (întemeiere, nu știu permisiunea, cerere de resurse, ton), context, întrebare.
Sunteți asistent HR corporativ. Sarcina ta este să răspunzi la întrebările angajaților NUMAI pe baza următorului CONTEXT. Reguli:- Dacă răspunsul nu este clar în context scrieți „Nu am găsit informații despre asta în documentație, verificați cu echipa de resurse umane”. Nu ghiciți, nu inventați.- Dacă sursele din context sunt în conflict, luați ca bază politica oficială și afirmați contradicția.- Adăugați sursa pe care vă bazați ca [Sursa: dosar, secțiune] la sfârșitul fiecărei revendicări.- Răspundeți într-un limbaj scurt, clar și profesional. CONTEXT:{numbered_parts}INTREBARE: {user_question}
Numerotarea părților de context ([1], [2], ...) facilitează citarea modelului. De asemenea, scrieți sursa la începutul fiecărei piese pentru ca modelul să o poată cita corect.
Sfat: Păstrați constant șablonul prompt și plasați întotdeauna variabilele (context, întrebare) în aceleași locuri. Un șablon fix mărește capacitatea de testare și reduce costurile datorită stocării prompte în cache în unele sisteme.
CONTEXT:[1] (Sursa: ik_el_kitabi.pdf, Secțiunea 5.2) Concediul anual plătit este de 14 zile...[2] (Sursa: ik_el_kitabi.pdf, Secțiunea 5.4) Concediul este de 20 de zile pentru persoanele cu mai mult de 5 ani de serviciu...
Solicitare slabă / Solicitare puternică
Slab (fără împământare, fără sursă, identitate amestecată):
Folosiți aceste documente și răspundeți la întrebarea: {parts}Utilizator: {întrebare}# Problemă: modelul iese din context, inventează, nu citează surse, # se comportă arbitrar în contradicție.
Puternic (rol + reguli + context numerotat + sursa obligatorie):
Tu ești... Bazează-te pe CONTEXT. În caz contrar, spune „nu știu”. În conflict, alegeți politica oficială. Adăugați [Sursa: ...] la fiecare revendicare.CONTEXT: [1]... [2]... ÎNTREBARE: {întrebare}# Rezultat: răspuns care este fidel contextului, provenit și gestionează corect contradicția.
Managementul conversațiilor cu mai multe tururi
Un utilizator real nu pune o singură întrebare și nu o lasă în pace; vorbeste. — Câte zile de concediu anual am? → „Dar angajatul de 6 ani?” → „Cum pot solicita?” Doar a doua și a treia întrebare sunt lipsite de sens; depinde de contextul anterior.
Trebuie să rezolvi două probleme. Primul este pentru regăsire: faceți întrebarea următoare independentă (rescrierea întrebării). „Ce zici de angajatul de 6 ani?” → „La câte zile de concediu anual are dreptul un angajat de 6 ani?” Cauți cu această întrebare independentă. Al doilea este pentru producție: oferiți și istoricul conversațiilor modelului, astfel încât acesta să continue în mod constant.
# În doi pași: independentizare → căutare → generare cu istoric (conceptual) independent = model.uret( „Utilizați istoricul conversației pentru a face întrebarea de înțeles singur:\nIstoric: {istorie}\nÎntrebare: {follow_question}”) context = regăsire (independent) # căutare cu întrebare independentă = model.uret(prompt(context) istoric)
Pe măsură ce istoria crește (conversație lungă), trimiterea totul la un moment dat devine costisitoare și umple fereastra de context. Soluție: rezumați rundele anterioare sau păstrați ultimele N runde și reduceți-le pe cele anterioare la rezumat. Astfel, costurile rămân sub control și consecvența este menținută.
Stare
problema
Soluție
Întrebarea ulterioară nu are context
Căutări de recuperare fără sens
Faceți întrebarea independentă (rescrieți)
discuție lungă
Costul și geamurile se umflă
Rezumatul tururilor anterioare
Utilizatorul a schimbat subiectul
Contextul vechi se infectează
Reduceți influența trecută asupra unui subiect nou
Autoritatea poate varia între tururi
Risc de scurgere
Reaplicați filtrul ACL la fiecare rundă
Trei mini carcase
Cazul 1 – Eroare „Securitate” cu prompt. O companie a pus documente de salariu confidențiale unui asistent pe care oricine le putea cere, dar a scris doar „nu dați informații despre salariu” pe prompt. Modelul a scurs intervalul de salariu atunci când un utilizator a pus întrebarea într-un mod obișnuit. Când filtrul ACL a fost adăugat la recuperare (părți salariale doar pentru rolul HR), scurgerea a fost complet închisă; pentru că piesa nu se mai aduce niciodată.
Cazul 2 – urmărire fără context. Într-un asistent de asistență, utilizatorul întreabă „perioada de întoarcere?” → „Dar produsul spart?” Sistemul a adus piese irelevante pentru „produsul spart”. Când a fost adăugată independența întrebării („Cât este perioada de returnare pentru un produs stricat?”), rata de răspuns corect a crescut de la 44% la 90%.
Cazul 3 – Trecut umflat. În 30 de runde de chat cu un asistent, fiecare apel a trimis întregul istoric; Costul creștea de 3 ori pe rundă, iar răspunsurile încetineau. Când am trecut la o structură care a păstrat ultimele 6 runde și le-a rezumat pe cele anterioare, costul jetonului a scăzut cu 62% și s-a menținut consistența.
Greșeli comune
- Lăsând autoritatea promptului: Modelul uită/ocolește; Filtrul ACL este obligatoriu la preluare.
- Neenumerarea contextului: Modelul nu poate cita sursa corectă.
- Neindependenți întrebarea ulterioară: Căutările de regăsire fără rost.
- Trimiterea tuturor istoricului orb: explodează în cost și întârziere; rezuma.
- Nescrierea regulii de contradicție: Modelul poate prezenta sursa nesigură ca fiind oficială.
Pe scurt
- Controlul accesului este implementat cu un filtru de metadate în timpul fazei de regăsire; Piesele neautorizate nu trebuie aduse niciodată.
- Identitatea și autoritatea sunt determinate la nivelul aplicației de încredere; Instrucțiunea promptă este doar un strat suplimentar de apărare.
- Șablonul de promptare robust include rolul, regulile de conduită (întemeierea, nu știu permisiunea, sursa, conflictul), contextul numerotat și întrebarea.
- În conversația cu mai multe runde, întrebările ulterioare sunt decuplate și modelul produce răspunsuri consistente cu istoricul.
- Rezumând istoria lungă, fereastra de cost și context este ținută sub control; ACL este reaplicat în fiecare rundă.
Sarcina de aplicare
(1) Definiți cel puțin trei grupuri de autorizare pentru propriul asistent (de exemplu, toată lumea, departament, manager) și scrieți într-un tabel ce tip de document este deschis pentru care grup. (2) Adaptați și scrieți șablonul prompt de mai sus în funcție de propriul rol și ton; Faceți contextul numerotat și bazat pe sursă. (3) Scrieți un scenariu de conversație realist în trei runde (întrebare → urmărire → urmărire) și generați manual versiuni independente ale fiecărei întrebări suplimentare. (4) Explicați într-o propoziție de ce filtrul ACL ar trebui reaplicat în fiecare rundă în acest scenariu.
lista de verificare
- [ ] Implementez controlul accesului cu un filtru de recuperare, pur și simplu nu mă bazez pe prompt.
- [ ] Adaug împământare, nu știu permisiunea, sursa și regula conflictului la șablonul meu prompt.
- [ ] Dau părților de context numerotate și referite.
- [ ] Fac întrebări ulterioare independente înainte de extragere.
- [ ] Gestionez costul și fereastra prin rezumarea istoricului lung al conversațiilor.