единица 6 / 11

Контрол на достъпа, шаблон за подкана и управление на разговори

Печалби:

  • Настройте контрол на достъпа (ACL), който филтрира извличането въз основа на потребителски права
  • Писане на солиден шаблон за подкана, който правилно поставя контекста и потребителския въпрос
  • Практикуване на независимост на въпросите и управление на историята в разговори с няколко кръга

Създадохме архитектурата; Сега нека го направим безопасно, последователно и разговорно. В този модул има три критични теми: (1) контрол на достъпа, който филтрира извличането въз основа на пълномощията на потребителя, (2) стабилен шаблон за подкана, който поставя контекста и въпроса правилно, (3) независимост на въпроса и управление на хронологията на разговора в много-рънд чат. Без тези три асистентът или ще изтече данни, ще даде непоследователни отговори или ще се разпадне при последващи въпроси.

Контрол на достъпа: Неразрешените данни никога не трябва да пристигат

Най-големият риск за предприятието: Документ, който потребителят не трябва да вижда, изтича в отговора. Много често срещана грешка за начинаещи е да "кажете на модела да "покаже скрити документи" при подканата." Това не е безопасно. Моделът може да забрави инструкция или навременна инжекция може да я избегне. Правилното място е фазата на извличане: неразрешеното парче изобщо не трябва да се внася.

Начинът да направите това е да приложите метаданните за орган (отдел, роля, ниво на поверителност), които поставяте във всяка част като филтър по време на търсенето. Вие безопасно определяте кой е потребителят (самоличност и роли) на приложния слой и добавяте ACL (списък за контрол на достъпа) филтър към повикването.

# Филтриран по пълномощно извличане (концептуален) потребител = удостоверяване (сесия) # удостоверен от доверен източник = потребителски.роли + ["всеки"] # напр. ["HR", "admin"]result = vektor_db.search( vektor=embed(question), top_k=20, filter={"permission_group": {"in": allowed}, # разрешени само части "privacy": {"lte": user.level}} # под нивото)

Внимание: Никога не питайте модела за пълномощия и не разчитайте на подканата. Самоличността и пълномощията се определят на доверения слой на приложението; Филтърът за извличане е задължителен, подканващата инструкция е само допълнителен слой. „Написах го в подканата“ не е сигурност.

Солиден шаблон за подкана

Шаблонът за подкана е скелетът, който обединява контекста, потребителския въпрос и инструкциите за поведение от извличането. Части от добър шаблон: описание на роля/задача, правила за поведение (заземяване, разрешение „Не знам“, заявка за ресурс, тон), контекст, въпрос.

Вие сте корпоративен HR асистент. Вашата работа е да отговаряте на въпроси на служители САМО въз основа на следния КОНТЕКСТ. Правила:- Ако отговорът не е ясно в контекста, напишете „Не можах да намеря информация за това в документацията, проверете с екипа по човешки ресурси“. Не гадайте, не си измисляйте.- Ако източниците в контекста са в противоречие, вземете официалната политика като основа и посочете противоречието.- Добавете източника, на който разчитате, като [Източник: файл, раздел] в края на всяко твърдение.- Отговорете на кратък, ясен и професионален език. КОНТЕКСТ:{numbered_parts}ВЪПРОС: {user_question}

Номерирането на контекстните части ([1], [2], ...) улеснява цитирането на модела. Освен това напишете източника в началото на всяка част, така че моделът да може да го цитира правилно.

Съвет: Поддържайте шаблона за подкана постоянен и винаги поставяйте променливи (контекст, въпрос) на едни и същи места. Фиксираният шаблон увеличава възможността за тестване и намалява разходите благодарение на бързото кеширане в някои системи.

КОНТЕКСТ:[1] (Източник: ik_el_kitabi.pdf, раздел 5.2) Годишният платен отпуск е 14 дни...[2] (Източник: ik_el_kitabi.pdf, раздел 5.4) Отпускът е 20 дни за хора със стаж над 5 години...

Слаба подкана / Силна подкана

Слаб (без заземяване, без източник, смесена идентичност):

Използвайте тези документи и отговорете на въпроса: {parts}Потребител: {question}# Проблем: моделът излиза извън контекста, измисля, не цитира източници, # се държи произволно в противоречие.

Силен (роля + правила + номериран контекст + задължителен източник):

Вие сте... Просто разчитайте на КОНТЕКСТ. В противен случай кажете „не знам“. В конфликт изберете официална политика. Добавете [Източник: ...] към всяко твърдение. КОНТЕКСТ: [1]... [2]... ВЪПРОС: {въпрос}# Резултат: отговор, който е верен на контекста, източникът е и управлява правилно противоречието.

Управление на разговори с множество обиколки

Истинският потребител не задава нито един въпрос и го оставя на мира; говори. „Колко дни годишен отпуск имам?“ → „Какво ще кажете за 6-годишния служител?“ → „Как да кандидатствам за него?“ Вторият и третият въпрос сами по себе си са безсмислени; зависи от предишния контекст.

