Единица 6 / 11

Контрола на пристап, шаблон за праќање и управување со разговори

Добивки:

  • Поставете контрола на пристап (ACL) што го филтрира преземањето врз основа на авторитетот на корисникот
  • Пишување солиден шаблон за праќање што правилно ги поставува контекстот и корисничкото прашање
  • Вежбање независност на прашања и управување со историјата во разговори со повеќе кругови

Ја воспоставивме архитектурата; Сега да го направиме безбедно, доследно и разговорно. Има три критични теми во оваа единица: (1) контрола на пристап што го филтрира пребарувањето врз основа на авторитетот на корисникот, (2) робустен шаблон за праќање што правилно ги поставува контекстот и прашањето, (3) независноста на прашањата и управувањето со историјата на разговори во разговор со повеќе кругови. Без овие три, асистентот или ќе протече податоци, ќе дава неконзистентни одговори или ќе се распадне на дополнителните прашања.

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

Најголем ризик за претпријатието: Документ што корисникот не треба да го види протекување во одговорот. Многу честа грешка на почетниците е „да му кажете на моделот да „прикаже скриени документи“ веднаш по барањето“. Ова не е безбедно. Моделот може да заборави на инструкција или брзата инјекција може да го избегне. Точното место е фазата на пронаоѓање: неовластеното парче воопшто не треба да се внесува.

Начинот да го направите ова е да ги примените метаподатоците за авторитет (оддел, улога, ниво на приватност) што ги ставате на секој дел како филтер за време на пребарувањето. Вие безбедно одредувате кој е корисникот (идентитетот и улогите) на слојот на апликацијата и додавате филтер ACL (Список за контрола на пристап) на повикот.

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

Внимание: Никогаш не барајте авторитет од моделот и не потпирајте се на барањето. Идентитетот и авторитетот се одредуваат на доверливиот слој на апликацијата; Филтерот за пронаоѓање е задолжителен, брзата инструкција е само дополнителен слој. „Го напишав во промптот“ не е безбедност.

Шаблон за солидна промпт

Промпт шаблонот е скелетот што ги обединува контекстот, корисничкото прашање и инструкциите за однесување од пребарувањето. Делови од добар шаблон: опис на улога/задача, правила на однесување (заземјување, не знам дозвола, барање за ресурси, тон), контекст, прашање.

Вие сте корпоративен асистент за човечки ресурси. Ваша задача е да одговарате на прашања на вработените САМО врз основа на следниот КОНТЕКСТ. Правила: - Ако одговорот не е јасен во контекст, напишете „Не можев да најдам информации за ова во документацијата, проверете кај тимот за човечки ресурси“. Не погодувајте, не измислувајте.- Ако изворите во контекстот се спротивставуваат, земете ја официјалната политика како основа и наведете ја контрадикторноста.- Додајте го изворот на кој се потпирате како [Извор: датотека, дел] на крајот од секое тврдење.- Одговорете на краток, јасен и професионален јазик. КОНТЕКСТ:{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]... ПРАШАЊЕ: {question}# Резултат: одговор кој е верен на контекстот, извор и правилно управува со противречноста.

Управување со разговори со повеќе патувања

Вистинскиот корисник не поставува ниту едно прашање и не го остава на мира; зборува. „Колку дена годишен одмор имам? → „Што е со 6-годишниот вработен? → „Како да аплицирам за тоа?“ Само второто и третото прашање се бесмислени; зависи од претходниот контекст.

Треба да решите два проблема. Првиот е за пронаоѓање: направете го следното прашање независно (препишување на прашањето). „Што е со 6-годишниот вработен? → "Колку дена годишен одмор има право на вработен од 6 години?" Барате со ова независно прашање. Вториот е за производство: му ја давате и историјата на разговорот на моделот за да продолжи постојано.

# Дво-чекор: независно → пребарување → генерирање со историја (концептуално) независно = model.uret( „Користете ја историјата на разговор за да го направите прашањето разбирливо самостојно:\nИсторија: {историја}\nПрашање: {follow_question}“) контекст = пребарување (независно) # пребарување со независно прашање одговор = model.conque(promption history)(

