Овај модул покрива основне појмове и технике за креирање ефикасних упита у генеративним моделима вештачке интелигенције. Начин на који написате свој упит за LLM такође је важан. Пажљиво креирани упит може постићи бољи квалитет одговора. Али шта тачно значе термини као што су упит и инжењеринг упита? И како да побољшам унос упита који шаљем LLM-у? Ово су питања на која ћемо покушати да одговоримо у овом и наредном поглављу.
Генеративна вештачка интелигенција је способна да креира нови садржај (нпр. текст, слике, аудио, код итд.) као одговор на корисничке захтеве. Ово постиже коришћењем Великих језичких модела као што је OpenAI-ев GPT ("Generative Pre-trained Transformer") серијал који је обучен за коришћење природног језика и кода.
Корисници сада могу да комуницирају са овим моделима користећи познате парадигме попут ћаскања, без потребе за техничким знањем или обуком. Модели су упитно засновани - корисници шаљу текстуални унос (упит) и добијају одговор вештачке интелигенције (комплетирање). Потом могу да "разговарају са АИ" итеративно, у више корака, усавршавајући свој упит док одговор не задовољи њихова очекивања.
"Упити" постају примарни програмски интерфејс за апликације генеративне АИ, говоре моделима шта да раде и утичу на квалитет враћених одговора. "Инжењеринг упита" је брзо растућа област изучавања која је фокусирана на дизајн и оптимизацију упита ради доследног и квалитетног одговора у великом обиму.
У овој лекцији ћемо научити шта је инжењеринг упита, зашто је важан и како можемо креирати ефикасније упите за одређени модел и циљ апликације. Разумећемо основне појмове и добре праксе инжењеринга упита - и научити о интерактивном окружењу Јупитер бележница „sandbox“ где можемо видети примену ових појмова на стварним примерима.
До краја ове лекције моћи ћемо да:
- Објаснимо шта је инжењеринг упита и зашто је важан.
- Опишемо компоненте упита и како се користе.
- Научимо најбоље праксе и технике за инжењеринг упита.
- Применимо научене технике на стварним примерима, користећи OpenAI крајњу тачку.
Инжењеринг упита: Практична примена дизајнирања и усавршавања уноса да би се усмерили АИ модели ка произвођењу жељених резултата. Токенизација: Процес претварања текста у мање јединице, зване токени, које модел може разумети и обрадити. Инструкцијски унапређени LLM: Велики језички модели који су фино подешени са специфичним упутствима ради побољшања тачности и релевантности одговора.
Инжењеринг упита је тренутно више уметност него наука. Најбољи начин да побољшамо интуицију за то је да више вежбамо и усвојимо приступ проба и грешака који комбинује стручност у домену примене са препорученим техникама и оптимизацијама специфичним за модел.
Јупитер бележница која прати ову лекцију пружа sandbox окружење у којем можете пробати оно што научите - у току учења или као део изазова кода на крају. Да бисте извршили вежбе, потребно вам је:
- Azure OpenAI API кључ - сервисна крајња тачка за распоређени LLM.
- Питхон извршно окружење - у коме се бележница може покренути.
- Локалне променљиве окружења - завршите кораке SETUP сада да бисте били спремни.
Бележница долази са почетним вежбама - али се подстиче да додате сопствене Markdown (опис) и Code (захтеви упита) секције како бисте испробали више примера или идеја - и изградили интуицију за дизајн упита.
Желите да добијете ширу слику о темама које ова лекција покрива пре него што кренете? Погледајте илустровани водич који вам даје утисак о главним темама и кључним поукама за разматрање у свакој од њих. План лекције вас води од разумевања основних појмова и изазова ка њиховом превазилажењу применом релевантних техника и најбољих пракси инжењеринга упита. Имајте у виду да одељак „Напредне технике“ у овом водичу односи се на садржај покривен у следећем поглављу овог курикулума.
Хајде сада да причамо о томе како се ова тема односи на мисију нашег стартапа да донесемо иновације у образовање помоћу АИ. Желимо да изградимо апликације покретане вештачком интелигенцијом за персонализовано учење - па размислимо како различити корисници наше апликације могу "дизајнирати" упите:
- Администратори могу тражити од АИ да анализира податке о наставном плану да идентификује празнине у покривености. АИ може сумирати резултате или их визуелизовати помоћу кода.
- Наставници могу тражити од АИ да генерише план часа за одређену публику и тему. АИ може саставити персонализовани план у одређеном формату.
- Студенти могу тражити од АИ да их подучава у тешкој области. АИ сада може водити студенте путем лекција, наговештаја и примера прилагођених њиховом нивоу.
Ово је само врх леденог брега. Погледајте Упите за образовање - библиотеку упита отвореног кода коју уређују стручњаци за образовање - да бисте добили шире разумевање могућности! Пробајте да покренете неке од тих упита у sandbox-у или користећи OpenAI Playground да видите шта се дешава!
Почели смо ову лекцију дефинишући инжењеринг упита као процес дизајнирања и оптимизације текстуалних уноса (упита) да се обезбеде доследни и квалитетни одговори (комплетирања) за дати циљ апликације и модел. Ово можемо посматрати као двостепени процес:
- дизајнирање почетног упита за одређени модел и циљ
- усавршавање упита итеративно да се побољша квалитет одговора
Ово је неизбежно процес проба и грешака који захтева корисничку интуицију и труд да би се постигли оптимални резултати. Па зашто је важно? Да бисмо одговорили на то питање, прво треба да разумемо три појма:
- Токенизација = како модел "види" упит
- Основни LLM-ови = како основни модел "обрађује" упит
- Инструкцијски унапређени LLM-ови = како модел сада може "видети задатке"
LLM види упите као низ токена где различити модели (или верзије модела) могу токенизовати исти упит на различите начине. Пошто су LLM обучени на токенима (а не на сировом тексту), начин на који се упити токенизују има директан утицај на квалитет генерисаног одговора.
Да бисте стекли интуицију о томе како токенизација функционише, испробајте алате попут OpenAI Tokenizer приказаног испод. Копирајте свој упит - и погледајте како се он конвертује у токене, обраћајући пажњу на то како се обрађују размаке и знакови интерпункције. Имајте у виду да овај пример приказује старији LLM (GPT-3) - па ће можда покушај са новијим моделом дати другачији резултат.
Када се упит токенизује, примарна функција "Основног LLM" (или основног модела) је да предвиди следећи токен у низу. Пошто су LLM обучени на масивним текстуалним скупова података, имају добру свест о статистичким везама између токена и могу са одређеном сигурношћу направити ту претпоставку. Имајте у виду да они не разумеју значење речи у упиту или токену; они само виде образац који могу "допунити" својом следећом предвиђањем. Могу наставити са предвиђањем низа док их корисник не прекине или се не испуни неки унапред дефинисани услов.
Желите да видите како ради допуна текста заснована на упиту? Унесите горе наведени упит у Azure OpenAI Studio Chat Playground са подразумеваним подешавањима. Систем је конфигурисан да третира упите као захтеве за информацијама - па бисте требали добити допуну која задовољава овај контекст.
Али шта ако корисник жели да види нешто конкретно што испуњава неки критеријум или циљ задаћег задатка? Ту у игру ступају инструкцијски унапређени LLM-ови.
Инструкцијски унапређени LLM почиње са основним моделом и фино подешава га уз помоћ примера или парова улаз/излаз (нпр. више корака у „порукама“) који могу садржати јасна упутства - а одговор АИ покушава да прати то упутство.
Ово користи технике као што је Појачано учење са људском контролом (RLHF) које могу тренирати модел да прати упутства и учи из повратних информација тако да производи одговоре који су боље прилагођени практичним применама и релевантнији корисничким циљевима.
Хајде да пробамо - вратите се горе наведеном упиту, али сада промените системску поруку да обезбедите следеће упутство као контекст:
Сажмите садржај који вам се достави за ученика другог разреда. Држите резултат у једном Пасусу са 3-5 наведених тачака.
Видите како је резултат сада подешен да одражава жељени циљ и формат? Наставник сада може директно употребити овај одговор у својим слајдовима за тај час.
Сада када знамо како LLM обрађују упите, хајде да разговарамо о томе зашто нам треба инжењеринг упита. Одговор лежи у томе што тренутни LLM представљају низ изазова због којих је теже постићи поуздане и доследне одговоре без улагања у конструкцију и оптимизацију упита. На пример:
-
Одговори модела су стохастични. Исти упит ће вероватно произвести различите одговоре са различитим моделима или верзијама модела. Чак може производити различите резултате са истим моделом у различито време. Технике инжењеринга упита нам могу помоћи да минимизирамо ове варијације пружајући боље смернице.
-
Модели могу да измишљају одговоре. Модели су обучени на великим али ограниченим скуповима података, што значи да немају знање о концептима изван тог обима обуке. Као резултат тога, могу произвести одговоре који су нетачни, измишљени или директно супротни познатим чињеницама. Технике инжењеринга упита помажу корисницима да идентификују и ублаже такве измишљотине, нпр. питајући АИ за изворе или образложења.
-
Капацитети модела варирају. Новији модели или генерације модела имају богатије могућности али и доносе јединствене специфичности и компромисе у трошковима и комплексности. Инжењеринг упита нам може помоћи да развијемо најбоље праксе и токове рада који апстрахују разлике и прилагођавају се захтевима специфичним за модел на скалабилан и беспрекоран начин.
Погледајмо то у пракси у OpenAI или Azure OpenAI Playground-у:
- Користите исти упит са различитим распоређеним LLM (нпр. OpenAI, Azure OpenAI, Hugging Face) - да ли сте видели варијације?
- Користите исти упит више пута са истим LLM распоређивањем (нпр. Azure OpenAI playground) - како су се разликовале те варијације?
У овом курсу користимо термин „измишљотина“ да опишемо феномен када LLM понекад генеришу фактички нетачне информације услед ограничења у својој обуци или другим ограничењима. Такође сте можда чули да се ово у популарним чланцима или истраживачким радовима назива „халуцинације“. Међутим, снажно препоручујемо употребу термина „измишљотина“ да случајно не антропоморфизујемо понашање приписујући људску црту машински покренутом исходу. Ово такође подржава Одговорни АИ упутства са аспекта терминологије, уклањајући термине који могу бити увредљиви или неинклузивни у неким контекстима.
Желите да стекнете утисак како измишљотине функционишу? Замислите упит који АИ упућује да генерише садржај о неистинској теми (како би се осигурало да тема није у скупу за обуку). На пример - ја сам покушао овај упит:
Упит: направи план часа о Марсовском рату 2076. године. Веб претрага ми је показала да постоје фиктивни рачуни (нпр. телевизијске серије или књиге) о марсовским ратовима - али ниједан из 2076. Здрав разум нам такође говори да је 2076. у будућности и стога не може бити повезан са стварним догађајем.
Па шта се дешава када покренемо овај упит код различитих пружалаца LLM услуга?
Одговор 1: OpenAI Playground (GPT-35)
Одговор 2: Azure OpenAI Playground (GPT-35)
Одговор 3: : Hugging Face Chat Playground (LLama-2)
Као што се и очекивало, сваки модел (или верзија модела) производи благо различите одговоре захваљујући стохастичком понашању и варијацијама у капацитету модела. На пример, један модел је усмерен ка публици осмог разреда док други претпоставља средњошколца. Али сва три модела су генерисала одговоре који би могли убедити неискусног корисника да је догађај стварan.
Технике инжењеринга упита попут метаупитања и конфигурације температуре могу у некој мери смањити измишљања модела. Нове архитектуре инжењеринга упита такође беспрекорно уводе нове алате и технике у ток упита како би ублажиле или смањиле неке од ових ефеката.
Завршимо овај одељак прегледом како се инжењеринг упита користи у стварним решењима посматрајући једну Студију случаја: GitHub Copilot.
GitHub Copilot је ваш "AI Пар програмер" - претвара текстуалне упите у комплетирања кода и интегрисан је у ваше развојно окружење (нпр. Visual Studio Code) ради беспрекорног корисничког искуства. Као што је документовано у низу блогова у наставку, најранија верзија била је заснована на OpenAI Codex моделу - а инжењери су брзо увидели потребу да се модел фино подеси и развију боље технике инжењеринга упита како би се побољшао квалитет кода. У јулу су премијерно представили побољшани AI модел који иде даље од Codex-а за још брже предлоге.
Прочитајте чланке по реду да бисте пратити њихово путовање учења.
- мај 2023 | GitHub Copilot боље разуме ваш код
- мај 2023 | Изнутра GitHub: рад са LLM-овима иза GitHub Copilot-а.
- јун 2023 | Како писати боље упите за GitHub Copilot.
- јул 2023 | .. GitHub Copilot иде даље од Codex-а са побољшаним AI моделом
- јул 2023 | Водич програмера за инжењеринг упита и LLM-ове
- сеп 2023 | Како изградити enterprise LLM апликацију: лекције из GitHub Copilot-а
Такође можете прегледати њихов Инжењерски блог за више постова попут овог који показује како се ови модели и технике примењују за вођење реалних примена.
Видели смо зашто је инжењеринг упита важан - сада хајде да разумемо како се упити конструишу како бисмо могли да проценимо различите технике за ефикаснији дизајн упита.
Почнимо са основним упитом: текстуалним уносом послатим моделу без другог контекста. Ево примера - када пошаљемо прве неколико речи америчке химне OpenAI Completion API-ју он тренутно комплетира одговор следећим линијама, илуструјући основно понашање предвиђања.
| Упит (Унос) | Комплетирање (Излаз) |
|---|---|
| Oh say can you see | Изгледа да почињете текст песме "The Star-Spangled Banner," националне химне Сједињених Држава. Пуна слова су ... |
Сада додајмо контекст и упутства том основном упиту. Chat Completion API нам омогућава да конструишемо комплексни упит као збир порука са:
- паровима улаз/излаз који одражавају кориснички унос и асистентов одговор.
- системском поруком која поставља контекст за понашање или личност асистента.
Захтев је сада у доњем облику, где токенизација ефикасно хвата релевантне информације из контекста и разговора. Сада променa системског контекста може бити подједнако утицајна на квалитет комплетирања као и уноси корисника.
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)У горњим примерима, кориснички упит је био једноставна текстуална претрага која се може тумачити као захтев за информацијом. Са инструкцијским упитима, можемо користити тај текст да прецизније задамо задатак, пружајући боље смернице АИ-ју. Ево примера:
| Упит (Унос) | Комплетирање (Излаз) | Тип упутства |
|---|---|---|
| Опиши Грађански рат | вратио једноставан пасус | Једноставно |
| Опиши Грађански рат. Наведи кључне датуме и догађаје и опиши њихов значај | вратио пасус након којег следи листа кључних датума догађаја са описима | Комплексно |
| Опиши Грађански рат у 1 пасусу. Наведи 3 тачке са кључним датумима и њиховим значајем. Наведи још 3 тачке са кључним историјским личностима и њиховим доприносом. Врати излаз као JSON фајл | враћа детаљније информације у текстуалном пољу, форматиран као JSON који можете копирати у фајл и проверити по потреби | Комплексно. Форматирано. |
У горњим примерима, упит је и даље био релативно отворен, омогућавајући LLM-у да сам одреди који део свог претходно тренираног скупа података је релевантан. Са дизајн патерном примарни садржај, улазни текст се дели на два дела:
- инструкција (акција)
- релевантни садржај (који утиче на акцију)
Ево примера где је упутство "сумирајте ово у 2 реченице".
| Упит (Унос) | Комплетирање (Излаз) |
|---|---|
| Јупитер је пета планета од Сунца и највећа у Сунчевом систему. То је гасовити гигант са масом хиљаду пута мањом од масе Сунца, али два и по пута већом од свих осталих планета у Сунчевом систему заједно. Јупитер је један од најсјајнијих објеката видљивих голим оком на ноћном небу, и познат је древним цивилизацијама још пре записане историје. Назван је по римском богу Јупитеру.[19] Када се гледа са Земље, Јупитер може бити довољно светло да његова рефлектована светлост баца видљиве сенке,[20] и у просеку је трећи најсјајнији природни објекат на ноћном небу после Месеца и Венере. Сумирајте ово у 2 кратке реченице |
Јупитер, пета планета од Сунца, највећа је у Сунчевом систему и познат је као један од најсјајнијих објеката на ноћном небу. Назван по римском богу Јупитеру, то је гасовити гигант чија је маса два и по пута већа од свих осталих планета у Сунчевом систему заједно. |
Примарни садржај се може користити на различите начине ради ефикаснијих упутстава:
- Примери – уместо да моделу директно кажемо шта треба радити упутством, дајемо му примере шта треба радити и дозволимо му да закључи образац.
- Наговештаји – пратимо инструкцију са "наговештајем" који припрема комплетирање и усмерава модел ка релевантнијим одговорима.
- Шаблони – то су понављачки 'рецепти' за упите са местима за уметање (променљиве) које се могу прилагодити подацима за одређене случајеве употребе.
Хајде да их испитамо у пракси.
Ово је приступ у којем користите примарни садржај да "нахраните модел" неколико примера траженог излаза за задату инструкцију и дозволите му да закључи образац траженог резултата. У зависности од броја примера који су дати, можемо имати zero-shot, one-shot, few-shot prompting итд.
Упит садржи три компонента:
- Опис задатка
- Неколико примера траженог излаза
- Почетак новог примера (који постаје имплицитни опис задатка)
| Тип учења | Упит (Унос) | Комплетирање (Излаз) |
|---|---|---|
| Zero-shot | "Сунце сија". Преведи на шпански | "El Sol está brillando". |
| One-shot | "Сунце сија" => ""El Sol está brillando". "Хладно и ветровито је" => |
"Es un día frío y ventoso". |
| Few-shot | Играч је трчао кроз базе => Бејзбол Играч је избацио ас => Тенис Играч је погодио шестерку => Крикет Играч је урадио слем-дунк => |
Кошарка |
Приметите како смо морали да пружимо експлицитну инструкцију ("Преведи на шпански") у zero-shot prompting-у, али се она закључује у one-shot примеру. Few-shot пример показује како додавање више примера омогућава моделима да праве тачније закључке без додатних упутстава.
Друга техника коришћења примарног садржаја је да се пруже наговештаји уместо примера. У овом случају, дајемо моделу подстрек тако што га покрећемо исечком који одражава жељени формат одговора. Модел онда "узима сигнал" да настави у том смеру.
| Број наговештаја | Упит (Унос) | Комплетирање (Излаз) |
|---|---|---|
| 0 | Јупитер је пета планета од Сунца и највећа у Сунчевом систему. То је гасовити гигант са масом хиљаду пута мањом од масе Сунца, али два и по пута већом од свих осталих планета у Сунчевом систему заједно. Јупитер је један од најсјајнијих објеката видљивих голим оком на ноћном небу, и познат је древним цивилизацијама још пре записане историје. Сумирај ово |
Јупитер је највећа планета у нашем Сунчевом систему и пета по удаљености од Сунца. Он је гасовити гигант са масом 1/1000 масе Сунца, али тежи више од свих осталих планета заједно. Древне цивилизације дуго знају за Јупитер и лако је видљив на ноћном небу. |
| 1 | Јупитер је пета планета од Сунца и највећа у Сунчевом систему. То је гасовити гигант са масом једна хиљадитина масе Сунца, али два и по пута већом од свих осталих планета у Сунчевом систему заједно. Јупитер је један од најсветлијих објеката видљивих голим оком на ноћном небу и познат је старим цивилизацијама још пре записане историје. Сажми ово Оно што смо научили је да је Јупитер |
пета планета од Сунца и највећа у Сунчевом систему. То је гасовити гигант са масом једна хиљадитина масе Сунца, али два и по пута већом од свих осталих планета заједно. Лако се види голим оком и познат је још из давних времена. |
| 2 | Јупитер је пета планета од Сунца и највећа у Сунчевом систему. То је гасовити гигант са масом једна хиљадитина масе Сунца, али два и по пута већом од свих осталих планета у Сунчевом систему заједно. Јупитер је један од најсветлијих објеката видљивих голим оком на ноћном небу и познат је старим цивилизацијама још пре записане историје. Сажми ово Топ 3 чињенице које смо научили: |
1. Јупитер је пета планета од Сунца и највећа у Сунчевом систему. 2. То је гасовити гигант са масом једна хиљадитина масе Сунца... 3. Јупитер је видљив голим оком још од давнина ... |
Prompt шаблон је унапред дефинисани рецепт за prompt који може бити сачуван и поново коришћен по потреби, како би се обезбедила доследност корисничких искустава у великом обиму. У свом најједноставнијем облику, то је колекција примера prompt-а као што је овај од OpenAI који обезбеђује и интерактивне компоненте prompt-а (поруке корисника и система) и формат захтева покретан кроз API - за подршку поновне употребе.
У сложенијем облику као следећи пример од LangChain садржи placeholder-е који могу бити заменjeni подацима из различитих извора (кориснички унос, системски контекст, спољни извори података итд.) да би се prompt динамички креирао. Ово нам омогућава да направимо библиотеку поновљивих prompt-а која се може користити за доследна корисничка искуства програмски и у великом обиму.
Коначно, права вредност шаблона лежи у могућности креирања и објављивања библиотека prompt-ова за вертикалне апликационе домене - где је prompt шаблон сада оптимизован да одражава контекст апликације или примере који чине одговоре релевантнијим и прецизнијим за циљну групу корисника. Репозиторијум Prompts For Edu је одличан пример овог приступа, који курира библиотеку prompt-ова за образовни домен са нагласком на кључне циљеве као што су планирање часова, дизајн наставних планова, подучавање студената итд.
Ако разматрамо конструкцију prompt-а као да садржи инструкцију (задатак) и циљ (примарни садржај), онда је секундарни садржај као додатни контекст који дајемо да на неки начин утицемо на излаз. То могу бити параметри подешавања, упутства за форматирање, таксономије тема итд. који могу помоћи моделу да приближи свој одговор жељеним корисничким циљевима или очекивањима.
На пример: Дати каталог курсева са обимним метаподацима (име, опис, ниво, ознаке метаподатака, инструктор итд.) за све расположиве курсеве у наставном плану:
- можемо дефинисати инструкцију "сажми каталог курсева за јесен 2023"
- можемо користити примарни садржај да пружимо неколико примера жељеног излаза
- можемо користити секундарни садржај да идентификујемо топ 5 "ознака" од интереса.
Сада модел може да да сажетак у формату приказаном у примерима - али ако резултат има више ознака, може приоритетизирати 5 ознака идентификованих у секундарном садржају.
Сада када знамо како се prompt-ови могу конструисати, можемо почети размишљати како их дизајнирати да одражавају најбоље праксе. Можемо то поделити на два дела - имање правог менталног склопа и коришћење правих техника.
Prompt инжењеринг је процес покушаја и грешака, па имајте на уму три широка водиља:
-
Разумевање домена је важно. Тачност и релевантност одговора зависи од домена у којем апликација или корисник ради. Примени своју интуицију и стручност у домену да даље прилагодиш технике. На пример, дефинишите персоналитет специфичне за домен у системским prompt-овима, или користите шаблоне специфичне за домен у корисничким prompt-овима. Обезбедите секундарни садржај који одражава контекст специфичан за домен, или користите наводнике и примере специфичне за домен да усмерите модел ка познатим образцима коришћења.
-
Разумевање модела је важно. Знамо да су модели по природи стохастички. Али имплементације модела могу такође варирати у односу на скуп података коришћен за тренирање (предтренирано знање), могућности које пружају (нпр. преко API-ја или SDK-а) и врсту садржаја за који су оптимизовани (нпр. код, слике, текст). Разумите јачине и ограничења модела који користите и искористите то знање да приоритетизујете задатке или израдите прилагођене шаблоне оптимизоване за могућности модела.
-
Итерација и валидација је важна. Модели се брзо развијају, као и технике за prompt инжењеринг. Као стручњак у домену, можда имате други контекст или критеријуме за ВАШУ специфичну апликацију, који не морају важити за широку заједницу. Користите алате и технике prompt инжењеринга да „брзо започнете“ конструкцију prompt-а, затим поново проверавајте и валидајте резултате користећи своју интуицију и стручност. Запишите своја сазнања и направите базу знања (нпр. библиотеке prompt-ова) која може послужити као нова основа другима, за брже итерације у будућности.
Сада погледајмо уобичајене најбоље праксе препоручене од стране OpenAI и Azure OpenAI практичара.
| Шта | Зашто |
|---|---|
| Процијенити најновије моделе. | Нове генерације модела вероватно имају побољшане карактеристике и квалитет - али могу имати и веће трошкове. Процијените утицај, па доносите одлуке о миграцији. |
| Одвојити инструкције од контекста | Проверите да ли ваш модел/провајдер дефинише делимитере за јасније разликовање инструкција, примарног и секундарног садржаја. Ово може помоћи моделима да прецизније доделе тежине токенима. |
| Будите прецизни и јасни | Дајте више детаља о жељеном контексту, резултату, дужини, формату, стилу итд. Ово ће побољшати квалитет и доследност одговора. Снимите рецепте у поновљиве шаблоне. |
| Будите описни, користите примере | Модели могу боље одговарати на приступ „покажи и реци“. Почните са zero-shot приступом где дате само инструкцију (али не и примере), затим пробајте few-shot као унапређење, пружајући неколико примера жељеног излаза. Користите аналогије. |
| Користите наводнике за покретање завршетака | Подстакните га ка жељеном резултату тако што ћете му дати неке уводне речи или фразе које може користити као почетак одговора. |
| Поново подвуците | Понекад ће можда бити потребно да моделу поновите инструкције. Давање инструкција пре и после примарног садржаја, коришћење инструкции и наводника итд. Итеративно проверавајте шта најбоље функционише. |
| Поредак је важан | Поредак у којем представљате информације модели може утицати на излаз, чак и у примерима учења, због ефекта свежине (recency bias). Испробајте различите опције да видите шта најбоље функционише. |
| Дайте моделу „излаз“ | Обезбедите моделу фалбек одговор који може дати ако не може извршити задатак из било ког разлога. Ово може смањити шансе да модели генеришу нетачне или измишљене одговоре. |
Као што је то са сваком најбољом праксом, имајте на уму да ваша применљивост може варирати у зависности од модела, задатка и домена. Користите ово као почетну тачку и итеративно прилагођавајте шта најбоље функционише за вас. Континуирано преиспитујте свој процес prompt инжењеринга како нови модели и алати постају доступни, уз фокус на скалабилност процеса и квалитет одговора.
Честитамо! Дошли сте до краја лекције! Време је да неке од тих концепата и техника испробате на правим примерима!
За наш задатак користићемо Jupyter Notebook са вежбама које можете интерактивно урадити. Такође можете проширити Notebook својим Markdown и Code ћелијама да бисте истражили идеје и технике самостално.
- (Препоручено) Покрените GitHub Codespaces
- (Алтернативно) Клонирајте репо на свој уређај и користите га уз Docker Desktop
- (Алтернативно) Отворите Notebook у вашем омиљеном окружењу за рад са Notebook-има.
- Копирајте фајл
.env.copyиз корена репо-а у.envи попунитеAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTиAZURE_OPENAI_DEPLOYMENTвредности. Вратите се на Learning Sandbox одељак да бисте сазнали како.
- Изаберите runtime језгро. Ако користите опциjе 1 или 2, једноставно изаберите подразумевано Python 3.10.x језгро које пружа дев контејнер.
Спремни сте да покренете вежбе. Имајте на уму да овде нема правих и погрешних одговора - само истраживање опција методом покушаја и грешака и грађење интуиције шта функционише за дати модел и апликациони домен.
Из тог разлога нема Code Solution сегмената у овој лекцији. Уместо тога, Notebook ће имати Markdown ћелије са насловом "My Solution:" које приказују један пример излаза за референцу.
Који од следећих је добар prompt пратећи разумне најбоље праксе?
- Покажи ми слику црвеног аутомобила
- Покажи ми слику црвеног аутомобила марке Volvo и модела XC90 паркираног поред литице уз залазак сунца
- Покажи ми слику црвеног аутомобила марке Volvo и модела XC90
A: 2, то је најбољи prompt јер пружа детаље о "шта" и идје у специфику (не само било који аутомобил већ одређена марка и модел) као и опис целокупне сцене. 3 је следећи најбољи јер такође садржи много описа.
Покушајте да искористите технику "cue" са prompt-ом: Заврши реченицу „Покажи ми слику црвеног аутомобила марке Volvo и “. Шта одговара и како бисте га побољшали?
Желите ли да сазнате више о различитим концептима Prompt инжењеринга? Идите на страницу за наставак учења да пронађете друге сјајне ресурсе на ову тему.
Пређите на Лекцију 5 где ћемо погледати напредне технике prompting-а!
Резервисање одговорности: Овај документ је преведен коришћењем AI услуге за превођење Co-op Translator. Иако се трудимо да превод буде прецизан, имајте на уму да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитетним извором. За критичне информације препоручује се професионалан превод од стране човека. Нисмо одговорни за било какве неспоразуме или погрешна тумачења која проистекну из употребе овог превода.