Трябва да разрешите два проблема. Първият е за извличане: направете последващия въпрос независим (пренаписване на въпрос). „Ами 6-годишният служител?“ → "На колко дни годишен отпуск има право служител с 6 години?" Вие търсите с този независим въпрос. Второто е за производство: вие също давате историята на разговора на модела, така че да продължи последователно.

# Две стъпки: независимо → търсене → генериране с история (концептуално) independent = model.uret( "Използвайте историята на разговора, за да направите въпроса разбираем сам по себе си:\nHistory: {history}\nQuestion: {follow_question}") context = retrieval(independent) # търсене с независим questionanswer = model.uret(prompt(context, history, follow_question))

Тъй като хронологията расте (дълъг разговор), изпращането й наведнъж става скъпо и запълва контекстния прозорец. Решение: обобщете предишните кръгове или запазете последните N кръга и намалете предишните до обобщението. По този начин разходите остават под контрол и се поддържа последователност.

Статус

проблем

Решение

Допълнителният въпрос няма контекст

Търсенията за извличане са безсмислени

Направете въпроса независим (препишете)

дълъг чат

Разходите и прозорците набъбват

Обобщение на минали обиколки

Потребителят промени темата

Старият контекст се заразява

Намалете миналото влияние върху новата тема

Властта може да варира между обиколките

Риск от изтичане

Прилагайте повторно ACL филтър всеки кръг

Три мини калъфа

Случай 1 — Грешка „сигурност“ с подкана. Компания постави поверителни документи за заплата на асистент, които всеки можеше да поиска, но само написа „не давайте информация за заплатата“ на подканата. Моделът изтече диапазонът на заплатите, когато потребител зададе въпроса по заобиколен начин. Когато ACL филтърът беше добавен към извличането (части от заплатата само към ролята на HR), изтичането беше напълно затворено; защото частта вече никога не се носи.

Случай 2 — Преследване без контекст. В асистент за поддръжка потребителят пита "период за връщане?" → „какво ще кажете за счупения продукт?“ Системата донесе неподходящи части за "счупения продукт". Когато беше добавена независимост на въпроса („Колко време е периодът за връщане на повреден продукт?“), процентът на верните отговори се увеличи от 44% на 90%.

Случай 3 — Подуто минало. В 30 кръга чатове с асистент всяко обаждане изпраща цялата история; Цената се увеличаваше 3 пъти на рунд, а отговорите се забавяха. Когато преминахме към структура, която запази последните 6 кръга и обобщи предишните, цената на токена спадна с 62% и последователността се запази.

Често срещани грешки

  • Оставяне на правомощията на подканата: Моделът забравя/преминава; ACL филтърът е задължителен при извличане.
  • Без изброяване на контекста: Моделът не може да цитира правилния източник.
  • Без независимост на последващия въпрос: Извличането търси безсмислено.
  • Изпращане на цялата история на сляпо: Експлодира в цената и забавянето; обобщавам.
  • Ненаписване на правилото за противоречие: Моделът може да представи ненадеждния източник като официален.

В обобщение

  • Контролът на достъпа се реализира с филтър за метаданни по време на фазата на извличане; Никога не трябва да се носят неоторизирани части.
  • Идентичността и пълномощията се определят на доверения приложен слой; Бързите инструкции са само допълнителен слой на защита.
  • Надеждният шаблон за подкана включва роля, правила за поведение (заземяване, не знам разрешение, източник, конфликт), номериран контекст и въпрос.
  • В разговор с няколко кръга последващите въпроси се отделят и моделът дава последователни отговори с историята.
  • Чрез обобщаване на дългата история прозорецът на разходите и контекста се поддържа под контрол; ACL се прилага отново всеки кръг.

Задача за приложение

(1) Дефинирайте поне три групи за оторизация за вашия собствен асистент (напр. всеки, отдел, мениджър) и напишете в таблица кой тип документ е отворен за коя група. (2) Адаптирайте и напишете горния шаблон за подкана според собствената си роля и тон; Направете контекста номериран и източник. (3) Напишете реалистичен сценарий на разговор от три кръга (въпрос → последващ → последващ) и ръчно генерирайте независими версии на всеки последващ въпрос. (4) Обяснете с едно изречение защо ACL филтърът трябва да се прилага отново всеки кръг в този сценарий.

контролен списък

  • [ ] Прилагам контрол на достъпа с филтър за извличане, просто не разчитам на подканата.
  • [ ] Добавям заземяване, не знам разрешение, източник и правило за конфликт към моя шаблон за подкана.
  • [ ] Давам частите от контекста номерирани и цитирани.
  • [ ] Правя последващите въпроси независими преди извличане.
  • [ ] Управлявам разходите и прозореца, като обобщавам дългата история на разговорите.