(Кликните на слику изнад да бисте погледали видео о овој лекцији)
Разумевање сложености апликације за коју правите AI агента је важно за прављење поузданог система. Потребно је да израдимо AI агенте који ефикасно управљају информацијама како би задовољили сложене потребе које превазилазе појам prompt инжењеринга.
У овој лекцији погледаћемо шта је инжењеринг контекста и која је његова улога у изради AI агената.
Ова лекција ће обухватити:
• Шта је инжењеринг контекста и зашто се разликује од prompt инжењеринга.
• Стратегије за ефикасан инжењеринг контекста, укључујући како писати, одабрати, компримовати и изоловати информације.
• Уобичајени пропусти у контексту који могу пореметити ваш AI агент и како их поправити.
Након завршетка ове лекције, моћи ћете да:
• Дефинишете инжењеринг контекста и разликујете га од prompt инжењеринга.
• Идентификујете кључне компоненте контекста у апликацијама које користе Large Language Model (LLM).
• Примените стратегије за писање, одабир, компримовање и изолацију контекста ради побољшања перформанси агента.
• Препознате уобичајене пропусте у контексту као што су труљење (poisoning), ометање (distraction), конфузија и конфликт, и примените технике ублажавања.
За AI агенте, контекст је оно што покреће планирање агента да предузме одређене акције. Инжењеринг контекста је пракса осигуравања да AI агент има праве информације да заврши следећи корак задатка. Прозор контекста има ограничену величину, па као градитељи агената морамо да правимо системе и процесе за управљање додавањем, уклањањем и кондензовањем информација у прозору контекста.
Prompt инжењеринг је фокусиран на један скуп статичких упутстава да ефикасно усмери AI агенте са скупом правила. Инжењеринг контекста бави се управљањем динамичким скупом информација, укључујући и почетни prompt, како би се обезбедило да AI агент има оно што му треба током времена. Главна идеја око инжењеринга контекста је да овај процес учините понављајућим и поузданим.
Важно је запамтити да контекст није само једна ствар. Информације које AI агенту требају могу доћи из различитих извора и на нама је да обезбедимо приступ тим изворима:
Типови контекста које AI агент може требати да управља укључују:
• Упутства: Ово су као „правила“ агента – prompts, system messages, few-shot примери (који показују AI-ју како да нешто уради) и описи алата које може користити. Овде се фокус prompt инжењеринга спаја са инжењерингом контекста.
• Знање: Ово обухвата чињенице, информације преузете из база података или дугорочна сећања која је агент акумулирао. То укључује интеграцију Retrieval Augmented Generation (RAG) система ако агент треба приступ различитим складиштима знања и базама података.
• Алатке: Ово су дефиниције спољних функција, API-ja и MCP Servers које агент може позвати, заједно са повратним информацијама (резултатима) које добија коришћењем њих.
• Историја дискусије: Текућа дијалогија са корисником. Како време пролази, ове конверзације постају дужe и сложеније што значи да заузимају простор у прозору контекста.
• Корисничке преференције: Информације научене о корисниковим симпатијама или антипатијама током времена. Оне се могу чувати и позивати када се доносе важне одлуке како би се помогло кориснику.
Добар инжењеринг контекста почиње добрим планирањем. Ево приступа који ће вам помоћи да почнете да мислите о томе како применити концепт инжењеринга контекста:
Планирање је важно, али када информације почну да улазе у прозор контекста нашег агента, потребне су практичне стратегије за њихово управљање:
Иако ће се неке информације аутоматски додавати у прозор контекста, инжењеринг контекста подразумева активнију улогу у вези с тим информацијама, што се може урадити неколико стратегија:
Agent Scratchpad Ово омогућава AI агенту да бележи релевантне информације о текућим задацима и интеракцијама са корисником током једне сесије. Ово треба да постоји изван прозора контекста у фајлу или runtime објекту који агент може касније повући током ове сесије ако је потребно.
Меморије Scratchpad-ови су добри за управљање информацијама изван прозора контекста једне сесије. Меморије омогућавају агентима да чувају и враћају релевантне информације кроз више сесија. Ово може укључивати сажетке, корисничке преференције и повратне информације за побољшања у будућности.
Компримовање контекста Када прозор контекста расте и приближава се свом лимиту, могу се користити технике као што су сажимање и тримовање. Ово укључује или чување само најрелевантнијих информација или уклањање старијих порука.
Системи са више агената Развој мулти-агентских система је форма инжењеринга контекста јер сваки агент има свој прозор контекста. Како се тај контекст дели и прослеђује различитим агентима је још једна ствар коју треба испланирати приликом изградње ових система.
Песковити (Sandbox) окружења Ако агент треба да покрене неки код или обради велике количине информација у документу, то може захтевати велики број токена за процесирање резултата. Уместо да се све то чува у прозору контекста, агент може да користи sandbox окружење које може да покрене тај код и прочита само резултате и друге релевантне информације.
Runtime State објекти Ово се ради креирањем контејнера информација за управљање ситуацијама када агент треба да има приступ одређеним информацијама. За сложен задатак, ово би омогућило агенту да складишти резултате сваког подзадатка корак по корак, омогућавајући да контекст остане повезан само са тим специфичним подзадатком.
Рецимо да желимо да AI агент „Резервиши ми пут за Париз.“
• Једноставан агент који користи само prompt инжењеринг могао би само да одговори: “У реду, кад желите да идете у Париз?”. Он је обрадио само ваше директно питање у тренутку када је корисник питао.
• Агент који користи стратегије инжењеринга контекста описане овде урадио би много више. Пре него што и одговори, његов систем би могао да:
◦ Провери ваш календар за доступне датуме (повлачење података у реалном времену).
◦ Подсети на претходне преференције за путовања (из дугорочне меморије) као што су ваша омиљена авио-компанија, буџет или да ли више волите директне летове.
◦ Идентификује доступне алатке за резервацију летова и хотела.
Шта је то: Када халуцинација (неистинита информација генерисана од LLM-а) или грешка уђе у контекст и више пута се реферише, што узрокује да агент следи немогуће циљеве или развије бесмислене стратегије.
Шта урадити: Имплементирајте валидацију контекста и кварентајн. Валидација информација пре него што се додају у дугорочну меморију. Ако се детектује потенцијално труљење, покрените нове нити контекста да спречите ширење лоше информације.
Пример резервације путовања: Ваш агент халуцинира постојање директног лета са малог локалног аеродрома до удаљеног међународног града који заправо не нуди међународне летове. Детаљи о овом не-постојећем лету се сачувају у контексту. Касније, када тражите резервацију, он наставља да покушава да пронађе карте за ту немогућу руту, што доводи до понављајућих грешака.
Решење: Укључите корак који валидацијује постојање летова и руте помоћу API-ja у реалном времену пре додавања детаља лета у радни контекст агента. Ако валидација не успе, погрешна информација се „кварентинује“ и не користи се даље.
Шта је то: Када контекст постане толико велик да модел превише фокусира своју пажњу на акумулирану историју уместо да користи оно што је научио током тренирања, што води до понављајућих или непомоћних акција. Модели могу почети да греше чак и пре него што прозор контекста буде пун.
Шта урадити: Користите сажимање контекста. Периодично компримујте акумулиране информације у краће сажетке, задржавајући важне детаље и уклањајући сувишну историју. Ово помаже да се „ресетује“ фокус.
Пример резервације путовања: Дугу време сте дискутовали о различитим дестинацијама снова, укључујући детаљан опис ваше бејкпекер авантуре од пре две године. Када коначно затражите „пронађи ми јефтин лет за следећи месец“, агент се уплиће у старе, ирелевантне детаље и наставља да пита о вашој опреми за бејкпек или прошлм итинерарима, занемарујући ваш тренутни захтев.
Решење: Након одређеног броја потеза или када контекст постане превелик, агент треба да сумаризује најновије и најрелевантније делове разговора – фокусирајући се на тренутне датуме и дестинацију путовања – и да за тај сажетак користи следећи LLM позив, одбацујући мање релевантан историјски разговор.
Шта је то: Када непотребни контекст, често у виду превеликог броја доступних алата, узрокује да модел генерише лоше одговоре или позива ирелевантне алатке. Мањи модели су посебно подложни овоме.
Шта урадити: Имплементирајте управљање избором алата (tool loadout) користећи RAG технике. Чувајте описе алата у векторској бази података и одабирите само најрелевантније алате за сваки конкретан задатак. Истраживања показују да је корисно ограничити избор алата на мање од 30.
Пример резервације путовања: Ваш агент има приступ десетинама алата: book_flight, book_hotel, rent_car, find_tours, currency_converter, weather_forecast, restaurant_reservations, итд. Питате, “Који је најбољи начин да се крећем по Паризу?” Због огромног броја алата, агент се конфузира и покушава да позове book_flight унутар Париза или rent_car иако више волите јавни превоз, јер описи алата могу да се преплићу или једноставно не може да разликује најприкладнији.
Решење: Користите RAG преко описа алата. Када питате о начину кретања по Паризу, систем динамички враћа само најрелевантније алате као што су rent_car или public_transport_info на основу вашег упита, представљајући фокусиран „loadout“ алата за LLM.
Шта је то: Када у контексту постоје контрадикторне информације, што доводи до неусклађеног закључивања или лоших крајњих одговора. Ово се често догађа када информације пристижу у фазама, а рани, нетачни предпоставке остају у контексту.
Шта урадити: Користите сечење контекста (context pruning) и офлоадинг. Прунинг значи уклањање застарелих или контрадикторних информација како стижу нови детаљи. Офлоадинг даје моделу посебан workspace (scratchpad) за обраду информација без засипавања главног контекста.
Пример резервације путовања: Иницијално кажете агенту, “Желим лет у економској класи.” Касније у разговору промените мишљење и кажете, “За овo путовање, хајде да идемо у бизнис класи.” Ако обе инструкције остану у контексту, агент може добити контрадикторне резултате претраге или се збуни око тога коју преференцију да да приоритет.
Решење: Имплементирајте прунинг контекста. Када нова инструкција супротстави стару, старија инструкција се уклања или експлицитно прекида у контексту. Алтернативно, агент може користити scratchpad да помири контрадикторне преференције пре доношења одлуке, осигуравајући да само коначна, конзистентна инструкција усмерава његове акције.
Придружите се Microsoft Foundry Discord да се упознате са другим ученицима, присуствујете office hours и добијете одговоре на ваша питања о AI агентима.
Одрицање одговорности: Овај документ је преведен помоћу услуге за превођење засноване на вештачкој интелигенцији Co-op Translator. Иако тежимо тачности, имајте у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитетним извором. За критичне информације препоручује се професионални људски превод. Нисмо одговорни за било какве неспоразуме или погрешна тумачења која произилазе из коришћења овог превода.