Како што расте историјата (долг разговор), испраќањето на сето тоа во исто време станува скапо и го пополнува контекстниот прозорец. Решение: сумирајте ги претходните кругови или задржете ги последните N кругови и сведете ги претходните на резиме. Така, трошоците остануваат под контрола и се одржува конзистентноста.

Статус

проблем

Решение

Следното прашање нема контекст

Бесмислени пребарувања за пребарување

Направете го прашањето независно (препишете)

долг разговор

Цена и прозорец отекува

Резиме на минатите тури

Корисникот ја смени темата

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

Намалете го влијанието од минатото на новата тема

Властите може да се разликуваат помеѓу тури

Ризик од истекување

Повторно нанесувајте ACL филтер секој круг

Три мини футроли

Случај 1 - заблуда „Безбедност“ со брза. Една компанија ставила доверливи документи за плата на асистент што секој може да ги побара, но само напишала „не давај информации за плата“ на известувањето. Моделот протече опсег на плата кога корисник го постави прашањето на кружен начин. Кога ACL филтерот беше додаден на пронаоѓањето (делови за плата само во улогата на HR), истекувањето беше целосно затворено; бидејќи делот никогаш повеќе не се носи.

Случај 2 - Демнење без контекст. Во асистент за поддршка, корисникот прашува "период на враќање?" → „Што е со расипаниот производ?“ Системот донесе небитни делови за „расипаниот производ“. Кога беше додадена независноста на прашањето („Колку е долг периодот на враќање за скршен производ?“, стапката на точни одговори се зголеми од 44% на 90%.

Случај 3 - Отечено минато. Во 30 рунди разговори со помошник, секој повик ја испраќаше целата историја; Цената се зголемуваше 3 пати по круг, а одговорите се забавуваа. Кога се префрливме на структура која ги задржа последните 6 рунди и ги резимираше претходните, цената на знакот падна за 62% и се задржа конзистентноста.

Вообичаени грешки

  • Препуштање на авторитетот на промптот: Моделот заборава/заобиколува; ACL филтерот е задолжителен при преземањето.
  • Ненабројување на контекстот: Моделот не може да го наведе точниот извор.
  • Независност на следното прашање: Пребарувањето бара бесмислено.
  • Испраќање на целата историја слепо: Експлодира во цена и доцнење; сумираат.
  • Не пишување на правилото за контрадикторност: Моделот може да го претстави несигурниот извор како официјален.

Сумирано

  • Контролата на пристапот се спроведува со филтер за метаподатоци за време на фазата на пребарување; Никогаш не треба да се носат неовластени делови.
  • Идентитетот и авторитетот се одредуваат во слојот на доверлива апликација; Брзата инструкција е само дополнителен слој на одбрана.
  • Цврстиот шаблон за промпт вклучува улога, правила на однесување (заземјување, не знам дозвола, извор, конфликт), нумериран контекст и прашање.
  • Во разговорот од повеќе кругови, следните прашања се раздвојуваат и моделот дава конзистентни одговори со историјата.
  • Со сумирање на долгата историја, прозорецот за трошоци и контекст се држи под контрола; ACL повторно се применува секој круг.

Задача за апликација

(1) Дефинирајте најмалку три групи за овластување за вашиот сопствен асистент (на пр. секој, оддел, менаџер) и напишете во табела кој тип на документ е отворен за која група. (2) Приспособете го и напишете го горенаведениот образец за праќање според вашата сопствена улога и тон; Направете го контекстот нумериран и изворен. (3) Напишете реално сценарио за разговор од три круга (прашање → следење → следење) и рачно генерирајте независни верзии на секое следно прашање. (4) Објаснете со една реченица зошто ACL филтерот треба повторно да се применува секој круг во ова сценарио.

листа за проверка

  • [ ] Јас имплементирам контрола на пристап со филтер за пребарување, едноставно не се потпирам на барањето.
  • [ ] Додавам заземјување, не знам дозвола, извор и правило за конфликт на мојот шаблон за праќање.
  • [ ] Ги давам контекстните делови нумерирани и референцирани.
  • [ ] Ги правам последователните прашања независни пред пронаоѓањето.
  • [ ] Јас управувам со трошоците и прозорецот со сумирање на долгата историја на разговори.